@sodax/wallet-sdk-react 2.0.0-rc.2 → 2.0.0-rc.4

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.
Files changed (120) hide show
  1. package/README.md +12 -5
  2. package/dist/{chunk-BKJB527E.mjs → chunk-3QETHO6P.mjs} +1 -3
  3. package/dist/{chunk-PJLEJVAU.mjs → chunk-42LTUHMZ.mjs} +1 -3
  4. package/dist/{chunk-NY7U7OJW.mjs → chunk-7V7O3Q7Y.mjs} +0 -2
  5. package/dist/{chunk-BXJLBR4G.mjs → chunk-C6M34IVL.mjs} +2 -4
  6. package/dist/{chunk-XZ7CHO2S.mjs → chunk-FSOGMSJH.mjs} +2 -4
  7. package/dist/{chunk-X2MHIWXO.mjs → chunk-IFXZQW4C.mjs} +0 -2
  8. package/dist/{chunk-7ULB6DW4.mjs → chunk-JQ4H4GJ5.mjs} +3 -5
  9. package/dist/{chunk-N5A2TMF6.mjs → chunk-LKSSME2J.mjs} +2 -4
  10. package/dist/{chunk-PLCA4ZDJ.mjs → chunk-LUKR7YKV.mjs} +54 -30
  11. package/dist/{chunk-MXZVF5HR.mjs → chunk-NAKCAL2M.mjs} +0 -2
  12. package/dist/chunk-QMXBY3UI.mjs +1 -0
  13. package/dist/{chunk-MAQ47Q52.mjs → chunk-TACW7Z4D.mjs} +0 -2
  14. package/dist/{chunk-2BOUGCJ7.mjs → chunk-WPZOLGVB.mjs} +4 -6
  15. package/dist/{chunk-66BAUK56.mjs → chunk-X7BHR7WS.mjs} +2 -4
  16. package/dist/{chunk-E5IAZ7E6.mjs → chunk-Z5GXDHGL.mjs} +9 -5
  17. package/dist/{config-OlnzyEUE.d.ts → config-GVKK8IfY.d.ts} +6 -1
  18. package/dist/index.d.ts +4 -4
  19. package/dist/index.mjs +20 -31
  20. package/dist/xchains/bitcoin/index.mjs +14 -16
  21. package/dist/xchains/evm/index.d.ts +1 -1
  22. package/dist/xchains/evm/index.mjs +3 -5
  23. package/dist/xchains/icon/index.mjs +5 -7
  24. package/dist/xchains/injective/index.mjs +3 -5
  25. package/dist/xchains/near/index.mjs +4 -6
  26. package/dist/xchains/solana/index.mjs +5 -7
  27. package/dist/xchains/stacks/index.mjs +3 -5
  28. package/dist/xchains/stellar/index.mjs +4 -6
  29. package/dist/xchains/sui/index.mjs +5 -7
  30. package/docs/ADDING_A_NEW_CHAIN.md +1 -1
  31. package/docs/SUB_PATH_EXPORTS.md +14 -42
  32. package/package.json +32 -23
  33. package/ai-exported/AGENTS.md +0 -122
  34. package/ai-exported/integration/README.md +0 -102
  35. package/ai-exported/integration/ai-rules.md +0 -136
  36. package/ai-exported/integration/architecture.md +0 -181
  37. package/ai-exported/integration/examples/01-minimal-evm.tsx +0 -75
  38. package/ai-exported/integration/examples/02-multi-chain-modal.tsx +0 -169
  39. package/ai-exported/integration/examples/03-nextjs-app-router.tsx +0 -99
  40. package/ai-exported/integration/examples/04-walletconnect-setup.tsx +0 -89
  41. package/ai-exported/integration/examples/README.md +0 -29
  42. package/ai-exported/integration/recipes/batch-operations.md +0 -223
  43. package/ai-exported/integration/recipes/bridge-to-sdk.md +0 -164
  44. package/ai-exported/integration/recipes/chain-detection.md +0 -254
  45. package/ai-exported/integration/recipes/connect-button.md +0 -156
  46. package/ai-exported/integration/recipes/multi-chain-modal.md +0 -199
  47. package/ai-exported/integration/recipes/setup.md +0 -158
  48. package/ai-exported/integration/recipes/sign-message.md +0 -137
  49. package/ai-exported/integration/recipes/sub-path-imports.md +0 -95
  50. package/ai-exported/integration/recipes/switch-chain.md +0 -141
  51. package/ai-exported/integration/recipes/walletconnect-setup.md +0 -139
  52. package/ai-exported/integration/reference/api-surface.md +0 -175
  53. package/ai-exported/integration/reference/chain-support.md +0 -78
  54. package/ai-exported/integration/reference/connectors.md +0 -74
  55. package/ai-exported/integration/reference/hooks.md +0 -204
  56. package/ai-exported/integration/reference/wallet-brands.md +0 -106
  57. package/ai-exported/migration/README.md +0 -49
  58. package/ai-exported/migration/ai-rules.md +0 -144
  59. package/ai-exported/migration/breaking-changes.md +0 -305
  60. package/ai-exported/migration/checklist.md +0 -159
  61. package/ai-exported/migration/recipes/connect-button.md +0 -166
  62. package/ai-exported/migration/recipes/multi-chain-modal.md +0 -244
  63. package/ai-exported/migration/recipes/ssr-setup.md +0 -162
  64. package/ai-exported/migration/recipes/walletconnect-migration.md +0 -168
  65. package/ai-exported/migration/reference/components.md +0 -73
  66. package/ai-exported/migration/reference/config.md +0 -307
  67. package/ai-exported/migration/reference/hooks.md +0 -278
  68. package/ai-exported/migration/reference/imports.md +0 -157
  69. package/dist/chunk-2BOUGCJ7.mjs.map +0 -1
  70. package/dist/chunk-66BAUK56.mjs.map +0 -1
  71. package/dist/chunk-7ULB6DW4.mjs.map +0 -1
  72. package/dist/chunk-BKJB527E.mjs.map +0 -1
  73. package/dist/chunk-BXJLBR4G.mjs.map +0 -1
  74. package/dist/chunk-E5IAZ7E6.mjs.map +0 -1
  75. package/dist/chunk-MAQ47Q52.mjs.map +0 -1
  76. package/dist/chunk-MXZVF5HR.mjs.map +0 -1
  77. package/dist/chunk-N5A2TMF6.mjs.map +0 -1
  78. package/dist/chunk-NY7U7OJW.mjs.map +0 -1
  79. package/dist/chunk-PJLEJVAU.mjs.map +0 -1
  80. package/dist/chunk-PLCA4ZDJ.mjs.map +0 -1
  81. package/dist/chunk-TZMKDXFA.mjs +0 -3
  82. package/dist/chunk-TZMKDXFA.mjs.map +0 -1
  83. package/dist/chunk-X2MHIWXO.mjs.map +0 -1
  84. package/dist/chunk-XZ7CHO2S.mjs.map +0 -1
  85. package/dist/index.cjs +0 -3337
  86. package/dist/index.cjs.map +0 -1
  87. package/dist/index.mjs.map +0 -1
  88. package/dist/xchains/bitcoin/index.cjs +0 -1927
  89. package/dist/xchains/bitcoin/index.cjs.map +0 -1
  90. package/dist/xchains/bitcoin/index.mjs.map +0 -1
  91. package/dist/xchains/evm/index.cjs +0 -316
  92. package/dist/xchains/evm/index.cjs.map +0 -1
  93. package/dist/xchains/evm/index.mjs.map +0 -1
  94. package/dist/xchains/icon/index.cjs +0 -311
  95. package/dist/xchains/icon/index.cjs.map +0 -1
  96. package/dist/xchains/icon/index.mjs.map +0 -1
  97. package/dist/xchains/injective/index.cjs +0 -223
  98. package/dist/xchains/injective/index.cjs.map +0 -1
  99. package/dist/xchains/injective/index.mjs.map +0 -1
  100. package/dist/xchains/near/index.cjs +0 -190
  101. package/dist/xchains/near/index.cjs.map +0 -1
  102. package/dist/xchains/near/index.mjs.map +0 -1
  103. package/dist/xchains/solana/index.cjs +0 -186
  104. package/dist/xchains/solana/index.cjs.map +0 -1
  105. package/dist/xchains/solana/index.mjs.map +0 -1
  106. package/dist/xchains/stacks/index.cjs +0 -240
  107. package/dist/xchains/stacks/index.cjs.map +0 -1
  108. package/dist/xchains/stacks/index.mjs.map +0 -1
  109. package/dist/xchains/stellar/index.cjs +0 -322
  110. package/dist/xchains/stellar/index.cjs.map +0 -1
  111. package/dist/xchains/stellar/index.mjs.map +0 -1
  112. package/dist/xchains/sui/index.cjs +0 -248
  113. package/dist/xchains/sui/index.cjs.map +0 -1
  114. package/dist/xchains/sui/index.mjs.map +0 -1
  115. package/skills/SKILLS.md +0 -84
  116. package/skills/bridge-to-sdk.md +0 -148
  117. package/skills/connect-button.md +0 -116
  118. package/skills/evm-only-walletconnect.md +0 -111
  119. package/skills/multi-chain-modal.md +0 -178
  120. package/skills/setup.md +0 -107
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../src/core/XService.ts","../../../src/utils/index.ts","../../../src/xchains/icon/IconXService.ts","../../../src/xchains/icon/iconex/index.tsx","../../../src/core/XConnector.ts","../../../src/shared/guards.ts","../../../src/constants.ts","../../../src/xchains/icon/IconHanaXConnector.ts"],"names":["address","IconSdkRaw","SupportedChainId"],"mappings":"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","file":"index.cjs","sourcesContent":["import type { ChainType, IXServiceBase, XToken } from '@sodax/types';\nimport type { IXConnector } from '@/types/interfaces.js';\n\n/**\n * Abstract base class for blockchain service implementations.\n *\n * The XService class serves as a foundation for implementing blockchain-specific services\n * in a multi-chain environment. It provides a standardized interface for:\n * 1. Managing wallet connectors for different blockchain types\n * 2. Querying token balances across different chains\n *\n * Each blockchain implementation (e.g., Solana, EVM chains) extends this class\n * to provide chain-specific functionality while maintaining a consistent interface.\n *\n * @abstract\n * @class XService\n * @property {ChainType} xChainType - The blockchain type this service handles (e.g., 'SOLANA', 'EVM')\n * @property {XConnector[]} xConnectors - Available wallet connectors for this chain\n *\n */\nexport abstract class XService implements IXServiceBase {\n /** The blockchain type this service handles */\n public readonly xChainType: ChainType;\n\n /** Available wallet connectors for this chain */\n private xConnectors: IXConnector[] = [];\n\n constructor(xChainType: ChainType) {\n this.xChainType = xChainType;\n }\n\n /**\n * Gets the balance of a specific token for an address\n * @param address The wallet address to check\n * @param xToken The token to get the balance for\n * @returns Promise resolving to the token balance as a bigint\n */\n public async getBalance(address: string | undefined, xToken: XToken): Promise<bigint> {\n return 0n;\n }\n\n /**\n * Gets balances for multiple tokens for an address\n * @param address The wallet address to check\n * @param xTokens Array of tokens to get balances for\n * @returns Promise resolving to object mapping token addresses to balances\n */\n public async getBalances(address: string | undefined, xTokens: readonly XToken[]): Promise<Record<string, bigint>> {\n if (!address) return {};\n\n const balancePromises = xTokens.map(async xToken => {\n const balance = await this.getBalance(address, xToken);\n return { address: xToken.address, balance };\n });\n\n const balances = await Promise.all(balancePromises);\n return balances.reduce<Record<string, bigint>>((acc, { address, balance }) => {\n acc[address] = balance;\n return acc;\n }, {});\n }\n\n /**\n * Gets all available connectors for this chain\n */\n public getXConnectors(): IXConnector[] {\n return this.xConnectors;\n }\n\n /**\n * Sets the available connectors for this chain\n */\n public setXConnectors(xConnectors: IXConnector[]): void {\n this.xConnectors = xConnectors;\n }\n\n /**\n * Gets a specific connector by its ID\n * @param xConnectorId The connector ID to look up\n * @returns The matching connector or undefined if not found\n */\n public getXConnectorById(xConnectorId: string): IXConnector | undefined {\n return this.getXConnectors().find(xConnector => xConnector.id === xConnectorId);\n }\n}\n","import { baseChainInfo, type SpokeChainKey, type XToken } from '@sodax/types';\n\nexport { sortConnectors, type SortConnectorsOptions } from './sortConnectors.js';\nexport {\n getEntryDefaults,\n getRpcUrl,\n resolveEvmDefaults,\n type WalletDefaultsByKey,\n} from './walletRpcConfig.js';\n\nexport const isNativeToken = (xToken: XToken): boolean => {\n const nativeAddresses = [\n 'cx0000000000000000000000000000000000000000',\n '0x0000000000000000000000000000000000000000',\n 'inj',\n '0x0000000000000000000000000000000000000000000000000000000000000002::sui::SUI',\n 'hx0000000000000000000000000000000000000000',\n '11111111111111111111111111111111', // solana\n 'CAS3J7GYLGXMF6TDJBBYYSE3HQ6BBSMLNUQ34T6TZMYMW2EVH34XOWMA', // stellar\n 'ST000000000000000000002AMW42H.nativetoken', // stacks\n '0:0', // bitcoin\n ];\n\n return nativeAddresses.includes(xToken.address);\n};\n\nexport const getWagmiChainId = (xChainId: SpokeChainKey): number => {\n const chainId = baseChainInfo[xChainId].chainId;\n if (typeof chainId !== 'number') {\n throw new Error(`[wallet-sdk-react] getWagmiChainId: expected numeric chainId, got ${typeof chainId}`);\n }\n return chainId;\n};\n","import { XService } from '@/core/XService.js';\nimport type { IconService } from 'icon-sdk-js';\nimport * as IconSdkRaw from 'icon-sdk-js';\nimport type { XToken } from '@sodax/types';\nimport { isNativeToken } from '@/utils/index.js';\n\nconst IconSdk = ('default' in IconSdkRaw.default ? IconSdkRaw.default : IconSdkRaw) as typeof IconSdkRaw;\nconst { IconService: IconServiceConstructor, Builder: IconBuilder, Converter: IconConverter } = IconSdk;\nexport interface CallData {\n target: string;\n method: string;\n params: string[];\n}\n\nexport enum SupportedChainId {\n MAINNET = 1,\n}\n\ninterface ChainInfo {\n readonly name: string;\n readonly node: string;\n readonly APIEndpoint: string;\n readonly debugAPIEndpoint: string;\n readonly chainId: number;\n readonly tracker: string;\n}\n\nexport const CHAIN_INFO: { readonly [chainId: number]: ChainInfo } = {\n [SupportedChainId.MAINNET]: {\n name: 'ICON Mainnet',\n node: 'https://ctz.solidwallet.io',\n APIEndpoint: 'https://ctz.solidwallet.io/api/v3',\n debugAPIEndpoint: 'https://api.icon.community/api/v3d',\n chainId: 1,\n tracker: 'https://tracker.icon.community',\n },\n};\n\nexport class IconXService extends XService {\n private static instance: IconXService;\n\n public iconService: IconService;\n\n private constructor(rpcUrl?: string) {\n super('ICON');\n const mainnetInfo = CHAIN_INFO[SupportedChainId.MAINNET];\n if (!mainnetInfo) throw new Error('ICON mainnet chain info not found');\n this.iconService = new IconServiceConstructor(\n new IconServiceConstructor.HttpProvider(rpcUrl ?? mainnetInfo.APIEndpoint),\n );\n }\n\n public static getInstance(rpcUrl?: string): IconXService {\n if (!IconXService.instance) {\n IconXService.instance = new IconXService(rpcUrl);\n }\n return IconXService.instance;\n }\n\n private async getAggregateData(requireSuccess: boolean, calls: CallData[]) {\n const rawTx = new IconBuilder.CallBuilder()\n // muticall address on mainnet\n .to('cxa4aa9185e23558cff990f494c1fd2845f6cbf741')\n .method('tryAggregate')\n .params({ requireSuccess: IconConverter.toHex(requireSuccess ? 1 : 0), calls })\n .build();\n\n try {\n const result = await this.iconService.call(rawTx).execute();\n const aggs = result['returnData'];\n\n const data = aggs.map((agg: Record<string, string>) => {\n if (agg['success'] === '0x0') {\n return null;\n }\n return agg['returnData'];\n });\n\n return data;\n } catch (err) {\n console.error(err);\n return Array(calls.length).fill(null);\n }\n }\n\n override async getBalances(address: string | undefined, xTokens: XToken[]) {\n if (!address) return {};\n\n const balances: Record<string, bigint> = {};\n\n const nativeXToken = xTokens.find(xToken => isNativeToken(xToken));\n const nonNativeXTokens = xTokens.filter(xToken => !isNativeToken(xToken));\n\n if (nativeXToken) {\n const balance = await this.iconService.getBalance(address).execute();\n balances[nativeXToken.address] = BigInt(balance.toFixed());\n }\n\n const cds: CallData[] = nonNativeXTokens.map(token => {\n return {\n target: token.address,\n method: 'balanceOf',\n params: [address],\n };\n });\n\n const data: (string | null)[] = await this.getAggregateData(\n false,\n cds.filter(cd => cd.target.startsWith('cx')),\n );\n\n return nonNativeXTokens.reduce((agg, token, idx) => {\n const balance = data[idx];\n if (balance) {\n balances[token.address] = BigInt(balance);\n }\n\n return agg;\n }, balances);\n }\n}\n","const ICONEX_RELAY_RESPONSE = 'ICONEX_RELAY_RESPONSE';\nconst ICONEX_RELAY_REQUEST = 'ICONEX_RELAY_REQUEST';\n\nexport enum ICONexRequestEventType {\n REQUEST_HAS_ACCOUNT = 'REQUEST_HAS_ACCOUNT',\n REQUEST_HAS_ADDRESS = 'REQUEST_HAS_ADDRESS',\n REQUEST_ADDRESS = 'REQUEST_ADDRESS',\n REQUEST_JSON = 'REQUEST_JSON',\n REQUEST_SIGNING = 'REQUEST_SIGNING',\n}\n\nexport enum ICONexResponseEventType {\n RESPONSE_HAS_ACCOUNT = 'RESPONSE_HAS_ACCOUNT',\n RESPONSE_HAS_ADDRESS = 'RESPONSE_HAS_ADDRESS',\n RESPONSE_ADDRESS = 'RESPONSE_ADDRESS',\n RESPONSE_JSON = 'RESPONSE_JSON',\n RESPONSE_SIGNING = 'RESPONSE_SIGNING',\n}\n\nexport interface ICONexRequestEvent {\n type: ICONexRequestEventType;\n // Request payload varies by event type (JSON-RPC params, signing data, etc).\n // `unknown` forces callers to validate before using — safer than `any`.\n payload?: unknown;\n}\n\nexport interface ICONexResponseEvent {\n type: ICONexResponseEventType;\n // Response payload is always a string: wallet address, tx hash, or signature.\n payload?: string;\n}\n\nexport type ICONexEvent = ICONexRequestEvent | ICONexResponseEvent;\n\nexport const request = (event: ICONexRequestEvent): Promise<ICONexResponseEvent> => {\n return new Promise((resolve, reject) => {\n // evt is a CustomEvent dispatched by the ICONex/Hana extension. Type the handler\n // param so evt.detail is properly typed instead of implicit `any`.\n const handler = (evt: Event) => {\n window.removeEventListener(ICONEX_RELAY_RESPONSE, handler);\n resolve((evt as CustomEvent<ICONexResponseEvent>).detail);\n };\n\n window.addEventListener(ICONEX_RELAY_RESPONSE, handler);\n window.dispatchEvent(\n new CustomEvent(ICONEX_RELAY_REQUEST, {\n detail: event,\n }),\n );\n });\n};\n","import type { ChainType } from '@sodax/types';\nimport type { XAccount } from '@/types/index.js';\nimport type { IXConnector } from '@/types/interfaces.js';\n\n/**\n * Base class for wallet provider connectors that handles connection management and wallet interactions\n *\n * @abstract\n * @class XConnector\n * @property {ChainType} xChainType - The blockchain type this connector supports\n * @property {string} name - Display name of the wallet provider\n * @property {string} _id - Unique identifier for the connector\n * @property {string | undefined} _icon - Optional icon URL for the wallet provider\n */\n\nexport abstract class XConnector implements IXConnector {\n /** The blockchain type this connector supports */\n public readonly xChainType: ChainType;\n\n /** Display name of the wallet provider */\n public readonly name: string;\n\n /** Unique identifier for the connector */\n public readonly _id: string;\n\n /** Optional icon URL for the wallet provider */\n public readonly _icon?: string;\n\n constructor(xChainType: ChainType, name: string, id: string) {\n this.xChainType = xChainType;\n this.name = name;\n this._id = id;\n }\n\n /**\n * Connects to the wallet provider\n * @returns Promise resolving to the connected account, or undefined if connection fails\n */\n abstract connect(): Promise<XAccount | undefined>;\n\n /**\n * Disconnects from the wallet provider\n */\n abstract disconnect(): Promise<void>;\n\n /** Get the unique identifier for this connector */\n public get id(): string {\n return this._id;\n }\n\n /** Get the optional icon URL for this wallet provider */\n public get icon(): string | undefined {\n return this._icon;\n }\n\n /**\n * True when the wallet extension backing this connector is installed.\n * Default: true (for provider-managed chains where connector presence already\n * implies install — EVM via EIP-6963, Solana/Sui via adapter discovery).\n * Subclasses backed by extension injection (Bitcoin, ICON, Stacks) override\n * this with a window probe.\n */\n public get isInstalled(): boolean {\n return true;\n }\n\n /** URL to install the wallet extension when missing. Subclasses override. */\n public get installUrl(): string | undefined {\n return undefined;\n }\n}\n","// packages/wallet-sdk-react/src/shared/guards.ts\n\n/**\n * Tiny runtime type guards used to safely narrow `unknown` values.\n *\n * Why this exists:\n * - In wallets land, many values come from outside TypeScript (window injections, 3rd-party SDKs, serialized state).\n * - Writing `as SomeType` skips checks and can crash later in confusing places.\n * - Guards + `assert(...)` let us fail fast with a clear error message at the boundary.\n */\n\nexport type UnknownRecord = Record<string, unknown>;\n\n/** True if value is a non-null object (Record-like). */\nexport function isRecord(value: unknown): value is UnknownRecord {\n return typeof value === 'object' && value !== null;\n}\n\n/** True if the object has a string property at `key`. */\nexport function hasStringProperty<Key extends string>(\n value: unknown,\n key: Key,\n): value is UnknownRecord & Record<Key, string> {\n return isRecord(value) && typeof value[key] === 'string';\n}\n\n/** True if the object has an optional string property at `key`. */\nexport function hasOptionalStringProperty<Key extends string>(\n value: unknown,\n key: Key,\n): value is UnknownRecord & Partial<Record<Key, string>> {\n return isRecord(value) && (value[key] === undefined || typeof value[key] === 'string');\n}\n\n/** True if the object has a boolean property at `key`. */\nexport function hasBooleanProperty<Key extends string>(\n value: unknown,\n key: Key,\n): value is UnknownRecord & Record<Key, boolean> {\n return isRecord(value) && typeof value[key] === 'boolean';\n}\n\n/** True if the object has a function property at `key`. */\nexport function hasFunctionProperty<Key extends string>(\n value: unknown,\n key: Key,\n): value is UnknownRecord & Record<Key, (...args: unknown[]) => unknown> {\n return isRecord(value) && typeof value[key] === 'function';\n}\n\n/**\n * Throws if condition is false.\n * Use this after guards to stop execution early with an actionable error message.\n */\nexport function assert(condition: unknown, message: string): asserts condition {\n if (!condition) {\n throw new Error(message);\n }\n}\n\n/**\n * Validates the runtime shape of Sui provider dependencies before passing them to wallet-sdk-core.\n * Used by both SuiHydrator (render path) and SuiXService.createWalletProvider (imperative path).\n */\nexport function assertSuiProviderShape(caller: string, client: unknown, wallet: unknown, account: unknown): void {\n const clientOk =\n isRecord(client) &&\n hasFunctionProperty(client, 'executeTransactionBlock') &&\n hasFunctionProperty(client, 'devInspectTransactionBlock') &&\n hasFunctionProperty(client, 'getCoins');\n assert(clientOk, `[${caller}] invalid Sui client shape`);\n\n const walletOk = isRecord(wallet) && hasStringProperty(wallet, 'name');\n assert(walletOk, `[${caller}] invalid Sui wallet shape`);\n\n const accountOk = isRecord(account) && hasStringProperty(account, 'address');\n assert(accountOk, `[${caller}] invalid Sui account shape`);\n}\n","/**\n * Default values used across providers and hydrators.\n * Centralized so consumers and tests have a single source of truth.\n */\n\n// ─── Stacks ─────────────────────────────────────────────────────────────────\nexport const STACKS_DEFAULT_RPC_URL = 'https://api.mainnet.hiro.so';\nexport const STACKS_DEFAULT_NETWORK = 'mainnet' as const;\n\n// ─── Sui ────────────────────────────────────────────────────────────────────\nexport const SUI_DEFAULT_NETWORK = 'mainnet' as const;\nexport const SUI_DEFAULT_AUTO_CONNECT = true;\n\n// ─── EVM ────────────────────────────────────────────────────────────────────\nexport const EVM_DEFAULT_RECONNECT_ON_MOUNT = false;\nexport const EVM_DEFAULT_SSR = true;\n\n// ─── Solana ─────────────────────────────────────────────────────────────────\nexport const SOLANA_DEFAULT_AUTO_CONNECT = true;\nexport const SOLANA_DEFAULT_RPC_URL = 'https://api.mainnet-beta.solana.com';\n/** Timeout for MetaMask Solana wallet connect — MetaMask's Solana adapter is slow to fire `connect`. */\nexport const SOLANA_METAMASK_CONNECT_TIMEOUT_MS = 30_000;\n\n// ─── Bitcoin ────────────────────────────────────────────────────────────────\nexport const BITCOIN_DEFAULT_RPC_URL = 'https://mempool.space/api';\n\n// ─── Stellar ────────────────────────────────────────────────────────────────\nexport const STELLAR_DEFAULT_HORIZON_RPC_URL = 'https://horizon.stellar.org';\nexport const STELLAR_DEFAULT_SOROBAN_RPC_URL = 'https://rpc.ankr.com/stellar_soroban';\n\n// ─── NEAR ───────────────────────────────────────────────────────────────────\nexport const NEAR_DEFAULT_RPC_URL = 'https://1rpc.io/near';\n\n// ─── Wallet metadata (install URLs + icons for extension-based wallets) ────\n// Keys are wallet-level, not per-connector: one OKX extension serves both\n// Bitcoin and EVM connectors, so metadata is shared.\n\nexport const WALLET_METADATA = {\n unisat: {\n installUrl: 'https://chromewebstore.google.com/detail/unisat-wallet/ppbibelpcjmhbdihakflkdcoccbgbkpo',\n icon: 'https://avatars.githubusercontent.com/u/125119198?s=200&v=4',\n },\n xverse: {\n installUrl: 'https://chromewebstore.google.com/detail/xverse-bitcoin-crypto-wal/idnnbdplmphpflfnlkomgpfbpcgelopg',\n icon:\n 'https://cdn.brandfetch.io/iddzGN5Rcv/w/400/h/400/theme/dark/icon.jpeg?c=1bxid64Mup7aczewSAYMX&t=1771902357797',\n },\n okx: {\n installUrl: 'https://chromewebstore.google.com/detail/okx-wallet/mcohilncbfahbmgdjkbpemcciiolgcge',\n icon: 'https://static.okx.com/cdn/assets/imgs/247/58E63FEA47A2B7D7.png',\n },\n hana: {\n installUrl: 'https://chromewebstore.google.com/detail/hana-wallet/jfdlamikmbghhapbgfoogdffldioobgl',\n icon: 'https://raw.githubusercontent.com/balancednetwork/icons/master/wallets/hana.svg',\n },\n} as const satisfies Record<string, { installUrl: string; icon: string }>;\n","import type { XAccount } from '@/types/index.js';\nimport { ICONexRequestEventType, ICONexResponseEventType, request } from './iconex/index.js';\n\nimport { XConnector } from '@/core/XConnector.js';\nimport { assert, hasBooleanProperty, isRecord } from '@/shared/guards.js';\nimport { WALLET_METADATA } from '@/constants.js';\n\nconst isHanaWallet = (value: unknown): value is { available?: boolean } => {\n return isRecord(value) && (value.available === undefined || hasBooleanProperty(value, 'available'));\n};\n\nexport class IconHanaXConnector extends XConnector {\n constructor() {\n super('ICON', 'Hana Wallet', 'hana');\n }\n\n public override get isInstalled(): boolean {\n if (typeof window === 'undefined') return false;\n const hanaWallet = (window as unknown as Record<string, unknown>).hanaWallet;\n return isHanaWallet(hanaWallet) && hanaWallet.available === true;\n }\n\n public override get installUrl(): string {\n return WALLET_METADATA.hana.installUrl;\n }\n\n async connect(): Promise<XAccount | undefined> {\n const hanaWallet = (window as unknown as Record<string, unknown>).hanaWallet;\n assert(isHanaWallet(hanaWallet) || hanaWallet === undefined, '[IconHanaXConnector] invalid window.hanaWallet type');\n\n if (!hanaWallet || !hanaWallet.available) {\n window.open(WALLET_METADATA.hana.installUrl, '_blank', 'noopener,noreferrer');\n return;\n }\n\n const detail = await request({\n type: ICONexRequestEventType.REQUEST_ADDRESS,\n });\n\n if (detail?.type === ICONexResponseEventType.RESPONSE_ADDRESS) {\n return {\n address: detail?.payload,\n xChainType: this.xChainType,\n };\n }\n\n console.warn('[IconHanaXConnector] connect: unexpected response from Hana wallet', detail);\n return undefined;\n }\n\n async disconnect(): Promise<void> {\n console.log('HanaIconXConnector disconnected');\n }\n\n public override get icon(): string {\n return WALLET_METADATA.hana.icon;\n }\n}\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":[],"names":[],"mappings":"","file":"index.mjs"}
@@ -1,223 +0,0 @@
1
- 'use strict';
2
-
3
- var networks = require('@injectivelabs/networks');
4
- var sdkTs = require('@injectivelabs/sdk-ts');
5
- var tsTypes = require('@injectivelabs/ts-types');
6
- var walletCore = require('@injectivelabs/wallet-core');
7
- var chains = require('wagmi/chains');
8
- var walletStrategy = require('@injectivelabs/wallet-strategy');
9
- var walletBase = require('@injectivelabs/wallet-base');
10
- var walletCosmos = require('@injectivelabs/wallet-cosmos');
11
-
12
- // src/core/XService.ts
13
- var XService = class {
14
- /** The blockchain type this service handles */
15
- xChainType;
16
- /** Available wallet connectors for this chain */
17
- xConnectors = [];
18
- constructor(xChainType) {
19
- this.xChainType = xChainType;
20
- }
21
- /**
22
- * Gets the balance of a specific token for an address
23
- * @param address The wallet address to check
24
- * @param xToken The token to get the balance for
25
- * @returns Promise resolving to the token balance as a bigint
26
- */
27
- async getBalance(address, xToken) {
28
- return 0n;
29
- }
30
- /**
31
- * Gets balances for multiple tokens for an address
32
- * @param address The wallet address to check
33
- * @param xTokens Array of tokens to get balances for
34
- * @returns Promise resolving to object mapping token addresses to balances
35
- */
36
- async getBalances(address, xTokens) {
37
- if (!address) return {};
38
- const balancePromises = xTokens.map(async (xToken) => {
39
- const balance = await this.getBalance(address, xToken);
40
- return { address: xToken.address, balance };
41
- });
42
- const balances = await Promise.all(balancePromises);
43
- return balances.reduce((acc, { address: address2, balance }) => {
44
- acc[address2] = balance;
45
- return acc;
46
- }, {});
47
- }
48
- /**
49
- * Gets all available connectors for this chain
50
- */
51
- getXConnectors() {
52
- return this.xConnectors;
53
- }
54
- /**
55
- * Sets the available connectors for this chain
56
- */
57
- setXConnectors(xConnectors) {
58
- this.xConnectors = xConnectors;
59
- }
60
- /**
61
- * Gets a specific connector by its ID
62
- * @param xConnectorId The connector ID to look up
63
- * @returns The matching connector or undefined if not found
64
- */
65
- getXConnectorById(xConnectorId) {
66
- return this.getXConnectors().find((xConnector) => xConnector.id === xConnectorId);
67
- }
68
- };
69
- var InjectiveXService = class _InjectiveXService extends XService {
70
- static instance;
71
- walletStrategy;
72
- indexerGrpcAccountPortfolioApi;
73
- chainGrpcWasmApi;
74
- msgBroadcaster;
75
- constructor(rpcConfig) {
76
- super("INJECTIVE");
77
- const defaults = networks.getNetworkEndpoints(networks.Network.Mainnet);
78
- const endpoints = {
79
- ...defaults,
80
- indexer: rpcConfig?.indexer || defaults.indexer,
81
- grpc: rpcConfig?.grpc || defaults.grpc
82
- };
83
- this.walletStrategy = new walletStrategy.WalletStrategy({
84
- chainId: tsTypes.ChainId.Mainnet,
85
- strategies: {},
86
- evmOptions: {
87
- evmChainId: chains.mainnet.id,
88
- rpcUrl: chains.mainnet.rpcUrls.default.http[0]
89
- }
90
- });
91
- this.indexerGrpcAccountPortfolioApi = new sdkTs.IndexerGrpcAccountPortfolioApi(endpoints.indexer);
92
- this.chainGrpcWasmApi = new sdkTs.ChainGrpcWasmApi(endpoints.grpc);
93
- this.msgBroadcaster = new walletCore.MsgBroadcaster({
94
- walletStrategy: this.walletStrategy,
95
- network: networks.Network.Mainnet,
96
- endpoints
97
- });
98
- }
99
- /**
100
- * @param rpcConfig - Only applied on first call. Subsequent calls return the
101
- * existing instance unchanged — gRPC/Indexer clients are built in the
102
- * constructor and can't be rebuilt at runtime. Pass the desired endpoints
103
- * via `SodaxWalletProvider.config.rpcConfig` once at app init.
104
- */
105
- static getInstance(rpcConfig) {
106
- if (!_InjectiveXService.instance) {
107
- _InjectiveXService.instance = new _InjectiveXService(rpcConfig);
108
- }
109
- return _InjectiveXService.instance;
110
- }
111
- async getBalance(address, xToken) {
112
- if (!address) return 0n;
113
- const portfolio = await this.indexerGrpcAccountPortfolioApi.fetchAccountPortfolioBalances(address);
114
- const xTokenAddress = xToken.address;
115
- const balance = portfolio.bankBalancesList.find((_balance) => _balance.denom === xTokenAddress);
116
- if (balance) {
117
- return BigInt(balance.amount);
118
- }
119
- return 0n;
120
- }
121
- };
122
-
123
- // src/core/XConnector.ts
124
- var XConnector = class {
125
- /** The blockchain type this connector supports */
126
- xChainType;
127
- /** Display name of the wallet provider */
128
- name;
129
- /** Unique identifier for the connector */
130
- _id;
131
- /** Optional icon URL for the wallet provider */
132
- _icon;
133
- constructor(xChainType, name, id) {
134
- this.xChainType = xChainType;
135
- this.name = name;
136
- this._id = id;
137
- }
138
- /** Get the unique identifier for this connector */
139
- get id() {
140
- return this._id;
141
- }
142
- /** Get the optional icon URL for this wallet provider */
143
- get icon() {
144
- return this._icon;
145
- }
146
- /**
147
- * True when the wallet extension backing this connector is installed.
148
- * Default: true (for provider-managed chains where connector presence already
149
- * implies install — EVM via EIP-6963, Solana/Sui via adapter discovery).
150
- * Subclasses backed by extension injection (Bitcoin, ICON, Stacks) override
151
- * this with a window probe.
152
- */
153
- get isInstalled() {
154
- return true;
155
- }
156
- /** URL to install the wallet extension when missing. Subclasses override. */
157
- get installUrl() {
158
- return void 0;
159
- }
160
- };
161
- var WALLET_ICONS = {
162
- metamask: "https://raw.githubusercontent.com/balancednetwork/icons/master/wallets/metamask.svg",
163
- keplr: "https://raw.githubusercontent.com/balancednetwork/icons/master/wallets/keplr.svg",
164
- leap: "https://assets.leapwallet.io/logos/leap-cosmos-logo.svg",
165
- rabby: "https://raw.githubusercontent.com/RabbyHub/logo/master/symbol.svg",
166
- phantom: "https://raw.githubusercontent.com/balancednetwork/icons/master/wallets/phantom.svg",
167
- "okx-wallet": "https://static.okx.com/cdn/assets/imgs/247/58E63FEA47A2B7D7.png",
168
- "trust-wallet": "https://trustwallet.com/assets/images/media/assets/twLogo.svg"
169
- };
170
- var InjectiveXConnector = class extends XConnector {
171
- wallet;
172
- constructor(name, wallet) {
173
- super("INJECTIVE", name, wallet);
174
- this.wallet = wallet;
175
- }
176
- getXService() {
177
- return InjectiveXService.getInstance();
178
- }
179
- async connect() {
180
- if (walletBase.isCosmosBrowserWallet(this.wallet) && !walletCosmos.isCosmosWalletInstalled(this.wallet)) {
181
- console.warn(`[InjectiveXConnector] connect: ${this.wallet} cosmos wallet not installed`);
182
- return void 0;
183
- }
184
- const walletStrategy = this.getXService().walletStrategy;
185
- await walletStrategy.setWallet(this.wallet);
186
- const addresses = await walletStrategy.getAddresses();
187
- if (!addresses?.length) {
188
- console.warn(`[InjectiveXConnector] connect: ${this.wallet} returned no addresses`);
189
- return void 0;
190
- }
191
- const firstAddress = addresses[0];
192
- if (!firstAddress) {
193
- console.warn(`[InjectiveXConnector] connect: ${this.wallet} returned empty addresses array`);
194
- return void 0;
195
- }
196
- const address = walletBase.isEvmBrowserWallet(this.wallet) ? sdkTs.getInjectiveAddress(firstAddress) : firstAddress;
197
- return {
198
- address,
199
- xChainType: this.xChainType
200
- };
201
- }
202
- async disconnect() {
203
- if (walletBase.isEvmBrowserWallet(this.wallet)) {
204
- const walletStrategy = this.getXService().walletStrategy;
205
- await walletStrategy.setWallet(this.wallet);
206
- await walletStrategy.disconnect();
207
- }
208
- }
209
- get icon() {
210
- return WALLET_ICONS[this.wallet];
211
- }
212
- get isInstalled() {
213
- if (walletBase.isCosmosBrowserWallet(this.wallet)) {
214
- return walletCosmos.isCosmosWalletInstalled(this.wallet);
215
- }
216
- return true;
217
- }
218
- };
219
-
220
- exports.InjectiveXConnector = InjectiveXConnector;
221
- exports.InjectiveXService = InjectiveXService;
222
- //# sourceMappingURL=index.cjs.map
223
- //# sourceMappingURL=index.cjs.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../src/core/XService.ts","../../../src/xchains/injective/InjectiveXService.ts","../../../src/core/XConnector.ts","../../../src/xchains/injective/InjectiveXConnector.ts"],"names":["address","getNetworkEndpoints","Network","WalletStrategy","InjectiveChainId","mainnet","IndexerGrpcAccountPortfolioApi","ChainGrpcWasmApi","MsgBroadcaster","isCosmosBrowserWallet","isCosmosWalletInstalled","isEvmBrowserWallet","getInjectiveAddress"],"mappings":"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","file":"index.cjs","sourcesContent":["import type { ChainType, IXServiceBase, XToken } from '@sodax/types';\nimport type { IXConnector } from '@/types/interfaces.js';\n\n/**\n * Abstract base class for blockchain service implementations.\n *\n * The XService class serves as a foundation for implementing blockchain-specific services\n * in a multi-chain environment. It provides a standardized interface for:\n * 1. Managing wallet connectors for different blockchain types\n * 2. Querying token balances across different chains\n *\n * Each blockchain implementation (e.g., Solana, EVM chains) extends this class\n * to provide chain-specific functionality while maintaining a consistent interface.\n *\n * @abstract\n * @class XService\n * @property {ChainType} xChainType - The blockchain type this service handles (e.g., 'SOLANA', 'EVM')\n * @property {XConnector[]} xConnectors - Available wallet connectors for this chain\n *\n */\nexport abstract class XService implements IXServiceBase {\n /** The blockchain type this service handles */\n public readonly xChainType: ChainType;\n\n /** Available wallet connectors for this chain */\n private xConnectors: IXConnector[] = [];\n\n constructor(xChainType: ChainType) {\n this.xChainType = xChainType;\n }\n\n /**\n * Gets the balance of a specific token for an address\n * @param address The wallet address to check\n * @param xToken The token to get the balance for\n * @returns Promise resolving to the token balance as a bigint\n */\n public async getBalance(address: string | undefined, xToken: XToken): Promise<bigint> {\n return 0n;\n }\n\n /**\n * Gets balances for multiple tokens for an address\n * @param address The wallet address to check\n * @param xTokens Array of tokens to get balances for\n * @returns Promise resolving to object mapping token addresses to balances\n */\n public async getBalances(address: string | undefined, xTokens: readonly XToken[]): Promise<Record<string, bigint>> {\n if (!address) return {};\n\n const balancePromises = xTokens.map(async xToken => {\n const balance = await this.getBalance(address, xToken);\n return { address: xToken.address, balance };\n });\n\n const balances = await Promise.all(balancePromises);\n return balances.reduce<Record<string, bigint>>((acc, { address, balance }) => {\n acc[address] = balance;\n return acc;\n }, {});\n }\n\n /**\n * Gets all available connectors for this chain\n */\n public getXConnectors(): IXConnector[] {\n return this.xConnectors;\n }\n\n /**\n * Sets the available connectors for this chain\n */\n public setXConnectors(xConnectors: IXConnector[]): void {\n this.xConnectors = xConnectors;\n }\n\n /**\n * Gets a specific connector by its ID\n * @param xConnectorId The connector ID to look up\n * @returns The matching connector or undefined if not found\n */\n public getXConnectorById(xConnectorId: string): IXConnector | undefined {\n return this.getXConnectors().find(xConnector => xConnector.id === xConnectorId);\n }\n}\n","import { XService } from '@/core/XService.js';\nimport { Network, getNetworkEndpoints } from '@injectivelabs/networks';\nimport { ChainGrpcWasmApi, IndexerGrpcAccountPortfolioApi } from '@injectivelabs/sdk-ts';\nimport { ChainId as InjectiveChainId } from '@injectivelabs/ts-types';\nimport { MsgBroadcaster } from '@injectivelabs/wallet-core';\nimport type { InjectiveRpcConfig, XToken } from '@sodax/types';\nimport { mainnet } from 'wagmi/chains';\nimport { WalletStrategy } from '@injectivelabs/wallet-strategy';\n\nexport class InjectiveXService extends XService {\n private static instance: InjectiveXService;\n\n public walletStrategy: WalletStrategy;\n public indexerGrpcAccountPortfolioApi: IndexerGrpcAccountPortfolioApi;\n public chainGrpcWasmApi: ChainGrpcWasmApi;\n public msgBroadcaster: MsgBroadcaster;\n\n private constructor(rpcConfig?: InjectiveRpcConfig) {\n super('INJECTIVE');\n\n const defaults = getNetworkEndpoints(Network.Mainnet);\n // Only `indexer` + `grpc` are overridable — the rest of the endpoints object\n // (rest, rpc, explorer, …) keeps the @injectivelabs/networks mainnet defaults.\n // Extend `InjectiveRpcConfig` if more endpoints need to be consumer-configurable.\n const endpoints = {\n ...defaults,\n indexer: rpcConfig?.indexer || defaults.indexer,\n grpc: rpcConfig?.grpc || defaults.grpc,\n };\n\n this.walletStrategy = new WalletStrategy({\n chainId: InjectiveChainId.Mainnet,\n strategies: {},\n evmOptions: {\n evmChainId: mainnet.id,\n rpcUrl: mainnet.rpcUrls.default.http[0],\n },\n });\n\n this.indexerGrpcAccountPortfolioApi = new IndexerGrpcAccountPortfolioApi(endpoints.indexer);\n this.chainGrpcWasmApi = new ChainGrpcWasmApi(endpoints.grpc);\n this.msgBroadcaster = new MsgBroadcaster({\n walletStrategy: this.walletStrategy,\n network: Network.Mainnet,\n endpoints,\n });\n }\n\n /**\n * @param rpcConfig - Only applied on first call. Subsequent calls return the\n * existing instance unchanged — gRPC/Indexer clients are built in the\n * constructor and can't be rebuilt at runtime. Pass the desired endpoints\n * via `SodaxWalletProvider.config.rpcConfig` once at app init.\n */\n public static getInstance(rpcConfig?: InjectiveRpcConfig): InjectiveXService {\n if (!InjectiveXService.instance) {\n InjectiveXService.instance = new InjectiveXService(rpcConfig);\n }\n return InjectiveXService.instance;\n }\n\n override async getBalance(address: string | undefined, xToken: XToken) {\n if (!address) return 0n;\n\n const portfolio = await this.indexerGrpcAccountPortfolioApi.fetchAccountPortfolioBalances(address);\n\n const xTokenAddress = xToken.address;\n\n const balance = portfolio.bankBalancesList.find(_balance => _balance.denom === xTokenAddress);\n if (balance) {\n return BigInt(balance.amount);\n }\n\n return 0n;\n }\n}\n","import type { ChainType } from '@sodax/types';\nimport type { XAccount } from '@/types/index.js';\nimport type { IXConnector } from '@/types/interfaces.js';\n\n/**\n * Base class for wallet provider connectors that handles connection management and wallet interactions\n *\n * @abstract\n * @class XConnector\n * @property {ChainType} xChainType - The blockchain type this connector supports\n * @property {string} name - Display name of the wallet provider\n * @property {string} _id - Unique identifier for the connector\n * @property {string | undefined} _icon - Optional icon URL for the wallet provider\n */\n\nexport abstract class XConnector implements IXConnector {\n /** The blockchain type this connector supports */\n public readonly xChainType: ChainType;\n\n /** Display name of the wallet provider */\n public readonly name: string;\n\n /** Unique identifier for the connector */\n public readonly _id: string;\n\n /** Optional icon URL for the wallet provider */\n public readonly _icon?: string;\n\n constructor(xChainType: ChainType, name: string, id: string) {\n this.xChainType = xChainType;\n this.name = name;\n this._id = id;\n }\n\n /**\n * Connects to the wallet provider\n * @returns Promise resolving to the connected account, or undefined if connection fails\n */\n abstract connect(): Promise<XAccount | undefined>;\n\n /**\n * Disconnects from the wallet provider\n */\n abstract disconnect(): Promise<void>;\n\n /** Get the unique identifier for this connector */\n public get id(): string {\n return this._id;\n }\n\n /** Get the optional icon URL for this wallet provider */\n public get icon(): string | undefined {\n return this._icon;\n }\n\n /**\n * True when the wallet extension backing this connector is installed.\n * Default: true (for provider-managed chains where connector presence already\n * implies install — EVM via EIP-6963, Solana/Sui via adapter discovery).\n * Subclasses backed by extension injection (Bitcoin, ICON, Stacks) override\n * this with a window probe.\n */\n public get isInstalled(): boolean {\n return true;\n }\n\n /** URL to install the wallet extension when missing. Subclasses override. */\n public get installUrl(): string | undefined {\n return undefined;\n }\n}\n","import type { XAccount } from '@/types/index.js';\nimport { XConnector } from '@/core/index.js';\nimport { getInjectiveAddress } from '@injectivelabs/sdk-ts';\nimport { type Wallet, isEvmBrowserWallet, isCosmosBrowserWallet } from '@injectivelabs/wallet-base';\nimport { isCosmosWalletInstalled } from '@injectivelabs/wallet-cosmos';\nimport { InjectiveXService } from './InjectiveXService.js';\n\nconst WALLET_ICONS: Partial<Record<Wallet, string>> = {\n metamask: 'https://raw.githubusercontent.com/balancednetwork/icons/master/wallets/metamask.svg',\n keplr: 'https://raw.githubusercontent.com/balancednetwork/icons/master/wallets/keplr.svg',\n leap: 'https://assets.leapwallet.io/logos/leap-cosmos-logo.svg',\n rabby: 'https://raw.githubusercontent.com/RabbyHub/logo/master/symbol.svg',\n phantom: 'https://raw.githubusercontent.com/balancednetwork/icons/master/wallets/phantom.svg',\n 'okx-wallet': 'https://static.okx.com/cdn/assets/imgs/247/58E63FEA47A2B7D7.png',\n 'trust-wallet': 'https://trustwallet.com/assets/images/media/assets/twLogo.svg',\n};\n\nexport class InjectiveXConnector extends XConnector {\n private wallet: Wallet;\n\n constructor(name: string, wallet: Wallet) {\n super('INJECTIVE', name, wallet);\n this.wallet = wallet;\n }\n\n getXService(): InjectiveXService {\n return InjectiveXService.getInstance();\n }\n\n async connect(): Promise<XAccount | undefined> {\n if (isCosmosBrowserWallet(this.wallet) && !isCosmosWalletInstalled(this.wallet)) {\n console.warn(`[InjectiveXConnector] connect: ${this.wallet} cosmos wallet not installed`);\n return undefined;\n }\n\n const walletStrategy = this.getXService().walletStrategy;\n await walletStrategy.setWallet(this.wallet);\n const addresses = await walletStrategy.getAddresses();\n\n if (!addresses?.length) {\n console.warn(`[InjectiveXConnector] connect: ${this.wallet} returned no addresses`);\n return undefined;\n }\n\n const firstAddress = addresses[0];\n if (!firstAddress) {\n console.warn(`[InjectiveXConnector] connect: ${this.wallet} returned empty addresses array`);\n return undefined;\n }\n const address = isEvmBrowserWallet(this.wallet) ? getInjectiveAddress(firstAddress) : firstAddress;\n\n return {\n address,\n xChainType: this.xChainType,\n };\n }\n\n async disconnect(): Promise<void> {\n if (isEvmBrowserWallet(this.wallet)) {\n const walletStrategy = this.getXService().walletStrategy;\n await walletStrategy.setWallet(this.wallet);\n await walletStrategy.disconnect();\n }\n }\n\n public override get icon(): string | undefined {\n return WALLET_ICONS[this.wallet];\n }\n\n public override get isInstalled(): boolean {\n if (isCosmosBrowserWallet(this.wallet)) {\n return isCosmosWalletInstalled(this.wallet);\n }\n // EVM / other injective wallets: wallet-strategy handles install errors at connect time.\n // Default to true so users can attempt connect — Phase 3 classifier will surface walletNotInstalled if it fails.\n return true;\n }\n}\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":[],"names":[],"mappings":"","file":"index.mjs"}
@@ -1,190 +0,0 @@
1
- 'use strict';
2
-
3
- var nearConnect = require('@hot-labs/near-connect');
4
- var nearApiJs = require('near-api-js');
5
-
6
- // src/core/XService.ts
7
- var XService = class {
8
- /** The blockchain type this service handles */
9
- xChainType;
10
- /** Available wallet connectors for this chain */
11
- xConnectors = [];
12
- constructor(xChainType) {
13
- this.xChainType = xChainType;
14
- }
15
- /**
16
- * Gets the balance of a specific token for an address
17
- * @param address The wallet address to check
18
- * @param xToken The token to get the balance for
19
- * @returns Promise resolving to the token balance as a bigint
20
- */
21
- async getBalance(address, xToken) {
22
- return 0n;
23
- }
24
- /**
25
- * Gets balances for multiple tokens for an address
26
- * @param address The wallet address to check
27
- * @param xTokens Array of tokens to get balances for
28
- * @returns Promise resolving to object mapping token addresses to balances
29
- */
30
- async getBalances(address, xTokens) {
31
- if (!address) return {};
32
- const balancePromises = xTokens.map(async (xToken) => {
33
- const balance = await this.getBalance(address, xToken);
34
- return { address: xToken.address, balance };
35
- });
36
- const balances = await Promise.all(balancePromises);
37
- return balances.reduce((acc, { address: address2, balance }) => {
38
- acc[address2] = balance;
39
- return acc;
40
- }, {});
41
- }
42
- /**
43
- * Gets all available connectors for this chain
44
- */
45
- getXConnectors() {
46
- return this.xConnectors;
47
- }
48
- /**
49
- * Sets the available connectors for this chain
50
- */
51
- setXConnectors(xConnectors) {
52
- this.xConnectors = xConnectors;
53
- }
54
- /**
55
- * Gets a specific connector by its ID
56
- * @param xConnectorId The connector ID to look up
57
- * @returns The matching connector or undefined if not found
58
- */
59
- getXConnectorById(xConnectorId) {
60
- return this.getXConnectors().find((xConnector) => xConnector.id === xConnectorId);
61
- }
62
- };
63
-
64
- // src/constants.ts
65
- var NEAR_DEFAULT_RPC_URL = "https://1rpc.io/near";
66
-
67
- // src/xchains/near/NearXService.ts
68
- var NearXService = class _NearXService extends XService {
69
- static instance;
70
- walletSelector;
71
- rpcUrl;
72
- /**
73
- * @param rpcUrl - Used by `getBalance` via `JsonRpcProvider({ url: rpcUrl })`.
74
- * Does NOT affect `walletSelector` — `@hot-labs/near-connect` only accepts
75
- * the network preset name (`'mainnet'`/`'testnet'`) and fetches RPC internally.
76
- * Custom RPC is therefore read-only for balance queries.
77
- */
78
- constructor(rpcUrl = NEAR_DEFAULT_RPC_URL) {
79
- super("NEAR");
80
- this.rpcUrl = rpcUrl;
81
- this.walletSelector = new nearConnect.NearConnector({
82
- network: "mainnet",
83
- logger: console,
84
- autoConnect: true,
85
- excludedWallets: ["okx-wallet"]
86
- });
87
- }
88
- /**
89
- * @param rpcUrl - Re-applied on every call (matches StacksXService semantics).
90
- * `rpcUrl` only drives `getBalance` via a per-call `JsonRpcProvider`, so it's
91
- * safe to update at runtime — no persistent chain client to rebuild.
92
- */
93
- static getInstance(rpcUrl) {
94
- if (!_NearXService.instance) {
95
- _NearXService.instance = new _NearXService(rpcUrl);
96
- } else if (rpcUrl) {
97
- _NearXService.instance.rpcUrl = rpcUrl;
98
- }
99
- return _NearXService.instance;
100
- }
101
- async getBalance(address, xToken) {
102
- const provider = new nearApiJs.JsonRpcProvider({ url: this.rpcUrl });
103
- if (xToken.symbol === "NEAR") {
104
- const account = await provider.viewAccount({ accountId: address ?? "" });
105
- return BigInt(account.amount);
106
- }
107
- const res = await provider.callFunction({
108
- contractId: xToken.address,
109
- method: "ft_balance_of",
110
- args: { account_id: address }
111
- });
112
- return BigInt(res ?? 0);
113
- }
114
- };
115
-
116
- // src/core/XConnector.ts
117
- var XConnector = class {
118
- /** The blockchain type this connector supports */
119
- xChainType;
120
- /** Display name of the wallet provider */
121
- name;
122
- /** Unique identifier for the connector */
123
- _id;
124
- /** Optional icon URL for the wallet provider */
125
- _icon;
126
- constructor(xChainType, name, id) {
127
- this.xChainType = xChainType;
128
- this.name = name;
129
- this._id = id;
130
- }
131
- /** Get the unique identifier for this connector */
132
- get id() {
133
- return this._id;
134
- }
135
- /** Get the optional icon URL for this wallet provider */
136
- get icon() {
137
- return this._icon;
138
- }
139
- /**
140
- * True when the wallet extension backing this connector is installed.
141
- * Default: true (for provider-managed chains where connector presence already
142
- * implies install — EVM via EIP-6963, Solana/Sui via adapter discovery).
143
- * Subclasses backed by extension injection (Bitcoin, ICON, Stacks) override
144
- * this with a window probe.
145
- */
146
- get isInstalled() {
147
- return true;
148
- }
149
- /** URL to install the wallet extension when missing. Subclasses override. */
150
- get installUrl() {
151
- return void 0;
152
- }
153
- };
154
-
155
- // src/xchains/near/NearXConnector.ts
156
- var NearXConnector = class extends XConnector {
157
- _wallet;
158
- constructor(wallet) {
159
- super("NEAR", wallet.manifest.name, wallet.manifest.id);
160
- this._wallet = wallet;
161
- }
162
- getXService() {
163
- return NearXService.getInstance();
164
- }
165
- async connect() {
166
- const walletSelector = this.getXService().walletSelector;
167
- const wallet = await walletSelector.connect({ walletId: this._wallet.manifest.id });
168
- const accounts = await wallet.getAccounts();
169
- if (accounts.length === 0 || accounts[0] === void 0) {
170
- console.warn(`[NearXConnector] connect: ${this._wallet.manifest.name} returned no accounts`);
171
- return void 0;
172
- }
173
- return {
174
- address: accounts[0].accountId,
175
- xChainType: this.xChainType
176
- };
177
- }
178
- async disconnect() {
179
- const walletSelector = this.getXService().walletSelector;
180
- await walletSelector.disconnect(this._wallet);
181
- }
182
- get icon() {
183
- return this._wallet.manifest.icon;
184
- }
185
- };
186
-
187
- exports.NearXConnector = NearXConnector;
188
- exports.NearXService = NearXService;
189
- //# sourceMappingURL=index.cjs.map
190
- //# sourceMappingURL=index.cjs.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../src/core/XService.ts","../../../src/constants.ts","../../../src/xchains/near/NearXService.ts","../../../src/core/XConnector.ts","../../../src/xchains/near/NearXConnector.ts"],"names":["address","NearConnector","JsonRpcProvider"],"mappings":"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","file":"index.cjs","sourcesContent":["import type { ChainType, IXServiceBase, XToken } from '@sodax/types';\nimport type { IXConnector } from '@/types/interfaces.js';\n\n/**\n * Abstract base class for blockchain service implementations.\n *\n * The XService class serves as a foundation for implementing blockchain-specific services\n * in a multi-chain environment. It provides a standardized interface for:\n * 1. Managing wallet connectors for different blockchain types\n * 2. Querying token balances across different chains\n *\n * Each blockchain implementation (e.g., Solana, EVM chains) extends this class\n * to provide chain-specific functionality while maintaining a consistent interface.\n *\n * @abstract\n * @class XService\n * @property {ChainType} xChainType - The blockchain type this service handles (e.g., 'SOLANA', 'EVM')\n * @property {XConnector[]} xConnectors - Available wallet connectors for this chain\n *\n */\nexport abstract class XService implements IXServiceBase {\n /** The blockchain type this service handles */\n public readonly xChainType: ChainType;\n\n /** Available wallet connectors for this chain */\n private xConnectors: IXConnector[] = [];\n\n constructor(xChainType: ChainType) {\n this.xChainType = xChainType;\n }\n\n /**\n * Gets the balance of a specific token for an address\n * @param address The wallet address to check\n * @param xToken The token to get the balance for\n * @returns Promise resolving to the token balance as a bigint\n */\n public async getBalance(address: string | undefined, xToken: XToken): Promise<bigint> {\n return 0n;\n }\n\n /**\n * Gets balances for multiple tokens for an address\n * @param address The wallet address to check\n * @param xTokens Array of tokens to get balances for\n * @returns Promise resolving to object mapping token addresses to balances\n */\n public async getBalances(address: string | undefined, xTokens: readonly XToken[]): Promise<Record<string, bigint>> {\n if (!address) return {};\n\n const balancePromises = xTokens.map(async xToken => {\n const balance = await this.getBalance(address, xToken);\n return { address: xToken.address, balance };\n });\n\n const balances = await Promise.all(balancePromises);\n return balances.reduce<Record<string, bigint>>((acc, { address, balance }) => {\n acc[address] = balance;\n return acc;\n }, {});\n }\n\n /**\n * Gets all available connectors for this chain\n */\n public getXConnectors(): IXConnector[] {\n return this.xConnectors;\n }\n\n /**\n * Sets the available connectors for this chain\n */\n public setXConnectors(xConnectors: IXConnector[]): void {\n this.xConnectors = xConnectors;\n }\n\n /**\n * Gets a specific connector by its ID\n * @param xConnectorId The connector ID to look up\n * @returns The matching connector or undefined if not found\n */\n public getXConnectorById(xConnectorId: string): IXConnector | undefined {\n return this.getXConnectors().find(xConnector => xConnector.id === xConnectorId);\n }\n}\n","/**\n * Default values used across providers and hydrators.\n * Centralized so consumers and tests have a single source of truth.\n */\n\n// ─── Stacks ─────────────────────────────────────────────────────────────────\nexport const STACKS_DEFAULT_RPC_URL = 'https://api.mainnet.hiro.so';\nexport const STACKS_DEFAULT_NETWORK = 'mainnet' as const;\n\n// ─── Sui ────────────────────────────────────────────────────────────────────\nexport const SUI_DEFAULT_NETWORK = 'mainnet' as const;\nexport const SUI_DEFAULT_AUTO_CONNECT = true;\n\n// ─── EVM ────────────────────────────────────────────────────────────────────\nexport const EVM_DEFAULT_RECONNECT_ON_MOUNT = false;\nexport const EVM_DEFAULT_SSR = true;\n\n// ─── Solana ─────────────────────────────────────────────────────────────────\nexport const SOLANA_DEFAULT_AUTO_CONNECT = true;\nexport const SOLANA_DEFAULT_RPC_URL = 'https://api.mainnet-beta.solana.com';\n/** Timeout for MetaMask Solana wallet connect — MetaMask's Solana adapter is slow to fire `connect`. */\nexport const SOLANA_METAMASK_CONNECT_TIMEOUT_MS = 30_000;\n\n// ─── Bitcoin ────────────────────────────────────────────────────────────────\nexport const BITCOIN_DEFAULT_RPC_URL = 'https://mempool.space/api';\n\n// ─── Stellar ────────────────────────────────────────────────────────────────\nexport const STELLAR_DEFAULT_HORIZON_RPC_URL = 'https://horizon.stellar.org';\nexport const STELLAR_DEFAULT_SOROBAN_RPC_URL = 'https://rpc.ankr.com/stellar_soroban';\n\n// ─── NEAR ───────────────────────────────────────────────────────────────────\nexport const NEAR_DEFAULT_RPC_URL = 'https://1rpc.io/near';\n\n// ─── Wallet metadata (install URLs + icons for extension-based wallets) ────\n// Keys are wallet-level, not per-connector: one OKX extension serves both\n// Bitcoin and EVM connectors, so metadata is shared.\n\nexport const WALLET_METADATA = {\n unisat: {\n installUrl: 'https://chromewebstore.google.com/detail/unisat-wallet/ppbibelpcjmhbdihakflkdcoccbgbkpo',\n icon: 'https://avatars.githubusercontent.com/u/125119198?s=200&v=4',\n },\n xverse: {\n installUrl: 'https://chromewebstore.google.com/detail/xverse-bitcoin-crypto-wal/idnnbdplmphpflfnlkomgpfbpcgelopg',\n icon:\n 'https://cdn.brandfetch.io/iddzGN5Rcv/w/400/h/400/theme/dark/icon.jpeg?c=1bxid64Mup7aczewSAYMX&t=1771902357797',\n },\n okx: {\n installUrl: 'https://chromewebstore.google.com/detail/okx-wallet/mcohilncbfahbmgdjkbpemcciiolgcge',\n icon: 'https://static.okx.com/cdn/assets/imgs/247/58E63FEA47A2B7D7.png',\n },\n hana: {\n installUrl: 'https://chromewebstore.google.com/detail/hana-wallet/jfdlamikmbghhapbgfoogdffldioobgl',\n icon: 'https://raw.githubusercontent.com/balancednetwork/icons/master/wallets/hana.svg',\n },\n} as const satisfies Record<string, { installUrl: string; icon: string }>;\n","import { XService } from '@/core/XService.js';\nimport type { XToken } from '@sodax/types';\nimport { NearConnector } from '@hot-labs/near-connect';\nimport { JsonRpcProvider } from 'near-api-js';\nimport { NEAR_DEFAULT_RPC_URL } from '@/constants.js';\n\nexport class NearXService extends XService {\n private static instance: NearXService;\n\n public walletSelector: NearConnector;\n public rpcUrl: string;\n\n /**\n * @param rpcUrl - Used by `getBalance` via `JsonRpcProvider({ url: rpcUrl })`.\n * Does NOT affect `walletSelector` — `@hot-labs/near-connect` only accepts\n * the network preset name (`'mainnet'`/`'testnet'`) and fetches RPC internally.\n * Custom RPC is therefore read-only for balance queries.\n */\n private constructor(rpcUrl: string = NEAR_DEFAULT_RPC_URL) {\n super('NEAR');\n\n this.rpcUrl = rpcUrl;\n this.walletSelector = new NearConnector({\n network: 'mainnet',\n logger: console,\n autoConnect: true,\n excludedWallets: ['okx-wallet'],\n });\n }\n\n /**\n * @param rpcUrl - Re-applied on every call (matches StacksXService semantics).\n * `rpcUrl` only drives `getBalance` via a per-call `JsonRpcProvider`, so it's\n * safe to update at runtime — no persistent chain client to rebuild.\n */\n public static getInstance(rpcUrl?: string): NearXService {\n if (!NearXService.instance) {\n NearXService.instance = new NearXService(rpcUrl);\n } else if (rpcUrl) {\n NearXService.instance.rpcUrl = rpcUrl;\n }\n return NearXService.instance;\n }\n\n override async getBalance(address: string | undefined, xToken: XToken): Promise<bigint> {\n // reference: https://near.github.io/near-api-js/classes/_near-js_providers.json-rpc-provider.JsonRpcProvider.html\n const provider = new JsonRpcProvider({ url: this.rpcUrl });\n\n // get native balance\n if (xToken.symbol === 'NEAR') {\n const account = await provider.viewAccount({ accountId: address ?? '' });\n return BigInt(account.amount);\n }\n\n // Near Fungible Token Standard(https://github.com/near/NEPs/blob/master/neps/nep-0141.md)\n // get balance of the token\n\n const res = await provider.callFunction<number>({\n contractId: xToken.address,\n method: 'ft_balance_of',\n args: { account_id: address },\n });\n return BigInt(res ?? 0);\n }\n}\n","import type { ChainType } from '@sodax/types';\nimport type { XAccount } from '@/types/index.js';\nimport type { IXConnector } from '@/types/interfaces.js';\n\n/**\n * Base class for wallet provider connectors that handles connection management and wallet interactions\n *\n * @abstract\n * @class XConnector\n * @property {ChainType} xChainType - The blockchain type this connector supports\n * @property {string} name - Display name of the wallet provider\n * @property {string} _id - Unique identifier for the connector\n * @property {string | undefined} _icon - Optional icon URL for the wallet provider\n */\n\nexport abstract class XConnector implements IXConnector {\n /** The blockchain type this connector supports */\n public readonly xChainType: ChainType;\n\n /** Display name of the wallet provider */\n public readonly name: string;\n\n /** Unique identifier for the connector */\n public readonly _id: string;\n\n /** Optional icon URL for the wallet provider */\n public readonly _icon?: string;\n\n constructor(xChainType: ChainType, name: string, id: string) {\n this.xChainType = xChainType;\n this.name = name;\n this._id = id;\n }\n\n /**\n * Connects to the wallet provider\n * @returns Promise resolving to the connected account, or undefined if connection fails\n */\n abstract connect(): Promise<XAccount | undefined>;\n\n /**\n * Disconnects from the wallet provider\n */\n abstract disconnect(): Promise<void>;\n\n /** Get the unique identifier for this connector */\n public get id(): string {\n return this._id;\n }\n\n /** Get the optional icon URL for this wallet provider */\n public get icon(): string | undefined {\n return this._icon;\n }\n\n /**\n * True when the wallet extension backing this connector is installed.\n * Default: true (for provider-managed chains where connector presence already\n * implies install — EVM via EIP-6963, Solana/Sui via adapter discovery).\n * Subclasses backed by extension injection (Bitcoin, ICON, Stacks) override\n * this with a window probe.\n */\n public get isInstalled(): boolean {\n return true;\n }\n\n /** URL to install the wallet extension when missing. Subclasses override. */\n public get installUrl(): string | undefined {\n return undefined;\n }\n}\n","import type { XAccount } from '@/types/index.js';\n\nimport { XConnector } from '@/core/index.js';\nimport type { NearWalletBase } from '@hot-labs/near-connect';\nimport { NearXService } from './NearXService.js';\n\nexport class NearXConnector extends XConnector {\n _wallet: NearWalletBase;\n\n constructor(wallet: NearWalletBase) {\n super('NEAR', wallet.manifest.name, wallet.manifest.id);\n this._wallet = wallet;\n }\n\n getXService(): NearXService {\n return NearXService.getInstance();\n }\n\n async connect(): Promise<XAccount | undefined> {\n const walletSelector = this.getXService().walletSelector;\n const wallet = await walletSelector.connect({ walletId: this._wallet.manifest.id });\n const accounts = await wallet.getAccounts();\n\n if (accounts.length === 0 || accounts[0] === undefined) {\n console.warn(`[NearXConnector] connect: ${this._wallet.manifest.name} returned no accounts`);\n return undefined;\n }\n\n return {\n address: accounts[0].accountId,\n xChainType: this.xChainType,\n };\n }\n\n async disconnect(): Promise<void> {\n const walletSelector = this.getXService().walletSelector;\n await walletSelector.disconnect(this._wallet);\n }\n\n public override get icon(): string {\n return this._wallet.manifest.icon;\n }\n}\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":[],"names":[],"mappings":"","file":"index.mjs"}