@sodax/wallet-sdk-core 0.0.1-rc.1 → 0.0.1-rc.3
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 +6 -28
- package/dist/index.cjs.map +1 -1
- package/dist/index.mjs +5 -7
- package/dist/index.mjs.map +1 -1
- package/package.json +2 -2
package/dist/index.cjs
CHANGED
|
@@ -7,32 +7,12 @@ var types = require('@sodax/types');
|
|
|
7
7
|
var client = require('@mysten/sui/client');
|
|
8
8
|
var ed25519 = require('@mysten/sui/keypairs/ed25519');
|
|
9
9
|
var walletStandard = require('@mysten/wallet-standard');
|
|
10
|
-
var
|
|
10
|
+
var iconSdkJs = require('icon-sdk-js');
|
|
11
11
|
var sdkTs = require('@injectivelabs/sdk-ts');
|
|
12
12
|
var splToken = require('@solana/spl-token');
|
|
13
13
|
var web3_js = require('@solana/web3.js');
|
|
14
14
|
var stellarSdk = require('@stellar/stellar-sdk');
|
|
15
15
|
|
|
16
|
-
function _interopNamespace(e) {
|
|
17
|
-
if (e && e.__esModule) return e;
|
|
18
|
-
var n = Object.create(null);
|
|
19
|
-
if (e) {
|
|
20
|
-
Object.keys(e).forEach(function (k) {
|
|
21
|
-
if (k !== 'default') {
|
|
22
|
-
var d = Object.getOwnPropertyDescriptor(e, k);
|
|
23
|
-
Object.defineProperty(n, k, d.get ? d : {
|
|
24
|
-
enumerable: true,
|
|
25
|
-
get: function () { return e[k]; }
|
|
26
|
-
});
|
|
27
|
-
}
|
|
28
|
-
});
|
|
29
|
-
}
|
|
30
|
-
n.default = e;
|
|
31
|
-
return Object.freeze(n);
|
|
32
|
-
}
|
|
33
|
-
|
|
34
|
-
var IconSdkRaw__namespace = /*#__PURE__*/_interopNamespace(IconSdkRaw);
|
|
35
|
-
|
|
36
16
|
// src/wallet-providers/EvmWalletProvider.ts
|
|
37
17
|
function getEvmViemChain(id) {
|
|
38
18
|
switch (id) {
|
|
@@ -209,8 +189,6 @@ var SuiWalletProvider = class {
|
|
|
209
189
|
return this.getSuiAddress();
|
|
210
190
|
}
|
|
211
191
|
};
|
|
212
|
-
var IconSdk = "default" in IconSdkRaw__namespace.default ? IconSdkRaw__namespace.default : IconSdkRaw__namespace;
|
|
213
|
-
var { Converter, CallTransactionBuilder, Wallet } = IconSdk;
|
|
214
192
|
var IconWalletProvider = class {
|
|
215
193
|
wallet;
|
|
216
194
|
iconService;
|
|
@@ -218,26 +196,26 @@ var IconWalletProvider = class {
|
|
|
218
196
|
if (isPrivateKeyIconWalletConfig(wallet)) {
|
|
219
197
|
this.wallet = {
|
|
220
198
|
type: "PRIVATE_KEY",
|
|
221
|
-
wallet: Wallet.loadPrivateKey(wallet.privateKey.slice(2))
|
|
199
|
+
wallet: iconSdkJs.Wallet.loadPrivateKey(wallet.privateKey.slice(2))
|
|
222
200
|
};
|
|
223
|
-
this.iconService = new
|
|
201
|
+
this.iconService = new iconSdkJs.IconService(new iconSdkJs.IconService.HttpProvider(wallet.rpcUrl));
|
|
224
202
|
} else if (isBrowserExtensionIconWalletConfig(wallet)) {
|
|
225
203
|
this.wallet = {
|
|
226
204
|
type: "BROWSER_EXTENSION",
|
|
227
205
|
wallet: wallet.walletAddress
|
|
228
206
|
};
|
|
229
|
-
this.iconService = new
|
|
207
|
+
this.iconService = new iconSdkJs.IconService(new iconSdkJs.IconService.HttpProvider(wallet.rpcUrl));
|
|
230
208
|
} else {
|
|
231
209
|
throw new Error("Invalid Icon wallet config");
|
|
232
210
|
}
|
|
233
211
|
}
|
|
234
212
|
async sendTransaction(tx) {
|
|
235
|
-
const builtTx = new CallTransactionBuilder().from(tx.from).to(tx.to).stepLimit(Converter.toHex(
|
|
213
|
+
const builtTx = new iconSdkJs.CallTransactionBuilder().from(tx.from).to(tx.to).stepLimit(iconSdkJs.Converter.toHex(3e6)).nid(tx.nid).version(tx.version ?? "0x3").timestamp(iconSdkJs.Converter.toHex(tx.timestamp ?? (/* @__PURE__ */ new Date()).getTime() * 1e3)).value(tx.value).method(tx.method).params(tx.params).build();
|
|
236
214
|
if (!isIconPkWallet(this.wallet)) {
|
|
237
215
|
const result2 = await requestJsonRpc(builtTx);
|
|
238
216
|
return result2.result;
|
|
239
217
|
}
|
|
240
|
-
const signedTx = new
|
|
218
|
+
const signedTx = new iconSdkJs.IconService.SignedTransaction(builtTx, this.wallet.wallet);
|
|
241
219
|
const result = await this.iconService.sendTransaction(signedTx).execute();
|
|
242
220
|
return result;
|
|
243
221
|
}
|
package/dist/index.cjs.map
CHANGED
|
@@ -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(2000000))\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 } from '@injectivelabs/sdk-ts';\nimport { 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: '',\n pubKey: Buffer.from(this.walletAddress).toString(),\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","Wallet","IconServiceConstructor","CallTransactionBuilder","Converter","result","MsgExecuteContract","createTransaction","MsgExecuteContractCompat","InjectiveExecuteResponse","Keypair","Connection","TransactionMessage","VersionedTransaction","getAssociatedTokenAddress","PublicKey","TransactionInstruction","Networks","Horizon","Transaction"],"mappings":"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","file":"index.cjs","sourcesContent":["import type { ChainId, EvmRawTransaction, EvmRawTransactionReceipt, IEvmWalletProvider } from '@sodax/types';\nimport type { Account, Address, Chain, Transport, Hash, PublicClient, WalletClient } from 'viem';\nimport { privateKeyToAccount } from 'viem/accounts';\nimport { createWalletClient, createPublicClient, http } from 'viem';\nimport { sonic, avalanche, arbitrum, base, optimism, bsc, polygon, nibiru } from 'viem/chains';\nimport {\n SONIC_MAINNET_CHAIN_ID,\n AVALANCHE_MAINNET_CHAIN_ID,\n ARBITRUM_MAINNET_CHAIN_ID,\n BASE_MAINNET_CHAIN_ID,\n OPTIMISM_MAINNET_CHAIN_ID,\n BSC_MAINNET_CHAIN_ID,\n POLYGON_MAINNET_CHAIN_ID,\n NIBIRU_MAINNET_CHAIN_ID,\n} from '@sodax/types';\n\nexport function getEvmViemChain(id: ChainId): Chain {\n switch (id) {\n case SONIC_MAINNET_CHAIN_ID:\n return sonic;\n case AVALANCHE_MAINNET_CHAIN_ID:\n return avalanche;\n case ARBITRUM_MAINNET_CHAIN_ID:\n return arbitrum;\n case BASE_MAINNET_CHAIN_ID:\n return base;\n case OPTIMISM_MAINNET_CHAIN_ID:\n return optimism;\n case BSC_MAINNET_CHAIN_ID:\n return bsc;\n case POLYGON_MAINNET_CHAIN_ID:\n return polygon;\n case NIBIRU_MAINNET_CHAIN_ID:\n return nibiru;\n default:\n throw new Error(`Unsupported EVM chain ID: ${id}`);\n }\n}\n\nexport class EvmWalletProvider implements IEvmWalletProvider {\n private readonly walletClient: WalletClient<Transport, Chain, Account>;\n public readonly publicClient: PublicClient;\n\n constructor(config: EvmWalletConfig) {\n if (isPrivateKeyEvmWalletConfig(config)) {\n const chain = getEvmViemChain(config.chainId);\n this.walletClient = createWalletClient({\n chain,\n transport: http(config.rpcUrl ?? chain.rpcUrls.default.http[0]),\n account: privateKeyToAccount(config.privateKey),\n });\n this.publicClient = createPublicClient({\n chain,\n transport: http(config.rpcUrl ?? chain.rpcUrls.default.http[0]),\n });\n } else if (isBrowserExtensionEvmWalletConfig(config)) {\n this.walletClient = config.walletClient;\n this.publicClient = config.publicClient;\n } else {\n throw new Error('Invalid EVM wallet config');\n }\n }\n\n async sendTransaction(evmRawTx: EvmRawTransaction): Promise<Hash> {\n return this.walletClient.sendTransaction(evmRawTx);\n }\n\n async waitForTransactionReceipt(txHash: Hash): Promise<EvmRawTransactionReceipt> {\n const receipt = await this.publicClient.waitForTransactionReceipt({ hash: txHash });\n return {\n ...receipt,\n transactionIndex: receipt.transactionIndex.toString(),\n blockNumber: receipt.blockNumber.toString(),\n cumulativeGasUsed: receipt.cumulativeGasUsed.toString(),\n gasUsed: receipt.gasUsed.toString(),\n contractAddress: receipt.contractAddress?.toString() ?? null,\n logs: receipt.logs.map(log => ({\n ...log,\n blockNumber: log.blockNumber.toString() as `0x${string}`,\n logIndex: log.logIndex.toString() as `0x${string}`,\n transactionIndex: log.transactionIndex.toString() as `0x${string}`,\n })),\n effectiveGasPrice: receipt.effectiveGasPrice.toString(),\n };\n }\n\n async getWalletAddress(): Promise<Address> {\n return this.walletClient.account.address;\n }\n}\n\n/**\n * EVM Wallet Configuration Types\n */\n\nexport type PrivateKeyEvmWalletConfig = {\n privateKey: `0x${string}`;\n chainId: ChainId;\n rpcUrl?: `http${string}`;\n};\n\nexport type BrowserExtensionEvmWalletConfig = {\n walletClient: WalletClient<Transport, Chain, Account>;\n publicClient: PublicClient;\n};\n\nexport type EvmWalletConfig = PrivateKeyEvmWalletConfig | BrowserExtensionEvmWalletConfig;\n\n/**\n * EVM Type Guards\n */\n\nexport function isPrivateKeyEvmWalletConfig(config: EvmWalletConfig): config is PrivateKeyEvmWalletConfig {\n return 'privateKey' in config && config.privateKey.startsWith('0x');\n}\n\nexport function isBrowserExtensionEvmWalletConfig(config: EvmWalletConfig): config is BrowserExtensionEvmWalletConfig {\n return 'walletClient' in config && 'publicClient' in config;\n}\n","import { SuiClient } from '@mysten/sui/client';\nimport { Ed25519Keypair } from '@mysten/sui/keypairs/ed25519';\nimport type { Transaction, TransactionArgument } from '@mysten/sui/transactions';\nimport type { ISuiWalletProvider, SuiTransaction, SuiExecutionResult, SuiPaginatedCoins } from '@sodax/types';\nimport {\n signTransaction,\n type SuiWalletFeatures,\n type WalletAccount,\n type WalletWithFeatures,\n} from '@mysten/wallet-standard';\n\n// Private key wallet config\nexport type PrivateKeySuiWalletConfig = {\n rpcUrl: string;\n mnemonics: string;\n};\n\n// Browser extension wallet config\nexport type BrowserExtensionSuiWalletConfig = {\n client: SuiClient;\n wallet: WalletWithFeatures<Partial<SuiWalletFeatures>>;\n account: WalletAccount;\n};\n\n// Unified config type\nexport type SuiWalletConfig = PrivateKeySuiWalletConfig | BrowserExtensionSuiWalletConfig;\n\n// Type guards\nfunction isPrivateKeySuiWalletConfig(walletConfig: SuiWalletConfig): walletConfig is PrivateKeySuiWalletConfig {\n return 'mnemonics' in walletConfig;\n}\n\nfunction isBrowserExtensionSuiWalletConfig(\n walletConfig: SuiWalletConfig,\n): walletConfig is BrowserExtensionSuiWalletConfig {\n return 'wallet' in walletConfig && 'account' in walletConfig;\n}\n\nexport type PkSuiWallet = {\n keyPair: Ed25519Keypair;\n};\n\nexport type BrowserExtensionSuiWallet = {\n wallet: WalletWithFeatures<Partial<SuiWalletFeatures>>;\n account: WalletAccount;\n};\n\nexport type SuiWallet = PkSuiWallet | BrowserExtensionSuiWallet;\n\nexport function isPkSuiWallet(wallet: SuiWallet): wallet is PkSuiWallet {\n return 'keyPair' in wallet;\n}\n\nexport function isBrowserExtensionSuiWallet(wallet: SuiWallet): wallet is BrowserExtensionSuiWallet {\n return 'wallet' in wallet && 'account' in wallet;\n}\n\nexport function isSuiWallet(wallet: SuiWallet): wallet is SuiWallet {\n return isPkSuiWallet(wallet) || isBrowserExtensionSuiWallet(wallet);\n}\n\nexport class SuiWalletProvider implements ISuiWalletProvider {\n private readonly client: SuiClient;\n private readonly wallet: SuiWallet;\n\n constructor(walletConfig: SuiWalletConfig) {\n if (isPrivateKeySuiWalletConfig(walletConfig)) {\n this.client = new SuiClient({ url: walletConfig.rpcUrl });\n this.wallet = {\n keyPair: Ed25519Keypair.deriveKeypair(walletConfig.mnemonics),\n };\n } else if (isBrowserExtensionSuiWalletConfig(walletConfig)) {\n this.client = walletConfig.client;\n this.wallet = {\n wallet: walletConfig.wallet,\n account: walletConfig.account,\n };\n } else {\n throw new Error('Invalid wallet configuration');\n }\n }\n\n async signAndExecuteTxn(txn: SuiTransaction): Promise<string> {\n if (isPkSuiWallet(this.wallet)) {\n const res = await this.client.signAndExecuteTransaction({\n transaction: txn as unknown as Transaction,\n signer: this.wallet.keyPair,\n });\n\n return res.digest;\n }\n if (isBrowserExtensionSuiWallet(this.wallet)) {\n const browserWallet = this.wallet.wallet;\n const browserAccount = this.wallet.account;\n\n if (!browserAccount || browserAccount.chains.length === 0) {\n throw new Error('No chains available for wallet account');\n }\n const chain = browserAccount.chains[0];\n if (!chain) {\n throw new Error('No chain available for wallet account');\n }\n const { bytes, signature } = await signTransaction(browserWallet, {\n transaction: txn,\n account: browserAccount,\n chain,\n });\n\n const res = await this.client.executeTransactionBlock({\n transactionBlock: bytes,\n signature,\n options: {\n showRawEffects: true,\n },\n });\n\n return res.digest;\n }\n\n throw new Error('Invalid wallet configuration');\n }\n\n async viewContract(\n tx: Transaction,\n packageId: string,\n module: string,\n functionName: string,\n args: unknown[],\n typeArgs: string[] = [],\n ): Promise<SuiExecutionResult> {\n tx.moveCall({\n target: `${packageId}::${module}::${functionName}`,\n arguments: args as TransactionArgument[],\n typeArguments: typeArgs,\n });\n\n const sender = this.getSuiAddress();\n\n const txResults = await this.client.devInspectTransactionBlock({\n transactionBlock: tx,\n sender,\n });\n\n if (txResults.results && txResults.results[0] !== undefined) {\n return txResults.results[0] as SuiExecutionResult;\n }\n throw Error(`transaction didn't return any values: ${JSON.stringify(txResults, null, 2)}`);\n }\n\n async getCoins(address: string, token: string): Promise<SuiPaginatedCoins> {\n return this.client.getCoins({ owner: address, coinType: token, limit: 10 });\n }\n\n private getSuiAddress(): string {\n if (isPkSuiWallet(this.wallet)) {\n return this.wallet.keyPair.toSuiAddress();\n }\n if (isBrowserExtensionSuiWallet(this.wallet)) {\n return this.wallet.account.address;\n }\n throw new Error('Invalid wallet configuration');\n }\n\n async getWalletAddress(): Promise<string> {\n return this.getSuiAddress();\n }\n}\n","import type { IconTransactionResult, IcxCallTransaction, IIconWalletProvider } from '@sodax/types';\nimport type { IconService, Wallet as IconSdkWallet } from 'icon-sdk-js';\nimport { Converter, CallTransactionBuilder, Wallet, IconService as IconServiceConstructor } from 'icon-sdk-js';\n\nexport class IconWalletProvider implements IIconWalletProvider {\n private readonly wallet: IconWallet;\n public readonly iconService: IconService;\n\n constructor(wallet: IconWalletConfig) {\n if (isPrivateKeyIconWalletConfig(wallet)) {\n this.wallet = {\n type: 'PRIVATE_KEY',\n wallet: Wallet.loadPrivateKey(wallet.privateKey.slice(2)),\n };\n this.iconService = new IconServiceConstructor(new IconServiceConstructor.HttpProvider(wallet.rpcUrl));\n } else if (isBrowserExtensionIconWalletConfig(wallet)) {\n this.wallet = {\n type: 'BROWSER_EXTENSION',\n wallet: wallet.walletAddress,\n };\n this.iconService = new IconServiceConstructor(new IconServiceConstructor.HttpProvider(wallet.rpcUrl));\n } else {\n throw new Error('Invalid Icon wallet config');\n }\n }\n\n public async sendTransaction(tx: IcxCallTransaction): Promise<Hash> {\n const builtTx = new CallTransactionBuilder()\n .from(tx.from)\n .to(tx.to)\n .stepLimit(Converter.toHex(3000000))\n .nid(tx.nid)\n .version(tx.version ?? '0x3')\n .timestamp(Converter.toHex(tx.timestamp ?? new Date().getTime() * 1000))\n .value(tx.value)\n .method(tx.method)\n .params(tx.params)\n .build();\n\n if (!isIconPkWallet(this.wallet)) {\n // if wallet starts with 0x, it's a private key\n const result = await requestJsonRpc(builtTx);\n\n return result.result satisfies string as Hash;\n }\n const signedTx = new IconServiceConstructor.SignedTransaction(builtTx, this.wallet.wallet);\n const result = await this.iconService.sendTransaction(signedTx).execute();\n\n return result satisfies string as Hash;\n }\n\n public async waitForTransactionReceipt(txHash: Hash): Promise<IconTransactionResult> {\n const result = await this.iconService.waitTransactionResult(txHash).execute();\n\n return {\n ...result,\n status: +result.status,\n cumulativeStepUsed: BigNumberToBigInt(result.cumulativeStepUsed),\n stepUsed: BigNumberToBigInt(result.stepUsed),\n stepPrice: BigNumberToBigInt(result.stepPrice),\n } satisfies IconTransactionResult;\n }\n\n async getWalletAddress(): Promise<IconEoaAddress> {\n if (!this.wallet.wallet) {\n throw new Error('Wallet not initialized');\n }\n return isIconPkWallet(this.wallet) ? (this.wallet.wallet.getAddress() as IconEoaAddress) : this.wallet.wallet;\n }\n}\n\n/**\n * Icon Types\n */\n\nexport type IconJsonRpcVersion = '2.0';\n\nexport type Hex = `0x${string}`;\nexport type Hash = `0x${string}`;\nexport type IconAddress = `hx${string}` | `cx${string}`;\nexport type IconEoaAddress = `hx${string}`;\n\nexport type PrivateKeyIconWalletConfig = {\n privateKey: `0x${string}`;\n rpcUrl: `http${string}`;\n};\n\nexport type BrowserExtensionIconWalletConfig = {\n walletAddress?: IconEoaAddress;\n rpcUrl: `http${string}`;\n};\n\nexport type IconWalletConfig = PrivateKeyIconWalletConfig | BrowserExtensionIconWalletConfig;\n\nexport type IconPkWallet = {\n type: 'PRIVATE_KEY';\n wallet: IconSdkWallet;\n};\n\nexport type IconBrowserExtensionWallet = {\n type: 'BROWSER_EXTENSION';\n wallet?: IconEoaAddress;\n};\n\nexport type IconWallet = IconPkWallet | IconBrowserExtensionWallet;\n\nexport type HanaWalletRequestEvent =\n | 'REQUEST_HAS_ACCOUNT'\n | 'REQUEST_HAS_ADDRESS'\n | 'REQUEST_ADDRESS'\n | 'REQUEST_JSON'\n | 'REQUEST_SIGNING'\n | 'REQUEST_JSON-RPC';\nexport type HanaWalletResponseEvent =\n | 'RESPONSE_HAS_ACCOUNT'\n | 'RESPONSE_HAS_ADDRESS'\n | 'RESPONSE_ADDRESS'\n | 'RESPONSE_JSON-RPC'\n | 'RESPONSE_SIGNING'\n | 'CANCEL_SIGNING'\n | 'CANCEL_JSON-RPC';\n\nexport type ResponseAddressType = {\n type: 'RESPONSE_ADDRESS';\n payload: IconAddress;\n};\n\nexport type ResponseSigningType = {\n type: 'RESPONSE_SIGNING';\n payload: string;\n};\n\nexport type RelayRequestDetail = {\n type: HanaWalletRequestEvent;\n payload?: {\n jsonrpc: IconJsonRpcVersion;\n method: string;\n params: unknown;\n id: number | undefined;\n };\n};\n\nexport type RelayRequestSigning = {\n type: 'REQUEST_SIGNING';\n payload: {\n from: IconAddress;\n hash: string;\n };\n};\n\nexport type JsonRpcPayloadResponse = {\n id: number;\n result: string; // txHash\n};\n\ninterface RelayResponseEventDetail {\n type: HanaWalletResponseEvent;\n payload: unknown;\n}\n\n/**\n * Icon Type Guards\n */\n\nexport function isIconPkWallet(wallet: IconWallet): wallet is IconPkWallet {\n return wallet.type === 'PRIVATE_KEY';\n}\n\nexport function isIconBrowserExtensionWallet(wallet: IconWallet): wallet is IconBrowserExtensionWallet {\n return wallet.type === 'BROWSER_EXTENSION';\n}\n\nexport function isPrivateKeyIconWalletConfig(config: IconWalletConfig): config is PrivateKeyIconWalletConfig {\n return 'privateKey' in config && config.privateKey.startsWith('0x');\n}\n\nexport function isBrowserExtensionIconWalletConfig(\n config: IconWalletConfig,\n): config is BrowserExtensionIconWalletConfig {\n return 'walletAddress' in config && (isIconEoaAddress(config.walletAddress) || !config.walletAddress);\n}\n\nexport function isIconAddress(value: unknown): value is IconAddress {\n return typeof value === 'string' && /^hx[a-f0-9]{40}$|^cx[a-f0-9]{40}$/.test(value);\n}\n\nexport function isIconEoaAddress(value: unknown): value is IconEoaAddress {\n return typeof value === 'string' && /^hx[a-f0-9]{40}$/.test(value);\n}\n\nexport function isResponseAddressType(value: unknown): value is ResponseAddressType {\n return (\n typeof value === 'object' &&\n value !== null &&\n 'type' in value &&\n 'payload' in value &&\n value.type === 'RESPONSE_ADDRESS' &&\n isIconAddress(value.payload)\n );\n}\n\nexport function isResponseSigningType(value: unknown): value is ResponseSigningType {\n return (\n typeof value === 'object' &&\n value !== null &&\n 'type' in value &&\n 'payload' in value &&\n value.type === 'RESPONSE_SIGNING' &&\n typeof value.payload === 'string'\n );\n}\n\nexport function isJsonRpcPayloadResponse(value: unknown): value is JsonRpcPayloadResponse {\n return (\n typeof value === 'object' &&\n value !== null &&\n 'id' in value &&\n 'result' in value &&\n typeof value.result === 'string'\n );\n}\n\n/**\n * Methods to interact with Icon Browser Extension Wallet (e.g. Hana Wallet)\n */\n\nexport function requestAddress(): Promise<IconAddress> {\n return new Promise(resolve => {\n const eventHandler = (event: Event) => {\n const customEvent = event as CustomEvent<RelayResponseEventDetail>;\n const response = customEvent.detail;\n if (isResponseAddressType(response)) {\n window.removeEventListener('ICONEX_RELAY_RESPONSE', eventHandler as EventListener, false);\n resolve(response.payload);\n }\n };\n\n window.removeEventListener('ICONEX_RELAY_RESPONSE', eventHandler, false);\n window.addEventListener('ICONEX_RELAY_RESPONSE', eventHandler, false);\n window.dispatchEvent(\n new CustomEvent<RelayRequestDetail>('ICONEX_RELAY_REQUEST', {\n detail: {\n type: 'REQUEST_ADDRESS',\n },\n }),\n );\n });\n}\n\nexport function requestSigning(from: IconAddress, hash: string): Promise<string> {\n return new Promise((resolve, reject) => {\n const signRequest = new CustomEvent<RelayRequestSigning>('ICONEX_RELAY_REQUEST', {\n detail: {\n type: 'REQUEST_SIGNING',\n payload: {\n from,\n hash,\n },\n },\n });\n\n const eventHandler = (event: Event) => {\n const customEvent = event as CustomEvent<RelayResponseEventDetail>;\n const response = customEvent.detail;\n if (isResponseSigningType(response)) {\n window.removeEventListener('ICONEX_RELAY_RESPONSE', eventHandler as EventListener, false);\n\n // resolve signature\n resolve(response.payload);\n } else if (response.type === 'CANCEL_SIGNING') {\n reject(new Error('CANCEL_SIGNING'));\n }\n };\n\n window.removeEventListener('ICONEX_RELAY_RESPONSE', eventHandler as EventListener, false);\n window.addEventListener('ICONEX_RELAY_RESPONSE', eventHandler as EventListener, false);\n window.dispatchEvent(signRequest);\n });\n}\n\nexport function requestJsonRpc(rawTransaction: unknown, id = 99999): Promise<JsonRpcPayloadResponse> {\n return new Promise((resolve, reject) => {\n const eventHandler = (event: Event) => {\n const customEvent = event as CustomEvent<RelayResponseEventDetail>;\n const { type, payload } = customEvent.detail;\n if (type === 'RESPONSE_JSON-RPC') {\n window.removeEventListener('ICONEX_RELAY_RESPONSE', eventHandler as EventListener, false);\n\n if (isJsonRpcPayloadResponse(payload)) {\n resolve(payload);\n } else {\n reject(new Error('Invalid payload response type (expected JsonRpcPayloadResponse)'));\n }\n } else if (type === 'CANCEL_JSON-RPC') {\n window.removeEventListener('ICONEX_RELAY_RESPONSE', eventHandler as EventListener, false);\n reject(new Error('CANCEL_JSON-RPC'));\n }\n };\n\n window.removeEventListener('ICONEX_RELAY_RESPONSE', eventHandler as EventListener, false);\n window.addEventListener('ICONEX_RELAY_RESPONSE', eventHandler as EventListener, false);\n window.dispatchEvent(\n new CustomEvent<RelayRequestDetail>('ICONEX_RELAY_REQUEST', {\n detail: {\n type: 'REQUEST_JSON-RPC',\n payload: {\n jsonrpc: '2.0',\n method: 'icx_sendTransaction',\n params: rawTransaction,\n id: id,\n },\n },\n }),\n );\n });\n}\n\n/**\n * Icon Utils\n */\n\nexport function BigNumberToBigInt(bigNumber: BigNumber): bigint {\n if (!bigNumber.isInteger()) {\n throw new Error('Cannot convert decimal number to BigInt');\n }\n return BigInt(bigNumber.toFixed(0));\n}\n","import type { MsgBroadcaster } from '@injectivelabs/wallet-core';\nimport { MsgExecuteContract, MsgExecuteContractCompat } from '@injectivelabs/sdk-ts';\nimport { 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: '',\n pubKey: Buffer.from(this.walletAddress).toString(),\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"]}
|
package/dist/index.mjs
CHANGED
|
@@ -5,7 +5,7 @@ import { NIBIRU_MAINNET_CHAIN_ID, POLYGON_MAINNET_CHAIN_ID, BSC_MAINNET_CHAIN_ID
|
|
|
5
5
|
import { SuiClient } from '@mysten/sui/client';
|
|
6
6
|
import { Ed25519Keypair } from '@mysten/sui/keypairs/ed25519';
|
|
7
7
|
import { signTransaction } from '@mysten/wallet-standard';
|
|
8
|
-
import
|
|
8
|
+
import { Wallet, IconService, CallTransactionBuilder, Converter } from 'icon-sdk-js';
|
|
9
9
|
import { MsgExecuteContract, createTransaction, 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';
|
|
@@ -187,8 +187,6 @@ var SuiWalletProvider = class {
|
|
|
187
187
|
return this.getSuiAddress();
|
|
188
188
|
}
|
|
189
189
|
};
|
|
190
|
-
var IconSdk = "default" in IconSdkRaw.default ? IconSdkRaw.default : IconSdkRaw;
|
|
191
|
-
var { Converter, CallTransactionBuilder, Wallet } = IconSdk;
|
|
192
190
|
var IconWalletProvider = class {
|
|
193
191
|
wallet;
|
|
194
192
|
iconService;
|
|
@@ -198,24 +196,24 @@ var IconWalletProvider = class {
|
|
|
198
196
|
type: "PRIVATE_KEY",
|
|
199
197
|
wallet: Wallet.loadPrivateKey(wallet.privateKey.slice(2))
|
|
200
198
|
};
|
|
201
|
-
this.iconService = new
|
|
199
|
+
this.iconService = new IconService(new IconService.HttpProvider(wallet.rpcUrl));
|
|
202
200
|
} else if (isBrowserExtensionIconWalletConfig(wallet)) {
|
|
203
201
|
this.wallet = {
|
|
204
202
|
type: "BROWSER_EXTENSION",
|
|
205
203
|
wallet: wallet.walletAddress
|
|
206
204
|
};
|
|
207
|
-
this.iconService = new
|
|
205
|
+
this.iconService = new IconService(new IconService.HttpProvider(wallet.rpcUrl));
|
|
208
206
|
} else {
|
|
209
207
|
throw new Error("Invalid Icon wallet config");
|
|
210
208
|
}
|
|
211
209
|
}
|
|
212
210
|
async sendTransaction(tx) {
|
|
213
|
-
const builtTx = new CallTransactionBuilder().from(tx.from).to(tx.to).stepLimit(Converter.toHex(
|
|
211
|
+
const builtTx = new CallTransactionBuilder().from(tx.from).to(tx.to).stepLimit(Converter.toHex(3e6)).nid(tx.nid).version(tx.version ?? "0x3").timestamp(Converter.toHex(tx.timestamp ?? (/* @__PURE__ */ new Date()).getTime() * 1e3)).value(tx.value).method(tx.method).params(tx.params).build();
|
|
214
212
|
if (!isIconPkWallet(this.wallet)) {
|
|
215
213
|
const result2 = await requestJsonRpc(builtTx);
|
|
216
214
|
return result2.result;
|
|
217
215
|
}
|
|
218
|
-
const signedTx = new
|
|
216
|
+
const signedTx = new IconService.SignedTransaction(builtTx, this.wallet.wallet);
|
|
219
217
|
const result = await this.iconService.sendTransaction(signedTx).execute();
|
|
220
218
|
return result;
|
|
221
219
|
}
|
package/dist/index.mjs.map
CHANGED
|
@@ -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(2000000))\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 } from '@injectivelabs/sdk-ts';\nimport { 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: '',\n pubKey: Buffer.from(this.walletAddress).toString(),\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":["IconServiceConstructor","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 { Converter, CallTransactionBuilder, Wallet, IconService as IconServiceConstructor } from 'icon-sdk-js';\n\nexport class IconWalletProvider implements IIconWalletProvider {\n private readonly wallet: IconWallet;\n public readonly iconService: IconService;\n\n constructor(wallet: IconWalletConfig) {\n if (isPrivateKeyIconWalletConfig(wallet)) {\n this.wallet = {\n type: 'PRIVATE_KEY',\n wallet: Wallet.loadPrivateKey(wallet.privateKey.slice(2)),\n };\n this.iconService = new IconServiceConstructor(new IconServiceConstructor.HttpProvider(wallet.rpcUrl));\n } else if (isBrowserExtensionIconWalletConfig(wallet)) {\n this.wallet = {\n type: 'BROWSER_EXTENSION',\n wallet: wallet.walletAddress,\n };\n this.iconService = new IconServiceConstructor(new IconServiceConstructor.HttpProvider(wallet.rpcUrl));\n } else {\n throw new Error('Invalid Icon wallet config');\n }\n }\n\n public async sendTransaction(tx: IcxCallTransaction): Promise<Hash> {\n const builtTx = new CallTransactionBuilder()\n .from(tx.from)\n .to(tx.to)\n .stepLimit(Converter.toHex(3000000))\n .nid(tx.nid)\n .version(tx.version ?? '0x3')\n .timestamp(Converter.toHex(tx.timestamp ?? new Date().getTime() * 1000))\n .value(tx.value)\n .method(tx.method)\n .params(tx.params)\n .build();\n\n if (!isIconPkWallet(this.wallet)) {\n // if wallet starts with 0x, it's a private key\n const result = await requestJsonRpc(builtTx);\n\n return result.result satisfies string as Hash;\n }\n const signedTx = new IconServiceConstructor.SignedTransaction(builtTx, this.wallet.wallet);\n const result = await this.iconService.sendTransaction(signedTx).execute();\n\n return result satisfies string as Hash;\n }\n\n public async waitForTransactionReceipt(txHash: Hash): Promise<IconTransactionResult> {\n const result = await this.iconService.waitTransactionResult(txHash).execute();\n\n return {\n ...result,\n status: +result.status,\n cumulativeStepUsed: BigNumberToBigInt(result.cumulativeStepUsed),\n stepUsed: BigNumberToBigInt(result.stepUsed),\n stepPrice: BigNumberToBigInt(result.stepPrice),\n } satisfies IconTransactionResult;\n }\n\n async getWalletAddress(): Promise<IconEoaAddress> {\n if (!this.wallet.wallet) {\n throw new Error('Wallet not initialized');\n }\n return isIconPkWallet(this.wallet) ? (this.wallet.wallet.getAddress() as IconEoaAddress) : this.wallet.wallet;\n }\n}\n\n/**\n * Icon Types\n */\n\nexport type IconJsonRpcVersion = '2.0';\n\nexport type Hex = `0x${string}`;\nexport type Hash = `0x${string}`;\nexport type IconAddress = `hx${string}` | `cx${string}`;\nexport type IconEoaAddress = `hx${string}`;\n\nexport type PrivateKeyIconWalletConfig = {\n privateKey: `0x${string}`;\n rpcUrl: `http${string}`;\n};\n\nexport type BrowserExtensionIconWalletConfig = {\n walletAddress?: IconEoaAddress;\n rpcUrl: `http${string}`;\n};\n\nexport type IconWalletConfig = PrivateKeyIconWalletConfig | BrowserExtensionIconWalletConfig;\n\nexport type IconPkWallet = {\n type: 'PRIVATE_KEY';\n wallet: IconSdkWallet;\n};\n\nexport type IconBrowserExtensionWallet = {\n type: 'BROWSER_EXTENSION';\n wallet?: IconEoaAddress;\n};\n\nexport type IconWallet = IconPkWallet | IconBrowserExtensionWallet;\n\nexport type HanaWalletRequestEvent =\n | 'REQUEST_HAS_ACCOUNT'\n | 'REQUEST_HAS_ADDRESS'\n | 'REQUEST_ADDRESS'\n | 'REQUEST_JSON'\n | 'REQUEST_SIGNING'\n | 'REQUEST_JSON-RPC';\nexport type HanaWalletResponseEvent =\n | 'RESPONSE_HAS_ACCOUNT'\n | 'RESPONSE_HAS_ADDRESS'\n | 'RESPONSE_ADDRESS'\n | 'RESPONSE_JSON-RPC'\n | 'RESPONSE_SIGNING'\n | 'CANCEL_SIGNING'\n | 'CANCEL_JSON-RPC';\n\nexport type ResponseAddressType = {\n type: 'RESPONSE_ADDRESS';\n payload: IconAddress;\n};\n\nexport type ResponseSigningType = {\n type: 'RESPONSE_SIGNING';\n payload: string;\n};\n\nexport type RelayRequestDetail = {\n type: HanaWalletRequestEvent;\n payload?: {\n jsonrpc: IconJsonRpcVersion;\n method: string;\n params: unknown;\n id: number | undefined;\n };\n};\n\nexport type RelayRequestSigning = {\n type: 'REQUEST_SIGNING';\n payload: {\n from: IconAddress;\n hash: string;\n };\n};\n\nexport type JsonRpcPayloadResponse = {\n id: number;\n result: string; // txHash\n};\n\ninterface RelayResponseEventDetail {\n type: HanaWalletResponseEvent;\n payload: unknown;\n}\n\n/**\n * Icon Type Guards\n */\n\nexport function isIconPkWallet(wallet: IconWallet): wallet is IconPkWallet {\n return wallet.type === 'PRIVATE_KEY';\n}\n\nexport function isIconBrowserExtensionWallet(wallet: IconWallet): wallet is IconBrowserExtensionWallet {\n return wallet.type === 'BROWSER_EXTENSION';\n}\n\nexport function isPrivateKeyIconWalletConfig(config: IconWalletConfig): config is PrivateKeyIconWalletConfig {\n return 'privateKey' in config && config.privateKey.startsWith('0x');\n}\n\nexport function isBrowserExtensionIconWalletConfig(\n config: IconWalletConfig,\n): config is BrowserExtensionIconWalletConfig {\n return 'walletAddress' in config && (isIconEoaAddress(config.walletAddress) || !config.walletAddress);\n}\n\nexport function isIconAddress(value: unknown): value is IconAddress {\n return typeof value === 'string' && /^hx[a-f0-9]{40}$|^cx[a-f0-9]{40}$/.test(value);\n}\n\nexport function isIconEoaAddress(value: unknown): value is IconEoaAddress {\n return typeof value === 'string' && /^hx[a-f0-9]{40}$/.test(value);\n}\n\nexport function isResponseAddressType(value: unknown): value is ResponseAddressType {\n return (\n typeof value === 'object' &&\n value !== null &&\n 'type' in value &&\n 'payload' in value &&\n value.type === 'RESPONSE_ADDRESS' &&\n isIconAddress(value.payload)\n );\n}\n\nexport function isResponseSigningType(value: unknown): value is ResponseSigningType {\n return (\n typeof value === 'object' &&\n value !== null &&\n 'type' in value &&\n 'payload' in value &&\n value.type === 'RESPONSE_SIGNING' &&\n typeof value.payload === 'string'\n );\n}\n\nexport function isJsonRpcPayloadResponse(value: unknown): value is JsonRpcPayloadResponse {\n return (\n typeof value === 'object' &&\n value !== null &&\n 'id' in value &&\n 'result' in value &&\n typeof value.result === 'string'\n );\n}\n\n/**\n * Methods to interact with Icon Browser Extension Wallet (e.g. Hana Wallet)\n */\n\nexport function requestAddress(): Promise<IconAddress> {\n return new Promise(resolve => {\n const eventHandler = (event: Event) => {\n const customEvent = event as CustomEvent<RelayResponseEventDetail>;\n const response = customEvent.detail;\n if (isResponseAddressType(response)) {\n window.removeEventListener('ICONEX_RELAY_RESPONSE', eventHandler as EventListener, false);\n resolve(response.payload);\n }\n };\n\n window.removeEventListener('ICONEX_RELAY_RESPONSE', eventHandler, false);\n window.addEventListener('ICONEX_RELAY_RESPONSE', eventHandler, false);\n window.dispatchEvent(\n new CustomEvent<RelayRequestDetail>('ICONEX_RELAY_REQUEST', {\n detail: {\n type: 'REQUEST_ADDRESS',\n },\n }),\n );\n });\n}\n\nexport function requestSigning(from: IconAddress, hash: string): Promise<string> {\n return new Promise((resolve, reject) => {\n const signRequest = new CustomEvent<RelayRequestSigning>('ICONEX_RELAY_REQUEST', {\n detail: {\n type: 'REQUEST_SIGNING',\n payload: {\n from,\n hash,\n },\n },\n });\n\n const eventHandler = (event: Event) => {\n const customEvent = event as CustomEvent<RelayResponseEventDetail>;\n const response = customEvent.detail;\n if (isResponseSigningType(response)) {\n window.removeEventListener('ICONEX_RELAY_RESPONSE', eventHandler as EventListener, false);\n\n // resolve signature\n resolve(response.payload);\n } else if (response.type === 'CANCEL_SIGNING') {\n reject(new Error('CANCEL_SIGNING'));\n }\n };\n\n window.removeEventListener('ICONEX_RELAY_RESPONSE', eventHandler as EventListener, false);\n window.addEventListener('ICONEX_RELAY_RESPONSE', eventHandler as EventListener, false);\n window.dispatchEvent(signRequest);\n });\n}\n\nexport function requestJsonRpc(rawTransaction: unknown, id = 99999): Promise<JsonRpcPayloadResponse> {\n return new Promise((resolve, reject) => {\n const eventHandler = (event: Event) => {\n const customEvent = event as CustomEvent<RelayResponseEventDetail>;\n const { type, payload } = customEvent.detail;\n if (type === 'RESPONSE_JSON-RPC') {\n window.removeEventListener('ICONEX_RELAY_RESPONSE', eventHandler as EventListener, false);\n\n if (isJsonRpcPayloadResponse(payload)) {\n resolve(payload);\n } else {\n reject(new Error('Invalid payload response type (expected JsonRpcPayloadResponse)'));\n }\n } else if (type === 'CANCEL_JSON-RPC') {\n window.removeEventListener('ICONEX_RELAY_RESPONSE', eventHandler as EventListener, false);\n reject(new Error('CANCEL_JSON-RPC'));\n }\n };\n\n window.removeEventListener('ICONEX_RELAY_RESPONSE', eventHandler as EventListener, false);\n window.addEventListener('ICONEX_RELAY_RESPONSE', eventHandler as EventListener, false);\n window.dispatchEvent(\n new CustomEvent<RelayRequestDetail>('ICONEX_RELAY_REQUEST', {\n detail: {\n type: 'REQUEST_JSON-RPC',\n payload: {\n jsonrpc: '2.0',\n method: 'icx_sendTransaction',\n params: rawTransaction,\n id: id,\n },\n },\n }),\n );\n });\n}\n\n/**\n * Icon Utils\n */\n\nexport function BigNumberToBigInt(bigNumber: BigNumber): bigint {\n if (!bigNumber.isInteger()) {\n throw new Error('Cannot convert decimal number to BigInt');\n }\n return BigInt(bigNumber.toFixed(0));\n}\n","import type { MsgBroadcaster } from '@injectivelabs/wallet-core';\nimport { MsgExecuteContract, MsgExecuteContractCompat } from '@injectivelabs/sdk-ts';\nimport { 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: '',\n pubKey: Buffer.from(this.walletAddress).toString(),\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"]}
|
package/package.json
CHANGED
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
"publishConfig": {
|
|
5
5
|
"access": "public"
|
|
6
6
|
},
|
|
7
|
-
"version": "0.0.1-rc.
|
|
7
|
+
"version": "0.0.1-rc.3",
|
|
8
8
|
"license": "MIT",
|
|
9
9
|
"description": "Sodax Wallet SDK Core",
|
|
10
10
|
"keywords": [
|
|
@@ -50,7 +50,7 @@
|
|
|
50
50
|
"@stellar/stellar-sdk": "12.3.0",
|
|
51
51
|
"@mysten/sui": "1.21.2",
|
|
52
52
|
"@mysten/wallet-standard": "0.15.6",
|
|
53
|
-
"@sodax/types": "0.0.1-rc.
|
|
53
|
+
"@sodax/types": "0.0.1-rc.17"
|
|
54
54
|
},
|
|
55
55
|
"devDependencies": {
|
|
56
56
|
"@arethetypeswrong/cli": "^0.17.4",
|