@sodax/wallet-sdk-core 0.0.1-rc.4 → 0.0.1-rc.6

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/index.cjs CHANGED
@@ -7,12 +7,32 @@ var types = require('@sodax/types');
7
7
  var client = require('@mysten/sui/client');
8
8
  var ed25519 = require('@mysten/sui/keypairs/ed25519');
9
9
  var walletStandard = require('@mysten/wallet-standard');
10
- var iconSdkJs = require('icon-sdk-js');
10
+ var IconSdkRaw = require('icon-sdk-js');
11
11
  var sdkTs = require('@injectivelabs/sdk-ts');
12
12
  var splToken = require('@solana/spl-token');
13
13
  var web3_js = require('@solana/web3.js');
14
14
  var stellarSdk = require('@stellar/stellar-sdk');
15
15
 
16
+ function _interopNamespace(e) {
17
+ if (e && e.__esModule) return e;
18
+ var n = Object.create(null);
19
+ if (e) {
20
+ Object.keys(e).forEach(function (k) {
21
+ if (k !== 'default') {
22
+ var d = Object.getOwnPropertyDescriptor(e, k);
23
+ Object.defineProperty(n, k, d.get ? d : {
24
+ enumerable: true,
25
+ get: function () { return e[k]; }
26
+ });
27
+ }
28
+ });
29
+ }
30
+ n.default = e;
31
+ return Object.freeze(n);
32
+ }
33
+
34
+ var IconSdkRaw__namespace = /*#__PURE__*/_interopNamespace(IconSdkRaw);
35
+
16
36
  // src/wallet-providers/EvmWalletProvider.ts
