@sodax/wallet-sdk-core 0.0.1-rc.5 → 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
@@ -373,23 +373,35 @@ function BigNumberToBigInt(bigNumber) {
373
373
  return BigInt(bigNumber.toFixed(0));
374
374
  }
375
375
  function isBrowserExtensionInjectiveWalletConfig(config) {
376
- 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;
377
380
  }
378
381
  var InjectiveWalletProvider = class {
379
- msgBroadcaster;
380
- walletAddress;
382
+ wallet;
381
383
  constructor(config) {
382
384
  if (isBrowserExtensionInjectiveWalletConfig(config)) {
383
- this.msgBroadcaster = config.msgBroadcaster;
384
- 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
+ };
385
400
  } else {
386
401
  throw new Error("Invalid Injective wallet config");
387
402
  }
388
403
  }
389
- getRawTransaction(chainId, _, senderAddress, contractAddress, msg, memo) {
390
- if (!this.walletAddress) {
391
- throw new Error("Wallet address not found");
392
- }
404
+ async getRawTransaction(chainId, _, senderAddress, contractAddress, msg, memo) {
393
405
  const msgExec = sdkTs.MsgExecuteContract.fromJSON({
394
406
  contractAddress,
395
407
  sender: senderAddress,
@@ -399,7 +411,7 @@ var InjectiveWalletProvider = class {
399
411
  const { txRaw } = sdkTs.createTransaction({
400
412
  message: msgExec,
401
413
  memo: memo || "",
402
- pubKey: this.walletAddress,
414
+ pubKey: await this.getWalletPubKey(),
403
415
  sequence: 0,
404
416
  accountNumber: 0,
405
417
  chainId
@@ -414,28 +426,48 @@ var InjectiveWalletProvider = class {
414
426
  authInfoBytes: txRaw.authInfoBytes
415
427
  }
416
428
  };
417
- return Promise.resolve(rawTx);
429
+ return rawTx;
418
430
  }
431
+ // return wallet address as bech32
419
432
  async getWalletAddress() {
420
- if (!this.walletAddress) {
421
- 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"));
422
440
  }
423
- return Promise.resolve(this.walletAddress);
441
+ return injectiveAddresses[0];
424
442
  }
425
- async execute(senderAddress, contractAddress, msg, funds) {
426
- if (!this.walletAddress) {
427
- 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"));
428
450
  }
451
+ return pubKey;
452
+ }
453
+ async execute(senderAddress, contractAddress, msg, funds) {
429
454
  const msgExec = sdkTs.MsgExecuteContractCompat.fromJSON({
430
455
  contractAddress,
431
456
  sender: senderAddress,
432
457
  msg,
433
458
  funds: funds || []
434
459
  });
435
- const txResult = await this.msgBroadcaster.broadcastWithFeeDelegation({
436
- msgs: msgExec,
437
- injectiveAddress: this.walletAddress
438
- });
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
+ }
439
471
  return types.InjectiveExecuteResponse.fromTxResponse(txResult);
440
472
  }
441
473
  };
@@ -722,6 +754,7 @@ exports.isPrivateKeyIconWalletConfig = isPrivateKeyIconWalletConfig;
722
754
  exports.isPrivateKeyStellarWalletConfig = isPrivateKeyStellarWalletConfig;
723
755
  exports.isResponseAddressType = isResponseAddressType;
724
756
  exports.isResponseSigningType = isResponseSigningType;
757
+ exports.isSecretInjectiveWalletConfig = isSecretInjectiveWalletConfig;
725
758
  exports.isStellarBrowserExtensionWallet = isStellarBrowserExtensionWallet;
726
759
  exports.isStellarPkWallet = isStellarPkWallet;
727
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","IconSdkRaw","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 * 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 { 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
@@ -6,7 +6,7 @@ import { SuiClient } from '@mysten/sui/client';
6
6
  import { Ed25519Keypair } from '@mysten/sui/keypairs/ed25519';
7
7
  import { signTransaction } from '@mysten/wallet-standard';
8
8
  import * as IconSdkRaw from 'icon-sdk-js';
9
- import { MsgExecuteContract, createTransaction, MsgExecuteContractCompat } from '@injectivelabs/sdk-ts';
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';
@@ -351,23 +351,35 @@ function BigNumberToBigInt(bigNumber) {
351
351
  return BigInt(bigNumber.toFixed(0));
352
352
  }
353
353
  function isBrowserExtensionInjectiveWalletConfig(config) {
354
- 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;
355
358
  }
356
359
  var InjectiveWalletProvider = class {
357
- msgBroadcaster;
358
- walletAddress;
360
+ wallet;
359
361
  constructor(config) {
360
362
  if (isBrowserExtensionInjectiveWalletConfig(config)) {
361
- this.msgBroadcaster = config.msgBroadcaster;
362
- 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
+ };
363
378
  } else {
364
379
  throw new Error("Invalid Injective wallet config");
365
380
  }
366
381
  }
367
- getRawTransaction(chainId, _, senderAddress, contractAddress, msg, memo) {
368
- if (!this.walletAddress) {
369
- throw new Error("Wallet address not found");
370
- }
382
+ async getRawTransaction(chainId, _, senderAddress, contractAddress, msg, memo) {
371
383
  const msgExec = MsgExecuteContract.fromJSON({
372
384
  contractAddress,
373
385
  sender: senderAddress,
@@ -377,7 +389,7 @@ var InjectiveWalletProvider = class {
377
389
  const { txRaw } = createTransaction({
378
390
  message: msgExec,
379
391
  memo: memo || "",
380
- pubKey: this.walletAddress,
392
+ pubKey: await this.getWalletPubKey(),
381
393
  sequence: 0,
382
394
  accountNumber: 0,
383
395
  chainId
@@ -392,28 +404,48 @@ var InjectiveWalletProvider = class {
392
404
  authInfoBytes: txRaw.authInfoBytes
393
405
  }
394
406
  };
395
- return Promise.resolve(rawTx);
407
+ return rawTx;
396
408
  }
409
+ // return wallet address as bech32
397
410
  async getWalletAddress() {
398
- if (!this.walletAddress) {
399
- 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"));
400
418
  }
401
- return Promise.resolve(this.walletAddress);
419
+ return injectiveAddresses[0];
402
420
  }
403
- async execute(senderAddress, contractAddress, msg, funds) {
404
- if (!this.walletAddress) {
405
- 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"));
406
428
  }
429
+ return pubKey;
430
+ }
431
+ async execute(senderAddress, contractAddress, msg, funds) {
407
432
  const msgExec = MsgExecuteContractCompat.fromJSON({
408
433
  contractAddress,
409
434
  sender: senderAddress,
410
435
  msg,
411
436
  funds: funds || []
412
437
  });
413
- const txResult = await this.msgBroadcaster.broadcastWithFeeDelegation({
414
- msgs: msgExec,
415
- injectiveAddress: this.walletAddress
416
- });
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
+ }
417
449
  return InjectiveExecuteResponse.fromTxResponse(txResult);
418
450
  }
419
451
  };
@@ -675,6 +707,6 @@ var StellarWalletProvider = class {
675
707
  }
676
708
  };
677
709
 
678
- 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 };
679
711
  //# sourceMappingURL=index.mjs.map
680
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":["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 { 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.5",
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",