17
37
  function getEvmViemChain(id) {
18
38
  switch (id) {
@@ -189,6 +209,8 @@ var SuiWalletProvider = class {
189
209
  return this.getSuiAddress();
190
210
  }
191
211
  };
212
+ var IconSdk = "default" in IconSdkRaw__namespace.default ? IconSdkRaw__namespace.default : IconSdkRaw__namespace;
213
+ var { Converter, CallTransactionBuilder, Wallet } = IconSdk;
192
214
  var IconWalletProvider = class {
193
215
  wallet;
194
216
  iconService;
@@ -196,26 +218,26 @@ var IconWalletProvider = class {
196
218
  if (isPrivateKeyIconWalletConfig(wallet)) {
197
219
  this.wallet = {
198
220
  type: "PRIVATE_KEY",
199
- wallet: iconSdkJs.Wallet.loadPrivateKey(wallet.privateKey.slice(2))
221
+ wallet: Wallet.loadPrivateKey(wallet.privateKey.slice(2))
200
222
  };
201
- this.iconService = new iconSdkJs.IconService(new iconSdkJs.IconService.HttpProvider(wallet.rpcUrl));
223
+ this.iconService = new IconSdk.IconService(new IconSdk.IconService.HttpProvider(wallet.rpcUrl));
202
224
  } else if (isBrowserExtensionIconWalletConfig(wallet)) {
203
225
  this.wallet = {
204
226
  type: "BROWSER_EXTENSION",
205
227
  wallet: wallet.walletAddress
206
228
  };
207
- this.iconService = new iconSdkJs.IconService(new iconSdkJs.IconService.HttpProvider(wallet.rpcUrl));
229
+ this.iconService = new IconSdk.IconService(new IconSdk.IconService.HttpProvider(wallet.rpcUrl));
208
230
  } else {
209
231
  throw new Error("Invalid Icon wallet config");
210
232
  }
211
233
  }
212
234
  async sendTransaction(tx) {
213
- const builtTx = new iconSdkJs.CallTransactionBuilder().from(tx.from).to(tx.to).stepLimit(iconSdkJs.Converter.toHex(3e6)).nid(tx.nid).version(tx.version ?? "0x3").timestamp(iconSdkJs.Converter.toHex(tx.timestamp ?? (/* @__PURE__ */ new Date()).getTime() * 1e3)).value(tx.value).method(tx.method).params(tx.params).build();
235
+ const builtTx = new CallTransactionBuilder().from(tx.from).to(tx.to).stepLimit(Converter.toHex(3e6)).nid(tx.nid).version(tx.version ?? "0x3").timestamp(Converter.toHex(tx.timestamp ?? (/* @__PURE__ */ new Date()).getTime() * 1e3)).value(tx.value).method(tx.method).params(tx.params).build();
214
236
  if (!isIconPkWallet(this.wallet)) {
215
237
  const result2 = await requestJsonRpc(builtTx);
216
238
  return result2.result;
217
239
  }
218
- const signedTx = new iconSdkJs.IconService.SignedTransaction(builtTx, this.wallet.wallet);
240
+ const signedTx = new IconSdk.IconService.SignedTransaction(builtTx, this.wallet.wallet);
219
241
  const result = await this.iconService.sendTransaction(signedTx).execute();
220
242
  return result;
221
243
  }
@@ -351,23 +373,35 @@ function BigNumberToBigInt(bigNumber) {
351
373
  return BigInt(bigNumber.toFixed(0));
352
374
  }
353
375
  function isBrowserExtensionInjectiveWalletConfig(config) {
354
- return "msgBroadcaster" in config && "walletAddress" in config;
376
+ return "msgBroadcaster" in config;
377
+ }
378
+ function isSecretInjectiveWalletConfig(config) {
379
+ return "secret" in config && typeof config.secret === "object" && ("privateKey" in config.secret && typeof config.secret.privateKey === "string" || "mnemonics" in config.secret && typeof config.secret.mnemonics === "string") && "network" in config && "chainId" in config;
355
380
  }
356
381
  var InjectiveWalletProvider = class {
357
- msgBroadcaster;
358
- walletAddress;
382
+ wallet;
359
383
  constructor(config) {
360
384
  if (isBrowserExtensionInjectiveWalletConfig(config)) {
361
- this.msgBroadcaster = config.msgBroadcaster;
362
- this.walletAddress = config.walletAddress;
385
+ this.wallet = {
386
+ msgBroadcaster: config.msgBroadcaster
387
+ };
388
+ } else if (isSecretInjectiveWalletConfig(config)) {
389
+ let privateKey;
390
+ if ("privateKey" in config.secret) {
391
+ privateKey = sdkTs.PrivateKey.fromPrivateKey(config.secret.privateKey);
392
+ } else if ("mnemonics" in config.secret) {
393
+ privateKey = sdkTs.PrivateKey.fromMnemonic(config.secret.mnemonics);
394
+ } else {
395
+ throw new Error("Invalid Secret Injective wallet config");
396
+ }
397
+ this.wallet = {
398
+ msgBroadcaster: new sdkTs.MsgBroadcasterWithPk({ privateKey, network: config.network })
399
+ };
363
400
  } else {
364
401
  throw new Error("Invalid Injective wallet config");
365
402
  }
366
403
  }
367
- getRawTransaction(chainId, _, senderAddress, contractAddress, msg, memo) {
368
- if (!this.walletAddress) {
369
- throw new Error("Wallet address not found");
370
- }
404
+ async getRawTransaction(chainId, _, senderAddress, contractAddress, msg, memo) {
371
405
  const msgExec = sdkTs.MsgExecuteContract.fromJSON({
372
406
  contractAddress,
373
407
  sender: senderAddress,
@@ -377,7 +411,7 @@ var InjectiveWalletProvider = class {
377
411
  const { txRaw } = sdkTs.createTransaction({
378
412
  message: msgExec,
379
413
  memo: memo || "",
380
- pubKey: this.walletAddress,
414
+ pubKey: await this.getWalletPubKey(),
381
415
  sequence: 0,
382
416
  accountNumber: 0,
383
417
  chainId
@@ -392,28 +426,48 @@ var InjectiveWalletProvider = class {
392
426
  authInfoBytes: txRaw.authInfoBytes
393
427
  }
394
428
  };
395
- return Promise.resolve(rawTx);
429
+ return rawTx;
396
430
  }
431
+ // return wallet address as bech32
397
432
  async getWalletAddress() {
398
- if (!this.walletAddress) {
399
- throw new Error("Wallet address not found");
433
+ if (this.wallet.msgBroadcaster instanceof sdkTs.MsgBroadcasterWithPk) {
434
+ return sdkTs.getInjectiveSignerAddress(this.wallet.msgBroadcaster.privateKey.toAddress().toBech32());
435
+ }
436
+ const addresses = await this.wallet.msgBroadcaster.walletStrategy.getAddresses();
437
+ const injectiveAddresses = addresses.map(sdkTs.getInjectiveSignerAddress);
438
+ if (injectiveAddresses.length <= 0 || injectiveAddresses[0] === void 0) {
439
+ return Promise.reject(new Error("Wallet address not found"));
400
440
  }
401
- return Promise.resolve(this.walletAddress);
441
+ return injectiveAddresses[0];
402
442
  }
403
- async execute(senderAddress, contractAddress, msg, funds) {
404
- if (!this.walletAddress) {
405
- throw new Error("Wallet address not found");
443
+ async getWalletPubKey() {
444
+ if (this.wallet.msgBroadcaster instanceof sdkTs.MsgBroadcasterWithPk) {
445
+ return this.wallet.msgBroadcaster.privateKey.toPublicKey().toString();
446
+ }
447
+ const pubKey = await this.wallet.msgBroadcaster.walletStrategy.getPubKey();
448
+ if (pubKey === void 0) {
449
+ return Promise.reject(new Error("Wallet public key not found"));
406
450
  }
451
+ return pubKey;
452
+ }
453
+ async execute(senderAddress, contractAddress, msg, funds) {
407
454
  const msgExec = sdkTs.MsgExecuteContractCompat.fromJSON({
408
455
  contractAddress,
409
456
  sender: senderAddress,
410
457
  msg,
411
458
  funds: funds || []
412
459
  });
413
- const txResult = await this.msgBroadcaster.broadcastWithFeeDelegation({
414
- msgs: msgExec,
415
- injectiveAddress: this.walletAddress
416
- });
460
+ let txResult;
461
+ if (this.wallet.msgBroadcaster instanceof sdkTs.MsgBroadcasterWithPk) {
462
+ txResult = await this.wallet.msgBroadcaster.broadcast({
463
+ msgs: msgExec
464
+ });
465
+ } else {
466
+ txResult = await this.wallet.msgBroadcaster.broadcastWithFeeDelegation({
467
+ msgs: msgExec,
468
+ injectiveAddress: await this.getWalletAddress()
469
+ });
470
+ }
417
471
  return types.InjectiveExecuteResponse.fromTxResponse(txResult);
418
472
  }
419
473
  };
@@ -700,6 +754,7 @@ exports.isPrivateKeyIconWalletConfig = isPrivateKeyIconWalletConfig;
700
754
  exports.isPrivateKeyStellarWalletConfig = isPrivateKeyStellarWalletConfig;
701
755
  exports.isResponseAddressType = isResponseAddressType;
702
756
  exports.isResponseSigningType = isResponseSigningType;
757
+ exports.isSecretInjectiveWalletConfig = isSecretInjectiveWalletConfig;
703
758
  exports.isStellarBrowserExtensionWallet = isStellarBrowserExtensionWallet;
704
759
  exports.isStellarPkWallet = isStellarPkWallet;
705
760
  exports.isSuiWallet = isSuiWallet;
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/wallet-providers/EvmWalletProvider.ts","../src/wallet-providers/SuiWalletProvider.ts","../src/wallet-providers/IconWalletProvider.ts","../src/wallet-providers/InjectiveWalletProvider.ts","../src/wallet-providers/SolanaWalletProvider.ts","../src/wallet-providers/StellarWalletProvider.ts"],"names":["SONIC_MAINNET_CHAIN_ID","sonic","AVALANCHE_MAINNET_CHAIN_ID","avalanche","ARBITRUM_MAINNET_CHAIN_ID","arbitrum","BASE_MAINNET_CHAIN_ID","base","OPTIMISM_MAINNET_CHAIN_ID","optimism","BSC_MAINNET_CHAIN_ID","bsc","POLYGON_MAINNET_CHAIN_ID","polygon","NIBIRU_MAINNET_CHAIN_ID","nibiru","createWalletClient","http","privateKeyToAccount","createPublicClient","SuiClient","Ed25519Keypair","signTransaction","Wallet","IconServiceConstructor","CallTransactionBuilder","Converter","result","MsgExecuteContract","createTransaction","MsgExecuteContractCompat","InjectiveExecuteResponse","Keypair","Connection","TransactionMessage","VersionedTransaction","getAssociatedTokenAddress","PublicKey","TransactionInstruction","Networks","Horizon","Transaction"],"mappings":"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","file":"index.cjs","sourcesContent":["import type { ChainId, EvmRawTransaction, EvmRawTransactionReceipt, IEvmWalletProvider } from '@sodax/types';\nimport type { Account, Address, Chain, Transport, Hash, PublicClient, WalletClient } from 'viem';\nimport { privateKeyToAccount } from 'viem/accounts';\nimport { createWalletClient, createPublicClient, http } from 'viem';\nimport { sonic, avalanche, arbitrum, base, optimism, bsc, polygon, nibiru } from 'viem/chains';\nimport {\n SONIC_MAINNET_CHAIN_ID,\n AVALANCHE_MAINNET_CHAIN_ID,\n ARBITRUM_MAINNET_CHAIN_ID,\n BASE_MAINNET_CHAIN_ID,\n OPTIMISM_MAINNET_CHAIN_ID,\n BSC_MAINNET_CHAIN_ID,\n POLYGON_MAINNET_CHAIN_ID,\n NIBIRU_MAINNET_CHAIN_ID,\n} from '@sodax/types';\n\nexport function getEvmViemChain(id: ChainId): Chain {\n switch (id) {\n case SONIC_MAINNET_CHAIN_ID:\n return sonic;\n case AVALANCHE_MAINNET_CHAIN_ID:\n return avalanche;\n case ARBITRUM_MAINNET_CHAIN_ID:\n return arbitrum;\n case BASE_MAINNET_CHAIN_ID:\n return base;\n case OPTIMISM_MAINNET_CHAIN_ID:\n return optimism;\n case BSC_MAINNET_CHAIN_ID:\n return bsc;\n case POLYGON_MAINNET_CHAIN_ID:\n return polygon;\n case NIBIRU_MAINNET_CHAIN_ID:\n return nibiru;\n default:\n throw new Error(`Unsupported EVM chain ID: ${id}`);\n }\n}\n\nexport class EvmWalletProvider implements IEvmWalletProvider {\n private readonly walletClient: WalletClient<Transport, Chain, Account>;\n public readonly publicClient: PublicClient;\n\n constructor(config: EvmWalletConfig) {\n if (isPrivateKeyEvmWalletConfig(config)) {\n const chain = getEvmViemChain(config.chainId);\n this.walletClient = createWalletClient({\n chain,\n transport: http(config.rpcUrl ?? chain.rpcUrls.default.http[0]),\n account: privateKeyToAccount(config.privateKey),\n });\n this.publicClient = createPublicClient({\n chain,\n transport: http(config.rpcUrl ?? chain.rpcUrls.default.http[0]),\n });\n } else if (isBrowserExtensionEvmWalletConfig(config)) {\n this.walletClient = config.walletClient;\n this.publicClient = config.publicClient;\n } else {\n throw new Error('Invalid EVM wallet config');\n }\n }\n\n async sendTransaction(evmRawTx: EvmRawTransaction): Promise<Hash> {\n return this.walletClient.sendTransaction(evmRawTx);\n }\n\n async waitForTransactionReceipt(txHash: Hash): Promise<EvmRawTransactionReceipt> {\n const receipt = await this.publicClient.waitForTransactionReceipt({ hash: txHash });\n return {\n ...receipt,\n transactionIndex: receipt.transactionIndex.toString(),\n blockNumber: receipt.blockNumber.toString(),\n cumulativeGasUsed: receipt.cumulativeGasUsed.toString(),\n gasUsed: receipt.gasUsed.toString(),\n contractAddress: receipt.contractAddress?.toString() ?? null,\n logs: receipt.logs.map(log => ({\n ...log,\n blockNumber: log.blockNumber.toString() as `0x${string}`,\n logIndex: log.logIndex.toString() as `0x${string}`,\n transactionIndex: log.transactionIndex.toString() as `0x${string}`,\n })),\n effectiveGasPrice: receipt.effectiveGasPrice.toString(),\n };\n }\n\n async getWalletAddress(): Promise<Address> {\n return this.walletClient.account.address;\n }\n}\n\n/**\n * EVM Wallet Configuration Types\n */\n\nexport type PrivateKeyEvmWalletConfig = {\n privateKey: `0x${string}`;\n chainId: ChainId;\n rpcUrl?: `http${string}`;\n};\n\nexport type BrowserExtensionEvmWalletConfig = {\n walletClient: WalletClient<Transport, Chain, Account>;\n publicClient: PublicClient;\n};\n\nexport type EvmWalletConfig = PrivateKeyEvmWalletConfig | BrowserExtensionEvmWalletConfig;\n\n/**\n * EVM Type Guards\n */\n\nexport function isPrivateKeyEvmWalletConfig(config: EvmWalletConfig): config is PrivateKeyEvmWalletConfig {\n return 'privateKey' in config && config.privateKey.startsWith('0x');\n}\n\nexport function isBrowserExtensionEvmWalletConfig(config: EvmWalletConfig): config is BrowserExtensionEvmWalletConfig {\n return 'walletClient' in config && 'publicClient' in config;\n}\n","import { SuiClient } from '@mysten/sui/client';\nimport { Ed25519Keypair } from '@mysten/sui/keypairs/ed25519';\nimport type { Transaction, TransactionArgument } from '@mysten/sui/transactions';\nimport type { ISuiWalletProvider, SuiTransaction, SuiExecutionResult, SuiPaginatedCoins } from '@sodax/types';\nimport {\n signTransaction,\n type SuiWalletFeatures,\n type WalletAccount,\n type WalletWithFeatures,\n} from '@mysten/wallet-standard';\n\n// Private key wallet config\nexport type PrivateKeySuiWalletConfig = {\n rpcUrl: string;\n mnemonics: string;\n};\n\n// Browser extension wallet config\nexport type BrowserExtensionSuiWalletConfig = {\n client: SuiClient;\n wallet: WalletWithFeatures<Partial<SuiWalletFeatures>>;\n account: WalletAccount;\n};\n\n// Unified config type\nexport type SuiWalletConfig = PrivateKeySuiWalletConfig | BrowserExtensionSuiWalletConfig;\n\n// Type guards\nfunction isPrivateKeySuiWalletConfig(walletConfig: SuiWalletConfig): walletConfig is PrivateKeySuiWalletConfig {\n return 'mnemonics' in walletConfig;\n}\n\nfunction isBrowserExtensionSuiWalletConfig(\n walletConfig: SuiWalletConfig,\n): walletConfig is BrowserExtensionSuiWalletConfig {\n return 'wallet' in walletConfig && 'account' in walletConfig;\n}\n\nexport type PkSuiWallet = {\n keyPair: Ed25519Keypair;\n};\n\nexport type BrowserExtensionSuiWallet = {\n wallet: WalletWithFeatures<Partial<SuiWalletFeatures>>;\n account: WalletAccount;\n};\n\nexport type SuiWallet = PkSuiWallet | BrowserExtensionSuiWallet;\n\nexport function isPkSuiWallet(wallet: SuiWallet): wallet is PkSuiWallet {\n return 'keyPair' in wallet;\n}\n\nexport function isBrowserExtensionSuiWallet(wallet: SuiWallet): wallet is BrowserExtensionSuiWallet {\n return 'wallet' in wallet && 'account' in wallet;\n}\n\nexport function isSuiWallet(wallet: SuiWallet): wallet is SuiWallet {\n return isPkSuiWallet(wallet) || isBrowserExtensionSuiWallet(wallet);\n}\n\nexport class SuiWalletProvider implements ISuiWalletProvider {\n private readonly client: SuiClient;\n private readonly wallet: SuiWallet;\n\n constructor(walletConfig: SuiWalletConfig) {\n if (isPrivateKeySuiWalletConfig(walletConfig)) {\n this.client = new SuiClient({ url: walletConfig.rpcUrl });\n this.wallet = {\n keyPair: Ed25519Keypair.deriveKeypair(walletConfig.mnemonics),\n };\n } else if (isBrowserExtensionSuiWalletConfig(walletConfig)) {\n this.client = walletConfig.client;\n this.wallet = {\n wallet: walletConfig.wallet,\n account: walletConfig.account,\n };\n } else {\n throw new Error('Invalid wallet configuration');\n }\n }\n\n async signAndExecuteTxn(txn: SuiTransaction): Promise<string> {\n if (isPkSuiWallet(this.wallet)) {\n const res = await this.client.signAndExecuteTransaction({\n transaction: txn as unknown as Transaction,\n signer: this.wallet.keyPair,\n });\n\n return res.digest;\n }\n if (isBrowserExtensionSuiWallet(this.wallet)) {\n const browserWallet = this.wallet.wallet;\n const browserAccount = this.wallet.account;\n\n if (!browserAccount || browserAccount.chains.length === 0) {\n throw new Error('No chains available for wallet account');\n }\n const chain = browserAccount.chains[0];\n if (!chain) {\n throw new Error('No chain available for wallet account');\n }\n const { bytes, signature } = await signTransaction(browserWallet, {\n transaction: txn,\n account: browserAccount,\n chain,\n });\n\n const res = await this.client.executeTransactionBlock({\n transactionBlock: bytes,\n signature,\n options: {\n showRawEffects: true,\n },\n });\n\n return res.digest;\n }\n\n throw new Error('Invalid wallet configuration');\n }\n\n async viewContract(\n tx: Transaction,\n packageId: string,\n module: string,\n functionName: string,\n args: unknown[],\n typeArgs: string[] = [],\n ): Promise<SuiExecutionResult> {\n tx.moveCall({\n target: `${packageId}::${module}::${functionName}`,\n arguments: args as TransactionArgument[],\n typeArguments: typeArgs,\n });\n\n const sender = this.getSuiAddress();\n\n const txResults = await this.client.devInspectTransactionBlock({\n transactionBlock: tx,\n sender,\n });\n\n if (txResults.results && txResults.results[0] !== undefined) {\n return txResults.results[0] as SuiExecutionResult;\n }\n throw Error(`transaction didn't return any values: ${JSON.stringify(txResults, null, 2)}`);\n }\n\n async getCoins(address: string, token: string): Promise<SuiPaginatedCoins> {\n return this.client.getCoins({ owner: address, coinType: token, limit: 10 });\n }\n\n private getSuiAddress(): string {\n if (isPkSuiWallet(this.wallet)) {\n return this.wallet.keyPair.toSuiAddress();\n }\n if (isBrowserExtensionSuiWallet(this.wallet)) {\n return this.wallet.account.address;\n }\n throw new Error('Invalid wallet configuration');\n }\n\n async getWalletAddress(): Promise<string> {\n return this.getSuiAddress();\n }\n}\n","import type { IconTransactionResult, IcxCallTransaction, IIconWalletProvider } from '@sodax/types';\nimport type { IconService, Wallet as IconSdkWallet } from 'icon-sdk-js';\nimport { Converter, CallTransactionBuilder, Wallet, IconService as IconServiceConstructor } from 'icon-sdk-js';\n\nexport class IconWalletProvider implements IIconWalletProvider {\n private readonly wallet: IconWallet;\n public readonly iconService: IconService;\n\n constructor(wallet: IconWalletConfig) {\n if (isPrivateKeyIconWalletConfig(wallet)) {\n this.wallet = {\n type: 'PRIVATE_KEY',\n wallet: Wallet.loadPrivateKey(wallet.privateKey.slice(2)),\n };\n this.iconService = new IconServiceConstructor(new IconServiceConstructor.HttpProvider(wallet.rpcUrl));\n } else if (isBrowserExtensionIconWalletConfig(wallet)) {\n this.wallet = {\n type: 'BROWSER_EXTENSION',\n wallet: wallet.walletAddress,\n };\n this.iconService = new IconServiceConstructor(new IconServiceConstructor.HttpProvider(wallet.rpcUrl));\n } else {\n throw new Error('Invalid Icon wallet config');\n }\n }\n\n public async sendTransaction(tx: IcxCallTransaction): Promise<Hash> {\n const builtTx = new CallTransactionBuilder()\n .from(tx.from)\n .to(tx.to)\n .stepLimit(Converter.toHex(3000000))\n .nid(tx.nid)\n .version(tx.version ?? '0x3')\n .timestamp(Converter.toHex(tx.timestamp ?? new Date().getTime() * 1000))\n .value(tx.value)\n .method(tx.method)\n .params(tx.params)\n .build();\n\n if (!isIconPkWallet(this.wallet)) {\n // if wallet starts with 0x, it's a private key\n const result = await requestJsonRpc(builtTx);\n\n return result.result satisfies string as Hash;\n }\n const signedTx = new IconServiceConstructor.SignedTransaction(builtTx, this.wallet.wallet);\n const result = await this.iconService.sendTransaction(signedTx).execute();\n\n return result satisfies string as Hash;\n }\n\n public async waitForTransactionReceipt(txHash: Hash): Promise<IconTransactionResult> {\n const result = await this.iconService.waitTransactionResult(txHash).execute();\n\n return {\n ...result,\n status: +result.status,\n cumulativeStepUsed: BigNumberToBigInt(result.cumulativeStepUsed),\n stepUsed: BigNumberToBigInt(result.stepUsed),\n stepPrice: BigNumberToBigInt(result.stepPrice),\n } satisfies IconTransactionResult;\n }\n\n async getWalletAddress(): Promise<IconEoaAddress> {\n if (!this.wallet.wallet) {\n throw new Error('Wallet not initialized');\n }\n return isIconPkWallet(this.wallet) ? (this.wallet.wallet.getAddress() as IconEoaAddress) : this.wallet.wallet;\n }\n}\n\n/**\n * Icon Types\n */\n\nexport type IconJsonRpcVersion = '2.0';\n\nexport type Hex = `0x${string}`;\nexport type Hash = `0x${string}`;\nexport type IconAddress = `hx${string}` | `cx${string}`;\nexport type IconEoaAddress = `hx${string}`;\n\nexport type PrivateKeyIconWalletConfig = {\n privateKey: `0x${string}`;\n rpcUrl: `http${string}`;\n};\n\nexport type BrowserExtensionIconWalletConfig = {\n walletAddress?: IconEoaAddress;\n rpcUrl: `http${string}`;\n};\n\nexport type IconWalletConfig = PrivateKeyIconWalletConfig | BrowserExtensionIconWalletConfig;\n\nexport type IconPkWallet = {\n type: 'PRIVATE_KEY';\n wallet: IconSdkWallet;\n};\n\nexport type IconBrowserExtensionWallet = {\n type: 'BROWSER_EXTENSION';\n wallet?: IconEoaAddress;\n};\n\nexport type IconWallet = IconPkWallet | IconBrowserExtensionWallet;\n\nexport type HanaWalletRequestEvent =\n | 'REQUEST_HAS_ACCOUNT'\n | 'REQUEST_HAS_ADDRESS'\n | 'REQUEST_ADDRESS'\n | 'REQUEST_JSON'\n | 'REQUEST_SIGNING'\n | 'REQUEST_JSON-RPC';\nexport type HanaWalletResponseEvent =\n | 'RESPONSE_HAS_ACCOUNT'\n | 'RESPONSE_HAS_ADDRESS'\n | 'RESPONSE_ADDRESS'\n | 'RESPONSE_JSON-RPC'\n | 'RESPONSE_SIGNING'\n | 'CANCEL_SIGNING'\n | 'CANCEL_JSON-RPC';\n\nexport type ResponseAddressType = {\n type: 'RESPONSE_ADDRESS';\n payload: IconAddress;\n};\n\nexport type ResponseSigningType = {\n type: 'RESPONSE_SIGNING';\n payload: string;\n};\n\nexport type RelayRequestDetail = {\n type: HanaWalletRequestEvent;\n payload?: {\n jsonrpc: IconJsonRpcVersion;\n method: string;\n params: unknown;\n id: number | undefined;\n };\n};\n\nexport type RelayRequestSigning = {\n type: 'REQUEST_SIGNING';\n payload: {\n from: IconAddress;\n hash: string;\n };\n};\n\nexport type JsonRpcPayloadResponse = {\n id: number;\n result: string; // txHash\n};\n\ninterface RelayResponseEventDetail {\n type: HanaWalletResponseEvent;\n payload: unknown;\n}\n\n/**\n * Icon Type Guards\n */\n\nexport function isIconPkWallet(wallet: IconWallet): wallet is IconPkWallet {\n return wallet.type === 'PRIVATE_KEY';\n}\n\nexport function isIconBrowserExtensionWallet(wallet: IconWallet): wallet is IconBrowserExtensionWallet {\n return wallet.type === 'BROWSER_EXTENSION';\n}\n\nexport function isPrivateKeyIconWalletConfig(config: IconWalletConfig): config is PrivateKeyIconWalletConfig {\n return 'privateKey' in config && config.privateKey.startsWith('0x');\n}\n\nexport function isBrowserExtensionIconWalletConfig(\n config: IconWalletConfig,\n): config is BrowserExtensionIconWalletConfig {\n return 'walletAddress' in config && (isIconEoaAddress(config.walletAddress) || !config.walletAddress);\n}\n\nexport function isIconAddress(value: unknown): value is IconAddress {\n return typeof value === 'string' && /^hx[a-f0-9]{40}$|^cx[a-f0-9]{40}$/.test(value);\n}\n\nexport function isIconEoaAddress(value: unknown): value is IconEoaAddress {\n return typeof value === 'string' && /^hx[a-f0-9]{40}$/.test(value);\n}\n\nexport function isResponseAddressType(value: unknown): value is ResponseAddressType {\n return (\n typeof value === 'object' &&\n value !== null &&\n 'type' in value &&\n 'payload' in value &&\n value.type === 'RESPONSE_ADDRESS' &&\n isIconAddress(value.payload)\n );\n}\n\nexport function isResponseSigningType(value: unknown): value is ResponseSigningType {\n return (\n typeof value === 'object' &&\n value !== null &&\n 'type' in value &&\n 'payload' in value &&\n value.type === 'RESPONSE_SIGNING' &&\n typeof value.payload === 'string'\n );\n}\n\nexport function isJsonRpcPayloadResponse(value: unknown): value is JsonRpcPayloadResponse {\n return (\n typeof value === 'object' &&\n value !== null &&\n 'id' in value &&\n 'result' in value &&\n typeof value.result === 'string'\n );\n}\n\n/**\n * Methods to interact with Icon Browser Extension Wallet (e.g. Hana Wallet)\n */\n\nexport function requestAddress(): Promise<IconAddress> {\n return new Promise(resolve => {\n const eventHandler = (event: Event) => {\n const customEvent = event as CustomEvent<RelayResponseEventDetail>;\n const response = customEvent.detail;\n if (isResponseAddressType(response)) {\n window.removeEventListener('ICONEX_RELAY_RESPONSE', eventHandler as EventListener, false);\n resolve(response.payload);\n }\n };\n\n window.removeEventListener('ICONEX_RELAY_RESPONSE', eventHandler, false);\n window.addEventListener('ICONEX_RELAY_RESPONSE', eventHandler, false);\n window.dispatchEvent(\n new CustomEvent<RelayRequestDetail>('ICONEX_RELAY_REQUEST', {\n detail: {\n type: 'REQUEST_ADDRESS',\n },\n }),\n );\n });\n}\n\nexport function requestSigning(from: IconAddress, hash: string): Promise<string> {\n return new Promise((resolve, reject) => {\n const signRequest = new CustomEvent<RelayRequestSigning>('ICONEX_RELAY_REQUEST', {\n detail: {\n type: 'REQUEST_SIGNING',\n payload: {\n from,\n hash,\n },\n },\n });\n\n const eventHandler = (event: Event) => {\n const customEvent = event as CustomEvent<RelayResponseEventDetail>;\n const response = customEvent.detail;\n if (isResponseSigningType(response)) {\n window.removeEventListener('ICONEX_RELAY_RESPONSE', eventHandler as EventListener, false);\n\n // resolve signature\n resolve(response.payload);\n } else if (response.type === 'CANCEL_SIGNING') {\n reject(new Error('CANCEL_SIGNING'));\n }\n };\n\n window.removeEventListener('ICONEX_RELAY_RESPONSE', eventHandler as EventListener, false);\n window.addEventListener('ICONEX_RELAY_RESPONSE', eventHandler as EventListener, false);\n window.dispatchEvent(signRequest);\n });\n}\n\nexport function requestJsonRpc(rawTransaction: unknown, id = 99999): Promise<JsonRpcPayloadResponse> {\n return new Promise((resolve, reject) => {\n const eventHandler = (event: Event) => {\n const customEvent = event as CustomEvent<RelayResponseEventDetail>;\n const { type, payload } = customEvent.detail;\n if (type === 'RESPONSE_JSON-RPC') {\n window.removeEventListener('ICONEX_RELAY_RESPONSE', eventHandler as EventListener, false);\n\n if (isJsonRpcPayloadResponse(payload)) {\n resolve(payload);\n } else {\n reject(new Error('Invalid payload response type (expected JsonRpcPayloadResponse)'));\n }\n } else if (type === 'CANCEL_JSON-RPC') {\n window.removeEventListener('ICONEX_RELAY_RESPONSE', eventHandler as EventListener, false);\n reject(new Error('CANCEL_JSON-RPC'));\n }\n };\n\n window.removeEventListener('ICONEX_RELAY_RESPONSE', eventHandler as EventListener, false);\n window.addEventListener('ICONEX_RELAY_RESPONSE', eventHandler as EventListener, false);\n window.dispatchEvent(\n new CustomEvent<RelayRequestDetail>('ICONEX_RELAY_REQUEST', {\n detail: {\n type: 'REQUEST_JSON-RPC',\n payload: {\n jsonrpc: '2.0',\n method: 'icx_sendTransaction',\n params: rawTransaction,\n id: id,\n },\n },\n }),\n );\n });\n}\n\n/**\n * Icon Utils\n */\n\nexport function BigNumberToBigInt(bigNumber: BigNumber): bigint {\n if (!bigNumber.isInteger()) {\n throw new Error('Cannot convert decimal number to BigInt');\n }\n return BigInt(bigNumber.toFixed(0));\n}\n","import type { MsgBroadcaster } from '@injectivelabs/wallet-core';\nimport { MsgExecuteContract, MsgExecuteContractCompat, createTransaction } from '@injectivelabs/sdk-ts';\nimport type { Hex, JsonObject, InjectiveCoin, IInjectiveWalletProvider, InjectiveEoaAddress } from '@sodax/types';\nimport { InjectiveExecuteResponse, type InjectiveRawTransaction } from '@sodax/types';\n\n/**\n * Injective Wallet Configuration Types\n */\n\nexport type BrowserExtensionInjectiveWalletConfig = {\n msgBroadcaster: MsgBroadcaster;\n walletAddress: InjectiveEoaAddress | undefined;\n};\n\nexport type InjectiveWalletConfig = BrowserExtensionInjectiveWalletConfig;\n\n/**\n * Injective Type Guards\n */\n\nexport function isBrowserExtensionInjectiveWalletConfig(\n config: InjectiveWalletConfig,\n): config is BrowserExtensionInjectiveWalletConfig {\n return 'msgBroadcaster' in config && 'walletAddress' in config;\n}\n\nexport class InjectiveWalletProvider implements IInjectiveWalletProvider {\n private msgBroadcaster: MsgBroadcaster;\n public walletAddress: InjectiveEoaAddress | undefined;\n\n constructor(config: InjectiveWalletConfig) {\n if (isBrowserExtensionInjectiveWalletConfig(config)) {\n this.msgBroadcaster = config.msgBroadcaster;\n this.walletAddress = config.walletAddress;\n } else {\n throw new Error('Invalid Injective wallet config');\n }\n }\n\n getRawTransaction(\n chainId: string,\n _: string,\n senderAddress: string,\n contractAddress: string,\n msg: JsonObject,\n memo?: string,\n ): Promise<InjectiveRawTransaction> {\n if (!this.walletAddress) {\n throw new Error('Wallet address not found');\n }\n\n const msgExec = MsgExecuteContract.fromJSON({\n contractAddress: contractAddress,\n sender: senderAddress,\n msg: msg as object,\n funds: [],\n });\n const { txRaw } = createTransaction({\n message: msgExec,\n memo: memo || '',\n pubKey: this.walletAddress,\n sequence: 0,\n accountNumber: 0,\n chainId: chainId,\n });\n\n const rawTx = {\n from: senderAddress as Hex,\n to: contractAddress as Hex,\n signedDoc: {\n bodyBytes: txRaw.bodyBytes,\n chainId: chainId,\n accountNumber: BigInt(0),\n authInfoBytes: txRaw.authInfoBytes,\n },\n };\n return Promise.resolve(rawTx);\n }\n\n async getWalletAddress(): Promise<InjectiveEoaAddress> {\n if (!this.walletAddress) {\n throw new Error('Wallet address not found');\n }\n\n return Promise.resolve(this.walletAddress);\n }\n\n async execute(\n senderAddress: string,\n contractAddress: string,\n msg: JsonObject,\n funds?: InjectiveCoin[],\n ): Promise<InjectiveExecuteResponse> {\n if (!this.walletAddress) {\n throw new Error('Wallet address not found');\n }\n\n const msgExec = MsgExecuteContractCompat.fromJSON({\n contractAddress: contractAddress,\n sender: senderAddress,\n msg: msg as object,\n funds: funds || [],\n });\n\n const txResult = await this.msgBroadcaster.broadcastWithFeeDelegation({\n msgs: msgExec,\n injectiveAddress: this.walletAddress,\n });\n\n return InjectiveExecuteResponse.fromTxResponse(txResult);\n }\n}\n","import { getAssociatedTokenAddress } from '@solana/spl-token';\nimport {\n type Commitment,\n Connection,\n Keypair,\n PublicKey,\n type RpcResponseAndContext,\n type TokenAmount,\n TransactionInstruction,\n TransactionMessage,\n VersionedTransaction,\n} from '@solana/web3.js';\nimport type {\n ISolanaWalletProvider,\n SolanaAccountMeta,\n SolanaBase58PublicKey,\n SolanaRpcResponseAndContext,\n SolanaSerializedTransaction,\n SolanaSignatureResult,\n SolanaRawTransactionInstruction,\n TransactionSignature,\n} from '@sodax/types';\nimport type { SignerWalletAdapterProps } from '@solana/wallet-adapter-base';\n\n// Wallet adapter pattern interface\ninterface WalletContextState {\n publicKey: PublicKey | null;\n signTransaction: SignerWalletAdapterProps['signTransaction'] | undefined;\n}\n\n// Direct keypair pattern configs\nexport type PrivateKeySolanaWalletConfig = {\n privateKey: Uint8Array;\n endpoint: string;\n};\n\n// Wallet adapter pattern config\nexport type BrowserExtensionSolanaWalletConfig = {\n wallet: WalletContextState;\n connection: Connection;\n};\n\n// Unified config type\nexport type SolanaWalletConfig = PrivateKeySolanaWalletConfig | BrowserExtensionSolanaWalletConfig;\n\n// Type guards\nfunction isPrivateKeySolanaWalletConfig(\n walletConfig: SolanaWalletConfig,\n): walletConfig is PrivateKeySolanaWalletConfig {\n return 'privateKey' in walletConfig;\n}\n\nfunction isBrowserExtensionSolanaWalletConfig(\n walletConfig: SolanaWalletConfig,\n): walletConfig is BrowserExtensionSolanaWalletConfig {\n return 'wallet' in walletConfig && !(walletConfig.wallet instanceof Keypair);\n}\n\nexport class SolanaWalletProvider implements ISolanaWalletProvider {\n private readonly wallet: Keypair | WalletContextState;\n public readonly connection: Connection;\n private readonly isAdapterMode: boolean;\n\n constructor(walletConfig: SolanaWalletConfig) {\n if (isPrivateKeySolanaWalletConfig(walletConfig)) {\n this.wallet = Keypair.fromSecretKey(walletConfig.privateKey);\n this.connection = new Connection(walletConfig.endpoint, 'confirmed');\n this.isAdapterMode = false;\n } else if (isBrowserExtensionSolanaWalletConfig(walletConfig)) {\n this.wallet = walletConfig.wallet;\n this.connection = walletConfig.connection;\n this.isAdapterMode = true;\n } else {\n throw new Error('Invalid wallet configuration');\n }\n }\n\n public async waitForConfirmation(\n signature: string,\n commitment: Commitment = 'finalized',\n ): Promise<SolanaRpcResponseAndContext<SolanaSignatureResult>> {\n const latestBlockhash = await this.connection.getLatestBlockhash();\n const response = await this.connection.confirmTransaction(\n {\n signature,\n blockhash: latestBlockhash.blockhash,\n lastValidBlockHeight: latestBlockhash.lastValidBlockHeight,\n },\n commitment,\n );\n\n return response;\n }\n\n /**\n * Send a raw transaction to the Solana network.\n * @param rawTransaction - The raw transaction to send.\n * @returns The transaction signature.\n */\n public async sendTransaction(rawTransaction: Uint8Array | Array<number>): Promise<TransactionSignature> {\n return this.connection.sendRawTransaction(rawTransaction);\n }\n\n /**\n * Send a raw transaction to the Solana network and wait for confirmation.\n * @param rawTransaction - The raw transaction to send.\n * @param commitment - The commitment level to use. Defaults to 'finalized'.\n * @returns The transaction signature.\n */\n public async sendTransactionWithConfirmation(\n rawTransaction: Uint8Array | Array<number>,\n commitment: Commitment = 'finalized',\n ): Promise<TransactionSignature> {\n const txHash = await this.connection.sendRawTransaction(rawTransaction);\n await this.waitForConfirmation(txHash, commitment);\n return txHash;\n }\n\n /**\n * Build a v0 versioned transaction.\n * @param instructions - The instructions to include in the transaction.\n * @returns The v0 transaction.\n */\n async buildV0Txn(rawInstructions: SolanaRawTransactionInstruction[]): Promise<SolanaSerializedTransaction> {\n if (this.isAdapterMode) {\n return this.buildV0TxnWithAdapter(rawInstructions);\n }\n return this.buildV0TxnWithKeypair(rawInstructions);\n }\n\n private async buildV0TxnWithAdapter(\n rawInstructions: SolanaRawTransactionInstruction[],\n ): Promise<SolanaSerializedTransaction> {\n const adapterWallet = this.wallet as WalletContextState;\n\n if (!adapterWallet.publicKey) {\n throw new Error('Wallet public key is not initialized');\n }\n\n if (!adapterWallet.signTransaction) {\n throw new Error('Wallet signTransaction is not initialized');\n }\n\n const instructions = this.buildTransactionInstruction(rawInstructions);\n const latestBlockhash = await this.connection.getLatestBlockhash();\n const messageV0 = new TransactionMessage({\n payerKey: adapterWallet.publicKey,\n recentBlockhash: latestBlockhash.blockhash,\n instructions,\n }).compileToV0Message();\n\n const tx = await adapterWallet.signTransaction(new VersionedTransaction(messageV0));\n return tx.serialize();\n }\n\n private async buildV0TxnWithKeypair(\n rawInstructions: SolanaRawTransactionInstruction[],\n ): Promise<SolanaSerializedTransaction> {\n const keypairWallet = this.wallet as Keypair;\n const instructions = this.buildTransactionInstruction(rawInstructions);\n\n const messageV0 = new TransactionMessage({\n payerKey: keypairWallet.publicKey,\n recentBlockhash: (await this.connection.getLatestBlockhash()).blockhash,\n instructions,\n }).compileToV0Message();\n\n const tx = new VersionedTransaction(messageV0);\n tx.sign([keypairWallet]);\n\n return tx.serialize();\n }\n\n public getWalletBase58PublicKey(): SolanaBase58PublicKey {\n if (!this.wallet.publicKey) {\n throw new Error('Wallet public key is not initialized');\n }\n return this.wallet.publicKey.toBase58();\n }\n\n public async getWalletAddress(): Promise<string> {\n return this.getWalletBase58PublicKey();\n }\n\n public async getAssociatedTokenAddress(mint: SolanaBase58PublicKey): Promise<SolanaBase58PublicKey> {\n if (!this.wallet.publicKey) {\n throw new Error('Wallet public key is not initialized');\n }\n\n return (await getAssociatedTokenAddress(new PublicKey(mint), this.wallet.publicKey, true)).toBase58();\n }\n\n public async getBalance(publicKey: SolanaBase58PublicKey): Promise<number> {\n return await this.connection.getBalance(new PublicKey(publicKey));\n }\n\n public async getTokenAccountBalance(publicKey: SolanaBase58PublicKey): Promise<RpcResponseAndContext<TokenAmount>> {\n return this.connection.getTokenAccountBalance(new PublicKey(publicKey));\n }\n\n private buildTransactionInstruction(rawInstructions: SolanaRawTransactionInstruction[]): TransactionInstruction[] {\n return rawInstructions.map(\n rawInstruction =>\n new TransactionInstruction({\n keys: rawInstruction.keys.map((key: SolanaAccountMeta) => ({\n pubkey: new PublicKey(key.pubkey),\n isSigner: key.isSigner,\n isWritable: key.isWritable,\n })),\n programId: new PublicKey(rawInstruction.programId),\n data: Buffer.from(rawInstruction.data),\n }),\n );\n }\n}\n","import type { Hex, IStellarWalletProvider, StellarRawTransactionReceipt, XDR } from '@sodax/types';\nimport { Networks, Horizon, Transaction, Keypair } from '@stellar/stellar-sdk';\n\ninterface StellarWalletsKit {\n getAddress(): Promise<{ address: string }>;\n signTransaction(tx: XDR, options: { networkPassphrase: string }): Promise<{ signedTxXdr: XDR }>;\n}\n\nexport type StellarNetwork = 'TESTNET' | 'PUBLIC';\n\nconst STELLAR_HORIZON_URLS: { [key in StellarNetwork]: string } = {\n TESTNET: 'https://horizon-testnet.stellar.org',\n PUBLIC: 'https://horizon.stellar.org',\n};\n\nconst STELLAR_NETWORK_PASSPHRASES: { [key in StellarNetwork]: string } = {\n TESTNET: Networks.TESTNET,\n PUBLIC: Networks.PUBLIC,\n};\n\nconst TX_POLL_INTERVAL = 2000; // 2 seconds\nconst TX_POLL_TIMEOUT = 60000; // 60 seconds\n\nconst STELLAR_ERROR_CODES = {\n INVALID_CONFIG: 'INVALID_CONFIG',\n SIGN_TX_ERROR: 'SIGN_TX_ERROR',\n TX_RECEIPT_TIMEOUT: 'TX_RECEIPT_TIMEOUT',\n SEND_TX_ERROR: 'SEND_TX_ERROR',\n INVALID_NETWORK: 'INVALID_NETWORK',\n INVALID_PRIVATE_KEY: 'INVALID_PRIVATE_KEY',\n} as const;\n\nexport type StellarAddress = string; // Stellar addresses are in format: G...\n\nexport type PrivateKeyStellarWalletConfig = {\n type: 'PRIVATE_KEY';\n privateKey: Hex;\n network: StellarNetwork;\n rpcUrl?: string;\n};\n\nexport type BrowserExtensionStellarWalletConfig = {\n type: 'BROWSER_EXTENSION';\n walletsKit: StellarWalletsKit;\n network: StellarNetwork;\n rpcUrl?: string;\n};\n\nexport type StellarWalletConfig = PrivateKeyStellarWalletConfig | BrowserExtensionStellarWalletConfig;\n\nexport type StellarPkWallet = {\n type: 'PRIVATE_KEY';\n keypair: Keypair;\n};\n\nexport type StellarBrowserExtensionWallet = {\n type: 'BROWSER_EXTENSION';\n walletsKit: StellarWalletsKit;\n};\n\nexport type StellarWallet = StellarPkWallet | StellarBrowserExtensionWallet;\n\nexport class StellarWalletError extends Error {\n constructor(\n message: string,\n public readonly code: keyof typeof STELLAR_ERROR_CODES,\n ) {\n super(message);\n this.name = 'StellarWalletError';\n }\n}\n\nexport function isPrivateKeyStellarWalletConfig(config: StellarWalletConfig): config is PrivateKeyStellarWalletConfig {\n return config.type === 'PRIVATE_KEY';\n}\n\nexport function isBrowserExtensionStellarWalletConfig(\n config: StellarWalletConfig,\n): config is BrowserExtensionStellarWalletConfig {\n return config.type === 'BROWSER_EXTENSION';\n}\n\nexport function isStellarPkWallet(wallet: StellarWallet): wallet is StellarPkWallet {\n return wallet.type === 'PRIVATE_KEY';\n}\n\nexport function isStellarBrowserExtensionWallet(wallet: StellarWallet): wallet is StellarBrowserExtensionWallet {\n return wallet.type === 'BROWSER_EXTENSION';\n}\n\nexport function isValidStellarNetwork(network: string): network is StellarNetwork {\n return ['TESTNET', 'PUBLIC'].includes(network);\n}\n\nexport function isValidStellarPrivateKey(privateKey: string): boolean {\n try {\n // Remove '0x' prefix if present\n const key = privateKey.startsWith('0x') ? privateKey.slice(2) : privateKey;\n Keypair.fromSecret(key);\n return true;\n } catch {\n return false;\n }\n}\n\nexport class StellarWalletProvider implements IStellarWalletProvider {\n private readonly wallet: StellarWallet;\n private readonly server: Horizon.Server;\n private readonly networkPassphrase: string;\n\n constructor(config: StellarWalletConfig) {\n if (!isValidStellarNetwork(config.network)) {\n throw new StellarWalletError(`Invalid network: ${config.network}`, 'INVALID_NETWORK');\n }\n\n if (isPrivateKeyStellarWalletConfig(config)) {\n if (!isValidStellarPrivateKey(config.privateKey)) {\n throw new StellarWalletError('Invalid private key format', 'INVALID_PRIVATE_KEY');\n }\n // Remove '0x' prefix if present\n const privateKey = config.privateKey.startsWith('0x') ? config.privateKey.slice(2) : config.privateKey;\n this.wallet = {\n type: 'PRIVATE_KEY',\n keypair: Keypair.fromSecret(privateKey),\n };\n this.server = new Horizon.Server(config.rpcUrl ?? STELLAR_HORIZON_URLS[config.network]);\n this.networkPassphrase = STELLAR_NETWORK_PASSPHRASES[config.network];\n return;\n }\n\n if (isBrowserExtensionStellarWalletConfig(config)) {\n this.wallet = {\n type: 'BROWSER_EXTENSION',\n walletsKit: config.walletsKit,\n };\n this.server = new Horizon.Server(config.rpcUrl ?? STELLAR_HORIZON_URLS[config.network]);\n this.networkPassphrase = STELLAR_NETWORK_PASSPHRASES[config.network];\n return;\n }\n\n throw new StellarWalletError('Invalid wallet configuration', 'INVALID_CONFIG');\n }\n\n public async getWalletAddress(): Promise<string> {\n try {\n if (isStellarPkWallet(this.wallet)) {\n return this.wallet.keypair.publicKey();\n }\n\n const { address } = await this.wallet.walletsKit.getAddress();\n return address;\n } catch (error) {\n throw new StellarWalletError(\n error instanceof Error ? error.message : 'Failed to get wallet address',\n 'INVALID_CONFIG',\n );\n }\n }\n\n public async signTransaction(tx: XDR): Promise<XDR> {\n try {\n if (isStellarPkWallet(this.wallet)) {\n // Parse the XDR transaction\n const transaction = new Transaction(tx, this.networkPassphrase);\n transaction.sign(this.wallet.keypair);\n return transaction.toXDR();\n }\n\n const { signedTxXdr } = await this.wallet.walletsKit.signTransaction(tx, {\n networkPassphrase: this.networkPassphrase,\n });\n return signedTxXdr;\n } catch (error) {\n throw new StellarWalletError(\n error instanceof Error ? error.message : 'Failed to sign transaction',\n 'SIGN_TX_ERROR',\n );\n }\n }\n\n public async waitForTransactionReceipt(txHash: string): Promise<StellarRawTransactionReceipt> {\n const startTime = Date.now();\n while (Date.now() - startTime < TX_POLL_TIMEOUT) {\n try {\n const tx = await this.server.transactions().transaction(txHash).call();\n\n return {\n ...tx,\n _links: {\n ...tx._links,\n transaction: tx._links.self,\n },\n } as unknown as StellarRawTransactionReceipt;\n } catch (error) {\n // Wait for the next poll interval\n await new Promise(resolve => setTimeout(resolve, TX_POLL_INTERVAL));\n }\n }\n throw new StellarWalletError(\n `Transaction receipt not found for hash ${txHash} after ${TX_POLL_TIMEOUT / 1000} seconds.`,\n 'TX_RECEIPT_TIMEOUT',\n );\n }\n}\n"]}
1
+ {"version":3,"sources":["../src/wallet-providers/EvmWalletProvider.ts","../src/wallet-providers/SuiWalletProvider.ts","../src/wallet-providers/IconWalletProvider.ts","../src/wallet-providers/InjectiveWalletProvider.ts","../src/wallet-providers/SolanaWalletProvider.ts","../src/wallet-providers/StellarWalletProvider.ts"],"names":["SONIC_MAINNET_CHAIN_ID","sonic","AVALANCHE_MAINNET_CHAIN_ID","avalanche","ARBITRUM_MAINNET_CHAIN_ID","arbitrum","BASE_MAINNET_CHAIN_ID","base","OPTIMISM_MAINNET_CHAIN_ID","optimism","BSC_MAINNET_CHAIN_ID","bsc","POLYGON_MAINNET_CHAIN_ID","polygon","NIBIRU_MAINNET_CHAIN_ID","nibiru","createWalletClient","http","privateKeyToAccount","createPublicClient","SuiClient","Ed25519Keypair","signTransaction","IconSdkRaw","result","PrivateKey","MsgBroadcasterWithPk","MsgExecuteContract","createTransaction","getInjectiveSignerAddress","MsgExecuteContractCompat","InjectiveExecuteResponse","Keypair","Connection","TransactionMessage","VersionedTransaction","getAssociatedTokenAddress","PublicKey","TransactionInstruction","Networks","Horizon","Transaction"],"mappings":"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","file":"index.cjs","sourcesContent":["import type { ChainId, EvmRawTransaction, EvmRawTransactionReceipt, IEvmWalletProvider } from '@sodax/types';\nimport type { Account, Address, Chain, Transport, Hash, PublicClient, WalletClient } from 'viem';\nimport { privateKeyToAccount } from 'viem/accounts';\nimport { createWalletClient, createPublicClient, http } from 'viem';\nimport { sonic, avalanche, arbitrum, base, optimism, bsc, polygon, nibiru } from 'viem/chains';\nimport {\n SONIC_MAINNET_CHAIN_ID,\n AVALANCHE_MAINNET_CHAIN_ID,\n ARBITRUM_MAINNET_CHAIN_ID,\n BASE_MAINNET_CHAIN_ID,\n OPTIMISM_MAINNET_CHAIN_ID,\n BSC_MAINNET_CHAIN_ID,\n POLYGON_MAINNET_CHAIN_ID,\n NIBIRU_MAINNET_CHAIN_ID,\n} from '@sodax/types';\n\nexport function getEvmViemChain(id: ChainId): Chain {\n switch (id) {\n case SONIC_MAINNET_CHAIN_ID:\n return sonic;\n case AVALANCHE_MAINNET_CHAIN_ID:\n return avalanche;\n case ARBITRUM_MAINNET_CHAIN_ID:\n return arbitrum;\n case BASE_MAINNET_CHAIN_ID:\n return base;\n case OPTIMISM_MAINNET_CHAIN_ID:\n return optimism;\n case BSC_MAINNET_CHAIN_ID:\n return bsc;\n case POLYGON_MAINNET_CHAIN_ID:\n return polygon;\n case NIBIRU_MAINNET_CHAIN_ID:\n return nibiru;\n default:\n throw new Error(`Unsupported EVM chain ID: ${id}`);\n }\n}\n\nexport class EvmWalletProvider implements IEvmWalletProvider {\n private readonly walletClient: WalletClient<Transport, Chain, Account>;\n public readonly publicClient: PublicClient;\n\n constructor(config: EvmWalletConfig) {\n if (isPrivateKeyEvmWalletConfig(config)) {\n const chain = getEvmViemChain(config.chainId);\n this.walletClient = createWalletClient({\n chain,\n transport: http(config.rpcUrl ?? chain.rpcUrls.default.http[0]),\n account: privateKeyToAccount(config.privateKey),\n });\n this.publicClient = createPublicClient({\n chain,\n transport: http(config.rpcUrl ?? chain.rpcUrls.default.http[0]),\n });\n } else if (isBrowserExtensionEvmWalletConfig(config)) {\n this.walletClient = config.walletClient;\n this.publicClient = config.publicClient;\n } else {\n throw new Error('Invalid EVM wallet config');\n }\n }\n\n async sendTransaction(evmRawTx: EvmRawTransaction): Promise<Hash> {\n return this.walletClient.sendTransaction(evmRawTx);\n }\n\n async waitForTransactionReceipt(txHash: Hash): Promise<EvmRawTransactionReceipt> {\n const receipt = await this.publicClient.waitForTransactionReceipt({ hash: txHash });\n return {\n ...receipt,\n transactionIndex: receipt.transactionIndex.toString(),\n blockNumber: receipt.blockNumber.toString(),\n cumulativeGasUsed: receipt.cumulativeGasUsed.toString(),\n gasUsed: receipt.gasUsed.toString(),\n contractAddress: receipt.contractAddress?.toString() ?? null,\n logs: receipt.logs.map(log => ({\n ...log,\n blockNumber: log.blockNumber.toString() as `0x${string}`,\n logIndex: log.logIndex.toString() as `0x${string}`,\n transactionIndex: log.transactionIndex.toString() as `0x${string}`,\n })),\n effectiveGasPrice: receipt.effectiveGasPrice.toString(),\n };\n }\n\n async getWalletAddress(): Promise<Address> {\n return this.walletClient.account.address;\n }\n}\n\n/**\n * EVM Wallet Configuration Types\n */\n\nexport type PrivateKeyEvmWalletConfig = {\n privateKey: `0x${string}`;\n chainId: ChainId;\n rpcUrl?: `http${string}`;\n};\n\nexport type BrowserExtensionEvmWalletConfig = {\n walletClient: WalletClient<Transport, Chain, Account>;\n publicClient: PublicClient;\n};\n\nexport type EvmWalletConfig = PrivateKeyEvmWalletConfig | BrowserExtensionEvmWalletConfig;\n\n/**\n * EVM Type Guards\n */\n\nexport function isPrivateKeyEvmWalletConfig(config: EvmWalletConfig): config is PrivateKeyEvmWalletConfig {\n return 'privateKey' in config && config.privateKey.startsWith('0x');\n}\n\nexport function isBrowserExtensionEvmWalletConfig(config: EvmWalletConfig): config is BrowserExtensionEvmWalletConfig {\n return 'walletClient' in config && 'publicClient' in config;\n}\n","import { SuiClient } from '@mysten/sui/client';\nimport { Ed25519Keypair } from '@mysten/sui/keypairs/ed25519';\nimport type { Transaction, TransactionArgument } from '@mysten/sui/transactions';\nimport type { ISuiWalletProvider, SuiTransaction, SuiExecutionResult, SuiPaginatedCoins } from '@sodax/types';\nimport {\n signTransaction,\n type SuiWalletFeatures,\n type WalletAccount,\n type WalletWithFeatures,\n} from '@mysten/wallet-standard';\n\n// Private key wallet config\nexport type PrivateKeySuiWalletConfig = {\n rpcUrl: string;\n mnemonics: string;\n};\n\n// Browser extension wallet config\nexport type BrowserExtensionSuiWalletConfig = {\n client: SuiClient;\n wallet: WalletWithFeatures<Partial<SuiWalletFeatures>>;\n account: WalletAccount;\n};\n\n// Unified config type\nexport type SuiWalletConfig = PrivateKeySuiWalletConfig | BrowserExtensionSuiWalletConfig;\n\n// Type guards\nfunction isPrivateKeySuiWalletConfig(walletConfig: SuiWalletConfig): walletConfig is PrivateKeySuiWalletConfig {\n return 'mnemonics' in walletConfig;\n}\n\nfunction isBrowserExtensionSuiWalletConfig(\n walletConfig: SuiWalletConfig,\n): walletConfig is BrowserExtensionSuiWalletConfig {\n return 'wallet' in walletConfig && 'account' in walletConfig;\n}\n\nexport type PkSuiWallet = {\n keyPair: Ed25519Keypair;\n};\n\nexport type BrowserExtensionSuiWallet = {\n wallet: WalletWithFeatures<Partial<SuiWalletFeatures>>;\n account: WalletAccount;\n};\n\nexport type SuiWallet = PkSuiWallet | BrowserExtensionSuiWallet;\n\nexport function isPkSuiWallet(wallet: SuiWallet): wallet is PkSuiWallet {\n return 'keyPair' in wallet;\n}\n\nexport function isBrowserExtensionSuiWallet(wallet: SuiWallet): wallet is BrowserExtensionSuiWallet {\n return 'wallet' in wallet && 'account' in wallet;\n}\n\nexport function isSuiWallet(wallet: SuiWallet): wallet is SuiWallet {\n return isPkSuiWallet(wallet) || isBrowserExtensionSuiWallet(wallet);\n}\n\nexport class SuiWalletProvider implements ISuiWalletProvider {\n private readonly client: SuiClient;\n private readonly wallet: SuiWallet;\n\n constructor(walletConfig: SuiWalletConfig) {\n if (isPrivateKeySuiWalletConfig(walletConfig)) {\n this.client = new SuiClient({ url: walletConfig.rpcUrl });\n this.wallet = {\n keyPair: Ed25519Keypair.deriveKeypair(walletConfig.mnemonics),\n };\n } else if (isBrowserExtensionSuiWalletConfig(walletConfig)) {\n this.client = walletConfig.client;\n this.wallet = {\n wallet: walletConfig.wallet,\n account: walletConfig.account,\n };\n } else {\n throw new Error('Invalid wallet configuration');\n }\n }\n\n async signAndExecuteTxn(txn: SuiTransaction): Promise<string> {\n if (isPkSuiWallet(this.wallet)) {\n const res = await this.client.signAndExecuteTransaction({\n transaction: txn as unknown as Transaction,\n signer: this.wallet.keyPair,\n });\n\n return res.digest;\n }\n if (isBrowserExtensionSuiWallet(this.wallet)) {\n const browserWallet = this.wallet.wallet;\n const browserAccount = this.wallet.account;\n\n if (!browserAccount || browserAccount.chains.length === 0) {\n throw new Error('No chains available for wallet account');\n }\n const chain = browserAccount.chains[0];\n if (!chain) {\n throw new Error('No chain available for wallet account');\n }\n const { bytes, signature } = await signTransaction(browserWallet, {\n transaction: txn,\n account: browserAccount,\n chain,\n });\n\n const res = await this.client.executeTransactionBlock({\n transactionBlock: bytes,\n signature,\n options: {\n showRawEffects: true,\n },\n });\n\n return res.digest;\n }\n\n throw new Error('Invalid wallet configuration');\n }\n\n async viewContract(\n tx: Transaction,\n packageId: string,\n module: string,\n functionName: string,\n args: unknown[],\n typeArgs: string[] = [],\n ): Promise<SuiExecutionResult> {\n tx.moveCall({\n target: `${packageId}::${module}::${functionName}`,\n arguments: args as TransactionArgument[],\n typeArguments: typeArgs,\n });\n\n const sender = this.getSuiAddress();\n\n const txResults = await this.client.devInspectTransactionBlock({\n transactionBlock: tx,\n sender,\n });\n\n if (txResults.results && txResults.results[0] !== undefined) {\n return txResults.results[0] as SuiExecutionResult;\n }\n throw Error(`transaction didn't return any values: ${JSON.stringify(txResults, null, 2)}`);\n }\n\n async getCoins(address: string, token: string): Promise<SuiPaginatedCoins> {\n return this.client.getCoins({ owner: address, coinType: token, limit: 10 });\n }\n\n private getSuiAddress(): string {\n if (isPkSuiWallet(this.wallet)) {\n return this.wallet.keyPair.toSuiAddress();\n }\n if (isBrowserExtensionSuiWallet(this.wallet)) {\n return this.wallet.account.address;\n }\n throw new Error('Invalid wallet configuration');\n }\n\n async getWalletAddress(): Promise<string> {\n return this.getSuiAddress();\n }\n}\n","import type { IconTransactionResult, IcxCallTransaction, IIconWalletProvider } from '@sodax/types';\nimport type { IconService, Wallet as IconSdkWallet } from 'icon-sdk-js';\nimport * as IconSdkRaw from 'icon-sdk-js';\nconst IconSdk = ('default' in IconSdkRaw.default ? IconSdkRaw.default : IconSdkRaw) as typeof IconSdkRaw;\nconst { Converter, CallTransactionBuilder, Wallet } = IconSdk;\n\nexport class IconWalletProvider implements IIconWalletProvider {\n private readonly wallet: IconWallet;\n public readonly iconService: IconService;\n\n constructor(wallet: IconWalletConfig) {\n if (isPrivateKeyIconWalletConfig(wallet)) {\n this.wallet = {\n type: 'PRIVATE_KEY',\n wallet: Wallet.loadPrivateKey(wallet.privateKey.slice(2)),\n };\n this.iconService = new IconSdk.IconService(new IconSdk.IconService.HttpProvider(wallet.rpcUrl));\n } else if (isBrowserExtensionIconWalletConfig(wallet)) {\n this.wallet = {\n type: 'BROWSER_EXTENSION',\n wallet: wallet.walletAddress,\n };\n this.iconService = new IconSdk.IconService(new IconSdk.IconService.HttpProvider(wallet.rpcUrl));\n } else {\n throw new Error('Invalid Icon wallet config');\n }\n }\n\n public async sendTransaction(tx: IcxCallTransaction): Promise<Hash> {\n const builtTx = new CallTransactionBuilder()\n .from(tx.from)\n .to(tx.to)\n .stepLimit(Converter.toHex(3000000))\n .nid(tx.nid)\n .version(tx.version ?? '0x3')\n .timestamp(Converter.toHex(tx.timestamp ?? new Date().getTime() * 1000))\n .value(tx.value)\n .method(tx.method)\n .params(tx.params)\n .build();\n\n if (!isIconPkWallet(this.wallet)) {\n // if wallet starts with 0x, it's a private key\n const result = await requestJsonRpc(builtTx);\n\n return result.result satisfies string as Hash;\n }\n const signedTx = new IconSdk.IconService.SignedTransaction(builtTx, this.wallet.wallet);\n const result = await this.iconService.sendTransaction(signedTx).execute();\n\n return result satisfies string as Hash;\n }\n\n public async waitForTransactionReceipt(txHash: Hash): Promise<IconTransactionResult> {\n const result = await this.iconService.waitTransactionResult(txHash).execute();\n\n return {\n ...result,\n status: +result.status,\n cumulativeStepUsed: BigNumberToBigInt(result.cumulativeStepUsed),\n stepUsed: BigNumberToBigInt(result.stepUsed),\n stepPrice: BigNumberToBigInt(result.stepPrice),\n } satisfies IconTransactionResult;\n }\n\n async getWalletAddress(): Promise<IconEoaAddress> {\n if (!this.wallet.wallet) {\n throw new Error('Wallet not initialized');\n }\n return isIconPkWallet(this.wallet) ? (this.wallet.wallet.getAddress() as IconEoaAddress) : this.wallet.wallet;\n }\n}\n\n/**\n * Icon Types\n */\n\nexport type IconJsonRpcVersion = '2.0';\n\nexport type Hex = `0x${string}`;\nexport type Hash = `0x${string}`;\nexport type IconAddress = `hx${string}` | `cx${string}`;\nexport type IconEoaAddress = `hx${string}`;\n\nexport type PrivateKeyIconWalletConfig = {\n privateKey: `0x${string}`;\n rpcUrl: `http${string}`;\n};\n\nexport type BrowserExtensionIconWalletConfig = {\n walletAddress?: IconEoaAddress;\n rpcUrl: `http${string}`;\n};\n\nexport type IconWalletConfig = PrivateKeyIconWalletConfig | BrowserExtensionIconWalletConfig;\n\nexport type IconPkWallet = {\n type: 'PRIVATE_KEY';\n wallet: IconSdkWallet;\n};\n\nexport type IconBrowserExtensionWallet = {\n type: 'BROWSER_EXTENSION';\n wallet?: IconEoaAddress;\n};\n\nexport type IconWallet = IconPkWallet | IconBrowserExtensionWallet;\n\nexport type HanaWalletRequestEvent =\n | 'REQUEST_HAS_ACCOUNT'\n | 'REQUEST_HAS_ADDRESS'\n | 'REQUEST_ADDRESS'\n | 'REQUEST_JSON'\n | 'REQUEST_SIGNING'\n | 'REQUEST_JSON-RPC';\nexport type HanaWalletResponseEvent =\n | 'RESPONSE_HAS_ACCOUNT'\n | 'RESPONSE_HAS_ADDRESS'\n | 'RESPONSE_ADDRESS'\n | 'RESPONSE_JSON-RPC'\n | 'RESPONSE_SIGNING'\n | 'CANCEL_SIGNING'\n | 'CANCEL_JSON-RPC';\n\nexport type ResponseAddressType = {\n type: 'RESPONSE_ADDRESS';\n payload: IconAddress;\n};\n\nexport type ResponseSigningType = {\n type: 'RESPONSE_SIGNING';\n payload: string;\n};\n\nexport type RelayRequestDetail = {\n type: HanaWalletRequestEvent;\n payload?: {\n jsonrpc: IconJsonRpcVersion;\n method: string;\n params: unknown;\n id: number | undefined;\n };\n};\n\nexport type RelayRequestSigning = {\n type: 'REQUEST_SIGNING';\n payload: {\n from: IconAddress;\n hash: string;\n };\n};\n\nexport type JsonRpcPayloadResponse = {\n id: number;\n result: string; // txHash\n};\n\ninterface RelayResponseEventDetail {\n type: HanaWalletResponseEvent;\n payload: unknown;\n}\n\n/**\n * Icon Type Guards\n */\n\nexport function isIconPkWallet(wallet: IconWallet): wallet is IconPkWallet {\n return wallet.type === 'PRIVATE_KEY';\n}\n\nexport function isIconBrowserExtensionWallet(wallet: IconWallet): wallet is IconBrowserExtensionWallet {\n return wallet.type === 'BROWSER_EXTENSION';\n}\n\nexport function isPrivateKeyIconWalletConfig(config: IconWalletConfig): config is PrivateKeyIconWalletConfig {\n return 'privateKey' in config && config.privateKey.startsWith('0x');\n}\n\nexport function isBrowserExtensionIconWalletConfig(\n config: IconWalletConfig,\n): config is BrowserExtensionIconWalletConfig {\n return 'walletAddress' in config && (isIconEoaAddress(config.walletAddress) || !config.walletAddress);\n}\n\nexport function isIconAddress(value: unknown): value is IconAddress {\n return typeof value === 'string' && /^hx[a-f0-9]{40}$|^cx[a-f0-9]{40}$/.test(value);\n}\n\nexport function isIconEoaAddress(value: unknown): value is IconEoaAddress {\n return typeof value === 'string' && /^hx[a-f0-9]{40}$/.test(value);\n}\n\nexport function isResponseAddressType(value: unknown): value is ResponseAddressType {\n return (\n typeof value === 'object' &&\n value !== null &&\n 'type' in value &&\n 'payload' in value &&\n value.type === 'RESPONSE_ADDRESS' &&\n isIconAddress(value.payload)\n );\n}\n\nexport function isResponseSigningType(value: unknown): value is ResponseSigningType {\n return (\n typeof value === 'object' &&\n value !== null &&\n 'type' in value &&\n 'payload' in value &&\n value.type === 'RESPONSE_SIGNING' &&\n typeof value.payload === 'string'\n );\n}\n\nexport function isJsonRpcPayloadResponse(value: unknown): value is JsonRpcPayloadResponse {\n return (\n typeof value === 'object' &&\n value !== null &&\n 'id' in value &&\n 'result' in value &&\n typeof value.result === 'string'\n );\n}\n\n/**\n * Methods to interact with Icon Browser Extension Wallet (e.g. Hana Wallet)\n */\n\nexport function requestAddress(): Promise<IconAddress> {\n return new Promise(resolve => {\n const eventHandler = (event: Event) => {\n const customEvent = event as CustomEvent<RelayResponseEventDetail>;\n const response = customEvent.detail;\n if (isResponseAddressType(response)) {\n window.removeEventListener('ICONEX_RELAY_RESPONSE', eventHandler as EventListener, false);\n resolve(response.payload);\n }\n };\n\n window.removeEventListener('ICONEX_RELAY_RESPONSE', eventHandler, false);\n window.addEventListener('ICONEX_RELAY_RESPONSE', eventHandler, false);\n window.dispatchEvent(\n new CustomEvent<RelayRequestDetail>('ICONEX_RELAY_REQUEST', {\n detail: {\n type: 'REQUEST_ADDRESS',\n },\n }),\n );\n });\n}\n\nexport function requestSigning(from: IconAddress, hash: string): Promise<string> {\n return new Promise((resolve, reject) => {\n const signRequest = new CustomEvent<RelayRequestSigning>('ICONEX_RELAY_REQUEST', {\n detail: {\n type: 'REQUEST_SIGNING',\n payload: {\n from,\n hash,\n },\n },\n });\n\n const eventHandler = (event: Event) => {\n const customEvent = event as CustomEvent<RelayResponseEventDetail>;\n const response = customEvent.detail;\n if (isResponseSigningType(response)) {\n window.removeEventListener('ICONEX_RELAY_RESPONSE', eventHandler as EventListener, false);\n\n // resolve signature\n resolve(response.payload);\n } else if (response.type === 'CANCEL_SIGNING') {\n reject(new Error('CANCEL_SIGNING'));\n }\n };\n\n window.removeEventListener('ICONEX_RELAY_RESPONSE', eventHandler as EventListener, false);\n window.addEventListener('ICONEX_RELAY_RESPONSE', eventHandler as EventListener, false);\n window.dispatchEvent(signRequest);\n });\n}\n\nexport function requestJsonRpc(rawTransaction: unknown, id = 99999): Promise<JsonRpcPayloadResponse> {\n return new Promise((resolve, reject) => {\n const eventHandler = (event: Event) => {\n const customEvent = event as CustomEvent<RelayResponseEventDetail>;\n const { type, payload } = customEvent.detail;\n if (type === 'RESPONSE_JSON-RPC') {\n window.removeEventListener('ICONEX_RELAY_RESPONSE', eventHandler as EventListener, false);\n\n if (isJsonRpcPayloadResponse(payload)) {\n resolve(payload);\n } else {\n reject(new Error('Invalid payload response type (expected JsonRpcPayloadResponse)'));\n }\n } else if (type === 'CANCEL_JSON-RPC') {\n window.removeEventListener('ICONEX_RELAY_RESPONSE', eventHandler as EventListener, false);\n reject(new Error('CANCEL_JSON-RPC'));\n }\n };\n\n window.removeEventListener('ICONEX_RELAY_RESPONSE', eventHandler as EventListener, false);\n window.addEventListener('ICONEX_RELAY_RESPONSE', eventHandler as EventListener, false);\n window.dispatchEvent(\n new CustomEvent<RelayRequestDetail>('ICONEX_RELAY_REQUEST', {\n detail: {\n type: 'REQUEST_JSON-RPC',\n payload: {\n jsonrpc: '2.0',\n method: 'icx_sendTransaction',\n params: rawTransaction,\n id: id,\n },\n },\n }),\n );\n });\n}\n\n/**\n * Icon Utils\n */\n\nexport function BigNumberToBigInt(bigNumber: BigNumber): bigint {\n if (!bigNumber.isInteger()) {\n throw new Error('Cannot convert decimal number to BigInt');\n }\n return BigInt(bigNumber.toFixed(0));\n}\n","import type { Network } from '@injectivelabs/networks';\nimport {\n MsgExecuteContract,\n MsgExecuteContractCompat,\n createTransaction,\n PrivateKey,\n getInjectiveSignerAddress,\n type TxResponse,\n} from '@injectivelabs/sdk-ts';\nimport type { Hex, JsonObject, InjectiveCoin, IInjectiveWalletProvider, InjectiveEoaAddress } from '@sodax/types';\nimport { InjectiveExecuteResponse, type InjectiveRawTransaction } from '@sodax/types';\nimport type { MsgBroadcaster } from '@injectivelabs/wallet-core';\nimport { MsgBroadcasterWithPk } from '@injectivelabs/sdk-ts';\nimport type { ChainId, EvmChainId } from '@injectivelabs/ts-types';\n\n/**\n * Injective Wallet Configuration Types\n */\n\nexport type BrowserExtensionInjectiveWalletConfig = {\n msgBroadcaster: MsgBroadcaster;\n};\n\nexport type SecretInjectiveWalletConfig = {\n secret:\n | {\n privateKey: string;\n }\n | {\n mnemonics: string;\n };\n chainId: ChainId;\n network: Network;\n evmOptions?: {\n evmChainId: EvmChainId;\n rpcUrl: `http${string}`;\n };\n};\n\nexport type InjectiveWalletConfig = BrowserExtensionInjectiveWalletConfig | SecretInjectiveWalletConfig;\n\n/**\n * Injective Type Guards\n */\n\nexport function isBrowserExtensionInjectiveWalletConfig(\n config: InjectiveWalletConfig,\n): config is BrowserExtensionInjectiveWalletConfig {\n return 'msgBroadcaster' in config;\n}\n\nexport function isSecretInjectiveWalletConfig(config: InjectiveWalletConfig): config is SecretInjectiveWalletConfig {\n return (\n 'secret' in config &&\n typeof config.secret === 'object' &&\n (('privateKey' in config.secret && typeof config.secret.privateKey === 'string') ||\n ('mnemonics' in config.secret && typeof config.secret.mnemonics === 'string')) &&\n 'network' in config &&\n 'chainId' in config\n );\n}\n\nexport type InjectiveWallet = {\n msgBroadcaster: MsgBroadcaster | MsgBroadcasterWithPk;\n};\n\nexport class InjectiveWalletProvider implements IInjectiveWalletProvider {\n public wallet: InjectiveWallet;\n\n constructor(config: InjectiveWalletConfig) {\n if (isBrowserExtensionInjectiveWalletConfig(config)) {\n this.wallet = {\n msgBroadcaster: config.msgBroadcaster,\n };\n } else if (isSecretInjectiveWalletConfig(config)) {\n let privateKey: PrivateKey;\n if ('privateKey' in config.secret) {\n privateKey = PrivateKey.fromPrivateKey(config.secret.privateKey);\n } else if ('mnemonics' in config.secret) {\n privateKey = PrivateKey.fromMnemonic(config.secret.mnemonics);\n } else {\n throw new Error('Invalid Secret Injective wallet config');\n }\n this.wallet = {\n msgBroadcaster: new MsgBroadcasterWithPk({ privateKey, network: config.network }),\n };\n } else {\n throw new Error('Invalid Injective wallet config');\n }\n }\n\n async getRawTransaction(\n chainId: string,\n _: string,\n senderAddress: string,\n contractAddress: string,\n msg: JsonObject,\n memo?: string,\n ): Promise<InjectiveRawTransaction> {\n const msgExec = MsgExecuteContract.fromJSON({\n contractAddress: contractAddress,\n sender: senderAddress,\n msg: msg as object,\n funds: [],\n });\n const { txRaw } = createTransaction({\n message: msgExec,\n memo: memo || '',\n pubKey: await this.getWalletPubKey(),\n sequence: 0,\n accountNumber: 0,\n chainId: chainId,\n });\n\n const rawTx = {\n from: senderAddress as Hex,\n to: contractAddress as Hex,\n signedDoc: {\n bodyBytes: txRaw.bodyBytes,\n chainId: chainId,\n accountNumber: BigInt(0),\n authInfoBytes: txRaw.authInfoBytes,\n },\n };\n return rawTx;\n }\n\n // return wallet address as bech32\n async getWalletAddress(): Promise<InjectiveEoaAddress> {\n if (this.wallet.msgBroadcaster instanceof MsgBroadcasterWithPk) {\n return getInjectiveSignerAddress(this.wallet.msgBroadcaster.privateKey.toAddress().toBech32());\n }\n const addresses = await this.wallet.msgBroadcaster.walletStrategy.getAddresses();\n const injectiveAddresses = addresses.map(getInjectiveSignerAddress);\n if (injectiveAddresses.length <= 0 || injectiveAddresses[0] === undefined) {\n return Promise.reject(new Error('Wallet address not found'));\n }\n\n return injectiveAddresses[0];\n }\n\n async getWalletPubKey(): Promise<string> {\n if (this.wallet.msgBroadcaster instanceof MsgBroadcasterWithPk) {\n return this.wallet.msgBroadcaster.privateKey.toPublicKey().toString();\n }\n const pubKey = await this.wallet.msgBroadcaster.walletStrategy.getPubKey();\n if (pubKey === undefined) {\n return Promise.reject(new Error('Wallet public key not found'));\n }\n return pubKey;\n }\n\n async execute(\n senderAddress: string,\n contractAddress: string,\n msg: JsonObject,\n funds?: InjectiveCoin[],\n ): Promise<InjectiveExecuteResponse> {\n const msgExec = MsgExecuteContractCompat.fromJSON({\n contractAddress: contractAddress,\n sender: senderAddress,\n msg: msg as object,\n funds: funds || [],\n });\n\n let txResult: TxResponse;\n\n if (this.wallet.msgBroadcaster instanceof MsgBroadcasterWithPk) {\n txResult = await this.wallet.msgBroadcaster.broadcast({\n msgs: msgExec,\n });\n } else {\n txResult = await this.wallet.msgBroadcaster.broadcastWithFeeDelegation({\n msgs: msgExec,\n injectiveAddress: await this.getWalletAddress(),\n });\n }\n\n return InjectiveExecuteResponse.fromTxResponse(txResult);\n }\n}\n","import { getAssociatedTokenAddress } from '@solana/spl-token';\nimport {\n type Commitment,\n Connection,\n Keypair,\n PublicKey,\n type RpcResponseAndContext,\n type TokenAmount,\n TransactionInstruction,\n TransactionMessage,\n VersionedTransaction,\n} from '@solana/web3.js';\nimport type {\n ISolanaWalletProvider,\n SolanaAccountMeta,\n SolanaBase58PublicKey,\n SolanaRpcResponseAndContext,\n SolanaSerializedTransaction,\n SolanaSignatureResult,\n SolanaRawTransactionInstruction,\n TransactionSignature,\n} from '@sodax/types';\nimport type { SignerWalletAdapterProps } from '@solana/wallet-adapter-base';\n\n// Wallet adapter pattern interface\ninterface WalletContextState {\n publicKey: PublicKey | null;\n signTransaction: SignerWalletAdapterProps['signTransaction'] | undefined;\n}\n\n// Direct keypair pattern configs\nexport type PrivateKeySolanaWalletConfig = {\n privateKey: Uint8Array;\n endpoint: string;\n};\n\n// Wallet adapter pattern config\nexport type BrowserExtensionSolanaWalletConfig = {\n wallet: WalletContextState;\n connection: Connection;\n};\n\n// Unified config type\nexport type SolanaWalletConfig = PrivateKeySolanaWalletConfig | BrowserExtensionSolanaWalletConfig;\n\n// Type guards\nfunction isPrivateKeySolanaWalletConfig(\n walletConfig: SolanaWalletConfig,\n): walletConfig is PrivateKeySolanaWalletConfig {\n return 'privateKey' in walletConfig;\n}\n\nfunction isBrowserExtensionSolanaWalletConfig(\n walletConfig: SolanaWalletConfig,\n): walletConfig is BrowserExtensionSolanaWalletConfig {\n return 'wallet' in walletConfig && !(walletConfig.wallet instanceof Keypair);\n}\n\nexport class SolanaWalletProvider implements ISolanaWalletProvider {\n private readonly wallet: Keypair | WalletContextState;\n public readonly connection: Connection;\n private readonly isAdapterMode: boolean;\n\n constructor(walletConfig: SolanaWalletConfig) {\n if (isPrivateKeySolanaWalletConfig(walletConfig)) {\n this.wallet = Keypair.fromSecretKey(walletConfig.privateKey);\n this.connection = new Connection(walletConfig.endpoint, 'confirmed');\n this.isAdapterMode = false;\n } else if (isBrowserExtensionSolanaWalletConfig(walletConfig)) {\n this.wallet = walletConfig.wallet;\n this.connection = walletConfig.connection;\n this.isAdapterMode = true;\n } else {\n throw new Error('Invalid wallet configuration');\n }\n }\n\n public async waitForConfirmation(\n signature: string,\n commitment: Commitment = 'finalized',\n ): Promise<SolanaRpcResponseAndContext<SolanaSignatureResult>> {\n const latestBlockhash = await this.connection.getLatestBlockhash();\n const response = await this.connection.confirmTransaction(\n {\n signature,\n blockhash: latestBlockhash.blockhash,\n lastValidBlockHeight: latestBlockhash.lastValidBlockHeight,\n },\n commitment,\n );\n\n return response;\n }\n\n /**\n * Send a raw transaction to the Solana network.\n * @param rawTransaction - The raw transaction to send.\n * @returns The transaction signature.\n */\n public async sendTransaction(rawTransaction: Uint8Array | Array<number>): Promise<TransactionSignature> {\n return this.connection.sendRawTransaction(rawTransaction);\n }\n\n /**\n * Send a raw transaction to the Solana network and wait for confirmation.\n * @param rawTransaction - The raw transaction to send.\n * @param commitment - The commitment level to use. Defaults to 'finalized'.\n * @returns The transaction signature.\n */\n public async sendTransactionWithConfirmation(\n rawTransaction: Uint8Array | Array<number>,\n commitment: Commitment = 'finalized',\n ): Promise<TransactionSignature> {\n const txHash = await this.connection.sendRawTransaction(rawTransaction);\n await this.waitForConfirmation(txHash, commitment);\n return txHash;\n }\n\n /**\n * Build a v0 versioned transaction.\n * @param instructions - The instructions to include in the transaction.\n * @returns The v0 transaction.\n */\n async buildV0Txn(rawInstructions: SolanaRawTransactionInstruction[]): Promise<SolanaSerializedTransaction> {\n if (this.isAdapterMode) {\n return this.buildV0TxnWithAdapter(rawInstructions);\n }\n return this.buildV0TxnWithKeypair(rawInstructions);\n }\n\n private async buildV0TxnWithAdapter(\n rawInstructions: SolanaRawTransactionInstruction[],\n ): Promise<SolanaSerializedTransaction> {\n const adapterWallet = this.wallet as WalletContextState;\n\n if (!adapterWallet.publicKey) {\n throw new Error('Wallet public key is not initialized');\n }\n\n if (!adapterWallet.signTransaction) {\n throw new Error('Wallet signTransaction is not initialized');\n }\n\n const instructions = this.buildTransactionInstruction(rawInstructions);\n const latestBlockhash = await this.connection.getLatestBlockhash();\n const messageV0 = new TransactionMessage({\n payerKey: adapterWallet.publicKey,\n recentBlockhash: latestBlockhash.blockhash,\n instructions,\n }).compileToV0Message();\n\n const tx = await adapterWallet.signTransaction(new VersionedTransaction(messageV0));\n return tx.serialize();\n }\n\n private async buildV0TxnWithKeypair(\n rawInstructions: SolanaRawTransactionInstruction[],\n ): Promise<SolanaSerializedTransaction> {\n const keypairWallet = this.wallet as Keypair;\n const instructions = this.buildTransactionInstruction(rawInstructions);\n\n const messageV0 = new TransactionMessage({\n payerKey: keypairWallet.publicKey,\n recentBlockhash: (await this.connection.getLatestBlockhash()).blockhash,\n instructions,\n }).compileToV0Message();\n\n const tx = new VersionedTransaction(messageV0);\n tx.sign([keypairWallet]);\n\n return tx.serialize();\n }\n\n public getWalletBase58PublicKey(): SolanaBase58PublicKey {\n if (!this.wallet.publicKey) {\n throw new Error('Wallet public key is not initialized');\n }\n return this.wallet.publicKey.toBase58();\n }\n\n public async getWalletAddress(): Promise<string> {\n return this.getWalletBase58PublicKey();\n }\n\n public async getAssociatedTokenAddress(mint: SolanaBase58PublicKey): Promise<SolanaBase58PublicKey> {\n if (!this.wallet.publicKey) {\n throw new Error('Wallet public key is not initialized');\n }\n\n return (await getAssociatedTokenAddress(new PublicKey(mint), this.wallet.publicKey, true)).toBase58();\n }\n\n public async getBalance(publicKey: SolanaBase58PublicKey): Promise<number> {\n return await this.connection.getBalance(new PublicKey(publicKey));\n }\n\n public async getTokenAccountBalance(publicKey: SolanaBase58PublicKey): Promise<RpcResponseAndContext<TokenAmount>> {\n return this.connection.getTokenAccountBalance(new PublicKey(publicKey));\n }\n\n private buildTransactionInstruction(rawInstructions: SolanaRawTransactionInstruction[]): TransactionInstruction[] {\n return rawInstructions.map(\n rawInstruction =>\n new TransactionInstruction({\n keys: rawInstruction.keys.map((key: SolanaAccountMeta) => ({\n pubkey: new PublicKey(key.pubkey),\n isSigner: key.isSigner,\n isWritable: key.isWritable,\n })),\n programId: new PublicKey(rawInstruction.programId),\n data: Buffer.from(rawInstruction.data),\n }),\n );\n }\n}\n","import type { Hex, IStellarWalletProvider, StellarRawTransactionReceipt, XDR } from '@sodax/types';\nimport { Networks, Horizon, Transaction, Keypair } from '@stellar/stellar-sdk';\n\ninterface StellarWalletsKit {\n getAddress(): Promise<{ address: string }>;\n signTransaction(tx: XDR, options: { networkPassphrase: string }): Promise<{ signedTxXdr: XDR }>;\n}\n\nexport type StellarNetwork = 'TESTNET' | 'PUBLIC';\n\nconst STELLAR_HORIZON_URLS: { [key in StellarNetwork]: string } = {\n TESTNET: 'https://horizon-testnet.stellar.org',\n PUBLIC: 'https://horizon.stellar.org',\n};\n\nconst STELLAR_NETWORK_PASSPHRASES: { [key in StellarNetwork]: string } = {\n TESTNET: Networks.TESTNET,\n PUBLIC: Networks.PUBLIC,\n};\n\nconst TX_POLL_INTERVAL = 2000; // 2 seconds\nconst TX_POLL_TIMEOUT = 60000; // 60 seconds\n\nconst STELLAR_ERROR_CODES = {\n INVALID_CONFIG: 'INVALID_CONFIG',\n SIGN_TX_ERROR: 'SIGN_TX_ERROR',\n TX_RECEIPT_TIMEOUT: 'TX_RECEIPT_TIMEOUT',\n SEND_TX_ERROR: 'SEND_TX_ERROR',\n INVALID_NETWORK: 'INVALID_NETWORK',\n INVALID_PRIVATE_KEY: 'INVALID_PRIVATE_KEY',\n} as const;\n\nexport type StellarAddress = string; // Stellar addresses are in format: G...\n\nexport type PrivateKeyStellarWalletConfig = {\n type: 'PRIVATE_KEY';\n privateKey: Hex;\n network: StellarNetwork;\n rpcUrl?: string;\n};\n\nexport type BrowserExtensionStellarWalletConfig = {\n type: 'BROWSER_EXTENSION';\n walletsKit: StellarWalletsKit;\n network: StellarNetwork;\n rpcUrl?: string;\n};\n\nexport type StellarWalletConfig = PrivateKeyStellarWalletConfig | BrowserExtensionStellarWalletConfig;\n\nexport type StellarPkWallet = {\n type: 'PRIVATE_KEY';\n keypair: Keypair;\n};\n\nexport type StellarBrowserExtensionWallet = {\n type: 'BROWSER_EXTENSION';\n walletsKit: StellarWalletsKit;\n};\n\nexport type StellarWallet = StellarPkWallet | StellarBrowserExtensionWallet;\n\nexport class StellarWalletError extends Error {\n constructor(\n message: string,\n public readonly code: keyof typeof STELLAR_ERROR_CODES,\n ) {\n super(message);\n this.name = 'StellarWalletError';\n }\n}\n\nexport function isPrivateKeyStellarWalletConfig(config: StellarWalletConfig): config is PrivateKeyStellarWalletConfig {\n return config.type === 'PRIVATE_KEY';\n}\n\nexport function isBrowserExtensionStellarWalletConfig(\n config: StellarWalletConfig,\n): config is BrowserExtensionStellarWalletConfig {\n return config.type === 'BROWSER_EXTENSION';\n}\n\nexport function isStellarPkWallet(wallet: StellarWallet): wallet is StellarPkWallet {\n return wallet.type === 'PRIVATE_KEY';\n}\n\nexport function isStellarBrowserExtensionWallet(wallet: StellarWallet): wallet is StellarBrowserExtensionWallet {\n return wallet.type === 'BROWSER_EXTENSION';\n}\n\nexport function isValidStellarNetwork(network: string): network is StellarNetwork {\n return ['TESTNET', 'PUBLIC'].includes(network);\n}\n\nexport function isValidStellarPrivateKey(privateKey: string): boolean {\n try {\n // Remove '0x' prefix if present\n const key = privateKey.startsWith('0x') ? privateKey.slice(2) : privateKey;\n Keypair.fromSecret(key);\n return true;\n } catch {\n return false;\n }\n}\n\nexport class StellarWalletProvider implements IStellarWalletProvider {\n private readonly wallet: StellarWallet;\n private readonly server: Horizon.Server;\n private readonly networkPassphrase: string;\n\n constructor(config: StellarWalletConfig) {\n if (!isValidStellarNetwork(config.network)) {\n throw new StellarWalletError(`Invalid network: ${config.network}`, 'INVALID_NETWORK');\n }\n\n if (isPrivateKeyStellarWalletConfig(config)) {\n if (!isValidStellarPrivateKey(config.privateKey)) {\n throw new StellarWalletError('Invalid private key format', 'INVALID_PRIVATE_KEY');\n }\n // Remove '0x' prefix if present\n const privateKey = config.privateKey.startsWith('0x') ? config.privateKey.slice(2) : config.privateKey;\n this.wallet = {\n type: 'PRIVATE_KEY',\n keypair: Keypair.fromSecret(privateKey),\n };\n this.server = new Horizon.Server(config.rpcUrl ?? STELLAR_HORIZON_URLS[config.network]);\n this.networkPassphrase = STELLAR_NETWORK_PASSPHRASES[config.network];\n return;\n }\n\n if (isBrowserExtensionStellarWalletConfig(config)) {\n this.wallet = {\n type: 'BROWSER_EXTENSION',\n walletsKit: config.walletsKit,\n };\n this.server = new Horizon.Server(config.rpcUrl ?? STELLAR_HORIZON_URLS[config.network]);\n this.networkPassphrase = STELLAR_NETWORK_PASSPHRASES[config.network];\n return;\n }\n\n throw new StellarWalletError('Invalid wallet configuration', 'INVALID_CONFIG');\n }\n\n public async getWalletAddress(): Promise<string> {\n try {\n if (isStellarPkWallet(this.wallet)) {\n return this.wallet.keypair.publicKey();\n }\n\n const { address } = await this.wallet.walletsKit.getAddress();\n return address;\n } catch (error) {\n throw new StellarWalletError(\n error instanceof Error ? error.message : 'Failed to get wallet address',\n 'INVALID_CONFIG',\n );\n }\n }\n\n public async signTransaction(tx: XDR): Promise<XDR> {\n try {\n if (isStellarPkWallet(this.wallet)) {\n // Parse the XDR transaction\n const transaction = new Transaction(tx, this.networkPassphrase);\n transaction.sign(this.wallet.keypair);\n return transaction.toXDR();\n }\n\n const { signedTxXdr } = await this.wallet.walletsKit.signTransaction(tx, {\n networkPassphrase: this.networkPassphrase,\n });\n return signedTxXdr;\n } catch (error) {\n throw new StellarWalletError(\n error instanceof Error ? error.message : 'Failed to sign transaction',\n 'SIGN_TX_ERROR',\n );\n }\n }\n\n public async waitForTransactionReceipt(txHash: string): Promise<StellarRawTransactionReceipt> {\n const startTime = Date.now();\n while (Date.now() - startTime < TX_POLL_TIMEOUT) {\n try {\n const tx = await this.server.transactions().transaction(txHash).call();\n\n return {\n ...tx,\n _links: {\n ...tx._links,\n transaction: tx._links.self,\n },\n } as unknown as StellarRawTransactionReceipt;\n } catch (error) {\n // Wait for the next poll interval\n await new Promise(resolve => setTimeout(resolve, TX_POLL_INTERVAL));\n }\n }\n throw new StellarWalletError(\n `Transaction receipt not found for hash ${txHash} after ${TX_POLL_TIMEOUT / 1000} seconds.`,\n 'TX_RECEIPT_TIMEOUT',\n );\n }\n}\n"]}
package/dist/index.d.cts CHANGED
@@ -1,11 +1,14 @@
1
- import { ChainId, IEvmWalletProvider, EvmRawTransaction, EvmRawTransactionReceipt, ISuiWalletProvider, SuiTransaction, SuiExecutionResult, SuiPaginatedCoins, IIconWalletProvider, IcxCallTransaction, IconTransactionResult, InjectiveEoaAddress, IInjectiveWalletProvider, JsonObject, InjectiveRawTransaction, InjectiveCoin, InjectiveExecuteResponse, ISolanaWalletProvider, SolanaRpcResponseAndContext, SolanaSignatureResult, TransactionSignature, SolanaRawTransactionInstruction, SolanaSerializedTransaction, SolanaBase58PublicKey, Hex as Hex$1, XDR, IStellarWalletProvider, StellarRawTransactionReceipt } from '@sodax/types';
1
+ import { ChainId, IEvmWalletProvider, EvmRawTransaction, EvmRawTransactionReceipt, ISuiWalletProvider, SuiTransaction, SuiExecutionResult, SuiPaginatedCoins, IIconWalletProvider, IcxCallTransaction, IconTransactionResult, IInjectiveWalletProvider, JsonObject, InjectiveRawTransaction, InjectiveEoaAddress, InjectiveCoin, InjectiveExecuteResponse, ISolanaWalletProvider, SolanaRpcResponseAndContext, SolanaSignatureResult, TransactionSignature, SolanaRawTransactionInstruction, SolanaSerializedTransaction, SolanaBase58PublicKey, Hex as Hex$1, XDR, IStellarWalletProvider, StellarRawTransactionReceipt } from '@sodax/types';
2
2
  import { Chain, PublicClient, WalletClient, Transport, Account, Hash as Hash$1, Address } from 'viem';
3
3
  import { SuiClient } from '@mysten/sui/client';
4
4
  import { Ed25519Keypair } from '@mysten/sui/keypairs/ed25519';
5
5
  import { Transaction } from '@mysten/sui/transactions';
6
6
  import { WalletWithFeatures, SuiWalletFeatures, WalletAccount } from '@mysten/wallet-standard';
7
7
  import { IconService, Wallet } from 'icon-sdk-js';
8
+ import { Network } from '@injectivelabs/networks';
8
9
  import { MsgBroadcaster } from '@injectivelabs/wallet-core';
10
+ import { MsgBroadcasterWithPk } from '@injectivelabs/sdk-ts';
11
+ import { ChainId as ChainId$1, EvmChainId } from '@injectivelabs/ts-types';
9
12
  import { PublicKey, Connection, Commitment, RpcResponseAndContext, TokenAmount } from '@solana/web3.js';
10
13
  import { SignerWalletAdapterProps } from '@solana/wallet-adapter-base';
11
14
  import { Keypair } from '@stellar/stellar-sdk';
@@ -162,19 +165,35 @@ declare function BigNumberToBigInt(bigNumber: BigNumber): bigint;
162
165
  */
163
166
  type BrowserExtensionInjectiveWalletConfig = {
164
167
  msgBroadcaster: MsgBroadcaster;
165
- walletAddress: InjectiveEoaAddress | undefined;
166
168
  };
167
- type InjectiveWalletConfig = BrowserExtensionInjectiveWalletConfig;
169
+ type SecretInjectiveWalletConfig = {
170
+ secret: {
171
+ privateKey: string;
172
+ } | {
173
+ mnemonics: string;
174
+ };
175
+ chainId: ChainId$1;
176
+ network: Network;
177
+ evmOptions?: {
178
+ evmChainId: EvmChainId;
179
+ rpcUrl: `http${string}`;
180
+ };
181
+ };
182
+ type InjectiveWalletConfig = BrowserExtensionInjectiveWalletConfig | SecretInjectiveWalletConfig;
168
183
  /**
169
184
  * Injective Type Guards
170
185
  */
171
186
  declare function isBrowserExtensionInjectiveWalletConfig(config: InjectiveWalletConfig): config is BrowserExtensionInjectiveWalletConfig;
187
+ declare function isSecretInjectiveWalletConfig(config: InjectiveWalletConfig): config is SecretInjectiveWalletConfig;
188
+ type InjectiveWallet = {
189
+ msgBroadcaster: MsgBroadcaster | MsgBroadcasterWithPk;
190
+ };
172
191
  declare class InjectiveWalletProvider implements IInjectiveWalletProvider {
173
- private msgBroadcaster;
174
- walletAddress: InjectiveEoaAddress | undefined;
192
+ wallet: InjectiveWallet;
175
193
  constructor(config: InjectiveWalletConfig);
176
194
  getRawTransaction(chainId: string, _: string, senderAddress: string, contractAddress: string, msg: JsonObject, memo?: string): Promise<InjectiveRawTransaction>;
177
195
  getWalletAddress(): Promise<InjectiveEoaAddress>;
196
+ getWalletPubKey(): Promise<string>;
178
197
  execute(senderAddress: string, contractAddress: string, msg: JsonObject, funds?: InjectiveCoin[]): Promise<InjectiveExecuteResponse>;
179
198
  }
180
199
 
@@ -288,4 +307,4 @@ declare class StellarWalletProvider implements IStellarWalletProvider {
288
307
  waitForTransactionReceipt(txHash: string): Promise<StellarRawTransactionReceipt>;
289
308
  }
290
309
 
291
- export { BigNumberToBigInt, type BrowserExtensionEvmWalletConfig, type BrowserExtensionIconWalletConfig, type BrowserExtensionInjectiveWalletConfig, type BrowserExtensionSolanaWalletConfig, type BrowserExtensionStellarWalletConfig, type BrowserExtensionSuiWallet, type BrowserExtensionSuiWalletConfig, type EvmWalletConfig, EvmWalletProvider, type HanaWalletRequestEvent, type HanaWalletResponseEvent, type Hash, type Hex, type IconAddress, type IconBrowserExtensionWallet, type IconEoaAddress, type IconJsonRpcVersion, type IconPkWallet, type IconWallet, type IconWalletConfig, IconWalletProvider, type InjectiveWalletConfig, InjectiveWalletProvider, type JsonRpcPayloadResponse, type PkSuiWallet, type PrivateKeyEvmWalletConfig, type PrivateKeyIconWalletConfig, type PrivateKeySolanaWalletConfig, type PrivateKeyStellarWalletConfig, type PrivateKeySuiWalletConfig, type RelayRequestDetail, type RelayRequestSigning, type ResponseAddressType, type ResponseSigningType, type SolanaWalletConfig, SolanaWalletProvider, type StellarAddress, type StellarBrowserExtensionWallet, type StellarNetwork, type StellarPkWallet, type StellarWallet, type StellarWalletConfig, StellarWalletError, StellarWalletProvider, type SuiWallet, type SuiWalletConfig, SuiWalletProvider, getEvmViemChain, isBrowserExtensionEvmWalletConfig, isBrowserExtensionIconWalletConfig, isBrowserExtensionInjectiveWalletConfig, isBrowserExtensionStellarWalletConfig, isBrowserExtensionSuiWallet, isIconAddress, isIconBrowserExtensionWallet, isIconEoaAddress, isIconPkWallet, isJsonRpcPayloadResponse, isPkSuiWallet, isPrivateKeyEvmWalletConfig, isPrivateKeyIconWalletConfig, isPrivateKeyStellarWalletConfig, isResponseAddressType, isResponseSigningType, isStellarBrowserExtensionWallet, isStellarPkWallet, isSuiWallet, isValidStellarNetwork, isValidStellarPrivateKey, requestAddress, requestJsonRpc, requestSigning };
310
+ export { BigNumberToBigInt, type BrowserExtensionEvmWalletConfig, type BrowserExtensionIconWalletConfig, type BrowserExtensionInjectiveWalletConfig, type BrowserExtensionSolanaWalletConfig, type BrowserExtensionStellarWalletConfig, type BrowserExtensionSuiWallet, type BrowserExtensionSuiWalletConfig, type EvmWalletConfig, EvmWalletProvider, type HanaWalletRequestEvent, type HanaWalletResponseEvent, type Hash, type Hex, type IconAddress, type IconBrowserExtensionWallet, type IconEoaAddress, type IconJsonRpcVersion, type IconPkWallet, type IconWallet, type IconWalletConfig, IconWalletProvider, type InjectiveWallet, type InjectiveWalletConfig, InjectiveWalletProvider, type JsonRpcPayloadResponse, type PkSuiWallet, type PrivateKeyEvmWalletConfig, type PrivateKeyIconWalletConfig, type PrivateKeySolanaWalletConfig, type PrivateKeyStellarWalletConfig, type PrivateKeySuiWalletConfig, type RelayRequestDetail, type RelayRequestSigning, type ResponseAddressType, type ResponseSigningType, type SecretInjectiveWalletConfig, type SolanaWalletConfig, SolanaWalletProvider, type StellarAddress, type StellarBrowserExtensionWallet, type StellarNetwork, type StellarPkWallet, type StellarWallet, type StellarWalletConfig, StellarWalletError, StellarWalletProvider, type SuiWallet, type SuiWalletConfig, SuiWalletProvider, getEvmViemChain, isBrowserExtensionEvmWalletConfig, isBrowserExtensionIconWalletConfig, isBrowserExtensionInjectiveWalletConfig, isBrowserExtensionStellarWalletConfig, isBrowserExtensionSuiWallet, isIconAddress, isIconBrowserExtensionWallet, isIconEoaAddress, isIconPkWallet, isJsonRpcPayloadResponse, isPkSuiWallet, isPrivateKeyEvmWalletConfig, isPrivateKeyIconWalletConfig, isPrivateKeyStellarWalletConfig, isResponseAddressType, isResponseSigningType, isSecretInjectiveWalletConfig, isStellarBrowserExtensionWallet, isStellarPkWallet, isSuiWallet, isValidStellarNetwork, isValidStellarPrivateKey, requestAddress, requestJsonRpc, requestSigning };
package/dist/index.d.ts CHANGED
@@ -1,11 +1,14 @@
1
- import { ChainId, IEvmWalletProvider, EvmRawTransaction, EvmRawTransactionReceipt, ISuiWalletProvider, SuiTransaction, SuiExecutionResult, SuiPaginatedCoins, IIconWalletProvider, IcxCallTransaction, IconTransactionResult, InjectiveEoaAddress, IInjectiveWalletProvider, JsonObject, InjectiveRawTransaction, InjectiveCoin, InjectiveExecuteResponse, ISolanaWalletProvider, SolanaRpcResponseAndContext, SolanaSignatureResult, TransactionSignature, SolanaRawTransactionInstruction, SolanaSerializedTransaction, SolanaBase58PublicKey, Hex as Hex$1, XDR, IStellarWalletProvider, StellarRawTransactionReceipt } from '@sodax/types';
1
+ import { ChainId, IEvmWalletProvider, EvmRawTransaction, EvmRawTransactionReceipt, ISuiWalletProvider, SuiTransaction, SuiExecutionResult, SuiPaginatedCoins, IIconWalletProvider, IcxCallTransaction, IconTransactionResult, IInjectiveWalletProvider, JsonObject, InjectiveRawTransaction, InjectiveEoaAddress, InjectiveCoin, InjectiveExecuteResponse, ISolanaWalletProvider, SolanaRpcResponseAndContext, SolanaSignatureResult, TransactionSignature, SolanaRawTransactionInstruction, SolanaSerializedTransaction, SolanaBase58PublicKey, Hex as Hex$1, XDR, IStellarWalletProvider, StellarRawTransactionReceipt } from '@sodax/types';
2
2
  import { Chain, PublicClient, WalletClient, Transport, Account, Hash as Hash$1, Address } from 'viem';
3
3
  import { SuiClient } from '@mysten/sui/client';
4
4
  import { Ed25519Keypair } from '@mysten/sui/keypairs/ed25519';
5
5
  import { Transaction } from '@mysten/sui/transactions';
6
6
  import { WalletWithFeatures, SuiWalletFeatures, WalletAccount } from '@mysten/wallet-standard';
7
7
  import { IconService, Wallet } from 'icon-sdk-js';
8
+ import { Network } from '@injectivelabs/networks';
8
9
  import { MsgBroadcaster } from '@injectivelabs/wallet-core';
10
+ import { MsgBroadcasterWithPk } from '@injectivelabs/sdk-ts';
11
+ import { ChainId as ChainId$1, EvmChainId } from '@injectivelabs/ts-types';
9
12
  import { PublicKey, Connection, Commitment, RpcResponseAndContext, TokenAmount } from '@solana/web3.js';
10
13
  import { SignerWalletAdapterProps } from '@solana/wallet-adapter-base';
11
14
  import { Keypair } from '@stellar/stellar-sdk';
@@ -162,19 +165,35 @@ declare function BigNumberToBigInt(bigNumber: BigNumber): bigint;
162
165
  */
163
166
  type BrowserExtensionInjectiveWalletConfig = {
164
167
  msgBroadcaster: MsgBroadcaster;
165
- walletAddress: InjectiveEoaAddress | undefined;
166
168
  };
167
- type InjectiveWalletConfig = BrowserExtensionInjectiveWalletConfig;
169
+ type SecretInjectiveWalletConfig = {
170
+ secret: {
171
+ privateKey: string;
172
+ } | {
173
+ mnemonics: string;
174
+ };
175
+ chainId: ChainId$1;
176
+ network: Network;
177
+ evmOptions?: {
178
+ evmChainId: EvmChainId;
179
+ rpcUrl: `http${string}`;
180
+ };
181
+ };
182
+ type InjectiveWalletConfig = BrowserExtensionInjectiveWalletConfig | SecretInjectiveWalletConfig;
168
183
  /**
169
184
  * Injective Type Guards
170
185
  */
171
186
  declare function isBrowserExtensionInjectiveWalletConfig(config: InjectiveWalletConfig): config is BrowserExtensionInjectiveWalletConfig;
187
+ declare function isSecretInjectiveWalletConfig(config: InjectiveWalletConfig): config is SecretInjectiveWalletConfig;
188
+ type InjectiveWallet = {
189
+ msgBroadcaster: MsgBroadcaster | MsgBroadcasterWithPk;
190
+ };
172
191
  declare class InjectiveWalletProvider implements IInjectiveWalletProvider {
173
- private msgBroadcaster;
174
- walletAddress: InjectiveEoaAddress | undefined;
192
+ wallet: InjectiveWallet;
175
193
  constructor(config: InjectiveWalletConfig);
176
194
  getRawTransaction(chainId: string, _: string, senderAddress: string, contractAddress: string, msg: JsonObject, memo?: string): Promise<InjectiveRawTransaction>;
177
195
  getWalletAddress(): Promise<InjectiveEoaAddress>;
196
+ getWalletPubKey(): Promise<string>;
178
197
  execute(senderAddress: string, contractAddress: string, msg: JsonObject, funds?: InjectiveCoin[]): Promise<InjectiveExecuteResponse>;
179
198
  }
180
199
 
@@ -288,4 +307,4 @@ declare class StellarWalletProvider implements IStellarWalletProvider {
288
307
  waitForTransactionReceipt(txHash: string): Promise<StellarRawTransactionReceipt>;
289
308
  }
290
309
 
291
- export { BigNumberToBigInt, type BrowserExtensionEvmWalletConfig, type BrowserExtensionIconWalletConfig, type BrowserExtensionInjectiveWalletConfig, type BrowserExtensionSolanaWalletConfig, type BrowserExtensionStellarWalletConfig, type BrowserExtensionSuiWallet, type BrowserExtensionSuiWalletConfig, type EvmWalletConfig, EvmWalletProvider, type HanaWalletRequestEvent, type HanaWalletResponseEvent, type Hash, type Hex, type IconAddress, type IconBrowserExtensionWallet, type IconEoaAddress, type IconJsonRpcVersion, type IconPkWallet, type IconWallet, type IconWalletConfig, IconWalletProvider, type InjectiveWalletConfig, InjectiveWalletProvider, type JsonRpcPayloadResponse, type PkSuiWallet, type PrivateKeyEvmWalletConfig, type PrivateKeyIconWalletConfig, type PrivateKeySolanaWalletConfig, type PrivateKeyStellarWalletConfig, type PrivateKeySuiWalletConfig, type RelayRequestDetail, type RelayRequestSigning, type ResponseAddressType, type ResponseSigningType, type SolanaWalletConfig, SolanaWalletProvider, type StellarAddress, type StellarBrowserExtensionWallet, type StellarNetwork, type StellarPkWallet, type StellarWallet, type StellarWalletConfig, StellarWalletError, StellarWalletProvider, type SuiWallet, type SuiWalletConfig, SuiWalletProvider, getEvmViemChain, isBrowserExtensionEvmWalletConfig, isBrowserExtensionIconWalletConfig, isBrowserExtensionInjectiveWalletConfig, isBrowserExtensionStellarWalletConfig, isBrowserExtensionSuiWallet, isIconAddress, isIconBrowserExtensionWallet, isIconEoaAddress, isIconPkWallet, isJsonRpcPayloadResponse, isPkSuiWallet, isPrivateKeyEvmWalletConfig, isPrivateKeyIconWalletConfig, isPrivateKeyStellarWalletConfig, isResponseAddressType, isResponseSigningType, isStellarBrowserExtensionWallet, isStellarPkWallet, isSuiWallet, isValidStellarNetwork, isValidStellarPrivateKey, requestAddress, requestJsonRpc, requestSigning };
310
+ export { BigNumberToBigInt, type BrowserExtensionEvmWalletConfig, type BrowserExtensionIconWalletConfig, type BrowserExtensionInjectiveWalletConfig, type BrowserExtensionSolanaWalletConfig, type BrowserExtensionStellarWalletConfig, type BrowserExtensionSuiWallet, type BrowserExtensionSuiWalletConfig, type EvmWalletConfig, EvmWalletProvider, type HanaWalletRequestEvent, type HanaWalletResponseEvent, type Hash, type Hex, type IconAddress, type IconBrowserExtensionWallet, type IconEoaAddress, type IconJsonRpcVersion, type IconPkWallet, type IconWallet, type IconWalletConfig, IconWalletProvider, type InjectiveWallet, type InjectiveWalletConfig, InjectiveWalletProvider, type JsonRpcPayloadResponse, type PkSuiWallet, type PrivateKeyEvmWalletConfig, type PrivateKeyIconWalletConfig, type PrivateKeySolanaWalletConfig, type PrivateKeyStellarWalletConfig, type PrivateKeySuiWalletConfig, type RelayRequestDetail, type RelayRequestSigning, type ResponseAddressType, type ResponseSigningType, type SecretInjectiveWalletConfig, type SolanaWalletConfig, SolanaWalletProvider, type StellarAddress, type StellarBrowserExtensionWallet, type StellarNetwork, type StellarPkWallet, type StellarWallet, type StellarWalletConfig, StellarWalletError, StellarWalletProvider, type SuiWallet, type SuiWalletConfig, SuiWalletProvider, getEvmViemChain, isBrowserExtensionEvmWalletConfig, isBrowserExtensionIconWalletConfig, isBrowserExtensionInjectiveWalletConfig, isBrowserExtensionStellarWalletConfig, isBrowserExtensionSuiWallet, isIconAddress, isIconBrowserExtensionWallet, isIconEoaAddress, isIconPkWallet, isJsonRpcPayloadResponse, isPkSuiWallet, isPrivateKeyEvmWalletConfig, isPrivateKeyIconWalletConfig, isPrivateKeyStellarWalletConfig, isResponseAddressType, isResponseSigningType, isSecretInjectiveWalletConfig, isStellarBrowserExtensionWallet, isStellarPkWallet, isSuiWallet, isValidStellarNetwork, isValidStellarPrivateKey, requestAddress, requestJsonRpc, requestSigning };
package/dist/index.mjs CHANGED
@@ -5,8 +5,8 @@ import { NIBIRU_MAINNET_CHAIN_ID, POLYGON_MAINNET_CHAIN_ID, BSC_MAINNET_CHAIN_ID
5
5
  import { SuiClient } from '@mysten/sui/client';
6
6
  import { Ed25519Keypair } from '@mysten/sui/keypairs/ed25519';
7
7
  import { signTransaction } from '@mysten/wallet-standard';
8
- import { Wallet, IconService, CallTransactionBuilder, Converter } from 'icon-sdk-js';
9
- import { MsgExecuteContract, createTransaction, MsgExecuteContractCompat } from '@injectivelabs/sdk-ts';
8
+ import * as IconSdkRaw from 'icon-sdk-js';
9
+ import { PrivateKey, MsgBroadcasterWithPk, MsgExecuteContract, createTransaction, getInjectiveSignerAddress, MsgExecuteContractCompat } from '@injectivelabs/sdk-ts';
10
10
  import { getAssociatedTokenAddress } from '@solana/spl-token';
11
11
  import { Keypair, Connection, TransactionMessage, VersionedTransaction, PublicKey, TransactionInstruction } from '@solana/web3.js';
12
12
  import { Networks, Keypair as Keypair$1, Horizon, Transaction } from '@stellar/stellar-sdk';
@@ -187,6 +187,8 @@ var SuiWalletProvider = class {
187
187
  return this.getSuiAddress();
188
188
  }
189
189
  };
190
+ var IconSdk = "default" in IconSdkRaw.default ? IconSdkRaw.default : IconSdkRaw;
191
+ var { Converter, CallTransactionBuilder, Wallet } = IconSdk;
190
192
  var IconWalletProvider = class {
191
193
  wallet;
192
194
  iconService;
@@ -196,13 +198,13 @@ var IconWalletProvider = class {
196
198
  type: "PRIVATE_KEY",
197
199
  wallet: Wallet.loadPrivateKey(wallet.privateKey.slice(2))
198
200
  };
199
- this.iconService = new IconService(new IconService.HttpProvider(wallet.rpcUrl));
201
+ this.iconService = new IconSdk.IconService(new IconSdk.IconService.HttpProvider(wallet.rpcUrl));
200
202
  } else if (isBrowserExtensionIconWalletConfig(wallet)) {
201
203
  this.wallet = {
202
204
  type: "BROWSER_EXTENSION",
203
205
  wallet: wallet.walletAddress
204
206
  };
205
- this.iconService = new IconService(new IconService.HttpProvider(wallet.rpcUrl));
207
+ this.iconService = new IconSdk.IconService(new IconSdk.IconService.HttpProvider(wallet.rpcUrl));
206
208
  } else {
207
209
  throw new Error("Invalid Icon wallet config");
208
210
  }
@@ -213,7 +215,7 @@ var IconWalletProvider = class {
213
215
  const result2 = await requestJsonRpc(builtTx);
214
216
  return result2.result;
215
217
  }
216
- const signedTx = new IconService.SignedTransaction(builtTx, this.wallet.wallet);
218
+ const signedTx = new IconSdk.IconService.SignedTransaction(builtTx, this.wallet.wallet);
217
219
  const result = await this.iconService.sendTransaction(signedTx).execute();
218
220
  return result;
219
221
  }
@@ -349,23 +351,35 @@ function BigNumberToBigInt(bigNumber) {
349
351
  return BigInt(bigNumber.toFixed(0));
350
352
  }
351
353
  function isBrowserExtensionInjectiveWalletConfig(config) {
352
- return "msgBroadcaster" in config && "walletAddress" in config;
354
+ return "msgBroadcaster" in config;
355
+ }
356
+ function isSecretInjectiveWalletConfig(config) {
357
+ return "secret" in config && typeof config.secret === "object" && ("privateKey" in config.secret && typeof config.secret.privateKey === "string" || "mnemonics" in config.secret && typeof config.secret.mnemonics === "string") && "network" in config && "chainId" in config;
353
358
  }
354
359
  var InjectiveWalletProvider = class {
355
- msgBroadcaster;
356
- walletAddress;
360
+ wallet;
357
361
  constructor(config) {
358
362
  if (isBrowserExtensionInjectiveWalletConfig(config)) {
359
- this.msgBroadcaster = config.msgBroadcaster;
360
- this.walletAddress = config.walletAddress;
363
+ this.wallet = {
364
+ msgBroadcaster: config.msgBroadcaster
365
+ };
366
+ } else if (isSecretInjectiveWalletConfig(config)) {
367
+ let privateKey;
368
+ if ("privateKey" in config.secret) {
369
+ privateKey = PrivateKey.fromPrivateKey(config.secret.privateKey);
370
+ } else if ("mnemonics" in config.secret) {
371
+ privateKey = PrivateKey.fromMnemonic(config.secret.mnemonics);
372
+ } else {
373
+ throw new Error("Invalid Secret Injective wallet config");
374
+ }
375
+ this.wallet = {
376
+ msgBroadcaster: new MsgBroadcasterWithPk({ privateKey, network: config.network })
377
+ };
361
378
  } else {
362
379
  throw new Error("Invalid Injective wallet config");
363
380
  }
364
381
  }
365
- getRawTransaction(chainId, _, senderAddress, contractAddress, msg, memo) {
366
- if (!this.walletAddress) {
367
- throw new Error("Wallet address not found");
368
- }
382
+ async getRawTransaction(chainId, _, senderAddress, contractAddress, msg, memo) {
369
383
  const msgExec = MsgExecuteContract.fromJSON({
370
384
  contractAddress,
371
385
  sender: senderAddress,
@@ -375,7 +389,7 @@ var InjectiveWalletProvider = class {
375
389
  const { txRaw } = createTransaction({
376
390
  message: msgExec,
377
391
  memo: memo || "",
378
- pubKey: this.walletAddress,
392
+ pubKey: await this.getWalletPubKey(),
379
393
  sequence: 0,
380
394
  accountNumber: 0,
381
395
  chainId
@@ -390,28 +404,48 @@ var InjectiveWalletProvider = class {
390
404
  authInfoBytes: txRaw.authInfoBytes
391
405
  }
392
406
  };
393
- return Promise.resolve(rawTx);
407
+ return rawTx;
394
408
  }
409
+ // return wallet address as bech32
395
410
  async getWalletAddress() {
396
- if (!this.walletAddress) {
397
- throw new Error("Wallet address not found");
411
+ if (this.wallet.msgBroadcaster instanceof MsgBroadcasterWithPk) {
412
+ return getInjectiveSignerAddress(this.wallet.msgBroadcaster.privateKey.toAddress().toBech32());
413
+ }
414
+ const addresses = await this.wallet.msgBroadcaster.walletStrategy.getAddresses();
415
+ const injectiveAddresses = addresses.map(getInjectiveSignerAddress);
416
+ if (injectiveAddresses.length <= 0 || injectiveAddresses[0] === void 0) {
417
+ return Promise.reject(new Error("Wallet address not found"));
398
418
  }
399
- return Promise.resolve(this.walletAddress);
419
+ return injectiveAddresses[0];
400
420
  }
401
- async execute(senderAddress, contractAddress, msg, funds) {
402
- if (!this.walletAddress) {
403
- throw new Error("Wallet address not found");
421
+ async getWalletPubKey() {
422
+ if (this.wallet.msgBroadcaster instanceof MsgBroadcasterWithPk) {
423
+ return this.wallet.msgBroadcaster.privateKey.toPublicKey().toString();
424
+ }
425
+ const pubKey = await this.wallet.msgBroadcaster.walletStrategy.getPubKey();
426
+ if (pubKey === void 0) {
427
+ return Promise.reject(new Error("Wallet public key not found"));
404
428
  }
429
+ return pubKey;
430
+ }
431
+ async execute(senderAddress, contractAddress, msg, funds) {
405
432
  const msgExec = MsgExecuteContractCompat.fromJSON({
406
433
  contractAddress,
407
434
  sender: senderAddress,
408
435
  msg,
409
436
  funds: funds || []
410
437
  });
411
- const txResult = await this.msgBroadcaster.broadcastWithFeeDelegation({
412
- msgs: msgExec,
413
- injectiveAddress: this.walletAddress
414
- });
438
+ let txResult;
439
+ if (this.wallet.msgBroadcaster instanceof MsgBroadcasterWithPk) {
440
+ txResult = await this.wallet.msgBroadcaster.broadcast({
441
+ msgs: msgExec
442
+ });
443
+ } else {
444
+ txResult = await this.wallet.msgBroadcaster.broadcastWithFeeDelegation({
445
+ msgs: msgExec,
446
+ injectiveAddress: await this.getWalletAddress()
447
+ });
448
+ }
415
449
  return InjectiveExecuteResponse.fromTxResponse(txResult);
416
450
  }
417
451
  };
@@ -673,6 +707,6 @@ var StellarWalletProvider = class {
673
707
  }
674
708
  };
675
709
 
676
- export { BigNumberToBigInt, EvmWalletProvider, IconWalletProvider, InjectiveWalletProvider, SolanaWalletProvider, StellarWalletError, StellarWalletProvider, SuiWalletProvider, getEvmViemChain, isBrowserExtensionEvmWalletConfig, isBrowserExtensionIconWalletConfig, isBrowserExtensionInjectiveWalletConfig, isBrowserExtensionStellarWalletConfig, isBrowserExtensionSuiWallet, isIconAddress, isIconBrowserExtensionWallet, isIconEoaAddress, isIconPkWallet, isJsonRpcPayloadResponse, isPkSuiWallet, isPrivateKeyEvmWalletConfig, isPrivateKeyIconWalletConfig, isPrivateKeyStellarWalletConfig, isResponseAddressType, isResponseSigningType, isStellarBrowserExtensionWallet, isStellarPkWallet, isSuiWallet, isValidStellarNetwork, isValidStellarPrivateKey, requestAddress, requestJsonRpc, requestSigning };
710
+ export { BigNumberToBigInt, EvmWalletProvider, IconWalletProvider, InjectiveWalletProvider, SolanaWalletProvider, StellarWalletError, StellarWalletProvider, SuiWalletProvider, getEvmViemChain, isBrowserExtensionEvmWalletConfig, isBrowserExtensionIconWalletConfig, isBrowserExtensionInjectiveWalletConfig, isBrowserExtensionStellarWalletConfig, isBrowserExtensionSuiWallet, isIconAddress, isIconBrowserExtensionWallet, isIconEoaAddress, isIconPkWallet, isJsonRpcPayloadResponse, isPkSuiWallet, isPrivateKeyEvmWalletConfig, isPrivateKeyIconWalletConfig, isPrivateKeyStellarWalletConfig, isResponseAddressType, isResponseSigningType, isSecretInjectiveWalletConfig, isStellarBrowserExtensionWallet, isStellarPkWallet, isSuiWallet, isValidStellarNetwork, isValidStellarPrivateKey, requestAddress, requestJsonRpc, requestSigning };
677
711
  //# sourceMappingURL=index.mjs.map
678
712
  //# sourceMappingURL=index.mjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/wallet-providers/EvmWalletProvider.ts","../src/wallet-providers/SuiWalletProvider.ts","../src/wallet-providers/IconWalletProvider.ts","../src/wallet-providers/InjectiveWalletProvider.ts","../src/wallet-providers/SolanaWalletProvider.ts","../src/wallet-providers/StellarWalletProvider.ts"],"names":["IconServiceConstructor","result","Keypair"],"mappings":";;;;;;;;;;;;;;AAgBO,SAAS,gBAAgB,EAAA,EAAoB;AAClD,EAAA,QAAQ,EAAA;AAAI,IACV,KAAK,sBAAA;AACH,MAAA,OAAO,KAAA;AAAA,IACT,KAAK,0BAAA;AACH,MAAA,OAAO,SAAA;AAAA,IACT,KAAK,yBAAA;AACH,MAAA,OAAO,QAAA;AAAA,IACT,KAAK,qBAAA;AACH,MAAA,OAAO,IAAA;AAAA,IACT,KAAK,yBAAA;AACH,MAAA,OAAO,QAAA;AAAA,IACT,KAAK,oBAAA;AACH,MAAA,OAAO,GAAA;AAAA,IACT,KAAK,wBAAA;AACH,MAAA,OAAO,OAAA;AAAA,IACT,KAAK,uBAAA;AACH,MAAA,OAAO,MAAA;AAAA,IACT;AACE,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,0BAAA,EAA6B,EAAE,CAAA,CAAE,CAAA;AAAA;AAEvD;AAEO,IAAM,oBAAN,MAAsD;AAAA,EAC1C,YAAA;AAAA,EACD,YAAA;AAAA,EAEhB,YAAY,MAAA,EAAyB;AACnC,IAAA,IAAI,2BAAA,CAA4B,MAAM,CAAA,EAAG;AACvC,MAAA,MAAM,KAAA,GAAQ,eAAA,CAAgB,MAAA,CAAO,OAAO,CAAA;AAC5C,MAAA,IAAA,CAAK,eAAe,kBAAA,CAAmB;AAAA,QACrC,KAAA;AAAA,QACA,SAAA,EAAW,KAAK,MAAA,CAAO,MAAA,IAAU,MAAM,OAAA,CAAQ,OAAA,CAAQ,IAAA,CAAK,CAAC,CAAC,CAAA;AAAA,QAC9D,OAAA,EAAS,mBAAA,CAAoB,MAAA,CAAO,UAAU;AAAA,OAC/C,CAAA;AACD,MAAA,IAAA,CAAK,eAAe,kBAAA,CAAmB;AAAA,QACrC,KAAA;AAAA,QACA,SAAA,EAAW,KAAK,MAAA,CAAO,MAAA,IAAU,MAAM,OAAA,CAAQ,OAAA,CAAQ,IAAA,CAAK,CAAC,CAAC;AAAA,OAC/D,CAAA;AAAA,IACH,CAAA,MAAA,IAAW,iCAAA,CAAkC,MAAM,CAAA,EAAG;AACpD,MAAA,IAAA,CAAK,eAAe,MAAA,CAAO,YAAA;AAC3B,MAAA,IAAA,CAAK,eAAe,MAAA,CAAO,YAAA;AAAA,IAC7B,CAAA,MAAO;AACL,MAAA,MAAM,IAAI,MAAM,2BAA2B,CAAA;AAAA,IAC7C;AAAA,EACF;AAAA,EAEA,MAAM,gBAAgB,QAAA,EAA4C;AAChE,IAAA,OAAO,IAAA,CAAK,YAAA,CAAa,eAAA,CAAgB,QAAQ,CAAA;AAAA,EACnD;AAAA,EAEA,MAAM,0BAA0B,MAAA,EAAiD;AAC/E,IAAA,MAAM,OAAA,GAAU,MAAM,IAAA,CAAK,YAAA,CAAa,0BAA0B,EAAE,IAAA,EAAM,QAAQ,CAAA;AAClF,IAAA,OAAO;AAAA,MACL,GAAG,OAAA;AAAA,MACH,gBAAA,EAAkB,OAAA,CAAQ,gBAAA,CAAiB,QAAA,EAAS;AAAA,MACpD,WAAA,EAAa,OAAA,CAAQ,WAAA,CAAY,QAAA,EAAS;AAAA,MAC1C,iBAAA,EAAmB,OAAA,CAAQ,iBAAA,CAAkB,QAAA,EAAS;AAAA,MACtD,OAAA,EAAS,OAAA,CAAQ,OAAA,CAAQ,QAAA,EAAS;AAAA,MAClC,eAAA,EAAiB,OAAA,CAAQ,eAAA,EAAiB,QAAA,EAAS,IAAK,IAAA;AAAA,MACxD,IAAA,EAAM,OAAA,CAAQ,IAAA,CAAK,GAAA,CAAI,CAAA,GAAA,MAAQ;AAAA,QAC7B,GAAG,GAAA;AAAA,QACH,WAAA,EAAa,GAAA,CAAI,WAAA,CAAY,QAAA,EAAS;AAAA,QACtC,QAAA,EAAU,GAAA,CAAI,QAAA,CAAS,QAAA,EAAS;AAAA,QAChC,gBAAA,EAAkB,GAAA,CAAI,gBAAA,CAAiB,QAAA;AAAS,OAClD,CAAE,CAAA;AAAA,MACF,iBAAA,EAAmB,OAAA,CAAQ,iBAAA,CAAkB,QAAA;AAAS,KACxD;AAAA,EACF;AAAA,EAEA,MAAM,gBAAA,GAAqC;AACzC,IAAA,OAAO,IAAA,CAAK,aAAa,OAAA,CAAQ,OAAA;AAAA,EACnC;AACF;AAuBO,SAAS,4BAA4B,MAAA,EAA8D;AACxG,EAAA,OAAO,YAAA,IAAgB,MAAA,IAAU,MAAA,CAAO,UAAA,CAAW,WAAW,IAAI,CAAA;AACpE;AAEO,SAAS,kCAAkC,MAAA,EAAoE;AACpH,EAAA,OAAO,cAAA,IAAkB,UAAU,cAAA,IAAkB,MAAA;AACvD;AC1FA,SAAS,4BAA4B,YAAA,EAA0E;AAC7G,EAAA,OAAO,WAAA,IAAe,YAAA;AACxB;AAEA,SAAS,kCACP,YAAA,EACiD;AACjD,EAAA,OAAO,QAAA,IAAY,gBAAgB,SAAA,IAAa,YAAA;AAClD;AAaO,SAAS,cAAc,MAAA,EAA0C;AACtE,EAAA,OAAO,SAAA,IAAa,MAAA;AACtB;AAEO,SAAS,4BAA4B,MAAA,EAAwD;AAClG,EAAA,OAAO,QAAA,IAAY,UAAU,SAAA,IAAa,MAAA;AAC5C;AAEO,SAAS,YAAY,MAAA,EAAwC;AAClE,EAAA,OAAO,aAAA,CAAc,MAAM,CAAA,IAAK,2BAAA,CAA4B,MAAM,CAAA;AACpE;AAEO,IAAM,oBAAN,MAAsD;AAAA,EAC1C,MAAA;AAAA,EACA,MAAA;AAAA,EAEjB,YAAY,YAAA,EAA+B;AACzC,IAAA,IAAI,2BAAA,CAA4B,YAAY,CAAA,EAAG;AAC7C,MAAA,IAAA,CAAK,SAAS,IAAI,SAAA,CAAU,EAAE,GAAA,EAAK,YAAA,CAAa,QAAQ,CAAA;AACxD,MAAA,IAAA,CAAK,MAAA,GAAS;AAAA,QACZ,OAAA,EAAS,cAAA,CAAe,aAAA,CAAc,YAAA,CAAa,SAAS;AAAA,OAC9D;AAAA,IACF,CAAA,MAAA,IAAW,iCAAA,CAAkC,YAAY,CAAA,EAAG;AAC1D,MAAA,IAAA,CAAK,SAAS,YAAA,CAAa,MAAA;AAC3B,MAAA,IAAA,CAAK,MAAA,GAAS;AAAA,QACZ,QAAQ,YAAA,CAAa,MAAA;AAAA,QACrB,SAAS,YAAA,CAAa;AAAA,OACxB;AAAA,IACF,CAAA,MAAO;AACL,MAAA,MAAM,IAAI,MAAM,8BAA8B,CAAA;AAAA,IAChD;AAAA,EACF;AAAA,EAEA,MAAM,kBAAkB,GAAA,EAAsC;AAC5D,IAAA,IAAI,aAAA,CAAc,IAAA,CAAK,MAAM,CAAA,EAAG;AAC9B,MAAA,MAAM,GAAA,GAAM,MAAM,IAAA,CAAK,MAAA,CAAO,yBAAA,CAA0B;AAAA,QACtD,WAAA,EAAa,GAAA;AAAA,QACb,MAAA,EAAQ,KAAK,MAAA,CAAO;AAAA,OACrB,CAAA;AAED,MAAA,OAAO,GAAA,CAAI,MAAA;AAAA,IACb;AACA,IAAA,IAAI,2BAAA,CAA4B,IAAA,CAAK,MAAM,CAAA,EAAG;AAC5C,MAAA,MAAM,aAAA,GAAgB,KAAK,MAAA,CAAO,MAAA;AAClC,MAAA,MAAM,cAAA,GAAiB,KAAK,MAAA,CAAO,OAAA;AAEnC,MAAA,IAAI,CAAC,cAAA,IAAkB,cAAA,CAAe,MAAA,CAAO,WAAW,CAAA,EAAG;AACzD,QAAA,MAAM,IAAI,MAAM,wCAAwC,CAAA;AAAA,MAC1D;AACA,MAAA,MAAM,KAAA,GAAQ,cAAA,CAAe,MAAA,CAAO,CAAC,CAAA;AACrC,MAAA,IAAI,CAAC,KAAA,EAAO;AACV,QAAA,MAAM,IAAI,MAAM,uCAAuC,CAAA;AAAA,MACzD;AACA,MAAA,MAAM,EAAE,KAAA,EAAO,SAAA,EAAU,GAAI,MAAM,gBAAgB,aAAA,EAAe;AAAA,QAChE,WAAA,EAAa,GAAA;AAAA,QACb,OAAA,EAAS,cAAA;AAAA,QACT;AAAA,OACD,CAAA;AAED,MAAA,MAAM,GAAA,GAAM,MAAM,IAAA,CAAK,MAAA,CAAO,uBAAA,CAAwB;AAAA,QACpD,gBAAA,EAAkB,KAAA;AAAA,QAClB,SAAA;AAAA,QACA,OAAA,EAAS;AAAA,UACP,cAAA,EAAgB;AAAA;AAClB,OACD,CAAA;AAED,MAAA,OAAO,GAAA,CAAI,MAAA;AAAA,IACb;AAEA,IAAA,MAAM,IAAI,MAAM,8BAA8B,CAAA;AAAA,EAChD;AAAA,EAEA,MAAM,aACJ,EAAA,EACA,SAAA,EACA,QACA,YAAA,EACA,IAAA,EACA,QAAA,GAAqB,EAAC,EACO;AAC7B,IAAA,EAAA,CAAG,QAAA,CAAS;AAAA,MACV,QAAQ,CAAA,EAAG,SAAS,CAAA,EAAA,EAAK,MAAM,KAAK,YAAY,CAAA,CAAA;AAAA,MAChD,SAAA,EAAW,IAAA;AAAA,MACX,aAAA,EAAe;AAAA,KAChB,CAAA;AAED,IAAA,MAAM,MAAA,GAAS,KAAK,aAAA,EAAc;AAElC,IAAA,MAAM,SAAA,GAAY,MAAM,IAAA,CAAK,MAAA,CAAO,0BAAA,CAA2B;AAAA,MAC7D,gBAAA,EAAkB,EAAA;AAAA,MAClB;AAAA,KACD,CAAA;AAED,IAAA,IAAI,UAAU,OAAA,IAAW,SAAA,CAAU,OAAA,CAAQ,CAAC,MAAM,MAAA,EAAW;AAC3D,MAAA,OAAO,SAAA,CAAU,QAAQ,CAAC,CAAA;AAAA,IAC5B;AACA,IAAA,MAAM,KAAA,CAAM,yCAAyC,IAAA,CAAK,SAAA,CAAU,WAAW,IAAA,EAAM,CAAC,CAAC,CAAA,CAAE,CAAA;AAAA,EAC3F;AAAA,EAEA,MAAM,QAAA,CAAS,OAAA,EAAiB,KAAA,EAA2C;AACzE,IAAA,OAAO,IAAA,CAAK,MAAA,CAAO,QAAA,CAAS,EAAE,KAAA,EAAO,SAAS,QAAA,EAAU,KAAA,EAAO,KAAA,EAAO,EAAA,EAAI,CAAA;AAAA,EAC5E;AAAA,EAEQ,aAAA,GAAwB;AAC9B,IAAA,IAAI,aAAA,CAAc,IAAA,CAAK,MAAM,CAAA,EAAG;AAC9B,MAAA,OAAO,IAAA,CAAK,MAAA,CAAO,OAAA,CAAQ,YAAA,EAAa;AAAA,IAC1C;AACA,IAAA,IAAI,2BAAA,CAA4B,IAAA,CAAK,MAAM,CAAA,EAAG;AAC5C,MAAA,OAAO,IAAA,CAAK,OAAO,OAAA,CAAQ,OAAA;AAAA,IAC7B;AACA,IAAA,MAAM,IAAI,MAAM,8BAA8B,CAAA;AAAA,EAChD;AAAA,EAEA,MAAM,gBAAA,GAAoC;AACxC,IAAA,OAAO,KAAK,aAAA,EAAc;AAAA,EAC5B;AACF;AClKO,IAAM,qBAAN,MAAwD;AAAA,EAC5C,MAAA;AAAA,EACD,WAAA;AAAA,EAEhB,YAAY,MAAA,EAA0B;AACpC,IAAA,IAAI,4BAAA,CAA6B,MAAM,CAAA,EAAG;AACxC,MAAA,IAAA,CAAK,MAAA,GAAS;AAAA,QACZ,IAAA,EAAM,aAAA;AAAA,QACN,QAAQ,MAAA,CAAO,cAAA,CAAe,OAAO,UAAA,CAAW,KAAA,CAAM,CAAC,CAAC;AAAA,OAC1D;AACA,MAAA,IAAA,CAAK,WAAA,GAAc,IAAIA,WAAA,CAAuB,IAAIA,YAAuB,YAAA,CAAa,MAAA,CAAO,MAAM,CAAC,CAAA;AAAA,IACtG,CAAA,MAAA,IAAW,kCAAA,CAAmC,MAAM,CAAA,EAAG;AACrD,MAAA,IAAA,CAAK,MAAA,GAAS;AAAA,QACZ,IAAA,EAAM,mBAAA;AAAA,QACN,QAAQ,MAAA,CAAO;AAAA,OACjB;AACA,MAAA,IAAA,CAAK,WAAA,GAAc,IAAIA,WAAA,CAAuB,IAAIA,YAAuB,YAAA,CAAa,MAAA,CAAO,MAAM,CAAC,CAAA;AAAA,IACtG,CAAA,MAAO;AACL,MAAA,MAAM,IAAI,MAAM,4BAA4B,CAAA;AAAA,IAC9C;AAAA,EACF;AAAA,EAEA,MAAa,gBAAgB,EAAA,EAAuC;AAClE,IAAA,MAAM,OAAA,GAAU,IAAI,sBAAA,EAAuB,CACxC,IAAA,CAAK,GAAG,IAAI,CAAA,CACZ,EAAA,CAAG,EAAA,CAAG,EAAE,CAAA,CACR,UAAU,SAAA,CAAU,KAAA,CAAM,GAAO,CAAC,CAAA,CAClC,GAAA,CAAI,GAAG,GAAG,CAAA,CACV,OAAA,CAAQ,EAAA,CAAG,OAAA,IAAW,KAAK,EAC3B,SAAA,CAAU,SAAA,CAAU,KAAA,CAAM,EAAA,CAAG,SAAA,IAAA,iBAAa,IAAI,MAAK,EAAE,OAAA,EAAQ,GAAI,GAAI,CAAC,CAAA,CACtE,MAAM,EAAA,CAAG,KAAK,CAAA,CACd,MAAA,CAAO,EAAA,CAAG,MAAM,EAChB,MAAA,CAAO,EAAA,CAAG,MAAM,CAAA,CAChB,KAAA,EAAM;AAET,IAAA,IAAI,CAAC,cAAA,CAAe,IAAA,CAAK,MAAM,CAAA,EAAG;AAEhC,MAAA,MAAMC,OAAAA,GAAS,MAAM,cAAA,CAAe,OAAO,CAAA;AAE3C,MAAA,OAAOA,OAAAA,CAAO,MAAA;AAAA,IAChB;AACA,IAAA,MAAM,WAAW,IAAID,WAAA,CAAuB,kBAAkB,OAAA,EAAS,IAAA,CAAK,OAAO,MAAM,CAAA;AACzF,IAAA,MAAM,SAAS,MAAM,IAAA,CAAK,YAAY,eAAA,CAAgB,QAAQ,EAAE,OAAA,EAAQ;AAExE,IAAA,OAAO,MAAA;AAAA,EACT;AAAA,EAEA,MAAa,0BAA0B,MAAA,EAA8C;AACnF,IAAA,MAAM,SAAS,MAAM,IAAA,CAAK,YAAY,qBAAA,CAAsB,MAAM,EAAE,OAAA,EAAQ;AAE5E,IAAA,OAAO;AAAA,MACL,GAAG,MAAA;AAAA,MACH,MAAA,EAAQ,CAAC,MAAA,CAAO,MAAA;AAAA,MAChB,kBAAA,EAAoB,iBAAA,CAAkB,MAAA,CAAO,kBAAkB,CAAA;AAAA,MAC/D,QAAA,EAAU,iBAAA,CAAkB,MAAA,CAAO,QAAQ,CAAA;AAAA,MAC3C,SAAA,EAAW,iBAAA,CAAkB,MAAA,CAAO,SAAS;AAAA,KAC/C;AAAA,EACF;AAAA,EAEA,MAAM,gBAAA,GAA4C;AAChD,IAAA,IAAI,CAAC,IAAA,CAAK,MAAA,CAAO,MAAA,EAAQ;AACvB,MAAA,MAAM,IAAI,MAAM,wBAAwB,CAAA;AAAA,IAC1C;AACA,IAAA,OAAO,cAAA,CAAe,IAAA,CAAK,MAAM,CAAA,GAAK,IAAA,CAAK,OAAO,MAAA,CAAO,UAAA,EAAW,GAAuB,IAAA,CAAK,MAAA,CAAO,MAAA;AAAA,EACzG;AACF;AA+FO,SAAS,eAAe,MAAA,EAA4C;AACzE,EAAA,OAAO,OAAO,IAAA,KAAS,aAAA;AACzB;AAEO,SAAS,6BAA6B,MAAA,EAA0D;AACrG,EAAA,OAAO,OAAO,IAAA,KAAS,mBAAA;AACzB;AAEO,SAAS,6BAA6B,MAAA,EAAgE;AAC3G,EAAA,OAAO,YAAA,IAAgB,MAAA,IAAU,MAAA,CAAO,UAAA,CAAW,WAAW,IAAI,CAAA;AACpE;AAEO,SAAS,mCACd,MAAA,EAC4C;AAC5C,EAAA,OAAO,mBAAmB,MAAA,KAAW,gBAAA,CAAiB,OAAO,aAAa,CAAA,IAAK,CAAC,MAAA,CAAO,aAAA,CAAA;AACzF;AAEO,SAAS,cAAc,KAAA,EAAsC;AAClE,EAAA,OAAO,OAAO,KAAA,KAAU,QAAA,IAAY,mCAAA,CAAoC,KAAK,KAAK,CAAA;AACpF;AAEO,SAAS,iBAAiB,KAAA,EAAyC;AACxE,EAAA,OAAO,OAAO,KAAA,KAAU,QAAA,IAAY,kBAAA,CAAmB,KAAK,KAAK,CAAA;AACnE;AAEO,SAAS,sBAAsB,KAAA,EAA8C;AAClF,EAAA,OACE,OAAO,KAAA,KAAU,QAAA,IACjB,KAAA,KAAU,QACV,MAAA,IAAU,KAAA,IACV,SAAA,IAAa,KAAA,IACb,KAAA,CAAM,IAAA,KAAS,kBAAA,IACf,aAAA,CAAc,MAAM,OAAO,CAAA;AAE/B;AAEO,SAAS,sBAAsB,KAAA,EAA8C;AAClF,EAAA,OACE,OAAO,KAAA,KAAU,QAAA,IACjB,KAAA,KAAU,QACV,MAAA,IAAU,KAAA,IACV,SAAA,IAAa,KAAA,IACb,KAAA,CAAM,IAAA,KAAS,kBAAA,IACf,OAAO,MAAM,OAAA,KAAY,QAAA;AAE7B;AAEO,SAAS,yBAAyB,KAAA,EAAiD;AACxF,EAAA,OACE,OAAO,KAAA,KAAU,QAAA,IACjB,KAAA,KAAU,IAAA,IACV,IAAA,IAAQ,KAAA,IACR,QAAA,IAAY,KAAA,IACZ,OAAO,KAAA,CAAM,MAAA,KAAW,QAAA;AAE5B;AAMO,SAAS,cAAA,GAAuC;AACrD,EAAA,OAAO,IAAI,QAAQ,CAAA,OAAA,KAAW;AAC5B,IAAA,MAAM,YAAA,GAAe,CAAC,KAAA,KAAiB;AACrC,MAAA,MAAM,WAAA,GAAc,KAAA;AACpB,MAAA,MAAM,WAAW,WAAA,CAAY,MAAA;AAC7B,MAAA,IAAI,qBAAA,CAAsB,QAAQ,CAAA,EAAG;AACnC,QAAA,MAAA,CAAO,mBAAA,CAAoB,uBAAA,EAAyB,YAAA,EAA+B,KAAK,CAAA;AACxF,QAAA,OAAA,CAAQ,SAAS,OAAO,CAAA;AAAA,MAC1B;AAAA,IACF,CAAA;AAEA,IAAA,MAAA,CAAO,mBAAA,CAAoB,uBAAA,EAAyB,YAAA,EAAc,KAAK,CAAA;AACvE,IAAA,MAAA,CAAO,gBAAA,CAAiB,uBAAA,EAAyB,YAAA,EAAc,KAAK,CAAA;AACpE,IAAA,MAAA,CAAO,aAAA;AAAA,MACL,IAAI,YAAgC,sBAAA,EAAwB;AAAA,QAC1D,MAAA,EAAQ;AAAA,UACN,IAAA,EAAM;AAAA;AACR,OACD;AAAA,KACH;AAAA,EACF,CAAC,CAAA;AACH;AAEO,SAAS,cAAA,CAAe,MAAmB,IAAA,EAA+B;AAC/E,EAAA,OAAO,IAAI,OAAA,CAAQ,CAAC,OAAA,EAAS,MAAA,KAAW;AACtC,IAAA,MAAM,WAAA,GAAc,IAAI,WAAA,CAAiC,sBAAA,EAAwB;AAAA,MAC/E,MAAA,EAAQ;AAAA,QACN,IAAA,EAAM,iBAAA;AAAA,QACN,OAAA,EAAS;AAAA,UACP,IAAA;AAAA,UACA;AAAA;AACF;AACF,KACD,CAAA;AAED,IAAA,MAAM,YAAA,GAAe,CAAC,KAAA,KAAiB;AACrC,MAAA,MAAM,WAAA,GAAc,KAAA;AACpB,MAAA,MAAM,WAAW,WAAA,CAAY,MAAA;AAC7B,MAAA,IAAI,qBAAA,CAAsB,QAAQ,CAAA,EAAG;AACnC,QAAA,MAAA,CAAO,mBAAA,CAAoB,uBAAA,EAAyB,YAAA,EAA+B,KAAK,CAAA;AAGxF,QAAA,OAAA,CAAQ,SAAS,OAAO,CAAA;AAAA,MAC1B,CAAA,MAAA,IAAW,QAAA,CAAS,IAAA,KAAS,gBAAA,EAAkB;AAC7C,QAAA,MAAA,CAAO,IAAI,KAAA,CAAM,gBAAgB,CAAC,CAAA;AAAA,MACpC;AAAA,IACF,CAAA;AAEA,IAAA,MAAA,CAAO,mBAAA,CAAoB,uBAAA,EAAyB,YAAA,EAA+B,KAAK,CAAA;AACxF,IAAA,MAAA,CAAO,gBAAA,CAAiB,uBAAA,EAAyB,YAAA,EAA+B,KAAK,CAAA;AACrF,IAAA,MAAA,CAAO,cAAc,WAAW,CAAA;AAAA,EAClC,CAAC,CAAA;AACH;AAEO,SAAS,cAAA,CAAe,cAAA,EAAyB,EAAA,GAAK,KAAA,EAAwC;AACnG,EAAA,OAAO,IAAI,OAAA,CAAQ,CAAC,OAAA,EAAS,MAAA,KAAW;AACtC,IAAA,MAAM,YAAA,GAAe,CAAC,KAAA,KAAiB;AACrC,MAAA,MAAM,WAAA,GAAc,KAAA;AACpB,MAAA,MAAM,EAAE,IAAA,EAAM,OAAA,EAAQ,GAAI,WAAA,CAAY,MAAA;AACtC,MAAA,IAAI,SAAS,mBAAA,EAAqB;AAChC,QAAA,MAAA,CAAO,mBAAA,CAAoB,uBAAA,EAAyB,YAAA,EAA+B,KAAK,CAAA;AAExF,QAAA,IAAI,wBAAA,CAAyB,OAAO,CAAA,EAAG;AACrC,UAAA,OAAA,CAAQ,OAAO,CAAA;AAAA,QACjB,CAAA,MAAO;AACL,UAAA,MAAA,CAAO,IAAI,KAAA,CAAM,iEAAiE,CAAC,CAAA;AAAA,QACrF;AAAA,MACF,CAAA,MAAA,IAAW,SAAS,iBAAA,EAAmB;AACrC,QAAA,MAAA,CAAO,mBAAA,CAAoB,uBAAA,EAAyB,YAAA,EAA+B,KAAK,CAAA;AACxF,QAAA,MAAA,CAAO,IAAI,KAAA,CAAM,iBAAiB,CAAC,CAAA;AAAA,MACrC;AAAA,IACF,CAAA;AAEA,IAAA,MAAA,CAAO,mBAAA,CAAoB,uBAAA,EAAyB,YAAA,EAA+B,KAAK,CAAA;AACxF,IAAA,MAAA,CAAO,gBAAA,CAAiB,uBAAA,EAAyB,YAAA,EAA+B,KAAK,CAAA;AACrF,IAAA,MAAA,CAAO,aAAA;AAAA,MACL,IAAI,YAAgC,sBAAA,EAAwB;AAAA,QAC1D,MAAA,EAAQ;AAAA,UACN,IAAA,EAAM,kBAAA;AAAA,UACN,OAAA,EAAS;AAAA,YACP,OAAA,EAAS,KAAA;AAAA,YACT,MAAA,EAAQ,qBAAA;AAAA,YACR,MAAA,EAAQ,cAAA;AAAA,YACR;AAAA;AACF;AACF,OACD;AAAA,KACH;AAAA,EACF,CAAC,CAAA;AACH;AAMO,SAAS,kBAAkB,SAAA,EAA8B;AAC9D,EAAA,IAAI,CAAC,SAAA,CAAU,SAAA,EAAU,EAAG;AAC1B,IAAA,MAAM,IAAI,MAAM,yCAAyC,CAAA;AAAA,EAC3D;AACA,EAAA,OAAO,MAAA,CAAO,SAAA,CAAU,OAAA,CAAQ,CAAC,CAAC,CAAA;AACpC;AClTO,SAAS,wCACd,MAAA,EACiD;AACjD,EAAA,OAAO,gBAAA,IAAoB,UAAU,eAAA,IAAmB,MAAA;AAC1D;AAEO,IAAM,0BAAN,MAAkE;AAAA,EAC/D,cAAA;AAAA,EACD,aAAA;AAAA,EAEP,YAAY,MAAA,EAA+B;AACzC,IAAA,IAAI,uCAAA,CAAwC,MAAM,CAAA,EAAG;AACnD,MAAA,IAAA,CAAK,iBAAiB,MAAA,CAAO,cAAA;AAC7B,MAAA,IAAA,CAAK,gBAAgB,MAAA,CAAO,aAAA;AAAA,IAC9B,CAAA,MAAO;AACL,MAAA,MAAM,IAAI,MAAM,iCAAiC,CAAA;AAAA,IACnD;AAAA,EACF;AAAA,EAEA,kBACE,OAAA,EACA,CAAA,EACA,aAAA,EACA,eAAA,EACA,KACA,IAAA,EACkC;AAClC,IAAA,IAAI,CAAC,KAAK,aAAA,EAAe;AACvB,MAAA,MAAM,IAAI,MAAM,0BAA0B,CAAA;AAAA,IAC5C;AAEA,IAAA,MAAM,OAAA,GAAU,mBAAmB,QAAA,CAAS;AAAA,MAC1C,eAAA;AAAA,MACA,MAAA,EAAQ,aAAA;AAAA,MACR,GAAA;AAAA,MACA,OAAO;AAAC,KACT,CAAA;AACD,IAAA,MAAM,EAAE,KAAA,EAAM,GAAI,iBAAA,CAAkB;AAAA,MAClC,OAAA,EAAS,OAAA;AAAA,MACT,MAAM,IAAA,IAAQ,EAAA;AAAA,MACd,QAAQ,IAAA,CAAK,aAAA;AAAA,MACb,QAAA,EAAU,CAAA;AAAA,MACV,aAAA,EAAe,CAAA;AAAA,MACf;AAAA,KACD,CAAA;AAED,IAAA,MAAM,KAAA,GAAQ;AAAA,MACZ,IAAA,EAAM,aAAA;AAAA,MACN,EAAA,EAAI,eAAA;AAAA,MACJ,SAAA,EAAW;AAAA,QACT,WAAW,KAAA,CAAM,SAAA;AAAA,QACjB,OAAA;AAAA,QACA,aAAA,EAAe,OAAO,CAAC,CAAA;AAAA,QACvB,eAAe,KAAA,CAAM;AAAA;AACvB,KACF;AACA,IAAA,OAAO,OAAA,CAAQ,QAAQ,KAAK,CAAA;AAAA,EAC9B;AAAA,EAEA,MAAM,gBAAA,GAAiD;AACrD,IAAA,IAAI,CAAC,KAAK,aAAA,EAAe;AACvB,MAAA,MAAM,IAAI,MAAM,0BAA0B,CAAA;AAAA,IAC5C;AAEA,IAAA,OAAO,OAAA,CAAQ,OAAA,CAAQ,IAAA,CAAK,aAAa,CAAA;AAAA,EAC3C;AAAA,EAEA,MAAM,OAAA,CACJ,aAAA,EACA,eAAA,EACA,KACA,KAAA,EACmC;AACnC,IAAA,IAAI,CAAC,KAAK,aAAA,EAAe;AACvB,MAAA,MAAM,IAAI,MAAM,0BAA0B,CAAA;AAAA,IAC5C;AAEA,IAAA,MAAM,OAAA,GAAU,yBAAyB,QAAA,CAAS;AAAA,MAChD,eAAA;AAAA,MACA,MAAA,EAAQ,aAAA;AAAA,MACR,GAAA;AAAA,MACA,KAAA,EAAO,SAAS;AAAC,KAClB,CAAA;AAED,IAAA,MAAM,QAAA,GAAW,MAAM,IAAA,CAAK,cAAA,CAAe,0BAAA,CAA2B;AAAA,MACpE,IAAA,EAAM,OAAA;AAAA,MACN,kBAAkB,IAAA,CAAK;AAAA,KACxB,CAAA;AAED,IAAA,OAAO,wBAAA,CAAyB,eAAe,QAAQ,CAAA;AAAA,EACzD;AACF;ACjEA,SAAS,+BACP,YAAA,EAC8C;AAC9C,EAAA,OAAO,YAAA,IAAgB,YAAA;AACzB;AAEA,SAAS,qCACP,YAAA,EACoD;AACpD,EAAA,OAAO,QAAA,IAAY,YAAA,IAAgB,EAAE,YAAA,CAAa,MAAA,YAAkB,OAAA,CAAA;AACtE;AAEO,IAAM,uBAAN,MAA4D;AAAA,EAChD,MAAA;AAAA,EACD,UAAA;AAAA,EACC,aAAA;AAAA,EAEjB,YAAY,YAAA,EAAkC;AAC5C,IAAA,IAAI,8BAAA,CAA+B,YAAY,CAAA,EAAG;AAChD,MAAA,IAAA,CAAK,MAAA,GAAS,OAAA,CAAQ,aAAA,CAAc,YAAA,CAAa,UAAU,CAAA;AAC3D,MAAA,IAAA,CAAK,UAAA,GAAa,IAAI,UAAA,CAAW,YAAA,CAAa,UAAU,WAAW,CAAA;AACnE,MAAA,IAAA,CAAK,aAAA,GAAgB,KAAA;AAAA,IACvB,CAAA,MAAA,IAAW,oCAAA,CAAqC,YAAY,CAAA,EAAG;AAC7D,MAAA,IAAA,CAAK,SAAS,YAAA,CAAa,MAAA;AAC3B,MAAA,IAAA,CAAK,aAAa,YAAA,CAAa,UAAA;AAC/B,MAAA,IAAA,CAAK,aAAA,GAAgB,IAAA;AAAA,IACvB,CAAA,MAAO;AACL,MAAA,MAAM,IAAI,MAAM,8BAA8B,CAAA;AAAA,IAChD;AAAA,EACF;AAAA,EAEA,MAAa,mBAAA,CACX,SAAA,EACA,UAAA,GAAyB,WAAA,EACoC;AAC7D,IAAA,MAAM,eAAA,GAAkB,MAAM,IAAA,CAAK,UAAA,CAAW,kBAAA,EAAmB;AACjE,IAAA,MAAM,QAAA,GAAW,MAAM,IAAA,CAAK,UAAA,CAAW,kBAAA;AAAA,MACrC;AAAA,QACE,SAAA;AAAA,QACA,WAAW,eAAA,CAAgB,SAAA;AAAA,QAC3B,sBAAsB,eAAA,CAAgB;AAAA,OACxC;AAAA,MACA;AAAA,KACF;AAEA,IAAA,OAAO,QAAA;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,MAAa,gBAAgB,cAAA,EAA2E;AACtG,IAAA,OAAO,IAAA,CAAK,UAAA,CAAW,kBAAA,CAAmB,cAAc,CAAA;AAAA,EAC1D;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,MAAa,+BAAA,CACX,cAAA,EACA,UAAA,GAAyB,WAAA,EACM;AAC/B,IAAA,MAAM,MAAA,GAAS,MAAM,IAAA,CAAK,UAAA,CAAW,mBAAmB,cAAc,CAAA;AACtE,IAAA,MAAM,IAAA,CAAK,mBAAA,CAAoB,MAAA,EAAQ,UAAU,CAAA;AACjD,IAAA,OAAO,MAAA;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,MAAM,WAAW,eAAA,EAA0F;AACzG,IAAA,IAAI,KAAK,aAAA,EAAe;AACtB,MAAA,OAAO,IAAA,CAAK,sBAAsB,eAAe,CAAA;AAAA,IACnD;AACA,IAAA,OAAO,IAAA,CAAK,sBAAsB,eAAe,CAAA;AAAA,EACnD;AAAA,EAEA,MAAc,sBACZ,eAAA,EACsC;AACtC,IAAA,MAAM,gBAAgB,IAAA,CAAK,MAAA;AAE3B,IAAA,IAAI,CAAC,cAAc,SAAA,EAAW;AAC5B,MAAA,MAAM,IAAI,MAAM,sCAAsC,CAAA;AAAA,IACxD;AAEA,IAAA,IAAI,CAAC,cAAc,eAAA,EAAiB;AAClC,MAAA,MAAM,IAAI,MAAM,2CAA2C,CAAA;AAAA,IAC7D;AAEA,IAAA,MAAM,YAAA,GAAe,IAAA,CAAK,2BAAA,CAA4B,eAAe,CAAA;AACrE,IAAA,MAAM,eAAA,GAAkB,MAAM,IAAA,CAAK,UAAA,CAAW,kBAAA,EAAmB;AACjE,IAAA,MAAM,SAAA,GAAY,IAAI,kBAAA,CAAmB;AAAA,MACvC,UAAU,aAAA,CAAc,SAAA;AAAA,MACxB,iBAAiB,eAAA,CAAgB,SAAA;AAAA,MACjC;AAAA,KACD,EAAE,kBAAA,EAAmB;AAEtB,IAAA,MAAM,KAAK,MAAM,aAAA,CAAc,gBAAgB,IAAI,oBAAA,CAAqB,SAAS,CAAC,CAAA;AAClF,IAAA,OAAO,GAAG,SAAA,EAAU;AAAA,EACtB;AAAA,EAEA,MAAc,sBACZ,eAAA,EACsC;AACtC,IAAA,MAAM,gBAAgB,IAAA,CAAK,MAAA;AAC3B,IAAA,MAAM,YAAA,GAAe,IAAA,CAAK,2BAAA,CAA4B,eAAe,CAAA;AAErE,IAAA,MAAM,SAAA,GAAY,IAAI,kBAAA,CAAmB;AAAA,MACvC,UAAU,aAAA,CAAc,SAAA;AAAA,MACxB,eAAA,EAAA,CAAkB,MAAM,IAAA,CAAK,UAAA,CAAW,oBAAmB,EAAG,SAAA;AAAA,MAC9D;AAAA,KACD,EAAE,kBAAA,EAAmB;AAEtB,IAAA,MAAM,EAAA,GAAK,IAAI,oBAAA,CAAqB,SAAS,CAAA;AAC7C,IAAA,EAAA,CAAG,IAAA,CAAK,CAAC,aAAa,CAAC,CAAA;AAEvB,IAAA,OAAO,GAAG,SAAA,EAAU;AAAA,EACtB;AAAA,EAEO,wBAAA,GAAkD;AACvD,IAAA,IAAI,CAAC,IAAA,CAAK,MAAA,CAAO,SAAA,EAAW;AAC1B,MAAA,MAAM,IAAI,MAAM,sCAAsC,CAAA;AAAA,IACxD;AACA,IAAA,OAAO,IAAA,CAAK,MAAA,CAAO,SAAA,CAAU,QAAA,EAAS;AAAA,EACxC;AAAA,EAEA,MAAa,gBAAA,GAAoC;AAC/C,IAAA,OAAO,KAAK,wBAAA,EAAyB;AAAA,EACvC;AAAA,EAEA,MAAa,0BAA0B,IAAA,EAA6D;AAClG,IAAA,IAAI,CAAC,IAAA,CAAK,MAAA,CAAO,SAAA,EAAW;AAC1B,MAAA,MAAM,IAAI,MAAM,sCAAsC,CAAA;AAAA,IACxD;AAEA,IAAA,OAAA,CAAQ,MAAM,yBAAA,CAA0B,IAAI,SAAA,CAAU,IAAI,CAAA,EAAG,IAAA,CAAK,MAAA,CAAO,SAAA,EAAW,IAAI,CAAA,EAAG,QAAA,EAAS;AAAA,EACtG;AAAA,EAEA,MAAa,WAAW,SAAA,EAAmD;AACzE,IAAA,OAAO,MAAM,IAAA,CAAK,UAAA,CAAW,WAAW,IAAI,SAAA,CAAU,SAAS,CAAC,CAAA;AAAA,EAClE;AAAA,EAEA,MAAa,uBAAuB,SAAA,EAA+E;AACjH,IAAA,OAAO,KAAK,UAAA,CAAW,sBAAA,CAAuB,IAAI,SAAA,CAAU,SAAS,CAAC,CAAA;AAAA,EACxE;AAAA,EAEQ,4BAA4B,eAAA,EAA8E;AAChH,IAAA,OAAO,eAAA,CAAgB,GAAA;AAAA,MACrB,CAAA,cAAA,KACE,IAAI,sBAAA,CAAuB;AAAA,QACzB,IAAA,EAAM,cAAA,CAAe,IAAA,CAAK,GAAA,CAAI,CAAC,GAAA,MAA4B;AAAA,UACzD,MAAA,EAAQ,IAAI,SAAA,CAAU,GAAA,CAAI,MAAM,CAAA;AAAA,UAChC,UAAU,GAAA,CAAI,QAAA;AAAA,UACd,YAAY,GAAA,CAAI;AAAA,SAClB,CAAE,CAAA;AAAA,QACF,SAAA,EAAW,IAAI,SAAA,CAAU,cAAA,CAAe,SAAS,CAAA;AAAA,QACjD,IAAA,EAAM,MAAA,CAAO,IAAA,CAAK,cAAA,CAAe,IAAI;AAAA,OACtC;AAAA,KACL;AAAA,EACF;AACF;AC5MA,IAAM,oBAAA,GAA4D;AAAA,EAChE,OAAA,EAAS,qCAAA;AAAA,EACT,MAAA,EAAQ;AACV,CAAA;AAEA,IAAM,2BAAA,GAAmE;AAAA,EACvE,SAAS,QAAA,CAAS,OAAA;AAAA,EAClB,QAAQ,QAAA,CAAS;AACnB,CAAA;AAEA,IAAM,gBAAA,GAAmB,GAAA;AACzB,IAAM,eAAA,GAAkB,GAAA;AAyCjB,IAAM,kBAAA,GAAN,cAAiC,KAAA,CAAM;AAAA,EAC5C,WAAA,CACE,SACgB,IAAA,EAChB;AACA,IAAA,KAAA,CAAM,OAAO,CAAA;AAFG,IAAA,IAAA,CAAA,IAAA,GAAA,IAAA;AAGhB,IAAA,IAAA,CAAK,IAAA,GAAO,oBAAA;AAAA,EACd;AACF;AAEO,SAAS,gCAAgC,MAAA,EAAsE;AACpH,EAAA,OAAO,OAAO,IAAA,KAAS,aAAA;AACzB;AAEO,SAAS,sCACd,MAAA,EAC+C;AAC/C,EAAA,OAAO,OAAO,IAAA,KAAS,mBAAA;AACzB;AAEO,SAAS,kBAAkB,MAAA,EAAkD;AAClF,EAAA,OAAO,OAAO,IAAA,KAAS,aAAA;AACzB;AAEO,SAAS,gCAAgC,MAAA,EAAgE;AAC9G,EAAA,OAAO,OAAO,IAAA,KAAS,mBAAA;AACzB;AAEO,SAAS,sBAAsB,OAAA,EAA4C;AAChF,EAAA,OAAO,CAAC,SAAA,EAAW,QAAQ,CAAA,CAAE,SAAS,OAAO,CAAA;AAC/C;AAEO,SAAS,yBAAyB,UAAA,EAA6B;AACpE,EAAA,IAAI;AAEF,IAAA,MAAM,GAAA,GAAM,WAAW,UAAA,CAAW,IAAI,IAAI,UAAA,CAAW,KAAA,CAAM,CAAC,CAAA,GAAI,UAAA;AAChE,IAAAE,SAAAA,CAAQ,WAAW,GAAG,CAAA;AACtB,IAAA,OAAO,IAAA;AAAA,EACT,CAAA,CAAA,MAAQ;AACN,IAAA,OAAO,KAAA;AAAA,EACT;AACF;AAEO,IAAM,wBAAN,MAA8D;AAAA,EAClD,MAAA;AAAA,EACA,MAAA;AAAA,EACA,iBAAA;AAAA,EAEjB,YAAY,MAAA,EAA6B;AACvC,IAAA,IAAI,CAAC,qBAAA,CAAsB,MAAA,CAAO,OAAO,CAAA,EAAG;AAC1C,MAAA,MAAM,IAAI,kBAAA,CAAmB,CAAA,iBAAA,EAAoB,MAAA,CAAO,OAAO,IAAI,iBAAiB,CAAA;AAAA,IACtF;AAEA,IAAA,IAAI,+BAAA,CAAgC,MAAM,CAAA,EAAG;AAC3C,MAAA,IAAI,CAAC,wBAAA,CAAyB,MAAA,CAAO,UAAU,CAAA,EAAG;AAChD,QAAA,MAAM,IAAI,kBAAA,CAAmB,4BAAA,EAA8B,qBAAqB,CAAA;AAAA,MAClF;AAEA,MAAA,MAAM,UAAA,GAAa,MAAA,CAAO,UAAA,CAAW,UAAA,CAAW,IAAI,CAAA,GAAI,MAAA,CAAO,UAAA,CAAW,KAAA,CAAM,CAAC,CAAA,GAAI,MAAA,CAAO,UAAA;AAC5F,MAAA,IAAA,CAAK,MAAA,GAAS;AAAA,QACZ,IAAA,EAAM,aAAA;AAAA,QACN,OAAA,EAASA,SAAAA,CAAQ,UAAA,CAAW,UAAU;AAAA,OACxC;AACA,MAAA,IAAA,CAAK,MAAA,GAAS,IAAI,OAAA,CAAQ,MAAA,CAAO,OAAO,MAAA,IAAU,oBAAA,CAAqB,MAAA,CAAO,OAAO,CAAC,CAAA;AACtF,MAAA,IAAA,CAAK,iBAAA,GAAoB,2BAAA,CAA4B,MAAA,CAAO,OAAO,CAAA;AACnE,MAAA;AAAA,IACF;AAEA,IAAA,IAAI,qCAAA,CAAsC,MAAM,CAAA,EAAG;AACjD,MAAA,IAAA,CAAK,MAAA,GAAS;AAAA,QACZ,IAAA,EAAM,mBAAA;AAAA,QACN,YAAY,MAAA,CAAO;AAAA,OACrB;AACA,MAAA,IAAA,CAAK,MAAA,GAAS,IAAI,OAAA,CAAQ,MAAA,CAAO,OAAO,MAAA,IAAU,oBAAA,CAAqB,MAAA,CAAO,OAAO,CAAC,CAAA;AACtF,MAAA,IAAA,CAAK,iBAAA,GAAoB,2BAAA,CAA4B,MAAA,CAAO,OAAO,CAAA;AACnE,MAAA;AAAA,IACF;AAEA,IAAA,MAAM,IAAI,kBAAA,CAAmB,8BAAA,EAAgC,gBAAgB,CAAA;AAAA,EAC/E;AAAA,EAEA,MAAa,gBAAA,GAAoC;AAC/C,IAAA,IAAI;AACF,MAAA,IAAI,iBAAA,CAAkB,IAAA,CAAK,MAAM,CAAA,EAAG;AAClC,QAAA,OAAO,IAAA,CAAK,MAAA,CAAO,OAAA,CAAQ,SAAA,EAAU;AAAA,MACvC;AAEA,MAAA,MAAM,EAAE,OAAA,EAAQ,GAAI,MAAM,IAAA,CAAK,MAAA,CAAO,WAAW,UAAA,EAAW;AAC5D,MAAA,OAAO,OAAA;AAAA,IACT,SAAS,KAAA,EAAO;AACd,MAAA,MAAM,IAAI,kBAAA;AAAA,QACR,KAAA,YAAiB,KAAA,GAAQ,KAAA,CAAM,OAAA,GAAU,8BAAA;AAAA,QACzC;AAAA,OACF;AAAA,IACF;AAAA,EACF;AAAA,EAEA,MAAa,gBAAgB,EAAA,EAAuB;AAClD,IAAA,IAAI;AACF,MAAA,IAAI,iBAAA,CAAkB,IAAA,CAAK,MAAM,CAAA,EAAG;AAElC,QAAA,MAAM,WAAA,GAAc,IAAI,WAAA,CAAY,EAAA,EAAI,KAAK,iBAAiB,CAAA;AAC9D,QAAA,WAAA,CAAY,IAAA,CAAK,IAAA,CAAK,MAAA,CAAO,OAAO,CAAA;AACpC,QAAA,OAAO,YAAY,KAAA,EAAM;AAAA,MAC3B;AAEA,MAAA,MAAM,EAAE,aAAY,GAAI,MAAM,KAAK,MAAA,CAAO,UAAA,CAAW,gBAAgB,EAAA,EAAI;AAAA,QACvE,mBAAmB,IAAA,CAAK;AAAA,OACzB,CAAA;AACD,MAAA,OAAO,WAAA;AAAA,IACT,SAAS,KAAA,EAAO;AACd,MAAA,MAAM,IAAI,kBAAA;AAAA,QACR,KAAA,YAAiB,KAAA,GAAQ,KAAA,CAAM,OAAA,GAAU,4BAAA;AAAA,QACzC;AAAA,OACF;AAAA,IACF;AAAA,EACF;AAAA,EAEA,MAAa,0BAA0B,MAAA,EAAuD;AAC5F,IAAA,MAAM,SAAA,GAAY,KAAK,GAAA,EAAI;AAC3B,IAAA,OAAO,IAAA,CAAK,GAAA,EAAI,GAAI,SAAA,GAAY,eAAA,EAAiB;AAC/C,MAAA,IAAI;AACF,QAAA,MAAM,EAAA,GAAK,MAAM,IAAA,CAAK,MAAA,CAAO,cAAa,CAAE,WAAA,CAAY,MAAM,CAAA,CAAE,IAAA,EAAK;AAErE,QAAA,OAAO;AAAA,UACL,GAAG,EAAA;AAAA,UACH,MAAA,EAAQ;AAAA,YACN,GAAG,EAAA,CAAG,MAAA;AAAA,YACN,WAAA,EAAa,GAAG,MAAA,CAAO;AAAA;AACzB,SACF;AAAA,MACF,SAAS,KAAA,EAAO;AAEd,QAAA,MAAM,IAAI,OAAA,CAAQ,CAAA,OAAA,KAAW,UAAA,CAAW,OAAA,EAAS,gBAAgB,CAAC,CAAA;AAAA,MACpE;AAAA,IACF;AACA,IAAA,MAAM,IAAI,kBAAA;AAAA,MACR,CAAA,uCAAA,EAA0C,MAAM,CAAA,OAAA,EAAU,eAAA,GAAkB,GAAI,CAAA,SAAA,CAAA;AAAA,MAChF;AAAA,KACF;AAAA,EACF;AACF","file":"index.mjs","sourcesContent":["import type { ChainId, EvmRawTransaction, EvmRawTransactionReceipt, IEvmWalletProvider } from '@sodax/types';\nimport type { Account, Address, Chain, Transport, Hash, PublicClient, WalletClient } from 'viem';\nimport { privateKeyToAccount } from 'viem/accounts';\nimport { createWalletClient, createPublicClient, http } from 'viem';\nimport { sonic, avalanche, arbitrum, base, optimism, bsc, polygon, nibiru } from 'viem/chains';\nimport {\n SONIC_MAINNET_CHAIN_ID,\n AVALANCHE_MAINNET_CHAIN_ID,\n ARBITRUM_MAINNET_CHAIN_ID,\n BASE_MAINNET_CHAIN_ID,\n OPTIMISM_MAINNET_CHAIN_ID,\n BSC_MAINNET_CHAIN_ID,\n POLYGON_MAINNET_CHAIN_ID,\n NIBIRU_MAINNET_CHAIN_ID,\n} from '@sodax/types';\n\nexport function getEvmViemChain(id: ChainId): Chain {\n switch (id) {\n case SONIC_MAINNET_CHAIN_ID:\n return sonic;\n case AVALANCHE_MAINNET_CHAIN_ID:\n return avalanche;\n case ARBITRUM_MAINNET_CHAIN_ID:\n return arbitrum;\n case BASE_MAINNET_CHAIN_ID:\n return base;\n case OPTIMISM_MAINNET_CHAIN_ID:\n return optimism;\n case BSC_MAINNET_CHAIN_ID:\n return bsc;\n case POLYGON_MAINNET_CHAIN_ID:\n return polygon;\n case NIBIRU_MAINNET_CHAIN_ID:\n return nibiru;\n default:\n throw new Error(`Unsupported EVM chain ID: ${id}`);\n }\n}\n\nexport class EvmWalletProvider implements IEvmWalletProvider {\n private readonly walletClient: WalletClient<Transport, Chain, Account>;\n public readonly publicClient: PublicClient;\n\n constructor(config: EvmWalletConfig) {\n if (isPrivateKeyEvmWalletConfig(config)) {\n const chain = getEvmViemChain(config.chainId);\n this.walletClient = createWalletClient({\n chain,\n transport: http(config.rpcUrl ?? chain.rpcUrls.default.http[0]),\n account: privateKeyToAccount(config.privateKey),\n });\n this.publicClient = createPublicClient({\n chain,\n transport: http(config.rpcUrl ?? chain.rpcUrls.default.http[0]),\n });\n } else if (isBrowserExtensionEvmWalletConfig(config)) {\n this.walletClient = config.walletClient;\n this.publicClient = config.publicClient;\n } else {\n throw new Error('Invalid EVM wallet config');\n }\n }\n\n async sendTransaction(evmRawTx: EvmRawTransaction): Promise<Hash> {\n return this.walletClient.sendTransaction(evmRawTx);\n }\n\n async waitForTransactionReceipt(txHash: Hash): Promise<EvmRawTransactionReceipt> {\n const receipt = await this.publicClient.waitForTransactionReceipt({ hash: txHash });\n return {\n ...receipt,\n transactionIndex: receipt.transactionIndex.toString(),\n blockNumber: receipt.blockNumber.toString(),\n cumulativeGasUsed: receipt.cumulativeGasUsed.toString(),\n gasUsed: receipt.gasUsed.toString(),\n contractAddress: receipt.contractAddress?.toString() ?? null,\n logs: receipt.logs.map(log => ({\n ...log,\n blockNumber: log.blockNumber.toString() as `0x${string}`,\n logIndex: log.logIndex.toString() as `0x${string}`,\n transactionIndex: log.transactionIndex.toString() as `0x${string}`,\n })),\n effectiveGasPrice: receipt.effectiveGasPrice.toString(),\n };\n }\n\n async getWalletAddress(): Promise<Address> {\n return this.walletClient.account.address;\n }\n}\n\n/**\n * EVM Wallet Configuration Types\n */\n\nexport type PrivateKeyEvmWalletConfig = {\n privateKey: `0x${string}`;\n chainId: ChainId;\n rpcUrl?: `http${string}`;\n};\n\nexport type BrowserExtensionEvmWalletConfig = {\n walletClient: WalletClient<Transport, Chain, Account>;\n publicClient: PublicClient;\n};\n\nexport type EvmWalletConfig = PrivateKeyEvmWalletConfig | BrowserExtensionEvmWalletConfig;\n\n/**\n * EVM Type Guards\n */\n\nexport function isPrivateKeyEvmWalletConfig(config: EvmWalletConfig): config is PrivateKeyEvmWalletConfig {\n return 'privateKey' in config && config.privateKey.startsWith('0x');\n}\n\nexport function isBrowserExtensionEvmWalletConfig(config: EvmWalletConfig): config is BrowserExtensionEvmWalletConfig {\n return 'walletClient' in config && 'publicClient' in config;\n}\n","import { SuiClient } from '@mysten/sui/client';\nimport { Ed25519Keypair } from '@mysten/sui/keypairs/ed25519';\nimport type { Transaction, TransactionArgument } from '@mysten/sui/transactions';\nimport type { ISuiWalletProvider, SuiTransaction, SuiExecutionResult, SuiPaginatedCoins } from '@sodax/types';\nimport {\n signTransaction,\n type SuiWalletFeatures,\n type WalletAccount,\n type WalletWithFeatures,\n} from '@mysten/wallet-standard';\n\n// Private key wallet config\nexport type PrivateKeySuiWalletConfig = {\n rpcUrl: string;\n mnemonics: string;\n};\n\n// Browser extension wallet config\nexport type BrowserExtensionSuiWalletConfig = {\n client: SuiClient;\n wallet: WalletWithFeatures<Partial<SuiWalletFeatures>>;\n account: WalletAccount;\n};\n\n// Unified config type\nexport type SuiWalletConfig = PrivateKeySuiWalletConfig | BrowserExtensionSuiWalletConfig;\n\n// Type guards\nfunction isPrivateKeySuiWalletConfig(walletConfig: SuiWalletConfig): walletConfig is PrivateKeySuiWalletConfig {\n return 'mnemonics' in walletConfig;\n}\n\nfunction isBrowserExtensionSuiWalletConfig(\n walletConfig: SuiWalletConfig,\n): walletConfig is BrowserExtensionSuiWalletConfig {\n return 'wallet' in walletConfig && 'account' in walletConfig;\n}\n\nexport type PkSuiWallet = {\n keyPair: Ed25519Keypair;\n};\n\nexport type BrowserExtensionSuiWallet = {\n wallet: WalletWithFeatures<Partial<SuiWalletFeatures>>;\n account: WalletAccount;\n};\n\nexport type SuiWallet = PkSuiWallet | BrowserExtensionSuiWallet;\n\nexport function isPkSuiWallet(wallet: SuiWallet): wallet is PkSuiWallet {\n return 'keyPair' in wallet;\n}\n\nexport function isBrowserExtensionSuiWallet(wallet: SuiWallet): wallet is BrowserExtensionSuiWallet {\n return 'wallet' in wallet && 'account' in wallet;\n}\n\nexport function isSuiWallet(wallet: SuiWallet): wallet is SuiWallet {\n return isPkSuiWallet(wallet) || isBrowserExtensionSuiWallet(wallet);\n}\n\nexport class SuiWalletProvider implements ISuiWalletProvider {\n private readonly client: SuiClient;\n private readonly wallet: SuiWallet;\n\n constructor(walletConfig: SuiWalletConfig) {\n if (isPrivateKeySuiWalletConfig(walletConfig)) {\n this.client = new SuiClient({ url: walletConfig.rpcUrl });\n this.wallet = {\n keyPair: Ed25519Keypair.deriveKeypair(walletConfig.mnemonics),\n };\n } else if (isBrowserExtensionSuiWalletConfig(walletConfig)) {\n this.client = walletConfig.client;\n this.wallet = {\n wallet: walletConfig.wallet,\n account: walletConfig.account,\n };\n } else {\n throw new Error('Invalid wallet configuration');\n }\n }\n\n async signAndExecuteTxn(txn: SuiTransaction): Promise<string> {\n if (isPkSuiWallet(this.wallet)) {\n const res = await this.client.signAndExecuteTransaction({\n transaction: txn as unknown as Transaction,\n signer: this.wallet.keyPair,\n });\n\n return res.digest;\n }\n if (isBrowserExtensionSuiWallet(this.wallet)) {\n const browserWallet = this.wallet.wallet;\n const browserAccount = this.wallet.account;\n\n if (!browserAccount || browserAccount.chains.length === 0) {\n throw new Error('No chains available for wallet account');\n }\n const chain = browserAccount.chains[0];\n if (!chain) {\n throw new Error('No chain available for wallet account');\n }\n const { bytes, signature } = await signTransaction(browserWallet, {\n transaction: txn,\n account: browserAccount,\n chain,\n });\n\n const res = await this.client.executeTransactionBlock({\n transactionBlock: bytes,\n signature,\n options: {\n showRawEffects: true,\n },\n });\n\n return res.digest;\n }\n\n throw new Error('Invalid wallet configuration');\n }\n\n async viewContract(\n tx: Transaction,\n packageId: string,\n module: string,\n functionName: string,\n args: unknown[],\n typeArgs: string[] = [],\n ): Promise<SuiExecutionResult> {\n tx.moveCall({\n target: `${packageId}::${module}::${functionName}`,\n arguments: args as TransactionArgument[],\n typeArguments: typeArgs,\n });\n\n const sender = this.getSuiAddress();\n\n const txResults = await this.client.devInspectTransactionBlock({\n transactionBlock: tx,\n sender,\n });\n\n if (txResults.results && txResults.results[0] !== undefined) {\n return txResults.results[0] as SuiExecutionResult;\n }\n throw Error(`transaction didn't return any values: ${JSON.stringify(txResults, null, 2)}`);\n }\n\n async getCoins(address: string, token: string): Promise<SuiPaginatedCoins> {\n return this.client.getCoins({ owner: address, coinType: token, limit: 10 });\n }\n\n private getSuiAddress(): string {\n if (isPkSuiWallet(this.wallet)) {\n return this.wallet.keyPair.toSuiAddress();\n }\n if (isBrowserExtensionSuiWallet(this.wallet)) {\n return this.wallet.account.address;\n }\n throw new Error('Invalid wallet configuration');\n }\n\n async getWalletAddress(): Promise<string> {\n return this.getSuiAddress();\n }\n}\n","import type { IconTransactionResult, IcxCallTransaction, IIconWalletProvider } from '@sodax/types';\nimport type { IconService, Wallet as IconSdkWallet } from 'icon-sdk-js';\nimport { Converter, CallTransactionBuilder, Wallet, IconService as IconServiceConstructor } from 'icon-sdk-js';\n\nexport class IconWalletProvider implements IIconWalletProvider {\n private readonly wallet: IconWallet;\n public readonly iconService: IconService;\n\n constructor(wallet: IconWalletConfig) {\n if (isPrivateKeyIconWalletConfig(wallet)) {\n this.wallet = {\n type: 'PRIVATE_KEY',\n wallet: Wallet.loadPrivateKey(wallet.privateKey.slice(2)),\n };\n this.iconService = new IconServiceConstructor(new IconServiceConstructor.HttpProvider(wallet.rpcUrl));\n } else if (isBrowserExtensionIconWalletConfig(wallet)) {\n this.wallet = {\n type: 'BROWSER_EXTENSION',\n wallet: wallet.walletAddress,\n };\n this.iconService = new IconServiceConstructor(new IconServiceConstructor.HttpProvider(wallet.rpcUrl));\n } else {\n throw new Error('Invalid Icon wallet config');\n }\n }\n\n public async sendTransaction(tx: IcxCallTransaction): Promise<Hash> {\n const builtTx = new CallTransactionBuilder()\n .from(tx.from)\n .to(tx.to)\n .stepLimit(Converter.toHex(3000000))\n .nid(tx.nid)\n .version(tx.version ?? '0x3')\n .timestamp(Converter.toHex(tx.timestamp ?? new Date().getTime() * 1000))\n .value(tx.value)\n .method(tx.method)\n .params(tx.params)\n .build();\n\n if (!isIconPkWallet(this.wallet)) {\n // if wallet starts with 0x, it's a private key\n const result = await requestJsonRpc(builtTx);\n\n return result.result satisfies string as Hash;\n }\n const signedTx = new IconServiceConstructor.SignedTransaction(builtTx, this.wallet.wallet);\n const result = await this.iconService.sendTransaction(signedTx).execute();\n\n return result satisfies string as Hash;\n }\n\n public async waitForTransactionReceipt(txHash: Hash): Promise<IconTransactionResult> {\n const result = await this.iconService.waitTransactionResult(txHash).execute();\n\n return {\n ...result,\n status: +result.status,\n cumulativeStepUsed: BigNumberToBigInt(result.cumulativeStepUsed),\n stepUsed: BigNumberToBigInt(result.stepUsed),\n stepPrice: BigNumberToBigInt(result.stepPrice),\n } satisfies IconTransactionResult;\n }\n\n async getWalletAddress(): Promise<IconEoaAddress> {\n if (!this.wallet.wallet) {\n throw new Error('Wallet not initialized');\n }\n return isIconPkWallet(this.wallet) ? (this.wallet.wallet.getAddress() as IconEoaAddress) : this.wallet.wallet;\n }\n}\n\n/**\n * Icon Types\n */\n\nexport type IconJsonRpcVersion = '2.0';\n\nexport type Hex = `0x${string}`;\nexport type Hash = `0x${string}`;\nexport type IconAddress = `hx${string}` | `cx${string}`;\nexport type IconEoaAddress = `hx${string}`;\n\nexport type PrivateKeyIconWalletConfig = {\n privateKey: `0x${string}`;\n rpcUrl: `http${string}`;\n};\n\nexport type BrowserExtensionIconWalletConfig = {\n walletAddress?: IconEoaAddress;\n rpcUrl: `http${string}`;\n};\n\nexport type IconWalletConfig = PrivateKeyIconWalletConfig | BrowserExtensionIconWalletConfig;\n\nexport type IconPkWallet = {\n type: 'PRIVATE_KEY';\n wallet: IconSdkWallet;\n};\n\nexport type IconBrowserExtensionWallet = {\n type: 'BROWSER_EXTENSION';\n wallet?: IconEoaAddress;\n};\n\nexport type IconWallet = IconPkWallet | IconBrowserExtensionWallet;\n\nexport type HanaWalletRequestEvent =\n | 'REQUEST_HAS_ACCOUNT'\n | 'REQUEST_HAS_ADDRESS'\n | 'REQUEST_ADDRESS'\n | 'REQUEST_JSON'\n | 'REQUEST_SIGNING'\n | 'REQUEST_JSON-RPC';\nexport type HanaWalletResponseEvent =\n | 'RESPONSE_HAS_ACCOUNT'\n | 'RESPONSE_HAS_ADDRESS'\n | 'RESPONSE_ADDRESS'\n | 'RESPONSE_JSON-RPC'\n | 'RESPONSE_SIGNING'\n | 'CANCEL_SIGNING'\n | 'CANCEL_JSON-RPC';\n\nexport type ResponseAddressType = {\n type: 'RESPONSE_ADDRESS';\n payload: IconAddress;\n};\n\nexport type ResponseSigningType = {\n type: 'RESPONSE_SIGNING';\n payload: string;\n};\n\nexport type RelayRequestDetail = {\n type: HanaWalletRequestEvent;\n payload?: {\n jsonrpc: IconJsonRpcVersion;\n method: string;\n params: unknown;\n id: number | undefined;\n };\n};\n\nexport type RelayRequestSigning = {\n type: 'REQUEST_SIGNING';\n payload: {\n from: IconAddress;\n hash: string;\n };\n};\n\nexport type JsonRpcPayloadResponse = {\n id: number;\n result: string; // txHash\n};\n\ninterface RelayResponseEventDetail {\n type: HanaWalletResponseEvent;\n payload: unknown;\n}\n\n/**\n * Icon Type Guards\n */\n\nexport function isIconPkWallet(wallet: IconWallet): wallet is IconPkWallet {\n return wallet.type === 'PRIVATE_KEY';\n}\n\nexport function isIconBrowserExtensionWallet(wallet: IconWallet): wallet is IconBrowserExtensionWallet {\n return wallet.type === 'BROWSER_EXTENSION';\n}\n\nexport function isPrivateKeyIconWalletConfig(config: IconWalletConfig): config is PrivateKeyIconWalletConfig {\n return 'privateKey' in config && config.privateKey.startsWith('0x');\n}\n\nexport function isBrowserExtensionIconWalletConfig(\n config: IconWalletConfig,\n): config is BrowserExtensionIconWalletConfig {\n return 'walletAddress' in config && (isIconEoaAddress(config.walletAddress) || !config.walletAddress);\n}\n\nexport function isIconAddress(value: unknown): value is IconAddress {\n return typeof value === 'string' && /^hx[a-f0-9]{40}$|^cx[a-f0-9]{40}$/.test(value);\n}\n\nexport function isIconEoaAddress(value: unknown): value is IconEoaAddress {\n return typeof value === 'string' && /^hx[a-f0-9]{40}$/.test(value);\n}\n\nexport function isResponseAddressType(value: unknown): value is ResponseAddressType {\n return (\n typeof value === 'object' &&\n value !== null &&\n 'type' in value &&\n 'payload' in value &&\n value.type === 'RESPONSE_ADDRESS' &&\n isIconAddress(value.payload)\n );\n}\n\nexport function isResponseSigningType(value: unknown): value is ResponseSigningType {\n return (\n typeof value === 'object' &&\n value !== null &&\n 'type' in value &&\n 'payload' in value &&\n value.type === 'RESPONSE_SIGNING' &&\n typeof value.payload === 'string'\n );\n}\n\nexport function isJsonRpcPayloadResponse(value: unknown): value is JsonRpcPayloadResponse {\n return (\n typeof value === 'object' &&\n value !== null &&\n 'id' in value &&\n 'result' in value &&\n typeof value.result === 'string'\n );\n}\n\n/**\n * Methods to interact with Icon Browser Extension Wallet (e.g. Hana Wallet)\n */\n\nexport function requestAddress(): Promise<IconAddress> {\n return new Promise(resolve => {\n const eventHandler = (event: Event) => {\n const customEvent = event as CustomEvent<RelayResponseEventDetail>;\n const response = customEvent.detail;\n if (isResponseAddressType(response)) {\n window.removeEventListener('ICONEX_RELAY_RESPONSE', eventHandler as EventListener, false);\n resolve(response.payload);\n }\n };\n\n window.removeEventListener('ICONEX_RELAY_RESPONSE', eventHandler, false);\n window.addEventListener('ICONEX_RELAY_RESPONSE', eventHandler, false);\n window.dispatchEvent(\n new CustomEvent<RelayRequestDetail>('ICONEX_RELAY_REQUEST', {\n detail: {\n type: 'REQUEST_ADDRESS',\n },\n }),\n );\n });\n}\n\nexport function requestSigning(from: IconAddress, hash: string): Promise<string> {\n return new Promise((resolve, reject) => {\n const signRequest = new CustomEvent<RelayRequestSigning>('ICONEX_RELAY_REQUEST', {\n detail: {\n type: 'REQUEST_SIGNING',\n payload: {\n from,\n hash,\n },\n },\n });\n\n const eventHandler = (event: Event) => {\n const customEvent = event as CustomEvent<RelayResponseEventDetail>;\n const response = customEvent.detail;\n if (isResponseSigningType(response)) {\n window.removeEventListener('ICONEX_RELAY_RESPONSE', eventHandler as EventListener, false);\n\n // resolve signature\n resolve(response.payload);\n } else if (response.type === 'CANCEL_SIGNING') {\n reject(new Error('CANCEL_SIGNING'));\n }\n };\n\n window.removeEventListener('ICONEX_RELAY_RESPONSE', eventHandler as EventListener, false);\n window.addEventListener('ICONEX_RELAY_RESPONSE', eventHandler as EventListener, false);\n window.dispatchEvent(signRequest);\n });\n}\n\nexport function requestJsonRpc(rawTransaction: unknown, id = 99999): Promise<JsonRpcPayloadResponse> {\n return new Promise((resolve, reject) => {\n const eventHandler = (event: Event) => {\n const customEvent = event as CustomEvent<RelayResponseEventDetail>;\n const { type, payload } = customEvent.detail;\n if (type === 'RESPONSE_JSON-RPC') {\n window.removeEventListener('ICONEX_RELAY_RESPONSE', eventHandler as EventListener, false);\n\n if (isJsonRpcPayloadResponse(payload)) {\n resolve(payload);\n } else {\n reject(new Error('Invalid payload response type (expected JsonRpcPayloadResponse)'));\n }\n } else if (type === 'CANCEL_JSON-RPC') {\n window.removeEventListener('ICONEX_RELAY_RESPONSE', eventHandler as EventListener, false);\n reject(new Error('CANCEL_JSON-RPC'));\n }\n };\n\n window.removeEventListener('ICONEX_RELAY_RESPONSE', eventHandler as EventListener, false);\n window.addEventListener('ICONEX_RELAY_RESPONSE', eventHandler as EventListener, false);\n window.dispatchEvent(\n new CustomEvent<RelayRequestDetail>('ICONEX_RELAY_REQUEST', {\n detail: {\n type: 'REQUEST_JSON-RPC',\n payload: {\n jsonrpc: '2.0',\n method: 'icx_sendTransaction',\n params: rawTransaction,\n id: id,\n },\n },\n }),\n );\n });\n}\n\n/**\n * Icon Utils\n */\n\nexport function BigNumberToBigInt(bigNumber: BigNumber): bigint {\n if (!bigNumber.isInteger()) {\n throw new Error('Cannot convert decimal number to BigInt');\n }\n return BigInt(bigNumber.toFixed(0));\n}\n","import type { MsgBroadcaster } from '@injectivelabs/wallet-core';\nimport { MsgExecuteContract, MsgExecuteContractCompat, createTransaction } from '@injectivelabs/sdk-ts';\nimport type { Hex, JsonObject, InjectiveCoin, IInjectiveWalletProvider, InjectiveEoaAddress } from '@sodax/types';\nimport { InjectiveExecuteResponse, type InjectiveRawTransaction } from '@sodax/types';\n\n/**\n * Injective Wallet Configuration Types\n */\n\nexport type BrowserExtensionInjectiveWalletConfig = {\n msgBroadcaster: MsgBroadcaster;\n walletAddress: InjectiveEoaAddress | undefined;\n};\n\nexport type InjectiveWalletConfig = BrowserExtensionInjectiveWalletConfig;\n\n/**\n * Injective Type Guards\n */\n\nexport function isBrowserExtensionInjectiveWalletConfig(\n config: InjectiveWalletConfig,\n): config is BrowserExtensionInjectiveWalletConfig {\n return 'msgBroadcaster' in config && 'walletAddress' in config;\n}\n\nexport class InjectiveWalletProvider implements IInjectiveWalletProvider {\n private msgBroadcaster: MsgBroadcaster;\n public walletAddress: InjectiveEoaAddress | undefined;\n\n constructor(config: InjectiveWalletConfig) {\n if (isBrowserExtensionInjectiveWalletConfig(config)) {\n this.msgBroadcaster = config.msgBroadcaster;\n this.walletAddress = config.walletAddress;\n } else {\n throw new Error('Invalid Injective wallet config');\n }\n }\n\n getRawTransaction(\n chainId: string,\n _: string,\n senderAddress: string,\n contractAddress: string,\n msg: JsonObject,\n memo?: string,\n ): Promise<InjectiveRawTransaction> {\n if (!this.walletAddress) {\n throw new Error('Wallet address not found');\n }\n\n const msgExec = MsgExecuteContract.fromJSON({\n contractAddress: contractAddress,\n sender: senderAddress,\n msg: msg as object,\n funds: [],\n });\n const { txRaw } = createTransaction({\n message: msgExec,\n memo: memo || '',\n pubKey: this.walletAddress,\n sequence: 0,\n accountNumber: 0,\n chainId: chainId,\n });\n\n const rawTx = {\n from: senderAddress as Hex,\n to: contractAddress as Hex,\n signedDoc: {\n bodyBytes: txRaw.bodyBytes,\n chainId: chainId,\n accountNumber: BigInt(0),\n authInfoBytes: txRaw.authInfoBytes,\n },\n };\n return Promise.resolve(rawTx);\n }\n\n async getWalletAddress(): Promise<InjectiveEoaAddress> {\n if (!this.walletAddress) {\n throw new Error('Wallet address not found');\n }\n\n return Promise.resolve(this.walletAddress);\n }\n\n async execute(\n senderAddress: string,\n contractAddress: string,\n msg: JsonObject,\n funds?: InjectiveCoin[],\n ): Promise<InjectiveExecuteResponse> {\n if (!this.walletAddress) {\n throw new Error('Wallet address not found');\n }\n\n const msgExec = MsgExecuteContractCompat.fromJSON({\n contractAddress: contractAddress,\n sender: senderAddress,\n msg: msg as object,\n funds: funds || [],\n });\n\n const txResult = await this.msgBroadcaster.broadcastWithFeeDelegation({\n msgs: msgExec,\n injectiveAddress: this.walletAddress,\n });\n\n return InjectiveExecuteResponse.fromTxResponse(txResult);\n }\n}\n","import { getAssociatedTokenAddress } from '@solana/spl-token';\nimport {\n type Commitment,\n Connection,\n Keypair,\n PublicKey,\n type RpcResponseAndContext,\n type TokenAmount,\n TransactionInstruction,\n TransactionMessage,\n VersionedTransaction,\n} from '@solana/web3.js';\nimport type {\n ISolanaWalletProvider,\n SolanaAccountMeta,\n SolanaBase58PublicKey,\n SolanaRpcResponseAndContext,\n SolanaSerializedTransaction,\n SolanaSignatureResult,\n SolanaRawTransactionInstruction,\n TransactionSignature,\n} from '@sodax/types';\nimport type { SignerWalletAdapterProps } from '@solana/wallet-adapter-base';\n\n// Wallet adapter pattern interface\ninterface WalletContextState {\n publicKey: PublicKey | null;\n signTransaction: SignerWalletAdapterProps['signTransaction'] | undefined;\n}\n\n// Direct keypair pattern configs\nexport type PrivateKeySolanaWalletConfig = {\n privateKey: Uint8Array;\n endpoint: string;\n};\n\n// Wallet adapter pattern config\nexport type BrowserExtensionSolanaWalletConfig = {\n wallet: WalletContextState;\n connection: Connection;\n};\n\n// Unified config type\nexport type SolanaWalletConfig = PrivateKeySolanaWalletConfig | BrowserExtensionSolanaWalletConfig;\n\n// Type guards\nfunction isPrivateKeySolanaWalletConfig(\n walletConfig: SolanaWalletConfig,\n): walletConfig is PrivateKeySolanaWalletConfig {\n return 'privateKey' in walletConfig;\n}\n\nfunction isBrowserExtensionSolanaWalletConfig(\n walletConfig: SolanaWalletConfig,\n): walletConfig is BrowserExtensionSolanaWalletConfig {\n return 'wallet' in walletConfig && !(walletConfig.wallet instanceof Keypair);\n}\n\nexport class SolanaWalletProvider implements ISolanaWalletProvider {\n private readonly wallet: Keypair | WalletContextState;\n public readonly connection: Connection;\n private readonly isAdapterMode: boolean;\n\n constructor(walletConfig: SolanaWalletConfig) {\n if (isPrivateKeySolanaWalletConfig(walletConfig)) {\n this.wallet = Keypair.fromSecretKey(walletConfig.privateKey);\n this.connection = new Connection(walletConfig.endpoint, 'confirmed');\n this.isAdapterMode = false;\n } else if (isBrowserExtensionSolanaWalletConfig(walletConfig)) {\n this.wallet = walletConfig.wallet;\n this.connection = walletConfig.connection;\n this.isAdapterMode = true;\n } else {\n throw new Error('Invalid wallet configuration');\n }\n }\n\n public async waitForConfirmation(\n signature: string,\n commitment: Commitment = 'finalized',\n ): Promise<SolanaRpcResponseAndContext<SolanaSignatureResult>> {\n const latestBlockhash = await this.connection.getLatestBlockhash();\n const response = await this.connection.confirmTransaction(\n {\n signature,\n blockhash: latestBlockhash.blockhash,\n lastValidBlockHeight: latestBlockhash.lastValidBlockHeight,\n },\n commitment,\n );\n\n return response;\n }\n\n /**\n * Send a raw transaction to the Solana network.\n * @param rawTransaction - The raw transaction to send.\n * @returns The transaction signature.\n */\n public async sendTransaction(rawTransaction: Uint8Array | Array<number>): Promise<TransactionSignature> {\n return this.connection.sendRawTransaction(rawTransaction);\n }\n\n /**\n * Send a raw transaction to the Solana network and wait for confirmation.\n * @param rawTransaction - The raw transaction to send.\n * @param commitment - The commitment level to use. Defaults to 'finalized'.\n * @returns The transaction signature.\n */\n public async sendTransactionWithConfirmation(\n rawTransaction: Uint8Array | Array<number>,\n commitment: Commitment = 'finalized',\n ): Promise<TransactionSignature> {\n const txHash = await this.connection.sendRawTransaction(rawTransaction);\n await this.waitForConfirmation(txHash, commitment);\n return txHash;\n }\n\n /**\n * Build a v0 versioned transaction.\n * @param instructions - The instructions to include in the transaction.\n * @returns The v0 transaction.\n */\n async buildV0Txn(rawInstructions: SolanaRawTransactionInstruction[]): Promise<SolanaSerializedTransaction> {\n if (this.isAdapterMode) {\n return this.buildV0TxnWithAdapter(rawInstructions);\n }\n return this.buildV0TxnWithKeypair(rawInstructions);\n }\n\n private async buildV0TxnWithAdapter(\n rawInstructions: SolanaRawTransactionInstruction[],\n ): Promise<SolanaSerializedTransaction> {\n const adapterWallet = this.wallet as WalletContextState;\n\n if (!adapterWallet.publicKey) {\n throw new Error('Wallet public key is not initialized');\n }\n\n if (!adapterWallet.signTransaction) {\n throw new Error('Wallet signTransaction is not initialized');\n }\n\n const instructions = this.buildTransactionInstruction(rawInstructions);\n const latestBlockhash = await this.connection.getLatestBlockhash();\n const messageV0 = new TransactionMessage({\n payerKey: adapterWallet.publicKey,\n recentBlockhash: latestBlockhash.blockhash,\n instructions,\n }).compileToV0Message();\n\n const tx = await adapterWallet.signTransaction(new VersionedTransaction(messageV0));\n return tx.serialize();\n }\n\n private async buildV0TxnWithKeypair(\n rawInstructions: SolanaRawTransactionInstruction[],\n ): Promise<SolanaSerializedTransaction> {\n const keypairWallet = this.wallet as Keypair;\n const instructions = this.buildTransactionInstruction(rawInstructions);\n\n const messageV0 = new TransactionMessage({\n payerKey: keypairWallet.publicKey,\n recentBlockhash: (await this.connection.getLatestBlockhash()).blockhash,\n instructions,\n }).compileToV0Message();\n\n const tx = new VersionedTransaction(messageV0);\n tx.sign([keypairWallet]);\n\n return tx.serialize();\n }\n\n public getWalletBase58PublicKey(): SolanaBase58PublicKey {\n if (!this.wallet.publicKey) {\n throw new Error('Wallet public key is not initialized');\n }\n return this.wallet.publicKey.toBase58();\n }\n\n public async getWalletAddress(): Promise<string> {\n return this.getWalletBase58PublicKey();\n }\n\n public async getAssociatedTokenAddress(mint: SolanaBase58PublicKey): Promise<SolanaBase58PublicKey> {\n if (!this.wallet.publicKey) {\n throw new Error('Wallet public key is not initialized');\n }\n\n return (await getAssociatedTokenAddress(new PublicKey(mint), this.wallet.publicKey, true)).toBase58();\n }\n\n public async getBalance(publicKey: SolanaBase58PublicKey): Promise<number> {\n return await this.connection.getBalance(new PublicKey(publicKey));\n }\n\n public async getTokenAccountBalance(publicKey: SolanaBase58PublicKey): Promise<RpcResponseAndContext<TokenAmount>> {\n return this.connection.getTokenAccountBalance(new PublicKey(publicKey));\n }\n\n private buildTransactionInstruction(rawInstructions: SolanaRawTransactionInstruction[]): TransactionInstruction[] {\n return rawInstructions.map(\n rawInstruction =>\n new TransactionInstruction({\n keys: rawInstruction.keys.map((key: SolanaAccountMeta) => ({\n pubkey: new PublicKey(key.pubkey),\n isSigner: key.isSigner,\n isWritable: key.isWritable,\n })),\n programId: new PublicKey(rawInstruction.programId),\n data: Buffer.from(rawInstruction.data),\n }),\n );\n }\n}\n","import type { Hex, IStellarWalletProvider, StellarRawTransactionReceipt, XDR } from '@sodax/types';\nimport { Networks, Horizon, Transaction, Keypair } from '@stellar/stellar-sdk';\n\ninterface StellarWalletsKit {\n getAddress(): Promise<{ address: string }>;\n signTransaction(tx: XDR, options: { networkPassphrase: string }): Promise<{ signedTxXdr: XDR }>;\n}\n\nexport type StellarNetwork = 'TESTNET' | 'PUBLIC';\n\nconst STELLAR_HORIZON_URLS: { [key in StellarNetwork]: string } = {\n TESTNET: 'https://horizon-testnet.stellar.org',\n PUBLIC: 'https://horizon.stellar.org',\n};\n\nconst STELLAR_NETWORK_PASSPHRASES: { [key in StellarNetwork]: string } = {\n TESTNET: Networks.TESTNET,\n PUBLIC: Networks.PUBLIC,\n};\n\nconst TX_POLL_INTERVAL = 2000; // 2 seconds\nconst TX_POLL_TIMEOUT = 60000; // 60 seconds\n\nconst STELLAR_ERROR_CODES = {\n INVALID_CONFIG: 'INVALID_CONFIG',\n SIGN_TX_ERROR: 'SIGN_TX_ERROR',\n TX_RECEIPT_TIMEOUT: 'TX_RECEIPT_TIMEOUT',\n SEND_TX_ERROR: 'SEND_TX_ERROR',\n INVALID_NETWORK: 'INVALID_NETWORK',\n INVALID_PRIVATE_KEY: 'INVALID_PRIVATE_KEY',\n} as const;\n\nexport type StellarAddress = string; // Stellar addresses are in format: G...\n\nexport type PrivateKeyStellarWalletConfig = {\n type: 'PRIVATE_KEY';\n privateKey: Hex;\n network: StellarNetwork;\n rpcUrl?: string;\n};\n\nexport type BrowserExtensionStellarWalletConfig = {\n type: 'BROWSER_EXTENSION';\n walletsKit: StellarWalletsKit;\n network: StellarNetwork;\n rpcUrl?: string;\n};\n\nexport type StellarWalletConfig = PrivateKeyStellarWalletConfig | BrowserExtensionStellarWalletConfig;\n\nexport type StellarPkWallet = {\n type: 'PRIVATE_KEY';\n keypair: Keypair;\n};\n\nexport type StellarBrowserExtensionWallet = {\n type: 'BROWSER_EXTENSION';\n walletsKit: StellarWalletsKit;\n};\n\nexport type StellarWallet = StellarPkWallet | StellarBrowserExtensionWallet;\n\nexport class StellarWalletError extends Error {\n constructor(\n message: string,\n public readonly code: keyof typeof STELLAR_ERROR_CODES,\n ) {\n super(message);\n this.name = 'StellarWalletError';\n }\n}\n\nexport function isPrivateKeyStellarWalletConfig(config: StellarWalletConfig): config is PrivateKeyStellarWalletConfig {\n return config.type === 'PRIVATE_KEY';\n}\n\nexport function isBrowserExtensionStellarWalletConfig(\n config: StellarWalletConfig,\n): config is BrowserExtensionStellarWalletConfig {\n return config.type === 'BROWSER_EXTENSION';\n}\n\nexport function isStellarPkWallet(wallet: StellarWallet): wallet is StellarPkWallet {\n return wallet.type === 'PRIVATE_KEY';\n}\n\nexport function isStellarBrowserExtensionWallet(wallet: StellarWallet): wallet is StellarBrowserExtensionWallet {\n return wallet.type === 'BROWSER_EXTENSION';\n}\n\nexport function isValidStellarNetwork(network: string): network is StellarNetwork {\n return ['TESTNET', 'PUBLIC'].includes(network);\n}\n\nexport function isValidStellarPrivateKey(privateKey: string): boolean {\n try {\n // Remove '0x' prefix if present\n const key = privateKey.startsWith('0x') ? privateKey.slice(2) : privateKey;\n Keypair.fromSecret(key);\n return true;\n } catch {\n return false;\n }\n}\n\nexport class StellarWalletProvider implements IStellarWalletProvider {\n private readonly wallet: StellarWallet;\n private readonly server: Horizon.Server;\n private readonly networkPassphrase: string;\n\n constructor(config: StellarWalletConfig) {\n if (!isValidStellarNetwork(config.network)) {\n throw new StellarWalletError(`Invalid network: ${config.network}`, 'INVALID_NETWORK');\n }\n\n if (isPrivateKeyStellarWalletConfig(config)) {\n if (!isValidStellarPrivateKey(config.privateKey)) {\n throw new StellarWalletError('Invalid private key format', 'INVALID_PRIVATE_KEY');\n }\n // Remove '0x' prefix if present\n const privateKey = config.privateKey.startsWith('0x') ? config.privateKey.slice(2) : config.privateKey;\n this.wallet = {\n type: 'PRIVATE_KEY',\n keypair: Keypair.fromSecret(privateKey),\n };\n this.server = new Horizon.Server(config.rpcUrl ?? STELLAR_HORIZON_URLS[config.network]);\n this.networkPassphrase = STELLAR_NETWORK_PASSPHRASES[config.network];\n return;\n }\n\n if (isBrowserExtensionStellarWalletConfig(config)) {\n this.wallet = {\n type: 'BROWSER_EXTENSION',\n walletsKit: config.walletsKit,\n };\n this.server = new Horizon.Server(config.rpcUrl ?? STELLAR_HORIZON_URLS[config.network]);\n this.networkPassphrase = STELLAR_NETWORK_PASSPHRASES[config.network];\n return;\n }\n\n throw new StellarWalletError('Invalid wallet configuration', 'INVALID_CONFIG');\n }\n\n public async getWalletAddress(): Promise<string> {\n try {\n if (isStellarPkWallet(this.wallet)) {\n return this.wallet.keypair.publicKey();\n }\n\n const { address } = await this.wallet.walletsKit.getAddress();\n return address;\n } catch (error) {\n throw new StellarWalletError(\n error instanceof Error ? error.message : 'Failed to get wallet address',\n 'INVALID_CONFIG',\n );\n }\n }\n\n public async signTransaction(tx: XDR): Promise<XDR> {\n try {\n if (isStellarPkWallet(this.wallet)) {\n // Parse the XDR transaction\n const transaction = new Transaction(tx, this.networkPassphrase);\n transaction.sign(this.wallet.keypair);\n return transaction.toXDR();\n }\n\n const { signedTxXdr } = await this.wallet.walletsKit.signTransaction(tx, {\n networkPassphrase: this.networkPassphrase,\n });\n return signedTxXdr;\n } catch (error) {\n throw new StellarWalletError(\n error instanceof Error ? error.message : 'Failed to sign transaction',\n 'SIGN_TX_ERROR',\n );\n }\n }\n\n public async waitForTransactionReceipt(txHash: string): Promise<StellarRawTransactionReceipt> {\n const startTime = Date.now();\n while (Date.now() - startTime < TX_POLL_TIMEOUT) {\n try {\n const tx = await this.server.transactions().transaction(txHash).call();\n\n return {\n ...tx,\n _links: {\n ...tx._links,\n transaction: tx._links.self,\n },\n } as unknown as StellarRawTransactionReceipt;\n } catch (error) {\n // Wait for the next poll interval\n await new Promise(resolve => setTimeout(resolve, TX_POLL_INTERVAL));\n }\n }\n throw new StellarWalletError(\n `Transaction receipt not found for hash ${txHash} after ${TX_POLL_TIMEOUT / 1000} seconds.`,\n 'TX_RECEIPT_TIMEOUT',\n );\n }\n}\n"]}
1
+ {"version":3,"sources":["../src/wallet-providers/EvmWalletProvider.ts","../src/wallet-providers/SuiWalletProvider.ts","../src/wallet-providers/IconWalletProvider.ts","../src/wallet-providers/InjectiveWalletProvider.ts","../src/wallet-providers/SolanaWalletProvider.ts","../src/wallet-providers/StellarWalletProvider.ts"],"names":["result","Keypair"],"mappings":"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","file":"index.mjs","sourcesContent":["import type { ChainId, EvmRawTransaction, EvmRawTransactionReceipt, IEvmWalletProvider } from '@sodax/types';\nimport type { Account, Address, Chain, Transport, Hash, PublicClient, WalletClient } from 'viem';\nimport { privateKeyToAccount } from 'viem/accounts';\nimport { createWalletClient, createPublicClient, http } from 'viem';\nimport { sonic, avalanche, arbitrum, base, optimism, bsc, polygon, nibiru } from 'viem/chains';\nimport {\n SONIC_MAINNET_CHAIN_ID,\n AVALANCHE_MAINNET_CHAIN_ID,\n ARBITRUM_MAINNET_CHAIN_ID,\n BASE_MAINNET_CHAIN_ID,\n OPTIMISM_MAINNET_CHAIN_ID,\n BSC_MAINNET_CHAIN_ID,\n POLYGON_MAINNET_CHAIN_ID,\n NIBIRU_MAINNET_CHAIN_ID,\n} from '@sodax/types';\n\nexport function getEvmViemChain(id: ChainId): Chain {\n switch (id) {\n case SONIC_MAINNET_CHAIN_ID:\n return sonic;\n case AVALANCHE_MAINNET_CHAIN_ID:\n return avalanche;\n case ARBITRUM_MAINNET_CHAIN_ID:\n return arbitrum;\n case BASE_MAINNET_CHAIN_ID:\n return base;\n case OPTIMISM_MAINNET_CHAIN_ID:\n return optimism;\n case BSC_MAINNET_CHAIN_ID:\n return bsc;\n case POLYGON_MAINNET_CHAIN_ID:\n return polygon;\n case NIBIRU_MAINNET_CHAIN_ID:\n return nibiru;\n default:\n throw new Error(`Unsupported EVM chain ID: ${id}`);\n }\n}\n\nexport class EvmWalletProvider implements IEvmWalletProvider {\n private readonly walletClient: WalletClient<Transport, Chain, Account>;\n public readonly publicClient: PublicClient;\n\n constructor(config: EvmWalletConfig) {\n if (isPrivateKeyEvmWalletConfig(config)) {\n const chain = getEvmViemChain(config.chainId);\n this.walletClient = createWalletClient({\n chain,\n transport: http(config.rpcUrl ?? chain.rpcUrls.default.http[0]),\n account: privateKeyToAccount(config.privateKey),\n });\n this.publicClient = createPublicClient({\n chain,\n transport: http(config.rpcUrl ?? chain.rpcUrls.default.http[0]),\n });\n } else if (isBrowserExtensionEvmWalletConfig(config)) {\n this.walletClient = config.walletClient;\n this.publicClient = config.publicClient;\n } else {\n throw new Error('Invalid EVM wallet config');\n }\n }\n\n async sendTransaction(evmRawTx: EvmRawTransaction): Promise<Hash> {\n return this.walletClient.sendTransaction(evmRawTx);\n }\n\n async waitForTransactionReceipt(txHash: Hash): Promise<EvmRawTransactionReceipt> {\n const receipt = await this.publicClient.waitForTransactionReceipt({ hash: txHash });\n return {\n ...receipt,\n transactionIndex: receipt.transactionIndex.toString(),\n blockNumber: receipt.blockNumber.toString(),\n cumulativeGasUsed: receipt.cumulativeGasUsed.toString(),\n gasUsed: receipt.gasUsed.toString(),\n contractAddress: receipt.contractAddress?.toString() ?? null,\n logs: receipt.logs.map(log => ({\n ...log,\n blockNumber: log.blockNumber.toString() as `0x${string}`,\n logIndex: log.logIndex.toString() as `0x${string}`,\n transactionIndex: log.transactionIndex.toString() as `0x${string}`,\n })),\n effectiveGasPrice: receipt.effectiveGasPrice.toString(),\n };\n }\n\n async getWalletAddress(): Promise<Address> {\n return this.walletClient.account.address;\n }\n}\n\n/**\n * EVM Wallet Configuration Types\n */\n\nexport type PrivateKeyEvmWalletConfig = {\n privateKey: `0x${string}`;\n chainId: ChainId;\n rpcUrl?: `http${string}`;\n};\n\nexport type BrowserExtensionEvmWalletConfig = {\n walletClient: WalletClient<Transport, Chain, Account>;\n publicClient: PublicClient;\n};\n\nexport type EvmWalletConfig = PrivateKeyEvmWalletConfig | BrowserExtensionEvmWalletConfig;\n\n/**\n * EVM Type Guards\n */\n\nexport function isPrivateKeyEvmWalletConfig(config: EvmWalletConfig): config is PrivateKeyEvmWalletConfig {\n return 'privateKey' in config && config.privateKey.startsWith('0x');\n}\n\nexport function isBrowserExtensionEvmWalletConfig(config: EvmWalletConfig): config is BrowserExtensionEvmWalletConfig {\n return 'walletClient' in config && 'publicClient' in config;\n}\n","import { SuiClient } from '@mysten/sui/client';\nimport { Ed25519Keypair } from '@mysten/sui/keypairs/ed25519';\nimport type { Transaction, TransactionArgument } from '@mysten/sui/transactions';\nimport type { ISuiWalletProvider, SuiTransaction, SuiExecutionResult, SuiPaginatedCoins } from '@sodax/types';\nimport {\n signTransaction,\n type SuiWalletFeatures,\n type WalletAccount,\n type WalletWithFeatures,\n} from '@mysten/wallet-standard';\n\n// Private key wallet config\nexport type PrivateKeySuiWalletConfig = {\n rpcUrl: string;\n mnemonics: string;\n};\n\n// Browser extension wallet config\nexport type BrowserExtensionSuiWalletConfig = {\n client: SuiClient;\n wallet: WalletWithFeatures<Partial<SuiWalletFeatures>>;\n account: WalletAccount;\n};\n\n// Unified config type\nexport type SuiWalletConfig = PrivateKeySuiWalletConfig | BrowserExtensionSuiWalletConfig;\n\n// Type guards\nfunction isPrivateKeySuiWalletConfig(walletConfig: SuiWalletConfig): walletConfig is PrivateKeySuiWalletConfig {\n return 'mnemonics' in walletConfig;\n}\n\nfunction isBrowserExtensionSuiWalletConfig(\n walletConfig: SuiWalletConfig,\n): walletConfig is BrowserExtensionSuiWalletConfig {\n return 'wallet' in walletConfig && 'account' in walletConfig;\n}\n\nexport type PkSuiWallet = {\n keyPair: Ed25519Keypair;\n};\n\nexport type BrowserExtensionSuiWallet = {\n wallet: WalletWithFeatures<Partial<SuiWalletFeatures>>;\n account: WalletAccount;\n};\n\nexport type SuiWallet = PkSuiWallet | BrowserExtensionSuiWallet;\n\nexport function isPkSuiWallet(wallet: SuiWallet): wallet is PkSuiWallet {\n return 'keyPair' in wallet;\n}\n\nexport function isBrowserExtensionSuiWallet(wallet: SuiWallet): wallet is BrowserExtensionSuiWallet {\n return 'wallet' in wallet && 'account' in wallet;\n}\n\nexport function isSuiWallet(wallet: SuiWallet): wallet is SuiWallet {\n return isPkSuiWallet(wallet) || isBrowserExtensionSuiWallet(wallet);\n}\n\nexport class SuiWalletProvider implements ISuiWalletProvider {\n private readonly client: SuiClient;\n private readonly wallet: SuiWallet;\n\n constructor(walletConfig: SuiWalletConfig) {\n if (isPrivateKeySuiWalletConfig(walletConfig)) {\n this.client = new SuiClient({ url: walletConfig.rpcUrl });\n this.wallet = {\n keyPair: Ed25519Keypair.deriveKeypair(walletConfig.mnemonics),\n };\n } else if (isBrowserExtensionSuiWalletConfig(walletConfig)) {\n this.client = walletConfig.client;\n this.wallet = {\n wallet: walletConfig.wallet,\n account: walletConfig.account,\n };\n } else {\n throw new Error('Invalid wallet configuration');\n }\n }\n\n async signAndExecuteTxn(txn: SuiTransaction): Promise<string> {\n if (isPkSuiWallet(this.wallet)) {\n const res = await this.client.signAndExecuteTransaction({\n transaction: txn as unknown as Transaction,\n signer: this.wallet.keyPair,\n });\n\n return res.digest;\n }\n if (isBrowserExtensionSuiWallet(this.wallet)) {\n const browserWallet = this.wallet.wallet;\n const browserAccount = this.wallet.account;\n\n if (!browserAccount || browserAccount.chains.length === 0) {\n throw new Error('No chains available for wallet account');\n }\n const chain = browserAccount.chains[0];\n if (!chain) {\n throw new Error('No chain available for wallet account');\n }\n const { bytes, signature } = await signTransaction(browserWallet, {\n transaction: txn,\n account: browserAccount,\n chain,\n });\n\n const res = await this.client.executeTransactionBlock({\n transactionBlock: bytes,\n signature,\n options: {\n showRawEffects: true,\n },\n });\n\n return res.digest;\n }\n\n throw new Error('Invalid wallet configuration');\n }\n\n async viewContract(\n tx: Transaction,\n packageId: string,\n module: string,\n functionName: string,\n args: unknown[],\n typeArgs: string[] = [],\n ): Promise<SuiExecutionResult> {\n tx.moveCall({\n target: `${packageId}::${module}::${functionName}`,\n arguments: args as TransactionArgument[],\n typeArguments: typeArgs,\n });\n\n const sender = this.getSuiAddress();\n\n const txResults = await this.client.devInspectTransactionBlock({\n transactionBlock: tx,\n sender,\n });\n\n if (txResults.results && txResults.results[0] !== undefined) {\n return txResults.results[0] as SuiExecutionResult;\n }\n throw Error(`transaction didn't return any values: ${JSON.stringify(txResults, null, 2)}`);\n }\n\n async getCoins(address: string, token: string): Promise<SuiPaginatedCoins> {\n return this.client.getCoins({ owner: address, coinType: token, limit: 10 });\n }\n\n private getSuiAddress(): string {\n if (isPkSuiWallet(this.wallet)) {\n return this.wallet.keyPair.toSuiAddress();\n }\n if (isBrowserExtensionSuiWallet(this.wallet)) {\n return this.wallet.account.address;\n }\n throw new Error('Invalid wallet configuration');\n }\n\n async getWalletAddress(): Promise<string> {\n return this.getSuiAddress();\n }\n}\n","import type { IconTransactionResult, IcxCallTransaction, IIconWalletProvider } from '@sodax/types';\nimport type { IconService, Wallet as IconSdkWallet } from 'icon-sdk-js';\nimport * as IconSdkRaw from 'icon-sdk-js';\nconst IconSdk = ('default' in IconSdkRaw.default ? IconSdkRaw.default : IconSdkRaw) as typeof IconSdkRaw;\nconst { Converter, CallTransactionBuilder, Wallet } = IconSdk;\n\nexport class IconWalletProvider implements IIconWalletProvider {\n private readonly wallet: IconWallet;\n public readonly iconService: IconService;\n\n constructor(wallet: IconWalletConfig) {\n if (isPrivateKeyIconWalletConfig(wallet)) {\n this.wallet = {\n type: 'PRIVATE_KEY',\n wallet: Wallet.loadPrivateKey(wallet.privateKey.slice(2)),\n };\n this.iconService = new IconSdk.IconService(new IconSdk.IconService.HttpProvider(wallet.rpcUrl));\n } else if (isBrowserExtensionIconWalletConfig(wallet)) {\n this.wallet = {\n type: 'BROWSER_EXTENSION',\n wallet: wallet.walletAddress,\n };\n this.iconService = new IconSdk.IconService(new IconSdk.IconService.HttpProvider(wallet.rpcUrl));\n } else {\n throw new Error('Invalid Icon wallet config');\n }\n }\n\n public async sendTransaction(tx: IcxCallTransaction): Promise<Hash> {\n const builtTx = new CallTransactionBuilder()\n .from(tx.from)\n .to(tx.to)\n .stepLimit(Converter.toHex(3000000))\n .nid(tx.nid)\n .version(tx.version ?? '0x3')\n .timestamp(Converter.toHex(tx.timestamp ?? new Date().getTime() * 1000))\n .value(tx.value)\n .method(tx.method)\n .params(tx.params)\n .build();\n\n if (!isIconPkWallet(this.wallet)) {\n // if wallet starts with 0x, it's a private key\n const result = await requestJsonRpc(builtTx);\n\n return result.result satisfies string as Hash;\n }\n const signedTx = new IconSdk.IconService.SignedTransaction(builtTx, this.wallet.wallet);\n const result = await this.iconService.sendTransaction(signedTx).execute();\n\n return result satisfies string as Hash;\n }\n\n public async waitForTransactionReceipt(txHash: Hash): Promise<IconTransactionResult> {\n const result = await this.iconService.waitTransactionResult(txHash).execute();\n\n return {\n ...result,\n status: +result.status,\n cumulativeStepUsed: BigNumberToBigInt(result.cumulativeStepUsed),\n stepUsed: BigNumberToBigInt(result.stepUsed),\n stepPrice: BigNumberToBigInt(result.stepPrice),\n } satisfies IconTransactionResult;\n }\n\n async getWalletAddress(): Promise<IconEoaAddress> {\n if (!this.wallet.wallet) {\n throw new Error('Wallet not initialized');\n }\n return isIconPkWallet(this.wallet) ? (this.wallet.wallet.getAddress() as IconEoaAddress) : this.wallet.wallet;\n }\n}\n\n/**\n * Icon Types\n */\n\nexport type IconJsonRpcVersion = '2.0';\n\nexport type Hex = `0x${string}`;\nexport type Hash = `0x${string}`;\nexport type IconAddress = `hx${string}` | `cx${string}`;\nexport type IconEoaAddress = `hx${string}`;\n\nexport type PrivateKeyIconWalletConfig = {\n privateKey: `0x${string}`;\n rpcUrl: `http${string}`;\n};\n\nexport type BrowserExtensionIconWalletConfig = {\n walletAddress?: IconEoaAddress;\n rpcUrl: `http${string}`;\n};\n\nexport type IconWalletConfig = PrivateKeyIconWalletConfig | BrowserExtensionIconWalletConfig;\n\nexport type IconPkWallet = {\n type: 'PRIVATE_KEY';\n wallet: IconSdkWallet;\n};\n\nexport type IconBrowserExtensionWallet = {\n type: 'BROWSER_EXTENSION';\n wallet?: IconEoaAddress;\n};\n\nexport type IconWallet = IconPkWallet | IconBrowserExtensionWallet;\n\nexport type HanaWalletRequestEvent =\n | 'REQUEST_HAS_ACCOUNT'\n | 'REQUEST_HAS_ADDRESS'\n | 'REQUEST_ADDRESS'\n | 'REQUEST_JSON'\n | 'REQUEST_SIGNING'\n | 'REQUEST_JSON-RPC';\nexport type HanaWalletResponseEvent =\n | 'RESPONSE_HAS_ACCOUNT'\n | 'RESPONSE_HAS_ADDRESS'\n | 'RESPONSE_ADDRESS'\n | 'RESPONSE_JSON-RPC'\n | 'RESPONSE_SIGNING'\n | 'CANCEL_SIGNING'\n | 'CANCEL_JSON-RPC';\n\nexport type ResponseAddressType = {\n type: 'RESPONSE_ADDRESS';\n payload: IconAddress;\n};\n\nexport type ResponseSigningType = {\n type: 'RESPONSE_SIGNING';\n payload: string;\n};\n\nexport type RelayRequestDetail = {\n type: HanaWalletRequestEvent;\n payload?: {\n jsonrpc: IconJsonRpcVersion;\n method: string;\n params: unknown;\n id: number | undefined;\n };\n};\n\nexport type RelayRequestSigning = {\n type: 'REQUEST_SIGNING';\n payload: {\n from: IconAddress;\n hash: string;\n };\n};\n\nexport type JsonRpcPayloadResponse = {\n id: number;\n result: string; // txHash\n};\n\ninterface RelayResponseEventDetail {\n type: HanaWalletResponseEvent;\n payload: unknown;\n}\n\n/**\n * Icon Type Guards\n */\n\nexport function isIconPkWallet(wallet: IconWallet): wallet is IconPkWallet {\n return wallet.type === 'PRIVATE_KEY';\n}\n\nexport function isIconBrowserExtensionWallet(wallet: IconWallet): wallet is IconBrowserExtensionWallet {\n return wallet.type === 'BROWSER_EXTENSION';\n}\n\nexport function isPrivateKeyIconWalletConfig(config: IconWalletConfig): config is PrivateKeyIconWalletConfig {\n return 'privateKey' in config && config.privateKey.startsWith('0x');\n}\n\nexport function isBrowserExtensionIconWalletConfig(\n config: IconWalletConfig,\n): config is BrowserExtensionIconWalletConfig {\n return 'walletAddress' in config && (isIconEoaAddress(config.walletAddress) || !config.walletAddress);\n}\n\nexport function isIconAddress(value: unknown): value is IconAddress {\n return typeof value === 'string' && /^hx[a-f0-9]{40}$|^cx[a-f0-9]{40}$/.test(value);\n}\n\nexport function isIconEoaAddress(value: unknown): value is IconEoaAddress {\n return typeof value === 'string' && /^hx[a-f0-9]{40}$/.test(value);\n}\n\nexport function isResponseAddressType(value: unknown): value is ResponseAddressType {\n return (\n typeof value === 'object' &&\n value !== null &&\n 'type' in value &&\n 'payload' in value &&\n value.type === 'RESPONSE_ADDRESS' &&\n isIconAddress(value.payload)\n );\n}\n\nexport function isResponseSigningType(value: unknown): value is ResponseSigningType {\n return (\n typeof value === 'object' &&\n value !== null &&\n 'type' in value &&\n 'payload' in value &&\n value.type === 'RESPONSE_SIGNING' &&\n typeof value.payload === 'string'\n );\n}\n\nexport function isJsonRpcPayloadResponse(value: unknown): value is JsonRpcPayloadResponse {\n return (\n typeof value === 'object' &&\n value !== null &&\n 'id' in value &&\n 'result' in value &&\n typeof value.result === 'string'\n );\n}\n\n/**\n * Methods to interact with Icon Browser Extension Wallet (e.g. Hana Wallet)\n */\n\nexport function requestAddress(): Promise<IconAddress> {\n return new Promise(resolve => {\n const eventHandler = (event: Event) => {\n const customEvent = event as CustomEvent<RelayResponseEventDetail>;\n const response = customEvent.detail;\n if (isResponseAddressType(response)) {\n window.removeEventListener('ICONEX_RELAY_RESPONSE', eventHandler as EventListener, false);\n resolve(response.payload);\n }\n };\n\n window.removeEventListener('ICONEX_RELAY_RESPONSE', eventHandler, false);\n window.addEventListener('ICONEX_RELAY_RESPONSE', eventHandler, false);\n window.dispatchEvent(\n new CustomEvent<RelayRequestDetail>('ICONEX_RELAY_REQUEST', {\n detail: {\n type: 'REQUEST_ADDRESS',\n },\n }),\n );\n });\n}\n\nexport function requestSigning(from: IconAddress, hash: string): Promise<string> {\n return new Promise((resolve, reject) => {\n const signRequest = new CustomEvent<RelayRequestSigning>('ICONEX_RELAY_REQUEST', {\n detail: {\n type: 'REQUEST_SIGNING',\n payload: {\n from,\n hash,\n },\n },\n });\n\n const eventHandler = (event: Event) => {\n const customEvent = event as CustomEvent<RelayResponseEventDetail>;\n const response = customEvent.detail;\n if (isResponseSigningType(response)) {\n window.removeEventListener('ICONEX_RELAY_RESPONSE', eventHandler as EventListener, false);\n\n // resolve signature\n resolve(response.payload);\n } else if (response.type === 'CANCEL_SIGNING') {\n reject(new Error('CANCEL_SIGNING'));\n }\n };\n\n window.removeEventListener('ICONEX_RELAY_RESPONSE', eventHandler as EventListener, false);\n window.addEventListener('ICONEX_RELAY_RESPONSE', eventHandler as EventListener, false);\n window.dispatchEvent(signRequest);\n });\n}\n\nexport function requestJsonRpc(rawTransaction: unknown, id = 99999): Promise<JsonRpcPayloadResponse> {\n return new Promise((resolve, reject) => {\n const eventHandler = (event: Event) => {\n const customEvent = event as CustomEvent<RelayResponseEventDetail>;\n const { type, payload } = customEvent.detail;\n if (type === 'RESPONSE_JSON-RPC') {\n window.removeEventListener('ICONEX_RELAY_RESPONSE', eventHandler as EventListener, false);\n\n if (isJsonRpcPayloadResponse(payload)) {\n resolve(payload);\n } else {\n reject(new Error('Invalid payload response type (expected JsonRpcPayloadResponse)'));\n }\n } else if (type === 'CANCEL_JSON-RPC') {\n window.removeEventListener('ICONEX_RELAY_RESPONSE', eventHandler as EventListener, false);\n reject(new Error('CANCEL_JSON-RPC'));\n }\n };\n\n window.removeEventListener('ICONEX_RELAY_RESPONSE', eventHandler as EventListener, false);\n window.addEventListener('ICONEX_RELAY_RESPONSE', eventHandler as EventListener, false);\n window.dispatchEvent(\n new CustomEvent<RelayRequestDetail>('ICONEX_RELAY_REQUEST', {\n detail: {\n type: 'REQUEST_JSON-RPC',\n payload: {\n jsonrpc: '2.0',\n method: 'icx_sendTransaction',\n params: rawTransaction,\n id: id,\n },\n },\n }),\n );\n });\n}\n\n/**\n * Icon Utils\n */\n\nexport function BigNumberToBigInt(bigNumber: BigNumber): bigint {\n if (!bigNumber.isInteger()) {\n throw new Error('Cannot convert decimal number to BigInt');\n }\n return BigInt(bigNumber.toFixed(0));\n}\n","import type { Network } from '@injectivelabs/networks';\nimport {\n MsgExecuteContract,\n MsgExecuteContractCompat,\n createTransaction,\n PrivateKey,\n getInjectiveSignerAddress,\n type TxResponse,\n} from '@injectivelabs/sdk-ts';\nimport type { Hex, JsonObject, InjectiveCoin, IInjectiveWalletProvider, InjectiveEoaAddress } from '@sodax/types';\nimport { InjectiveExecuteResponse, type InjectiveRawTransaction } from '@sodax/types';\nimport type { MsgBroadcaster } from '@injectivelabs/wallet-core';\nimport { MsgBroadcasterWithPk } from '@injectivelabs/sdk-ts';\nimport type { ChainId, EvmChainId } from '@injectivelabs/ts-types';\n\n/**\n * Injective Wallet Configuration Types\n */\n\nexport type BrowserExtensionInjectiveWalletConfig = {\n msgBroadcaster: MsgBroadcaster;\n};\n\nexport type SecretInjectiveWalletConfig = {\n secret:\n | {\n privateKey: string;\n }\n | {\n mnemonics: string;\n };\n chainId: ChainId;\n network: Network;\n evmOptions?: {\n evmChainId: EvmChainId;\n rpcUrl: `http${string}`;\n };\n};\n\nexport type InjectiveWalletConfig = BrowserExtensionInjectiveWalletConfig | SecretInjectiveWalletConfig;\n\n/**\n * Injective Type Guards\n */\n\nexport function isBrowserExtensionInjectiveWalletConfig(\n config: InjectiveWalletConfig,\n): config is BrowserExtensionInjectiveWalletConfig {\n return 'msgBroadcaster' in config;\n}\n\nexport function isSecretInjectiveWalletConfig(config: InjectiveWalletConfig): config is SecretInjectiveWalletConfig {\n return (\n 'secret' in config &&\n typeof config.secret === 'object' &&\n (('privateKey' in config.secret && typeof config.secret.privateKey === 'string') ||\n ('mnemonics' in config.secret && typeof config.secret.mnemonics === 'string')) &&\n 'network' in config &&\n 'chainId' in config\n );\n}\n\nexport type InjectiveWallet = {\n msgBroadcaster: MsgBroadcaster | MsgBroadcasterWithPk;\n};\n\nexport class InjectiveWalletProvider implements IInjectiveWalletProvider {\n public wallet: InjectiveWallet;\n\n constructor(config: InjectiveWalletConfig) {\n if (isBrowserExtensionInjectiveWalletConfig(config)) {\n this.wallet = {\n msgBroadcaster: config.msgBroadcaster,\n };\n } else if (isSecretInjectiveWalletConfig(config)) {\n let privateKey: PrivateKey;\n if ('privateKey' in config.secret) {\n privateKey = PrivateKey.fromPrivateKey(config.secret.privateKey);\n } else if ('mnemonics' in config.secret) {\n privateKey = PrivateKey.fromMnemonic(config.secret.mnemonics);\n } else {\n throw new Error('Invalid Secret Injective wallet config');\n }\n this.wallet = {\n msgBroadcaster: new MsgBroadcasterWithPk({ privateKey, network: config.network }),\n };\n } else {\n throw new Error('Invalid Injective wallet config');\n }\n }\n\n async getRawTransaction(\n chainId: string,\n _: string,\n senderAddress: string,\n contractAddress: string,\n msg: JsonObject,\n memo?: string,\n ): Promise<InjectiveRawTransaction> {\n const msgExec = MsgExecuteContract.fromJSON({\n contractAddress: contractAddress,\n sender: senderAddress,\n msg: msg as object,\n funds: [],\n });\n const { txRaw } = createTransaction({\n message: msgExec,\n memo: memo || '',\n pubKey: await this.getWalletPubKey(),\n sequence: 0,\n accountNumber: 0,\n chainId: chainId,\n });\n\n const rawTx = {\n from: senderAddress as Hex,\n to: contractAddress as Hex,\n signedDoc: {\n bodyBytes: txRaw.bodyBytes,\n chainId: chainId,\n accountNumber: BigInt(0),\n authInfoBytes: txRaw.authInfoBytes,\n },\n };\n return rawTx;\n }\n\n // return wallet address as bech32\n async getWalletAddress(): Promise<InjectiveEoaAddress> {\n if (this.wallet.msgBroadcaster instanceof MsgBroadcasterWithPk) {\n return getInjectiveSignerAddress(this.wallet.msgBroadcaster.privateKey.toAddress().toBech32());\n }\n const addresses = await this.wallet.msgBroadcaster.walletStrategy.getAddresses();\n const injectiveAddresses = addresses.map(getInjectiveSignerAddress);\n if (injectiveAddresses.length <= 0 || injectiveAddresses[0] === undefined) {\n return Promise.reject(new Error('Wallet address not found'));\n }\n\n return injectiveAddresses[0];\n }\n\n async getWalletPubKey(): Promise<string> {\n if (this.wallet.msgBroadcaster instanceof MsgBroadcasterWithPk) {\n return this.wallet.msgBroadcaster.privateKey.toPublicKey().toString();\n }\n const pubKey = await this.wallet.msgBroadcaster.walletStrategy.getPubKey();\n if (pubKey === undefined) {\n return Promise.reject(new Error('Wallet public key not found'));\n }\n return pubKey;\n }\n\n async execute(\n senderAddress: string,\n contractAddress: string,\n msg: JsonObject,\n funds?: InjectiveCoin[],\n ): Promise<InjectiveExecuteResponse> {\n const msgExec = MsgExecuteContractCompat.fromJSON({\n contractAddress: contractAddress,\n sender: senderAddress,\n msg: msg as object,\n funds: funds || [],\n });\n\n let txResult: TxResponse;\n\n if (this.wallet.msgBroadcaster instanceof MsgBroadcasterWithPk) {\n txResult = await this.wallet.msgBroadcaster.broadcast({\n msgs: msgExec,\n });\n } else {\n txResult = await this.wallet.msgBroadcaster.broadcastWithFeeDelegation({\n msgs: msgExec,\n injectiveAddress: await this.getWalletAddress(),\n });\n }\n\n return InjectiveExecuteResponse.fromTxResponse(txResult);\n }\n}\n","import { getAssociatedTokenAddress } from '@solana/spl-token';\nimport {\n type Commitment,\n Connection,\n Keypair,\n PublicKey,\n type RpcResponseAndContext,\n type TokenAmount,\n TransactionInstruction,\n TransactionMessage,\n VersionedTransaction,\n} from '@solana/web3.js';\nimport type {\n ISolanaWalletProvider,\n SolanaAccountMeta,\n SolanaBase58PublicKey,\n SolanaRpcResponseAndContext,\n SolanaSerializedTransaction,\n SolanaSignatureResult,\n SolanaRawTransactionInstruction,\n TransactionSignature,\n} from '@sodax/types';\nimport type { SignerWalletAdapterProps } from '@solana/wallet-adapter-base';\n\n// Wallet adapter pattern interface\ninterface WalletContextState {\n publicKey: PublicKey | null;\n signTransaction: SignerWalletAdapterProps['signTransaction'] | undefined;\n}\n\n// Direct keypair pattern configs\nexport type PrivateKeySolanaWalletConfig = {\n privateKey: Uint8Array;\n endpoint: string;\n};\n\n// Wallet adapter pattern config\nexport type BrowserExtensionSolanaWalletConfig = {\n wallet: WalletContextState;\n connection: Connection;\n};\n\n// Unified config type\nexport type SolanaWalletConfig = PrivateKeySolanaWalletConfig | BrowserExtensionSolanaWalletConfig;\n\n// Type guards\nfunction isPrivateKeySolanaWalletConfig(\n walletConfig: SolanaWalletConfig,\n): walletConfig is PrivateKeySolanaWalletConfig {\n return 'privateKey' in walletConfig;\n}\n\nfunction isBrowserExtensionSolanaWalletConfig(\n walletConfig: SolanaWalletConfig,\n): walletConfig is BrowserExtensionSolanaWalletConfig {\n return 'wallet' in walletConfig && !(walletConfig.wallet instanceof Keypair);\n}\n\nexport class SolanaWalletProvider implements ISolanaWalletProvider {\n private readonly wallet: Keypair | WalletContextState;\n public readonly connection: Connection;\n private readonly isAdapterMode: boolean;\n\n constructor(walletConfig: SolanaWalletConfig) {\n if (isPrivateKeySolanaWalletConfig(walletConfig)) {\n this.wallet = Keypair.fromSecretKey(walletConfig.privateKey);\n this.connection = new Connection(walletConfig.endpoint, 'confirmed');\n this.isAdapterMode = false;\n } else if (isBrowserExtensionSolanaWalletConfig(walletConfig)) {\n this.wallet = walletConfig.wallet;\n this.connection = walletConfig.connection;\n this.isAdapterMode = true;\n } else {\n throw new Error('Invalid wallet configuration');\n }\n }\n\n public async waitForConfirmation(\n signature: string,\n commitment: Commitment = 'finalized',\n ): Promise<SolanaRpcResponseAndContext<SolanaSignatureResult>> {\n const latestBlockhash = await this.connection.getLatestBlockhash();\n const response = await this.connection.confirmTransaction(\n {\n signature,\n blockhash: latestBlockhash.blockhash,\n lastValidBlockHeight: latestBlockhash.lastValidBlockHeight,\n },\n commitment,\n );\n\n return response;\n }\n\n /**\n * Send a raw transaction to the Solana network.\n * @param rawTransaction - The raw transaction to send.\n * @returns The transaction signature.\n */\n public async sendTransaction(rawTransaction: Uint8Array | Array<number>): Promise<TransactionSignature> {\n return this.connection.sendRawTransaction(rawTransaction);\n }\n\n /**\n * Send a raw transaction to the Solana network and wait for confirmation.\n * @param rawTransaction - The raw transaction to send.\n * @param commitment - The commitment level to use. Defaults to 'finalized'.\n * @returns The transaction signature.\n */\n public async sendTransactionWithConfirmation(\n rawTransaction: Uint8Array | Array<number>,\n commitment: Commitment = 'finalized',\n ): Promise<TransactionSignature> {\n const txHash = await this.connection.sendRawTransaction(rawTransaction);\n await this.waitForConfirmation(txHash, commitment);\n return txHash;\n }\n\n /**\n * Build a v0 versioned transaction.\n * @param instructions - The instructions to include in the transaction.\n * @returns The v0 transaction.\n */\n async buildV0Txn(rawInstructions: SolanaRawTransactionInstruction[]): Promise<SolanaSerializedTransaction> {\n if (this.isAdapterMode) {\n return this.buildV0TxnWithAdapter(rawInstructions);\n }\n return this.buildV0TxnWithKeypair(rawInstructions);\n }\n\n private async buildV0TxnWithAdapter(\n rawInstructions: SolanaRawTransactionInstruction[],\n ): Promise<SolanaSerializedTransaction> {\n const adapterWallet = this.wallet as WalletContextState;\n\n if (!adapterWallet.publicKey) {\n throw new Error('Wallet public key is not initialized');\n }\n\n if (!adapterWallet.signTransaction) {\n throw new Error('Wallet signTransaction is not initialized');\n }\n\n const instructions = this.buildTransactionInstruction(rawInstructions);\n const latestBlockhash = await this.connection.getLatestBlockhash();\n const messageV0 = new TransactionMessage({\n payerKey: adapterWallet.publicKey,\n recentBlockhash: latestBlockhash.blockhash,\n instructions,\n }).compileToV0Message();\n\n const tx = await adapterWallet.signTransaction(new VersionedTransaction(messageV0));\n return tx.serialize();\n }\n\n private async buildV0TxnWithKeypair(\n rawInstructions: SolanaRawTransactionInstruction[],\n ): Promise<SolanaSerializedTransaction> {\n const keypairWallet = this.wallet as Keypair;\n const instructions = this.buildTransactionInstruction(rawInstructions);\n\n const messageV0 = new TransactionMessage({\n payerKey: keypairWallet.publicKey,\n recentBlockhash: (await this.connection.getLatestBlockhash()).blockhash,\n instructions,\n }).compileToV0Message();\n\n const tx = new VersionedTransaction(messageV0);\n tx.sign([keypairWallet]);\n\n return tx.serialize();\n }\n\n public getWalletBase58PublicKey(): SolanaBase58PublicKey {\n if (!this.wallet.publicKey) {\n throw new Error('Wallet public key is not initialized');\n }\n return this.wallet.publicKey.toBase58();\n }\n\n public async getWalletAddress(): Promise<string> {\n return this.getWalletBase58PublicKey();\n }\n\n public async getAssociatedTokenAddress(mint: SolanaBase58PublicKey): Promise<SolanaBase58PublicKey> {\n if (!this.wallet.publicKey) {\n throw new Error('Wallet public key is not initialized');\n }\n\n return (await getAssociatedTokenAddress(new PublicKey(mint), this.wallet.publicKey, true)).toBase58();\n }\n\n public async getBalance(publicKey: SolanaBase58PublicKey): Promise<number> {\n return await this.connection.getBalance(new PublicKey(publicKey));\n }\n\n public async getTokenAccountBalance(publicKey: SolanaBase58PublicKey): Promise<RpcResponseAndContext<TokenAmount>> {\n return this.connection.getTokenAccountBalance(new PublicKey(publicKey));\n }\n\n private buildTransactionInstruction(rawInstructions: SolanaRawTransactionInstruction[]): TransactionInstruction[] {\n return rawInstructions.map(\n rawInstruction =>\n new TransactionInstruction({\n keys: rawInstruction.keys.map((key: SolanaAccountMeta) => ({\n pubkey: new PublicKey(key.pubkey),\n isSigner: key.isSigner,\n isWritable: key.isWritable,\n })),\n programId: new PublicKey(rawInstruction.programId),\n data: Buffer.from(rawInstruction.data),\n }),\n );\n }\n}\n","import type { Hex, IStellarWalletProvider, StellarRawTransactionReceipt, XDR } from '@sodax/types';\nimport { Networks, Horizon, Transaction, Keypair } from '@stellar/stellar-sdk';\n\ninterface StellarWalletsKit {\n getAddress(): Promise<{ address: string }>;\n signTransaction(tx: XDR, options: { networkPassphrase: string }): Promise<{ signedTxXdr: XDR }>;\n}\n\nexport type StellarNetwork = 'TESTNET' | 'PUBLIC';\n\nconst STELLAR_HORIZON_URLS: { [key in StellarNetwork]: string } = {\n TESTNET: 'https://horizon-testnet.stellar.org',\n PUBLIC: 'https://horizon.stellar.org',\n};\n\nconst STELLAR_NETWORK_PASSPHRASES: { [key in StellarNetwork]: string } = {\n TESTNET: Networks.TESTNET,\n PUBLIC: Networks.PUBLIC,\n};\n\nconst TX_POLL_INTERVAL = 2000; // 2 seconds\nconst TX_POLL_TIMEOUT = 60000; // 60 seconds\n\nconst STELLAR_ERROR_CODES = {\n INVALID_CONFIG: 'INVALID_CONFIG',\n SIGN_TX_ERROR: 'SIGN_TX_ERROR',\n TX_RECEIPT_TIMEOUT: 'TX_RECEIPT_TIMEOUT',\n SEND_TX_ERROR: 'SEND_TX_ERROR',\n INVALID_NETWORK: 'INVALID_NETWORK',\n INVALID_PRIVATE_KEY: 'INVALID_PRIVATE_KEY',\n} as const;\n\nexport type StellarAddress = string; // Stellar addresses are in format: G...\n\nexport type PrivateKeyStellarWalletConfig = {\n type: 'PRIVATE_KEY';\n privateKey: Hex;\n network: StellarNetwork;\n rpcUrl?: string;\n};\n\nexport type BrowserExtensionStellarWalletConfig = {\n type: 'BROWSER_EXTENSION';\n walletsKit: StellarWalletsKit;\n network: StellarNetwork;\n rpcUrl?: string;\n};\n\nexport type StellarWalletConfig = PrivateKeyStellarWalletConfig | BrowserExtensionStellarWalletConfig;\n\nexport type StellarPkWallet = {\n type: 'PRIVATE_KEY';\n keypair: Keypair;\n};\n\nexport type StellarBrowserExtensionWallet = {\n type: 'BROWSER_EXTENSION';\n walletsKit: StellarWalletsKit;\n};\n\nexport type StellarWallet = StellarPkWallet | StellarBrowserExtensionWallet;\n\nexport class StellarWalletError extends Error {\n constructor(\n message: string,\n public readonly code: keyof typeof STELLAR_ERROR_CODES,\n ) {\n super(message);\n this.name = 'StellarWalletError';\n }\n}\n\nexport function isPrivateKeyStellarWalletConfig(config: StellarWalletConfig): config is PrivateKeyStellarWalletConfig {\n return config.type === 'PRIVATE_KEY';\n}\n\nexport function isBrowserExtensionStellarWalletConfig(\n config: StellarWalletConfig,\n): config is BrowserExtensionStellarWalletConfig {\n return config.type === 'BROWSER_EXTENSION';\n}\n\nexport function isStellarPkWallet(wallet: StellarWallet): wallet is StellarPkWallet {\n return wallet.type === 'PRIVATE_KEY';\n}\n\nexport function isStellarBrowserExtensionWallet(wallet: StellarWallet): wallet is StellarBrowserExtensionWallet {\n return wallet.type === 'BROWSER_EXTENSION';\n}\n\nexport function isValidStellarNetwork(network: string): network is StellarNetwork {\n return ['TESTNET', 'PUBLIC'].includes(network);\n}\n\nexport function isValidStellarPrivateKey(privateKey: string): boolean {\n try {\n // Remove '0x' prefix if present\n const key = privateKey.startsWith('0x') ? privateKey.slice(2) : privateKey;\n Keypair.fromSecret(key);\n return true;\n } catch {\n return false;\n }\n}\n\nexport class StellarWalletProvider implements IStellarWalletProvider {\n private readonly wallet: StellarWallet;\n private readonly server: Horizon.Server;\n private readonly networkPassphrase: string;\n\n constructor(config: StellarWalletConfig) {\n if (!isValidStellarNetwork(config.network)) {\n throw new StellarWalletError(`Invalid network: ${config.network}`, 'INVALID_NETWORK');\n }\n\n if (isPrivateKeyStellarWalletConfig(config)) {\n if (!isValidStellarPrivateKey(config.privateKey)) {\n throw new StellarWalletError('Invalid private key format', 'INVALID_PRIVATE_KEY');\n }\n // Remove '0x' prefix if present\n const privateKey = config.privateKey.startsWith('0x') ? config.privateKey.slice(2) : config.privateKey;\n this.wallet = {\n type: 'PRIVATE_KEY',\n keypair: Keypair.fromSecret(privateKey),\n };\n this.server = new Horizon.Server(config.rpcUrl ?? STELLAR_HORIZON_URLS[config.network]);\n this.networkPassphrase = STELLAR_NETWORK_PASSPHRASES[config.network];\n return;\n }\n\n if (isBrowserExtensionStellarWalletConfig(config)) {\n this.wallet = {\n type: 'BROWSER_EXTENSION',\n walletsKit: config.walletsKit,\n };\n this.server = new Horizon.Server(config.rpcUrl ?? STELLAR_HORIZON_URLS[config.network]);\n this.networkPassphrase = STELLAR_NETWORK_PASSPHRASES[config.network];\n return;\n }\n\n throw new StellarWalletError('Invalid wallet configuration', 'INVALID_CONFIG');\n }\n\n public async getWalletAddress(): Promise<string> {\n try {\n if (isStellarPkWallet(this.wallet)) {\n return this.wallet.keypair.publicKey();\n }\n\n const { address } = await this.wallet.walletsKit.getAddress();\n return address;\n } catch (error) {\n throw new StellarWalletError(\n error instanceof Error ? error.message : 'Failed to get wallet address',\n 'INVALID_CONFIG',\n );\n }\n }\n\n public async signTransaction(tx: XDR): Promise<XDR> {\n try {\n if (isStellarPkWallet(this.wallet)) {\n // Parse the XDR transaction\n const transaction = new Transaction(tx, this.networkPassphrase);\n transaction.sign(this.wallet.keypair);\n return transaction.toXDR();\n }\n\n const { signedTxXdr } = await this.wallet.walletsKit.signTransaction(tx, {\n networkPassphrase: this.networkPassphrase,\n });\n return signedTxXdr;\n } catch (error) {\n throw new StellarWalletError(\n error instanceof Error ? error.message : 'Failed to sign transaction',\n 'SIGN_TX_ERROR',\n );\n }\n }\n\n public async waitForTransactionReceipt(txHash: string): Promise<StellarRawTransactionReceipt> {\n const startTime = Date.now();\n while (Date.now() - startTime < TX_POLL_TIMEOUT) {\n try {\n const tx = await this.server.transactions().transaction(txHash).call();\n\n return {\n ...tx,\n _links: {\n ...tx._links,\n transaction: tx._links.self,\n },\n } as unknown as StellarRawTransactionReceipt;\n } catch (error) {\n // Wait for the next poll interval\n await new Promise(resolve => setTimeout(resolve, TX_POLL_INTERVAL));\n }\n }\n throw new StellarWalletError(\n `Transaction receipt not found for hash ${txHash} after ${TX_POLL_TIMEOUT / 1000} seconds.`,\n 'TX_RECEIPT_TIMEOUT',\n );\n }\n}\n"]}
package/package.json CHANGED
@@ -4,7 +4,7 @@
4
4
  "publishConfig": {
5
5
  "access": "public"
6
6
  },
7
- "version": "0.0.1-rc.4",
7
+ "version": "0.0.1-rc.6",
8
8
  "license": "MIT",
9
9
  "description": "Sodax Wallet SDK Core",
10
10
  "keywords": [
@@ -44,6 +44,10 @@
44
44
  "viem": "2.29.2",
45
45
  "@injectivelabs/sdk-ts": "1.16.10",
46
46
  "@injectivelabs/wallet-core": "1.16.10",
47
+ "@injectivelabs/wallet-base": "1.16.10",
48
+ "@injectivelabs/wallet-private-key": "1.16.10",
49
+ "@injectivelabs/ts-types": "1.16.10",
50
+ "@injectivelabs/networks": "1.16.10",
47
51
  "@solana/spl-token": "0.4.9",
48
52
  "@solana/wallet-adapter-base": "0.9.26",
49
53
  "@solana/web3.js": "1.98.0",