@tuwaio/satellite-solana 1.0.0-fix-packages-alpha.16.1695102 → 1.0.0-fix-packages-alpha.18.f5a3360

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.js CHANGED
@@ -1,2 +1,2 @@
1
- 'use strict';var orbitCore=require('@tuwaio/orbit-core'),orbitSolana=require('@tuwaio/orbit-solana'),gill=require('gill'),features=require('@wallet-standard/features'),ui=require('@wallet-standard/ui'),uiRegistry=require('@wallet-standard/ui-registry');async function S(r,t){let a=ui.getWalletFeature(r,features.StandardConnect),{accounts:o}=await a.connect(t);return {uiWallet:orbitSolana.getAvailableSolanaConnectors().filter(e=>e.accounts.find(c=>c.address.toLowerCase()===o[0].address.toLowerCase()))[0],accounts:o.map(e=>uiRegistry.getOrCreateUiWalletAccountForStandardWalletAccount_DO_NOT_USE_OR_YOU_WILL_BE_FIRED(uiRegistry.getWalletForHandle_DO_NOT_USE_OR_YOU_WILL_BE_FIRED(r),e))}}async function s(r){await ui.getWalletFeature(r,features.StandardDisconnect)?.disconnect();}function T({rpcUrls:r}){return {key:orbitCore.OrbitAdapter.SOLANA,async connect({connectorType:t,chainId:a}){let n=orbitSolana.getAvailableSolanaConnectors().find(e=>orbitCore.getConnectorTypeFromName(orbitCore.OrbitAdapter.SOLANA,orbitCore.formatConnectorName(e.name))===t);if(!n)throw new Error("Cannot find connector with this wallet type");try{let{uiWallet:e,accounts:c}=await S(n),u=orbitSolana.getCluster({cluster:a});return {connectorType:t,address:c[0].address,chainId:u,rpcURL:orbitSolana.getRpcUrlForCluster({cluster:u,rpcUrls:r}),isConnected:!0,isContractAddress:!1,icon:e?.icon?.trim(),connectedAccount:c[0],connectedWallet:e}}catch(e){throw new Error(e instanceof Error?e.message:String(e))}},async disconnect(t){if(t&&t?.connectedWallet)await s(t.connectedWallet);else {let o=orbitSolana.getAvailableSolanaConnectors().filter(n=>n.accounts.length>0);await Promise.allSettled(o.map(async n=>{try{await s(n);}catch{}}));}},getConnectors(){let t=orbitSolana.getAvailableSolanaConnectors();return {adapter:orbitCore.OrbitAdapter.SOLANA,connectors:t}},async checkAndSwitchNetwork(t,a,o){if(a!==t&&o){let n=orbitSolana.getCluster({cluster:t});o({chainId:n,rpcURL:orbitSolana.getRpcUrlForCluster({cluster:n,rpcUrls:r})});}},getBalance:async(t,a)=>{let n=await orbitSolana.createSolanaRPC({rpcUrlOrMoniker:orbitSolana.getCluster({cluster:a}),rpcUrls:r}).getBalance(gill.address(t)).send();return {value:gill.lamportsToSol(n.value),symbol:"SOL"}},getExplorerUrl(t,a){return orbitSolana.getSolanaExplorerLink(t,a)},async getName(t){return orbitSolana.getSolanaAddressName(t)},async getAvatar(t){return orbitSolana.getSolanaAddressAvatar(t)}}}exports.connect=S;exports.disconnect=s;exports.satelliteSolanaAdapter=T;//# sourceMappingURL=index.js.map
1
+ 'use strict';var orbitCore=require('@tuwaio/orbit-core'),orbitSolana=require('@tuwaio/orbit-solana'),gill=require('gill'),features=require('@wallet-standard/features'),ui=require('@wallet-standard/ui'),uiRegistry=require('@wallet-standard/ui-registry');async function i(r,t){let a=ui.getWalletFeature(r,features.StandardConnect),{accounts:o}=await a.connect(t);return {uiWallet:orbitSolana.getAvailableSolanaConnectors().filter(e=>e.accounts.find(c=>c.address.toLowerCase()===o[0].address.toLowerCase()))[0],accounts:o.map(e=>uiRegistry.getOrCreateUiWalletAccountForStandardWalletAccount_DO_NOT_USE_OR_YOU_WILL_BE_FIRED(uiRegistry.getWalletForHandle_DO_NOT_USE_OR_YOU_WILL_BE_FIRED(r),e))}}async function d(r){await ui.getWalletFeature(r,features.StandardDisconnect)?.disconnect();}function $({rpcUrls:r}){return {key:orbitCore.OrbitAdapter.SOLANA,async connect({connectorType:t,chainId:a}){let n=orbitSolana.getAvailableSolanaConnectors().find(e=>orbitCore.getConnectorTypeFromName(orbitCore.OrbitAdapter.SOLANA,orbitCore.formatConnectorName(e.name))===t);if(!n)throw new Error("Cannot find connector with this wallet type");try{let{uiWallet:e,accounts:c}=await i(n),m=orbitSolana.getCluster({cluster:a});return {connectorType:t,address:c[0].address,chainId:m,rpcURL:orbitSolana.getRpcUrlForCluster({cluster:m,rpcUrls:r}),isConnected:!0,isContractAddress:!1,icon:e?.icon?.trim(),connectedAccount:c[0],connectedWallet:e}}catch(e){throw new Error(e instanceof Error?e.message:String(e))}},async disconnect(t){if(t&&t?.connectedWallet)await d(t.connectedWallet);else {let o=orbitSolana.getAvailableSolanaConnectors().filter(n=>n.accounts.length>0);await Promise.allSettled(o.map(async n=>{try{await d(n);}catch{}}));}},getConnectors(){let t=orbitSolana.getAvailableSolanaConnectors();return {adapter:orbitCore.OrbitAdapter.SOLANA,connectors:t}},async checkAndSwitchNetwork(t,a,o){if(a!==t&&o){let n=orbitSolana.getCluster({cluster:t});o({chainId:n,rpcURL:orbitSolana.getRpcUrlForCluster({cluster:n,rpcUrls:r})});}},getBalance:async(t,a)=>{let n=await orbitSolana.createSolanaRPC({rpcUrlOrMoniker:orbitSolana.getCluster({cluster:a}),rpcUrls:r}).getBalance(gill.address(t)).send();return {value:gill.lamportsToSol(n.value),symbol:"SOL"}},getExplorerUrl(t,a){return orbitSolana.getSolanaExplorerLink(t,a)},async getName(t){return orbitSolana.getSolanaAddressName(t)},async getAvatar(t){return orbitSolana.getSolanaAddressAvatar(t)},switchConnection:async t=>{let o=orbitSolana.getAvailableSolanaConnectors().find(n=>orbitCore.getConnectorTypeFromName(orbitCore.OrbitAdapter.SOLANA,orbitCore.formatConnectorName(n.name))===t);if(!o)throw new Error(`Cannot find connector with type: ${t}`);try{await i(o);}catch(n){throw new Error(`Failed to switch to connector ${t}: ${n instanceof Error?n.message:String(n)}`)}}}}exports.connect=i;exports.disconnect=d;exports.satelliteSolanaAdapter=$;//# sourceMappingURL=index.js.map
2
2
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/utils/connectionUtils.ts","../src/adapters/solanaAdapter.ts"],"names":["connect","uiWallet","input","connectFeature","getWalletFeature","StandardConnect","accounts","getAvailableSolanaConnectors","w","a","account","getOrCreateUiWalletAccountForStandardWalletAccount","getWalletForHandle","disconnect","StandardDisconnect","satelliteSolanaAdapter","rpcUrls","OrbitAdapter","connectorType","chainId","connector","getConnectorTypeFromName","formatConnectorName","connectedAccount","cluster","getCluster","getRpcUrlForCluster","activeWallet","connectedWallets","wallet","connectors","currentChainId","updateActiveWallet","address","balance","createSolanaRPC","adr","lamportsToSol","url","getSolanaExplorerLink","getSolanaAddressName","name","getSolanaAddressAvatar"],"mappings":"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","file":"index.js","sourcesContent":["import { getAvailableSolanaConnectors } from '@tuwaio/orbit-solana';\nimport type {\n StandardConnectFeature,\n StandardConnectMethod,\n StandardDisconnectFeature,\n} from '@wallet-standard/features';\nimport { StandardConnect, StandardDisconnect } from '@wallet-standard/features';\nimport { getWalletFeature, type UiWallet, UiWalletAccount } from '@wallet-standard/ui';\nimport {\n getOrCreateUiWalletAccountForStandardWalletAccount_DO_NOT_USE_OR_YOU_WILL_BE_FIRED as getOrCreateUiWalletAccountForStandardWalletAccount,\n getWalletForHandle_DO_NOT_USE_OR_YOU_WILL_BE_FIRED as getWalletForHandle,\n} from '@wallet-standard/ui-registry';\n\n/**\n * Establishes connection with a wallet using Wallet Standard\n *\n * @remarks\n * Connects to a wallet that implements the Wallet Standard interface.\n * Uses the StandardConnect feature to establish connection and retrieve accounts.\n * Converts standard wallet accounts to UI wallet accounts.\n *\n * @param uiWallet - Wallet instance implementing the UI Wallet interface\n * @param input - Optional connection parameters (excluding silent flag)\n * @returns Promise resolving to array of connected wallet accounts\n *\n * @throws {Error} If wallet doesn't support StandardConnect feature\n * @throws {Error} If connection attempt fails\n *\n * @example\n * ```typescript\n * const accounts = await connect(wallet, {\n * // Optional connection parameters\n * });\n * const firstAccount = accounts[0];\n * console.log('Connected account:', firstAccount.address);\n * ```\n */\nexport async function connect(\n uiWallet: UiWallet,\n input?: Omit<NonNullable<Parameters<StandardConnectMethod>[0]>, 'silent'>,\n): Promise<{ uiWallet: UiWallet; accounts: UiWalletAccount[] }> {\n // Get the connect feature from the wallet\n const connectFeature = getWalletFeature(uiWallet, StandardConnect) as StandardConnectFeature[typeof StandardConnect];\n // Initiate connection and get accounts\n const { accounts } = await connectFeature.connect(input);\n const wallets = getAvailableSolanaConnectors();\n // Convert accounts to UI wallet accounts\n return {\n uiWallet: wallets.filter((w) =>\n w.accounts.find((a) => a.address.toLowerCase() === accounts[0].address.toLowerCase()),\n )[0],\n accounts: accounts.map((account) =>\n getOrCreateUiWalletAccountForStandardWalletAccount(getWalletForHandle(uiWallet), account),\n ),\n };\n}\n\n/**\n * Disconnects from a connected wallet\n *\n * @remarks\n * Safely disconnects from a wallet if it supports the StandardDisconnect feature.\n * If the wallet doesn't support disconnection, the operation is silently ignored.\n *\n * @param uiWallet - Wallet instance implementing the UI Wallet interface\n * @returns Promise that resolves when disconnection is complete\n *\n * @example\n * ```typescript\n * await disconnect(wallet);\n * console.log('Wallet disconnected');\n * ```\n */\nexport async function disconnect(uiWallet: UiWallet): Promise<void> {\n // Get the disconnect feature if available\n const disconnectFeature = getWalletFeature(uiWallet, StandardDisconnect) as\n | StandardDisconnectFeature[typeof StandardDisconnect]\n | undefined;\n\n await disconnectFeature?.disconnect();\n}\n","import { formatConnectorName, getConnectorTypeFromName, OrbitAdapter } from '@tuwaio/orbit-core';\nimport {\n createSolanaRPC,\n getAvailableSolanaConnectors,\n getCluster,\n getRpcUrlForCluster,\n getSolanaAddressAvatar,\n getSolanaAddressName,\n getSolanaExplorerLink,\n SolanaRPCUrls,\n} from '@tuwaio/orbit-solana';\nimport { SatelliteAdapter } from '@tuwaio/satellite-core';\nimport { UiWallet } from '@wallet-standard/ui';\nimport { address as adr, lamportsToSol, SolanaClusterMoniker } from 'gill';\n\nimport { ConnectorSolana, SolanaConnection } from '../types';\nimport { connect, disconnect } from '../utils/connectionUtils';\n\n/**\n * Creates a Solana blockchain adapter for the Satellite Connect system\n *\n * @remarks\n * This adapter implements the SatelliteAdapter interface for Solana blockchain,\n * providing connector connection, network switching, and name resolution capabilities.\n * It uses the Wallet Standard for consistent interactions.\n *\n * @param rpcUrls - Configuration object containing RPC endpoints for different Solana networks\n * @returns SatelliteAdapter implementation for Solana\n *\n * @example\n * ```typescript\n * const solanaAdapter = satelliteSolanaAdapter({\n * rpcUrls: {\n * mainnet: 'https://api.mainnet-beta.solana.com',\n * devnet: 'https://api.devnet.solana.com',\n * testnet: 'https://api.testnet.solana.com'\n * }\n * });\n * ```\n */\nexport function satelliteSolanaAdapter({\n rpcUrls,\n}: SolanaRPCUrls): SatelliteAdapter<ConnectorSolana, SolanaConnection> {\n return {\n key: OrbitAdapter.SOLANA,\n\n async connect({ connectorType, chainId }) {\n const connectors = getAvailableSolanaConnectors();\n const connector = connectors.find(\n (connector) =>\n getConnectorTypeFromName(OrbitAdapter.SOLANA, formatConnectorName(connector.name)) === connectorType,\n );\n if (!connector) throw new Error('Cannot find connector with this wallet type');\n\n try {\n const { uiWallet, accounts: connectedAccount } = await connect(connector as UiWallet);\n const cluster = getCluster({ cluster: chainId as string });\n\n return {\n connectorType,\n address: connectedAccount[0].address,\n chainId: cluster,\n rpcURL: getRpcUrlForCluster({\n cluster: cluster as SolanaClusterMoniker,\n rpcUrls,\n }),\n isConnected: true,\n isContractAddress: false,\n icon: uiWallet?.icon?.trim(),\n connectedAccount: connectedAccount[0],\n connectedWallet: uiWallet,\n };\n } catch (e) {\n throw new Error(e instanceof Error ? e.message : String(e));\n }\n },\n\n async disconnect(activeWallet) {\n if (activeWallet && (activeWallet as SolanaConnection)?.connectedWallet) {\n await disconnect((activeWallet as SolanaConnection).connectedWallet as UiWallet);\n } else {\n const connectors = getAvailableSolanaConnectors();\n const connectedWallets = connectors.filter((wallet) => wallet.accounts.length > 0);\n await Promise.allSettled(\n connectedWallets.map(async (w) => {\n try {\n await disconnect(w);\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n } catch (e) {\n /* empty */\n }\n }),\n );\n }\n },\n\n getConnectors() {\n const connectors = getAvailableSolanaConnectors();\n return {\n adapter: OrbitAdapter.SOLANA,\n connectors: connectors as ConnectorSolana[],\n };\n },\n\n async checkAndSwitchNetwork(chainId, currentChainId, updateActiveWallet) {\n if (currentChainId !== chainId && updateActiveWallet) {\n const cluster = getCluster({ cluster: chainId as string });\n updateActiveWallet({\n chainId: cluster,\n rpcURL: getRpcUrlForCluster({\n cluster: cluster as SolanaClusterMoniker,\n rpcUrls,\n }),\n });\n }\n },\n\n getBalance: async (address, chainId) => {\n const rpc = createSolanaRPC({ rpcUrlOrMoniker: getCluster({ cluster: chainId as string }), rpcUrls });\n const balance = await rpc.getBalance(adr(address)).send();\n return {\n value: lamportsToSol(balance.value),\n symbol: 'SOL',\n };\n },\n\n getExplorerUrl(url, chainId) {\n return getSolanaExplorerLink(url, chainId);\n },\n async getName(address) {\n return getSolanaAddressName(address);\n },\n async getAvatar(name) {\n return getSolanaAddressAvatar(name);\n },\n };\n}\n"]}
1
+ {"version":3,"sources":["../src/utils/connectionUtils.ts","../src/adapters/solanaAdapter.ts"],"names":["connect","uiWallet","input","connectFeature","getWalletFeature","StandardConnect","accounts","getAvailableSolanaConnectors","w","a","account","getOrCreateUiWalletAccountForStandardWalletAccount","getWalletForHandle","disconnect","StandardDisconnect","satelliteSolanaAdapter","rpcUrls","OrbitAdapter","connectorType","chainId","connector","getConnectorTypeFromName","formatConnectorName","connectedAccount","cluster","getCluster","getRpcUrlForCluster","activeWallet","connectedWallets","wallet","connectors","currentChainId","updateActiveWallet","address","balance","createSolanaRPC","adr","lamportsToSol","url","getSolanaExplorerLink","getSolanaAddressName","name","getSolanaAddressAvatar","c","e"],"mappings":"6PAqCA,eAAsBA,CAAAA,CACpBC,CAAAA,CACAC,CAAAA,CAC8D,CAE9D,IAAMC,EAAiBC,mBAAAA,CAAiBH,CAAAA,CAAUI,wBAAe,CAAA,CAE3D,CAAE,QAAA,CAAAC,CAAS,CAAA,CAAI,MAAMH,CAAAA,CAAe,OAAA,CAAQD,CAAK,CAAA,CAGvD,OAAO,CACL,QAAA,CAHcK,wCAAAA,EAA6B,CAGzB,MAAA,CAAQC,CAAAA,EACxBA,CAAAA,CAAE,QAAA,CAAS,IAAA,CAAMC,CAAAA,EAAMA,CAAAA,CAAE,OAAA,CAAQ,WAAA,EAAY,GAAMH,EAAS,CAAC,CAAA,CAAE,OAAA,CAAQ,WAAA,EAAa,CACtF,EAAE,CAAC,CAAA,CACH,QAAA,CAAUA,CAAAA,CAAS,GAAA,CAAKI,CAAAA,EACtBC,8FAAmDC,6DAAAA,CAAmBX,CAAQ,CAAA,CAAGS,CAAO,CAC1F,CACF,CACF,CAkBA,eAAsBG,CAAAA,CAAWZ,CAAAA,CAAmC,CAMlE,MAJ0BG,mBAAAA,CAAiBH,EAAUa,2BAAkB,CAAA,EAI9C,UAAA,GAC3B,CCxCO,SAASC,EAAuB,CACrC,OAAA,CAAAC,CACF,CAAA,CAAuE,CACrE,OAAO,CACL,GAAA,CAAKC,sBAAAA,CAAa,MAAA,CAElB,MAAM,OAAA,CAAQ,CAAE,cAAAC,CAAAA,CAAe,OAAA,CAAAC,CAAQ,CAAA,CAAG,CAExC,IAAMC,EADab,wCAAAA,EAA6B,CACnB,IAAA,CAC1Ba,CAAAA,EACCC,kCAAAA,CAAyBJ,sBAAAA,CAAa,OAAQK,6BAAAA,CAAoBF,CAAAA,CAAU,IAAI,CAAC,CAAA,GAAMF,CAC3F,EACA,GAAI,CAACE,CAAAA,CAAW,MAAM,IAAI,KAAA,CAAM,6CAA6C,CAAA,CAE7E,GAAI,CACF,GAAM,CAAE,QAAA,CAAAnB,CAAAA,CAAU,SAAUsB,CAAiB,CAAA,CAAI,MAAMvB,CAAAA,CAAQoB,CAAqB,CAAA,CAC9EI,EAAUC,sBAAAA,CAAW,CAAE,OAAA,CAASN,CAAkB,CAAC,CAAA,CAEzD,OAAO,CACL,aAAA,CAAAD,CAAAA,CACA,OAAA,CAASK,CAAAA,CAAiB,CAAC,CAAA,CAAE,OAAA,CAC7B,OAAA,CAASC,CAAAA,CACT,MAAA,CAAQE,+BAAAA,CAAoB,CAC1B,OAAA,CAASF,EACT,OAAA,CAAAR,CACF,CAAC,CAAA,CACD,WAAA,CAAa,CAAA,CAAA,CACb,kBAAmB,CAAA,CAAA,CACnB,IAAA,CAAMf,CAAAA,EAAU,IAAA,EAAM,IAAA,EAAK,CAC3B,iBAAkBsB,CAAAA,CAAiB,CAAC,CAAA,CACpC,eAAA,CAAiBtB,CACnB,CACF,CAAA,MAAS,CAAA,CAAG,CACV,MAAM,IAAI,KAAA,CAAM,CAAA,YAAa,KAAA,CAAQ,EAAE,OAAA,CAAU,MAAA,CAAO,CAAC,CAAC,CAC5D,CACF,EAEA,MAAM,UAAA,CAAW0B,CAAAA,CAAc,CAC7B,GAAIA,CAAAA,EAAiBA,GAAmC,eAAA,CACtD,MAAMd,CAAAA,CAAYc,CAAAA,CAAkC,eAA2B,CAAA,CAAA,KAC1E,CAEL,IAAMC,CAAAA,CADarB,wCAAAA,EAA6B,CACZ,MAAA,CAAQsB,CAAAA,EAAWA,EAAO,QAAA,CAAS,MAAA,CAAS,CAAC,CAAA,CACjF,MAAM,OAAA,CAAQ,WACZD,CAAAA,CAAiB,GAAA,CAAI,MAAOpB,CAAAA,EAAM,CAChC,GAAI,CACF,MAAMK,CAAAA,CAAWL,CAAC,EAEpB,CAAA,KAAY,CAEZ,CACF,CAAC,CACH,EACF,CACF,CAAA,CAEA,aAAA,EAAgB,CACd,IAAMsB,CAAAA,CAAavB,wCAAAA,EAA6B,CAChD,OAAO,CACL,OAAA,CAASU,uBAAa,MAAA,CACtB,UAAA,CAAYa,CACd,CACF,CAAA,CAEA,MAAM,sBAAsBX,CAAAA,CAASY,CAAAA,CAAgBC,CAAAA,CAAoB,CACvE,GAAID,CAAAA,GAAmBZ,CAAAA,EAAWa,CAAAA,CAAoB,CACpD,IAAMR,CAAAA,CAAUC,sBAAAA,CAAW,CAAE,OAAA,CAASN,CAAkB,CAAC,CAAA,CACzDa,CAAAA,CAAmB,CACjB,OAAA,CAASR,CAAAA,CACT,OAAQE,+BAAAA,CAAoB,CAC1B,OAAA,CAASF,CAAAA,CACT,OAAA,CAAAR,CACF,CAAC,CACH,CAAC,EACH,CACF,CAAA,CAEA,UAAA,CAAY,MAAOiB,CAAAA,CAASd,CAAAA,GAAY,CAEtC,IAAMe,CAAAA,CAAU,MADJC,2BAAAA,CAAgB,CAAE,eAAA,CAAiBV,sBAAAA,CAAW,CAAE,OAAA,CAASN,CAAkB,CAAC,EAAG,OAAA,CAAAH,CAAQ,CAAC,CAAA,CAC1E,UAAA,CAAWoB,YAAAA,CAAIH,CAAO,CAAC,CAAA,CAAE,IAAA,EAAK,CACxD,OAAO,CACL,KAAA,CAAOI,kBAAAA,CAAcH,CAAAA,CAAQ,KAAK,CAAA,CAClC,MAAA,CAAQ,KACV,CACF,EAEA,cAAA,CAAeI,CAAAA,CAAKnB,CAAAA,CAAS,CAC3B,OAAOoB,iCAAAA,CAAsBD,EAAKnB,CAAO,CAC3C,CAAA,CACA,MAAM,OAAA,CAAQc,CAAAA,CAAS,CACrB,OAAOO,gCAAAA,CAAqBP,CAAO,CACrC,CAAA,CACA,MAAM,SAAA,CAAUQ,CAAAA,CAAM,CACpB,OAAOC,kCAAAA,CAAuBD,CAAI,CACpC,CAAA,CAEA,iBAAkB,MAAOvB,CAAAA,EAAkB,CAEzC,IAAME,CAAAA,CADab,wCAAAA,GACU,IAAA,CAC1BoC,CAAAA,EAAMtB,kCAAAA,CAAyBJ,sBAAAA,CAAa,MAAA,CAAQK,6BAAAA,CAAoBqB,EAAE,IAAI,CAAC,CAAA,GAAMzB,CACxF,CAAA,CACA,GAAI,CAACE,CAAAA,CACH,MAAM,IAAI,KAAA,CAAM,CAAA,iCAAA,EAAoCF,CAAa,CAAA,CAAE,EAErE,GAAI,CACF,MAAMlB,CAAAA,CAAQoB,CAAS,EACzB,OAASwB,CAAAA,CAAG,CACV,MAAM,IAAI,KAAA,CACR,CAAA,8BAAA,EAAiC1B,CAAa,CAAA,EAAA,EAAK0B,CAAAA,YAAa,KAAA,CAAQA,CAAAA,CAAE,OAAA,CAAU,MAAA,CAAOA,CAAC,CAAC,CAAA,CAC/F,CACF,CACF,CACF,CACF","file":"index.js","sourcesContent":["import { getAvailableSolanaConnectors } from '@tuwaio/orbit-solana';\nimport type {\n StandardConnectFeature,\n StandardConnectMethod,\n StandardDisconnectFeature,\n} from '@wallet-standard/features';\nimport { StandardConnect, StandardDisconnect } from '@wallet-standard/features';\nimport { getWalletFeature, type UiWallet, UiWalletAccount } from '@wallet-standard/ui';\nimport {\n getOrCreateUiWalletAccountForStandardWalletAccount_DO_NOT_USE_OR_YOU_WILL_BE_FIRED as getOrCreateUiWalletAccountForStandardWalletAccount,\n getWalletForHandle_DO_NOT_USE_OR_YOU_WILL_BE_FIRED as getWalletForHandle,\n} from '@wallet-standard/ui-registry';\n\n/**\n * Establishes connection with a wallet using Wallet Standard\n *\n * @remarks\n * Connects to a wallet that implements the Wallet Standard interface.\n * Uses the StandardConnect feature to establish connection and retrieve accounts.\n * Converts standard wallet accounts to UI wallet accounts.\n *\n * @param uiWallet - Wallet instance implementing the UI Wallet interface\n * @param input - Optional connection parameters (excluding silent flag)\n * @returns Promise resolving to array of connected wallet accounts\n *\n * @throws {Error} If wallet doesn't support StandardConnect feature\n * @throws {Error} If connection attempt fails\n *\n * @example\n * ```typescript\n * const accounts = await connect(wallet, {\n * // Optional connection parameters\n * });\n * const firstAccount = accounts[0];\n * console.log('Connected account:', firstAccount.address);\n * ```\n */\nexport async function connect(\n uiWallet: UiWallet,\n input?: Omit<NonNullable<Parameters<StandardConnectMethod>[0]>, 'silent'>,\n): Promise<{ uiWallet: UiWallet; accounts: UiWalletAccount[] }> {\n // Get the connect feature from the wallet\n const connectFeature = getWalletFeature(uiWallet, StandardConnect) as StandardConnectFeature[typeof StandardConnect];\n // Initiate connection and get accounts\n const { accounts } = await connectFeature.connect(input);\n const wallets = getAvailableSolanaConnectors();\n // Convert accounts to UI wallet accounts\n return {\n uiWallet: wallets.filter((w) =>\n w.accounts.find((a) => a.address.toLowerCase() === accounts[0].address.toLowerCase()),\n )[0],\n accounts: accounts.map((account) =>\n getOrCreateUiWalletAccountForStandardWalletAccount(getWalletForHandle(uiWallet), account),\n ),\n };\n}\n\n/**\n * Disconnects from a connected wallet\n *\n * @remarks\n * Safely disconnects from a wallet if it supports the StandardDisconnect feature.\n * If the wallet doesn't support disconnection, the operation is silently ignored.\n *\n * @param uiWallet - Wallet instance implementing the UI Wallet interface\n * @returns Promise that resolves when disconnection is complete\n *\n * @example\n * ```typescript\n * await disconnect(wallet);\n * console.log('Wallet disconnected');\n * ```\n */\nexport async function disconnect(uiWallet: UiWallet): Promise<void> {\n // Get the disconnect feature if available\n const disconnectFeature = getWalletFeature(uiWallet, StandardDisconnect) as\n | StandardDisconnectFeature[typeof StandardDisconnect]\n | undefined;\n\n await disconnectFeature?.disconnect();\n}\n","import { formatConnectorName, getConnectorTypeFromName, OrbitAdapter } from '@tuwaio/orbit-core';\nimport {\n createSolanaRPC,\n getAvailableSolanaConnectors,\n getCluster,\n getRpcUrlForCluster,\n getSolanaAddressAvatar,\n getSolanaAddressName,\n getSolanaExplorerLink,\n SolanaRPCUrls,\n} from '@tuwaio/orbit-solana';\nimport { SatelliteAdapter } from '@tuwaio/satellite-core';\nimport { UiWallet } from '@wallet-standard/ui';\nimport { address as adr, lamportsToSol, SolanaClusterMoniker } from 'gill';\n\nimport { ConnectorSolana, SolanaConnection } from '../types';\nimport { connect, disconnect } from '../utils/connectionUtils';\n\n/**\n * Creates a Solana blockchain adapter for the Satellite Connect system\n *\n * @remarks\n * This adapter implements the SatelliteAdapter interface for Solana blockchain,\n * providing connector connection, network switching, and name resolution capabilities.\n * It uses the Wallet Standard for consistent interactions.\n *\n * @param rpcUrls - Configuration object containing RPC endpoints for different Solana networks\n * @returns SatelliteAdapter implementation for Solana\n *\n * @example\n * ```typescript\n * const solanaAdapter = satelliteSolanaAdapter({\n * rpcUrls: {\n * mainnet: 'https://api.mainnet-beta.solana.com',\n * devnet: 'https://api.devnet.solana.com',\n * testnet: 'https://api.testnet.solana.com'\n * }\n * });\n * ```\n */\nexport function satelliteSolanaAdapter({\n rpcUrls,\n}: SolanaRPCUrls): SatelliteAdapter<ConnectorSolana, SolanaConnection> {\n return {\n key: OrbitAdapter.SOLANA,\n\n async connect({ connectorType, chainId }) {\n const connectors = getAvailableSolanaConnectors();\n const connector = connectors.find(\n (connector) =>\n getConnectorTypeFromName(OrbitAdapter.SOLANA, formatConnectorName(connector.name)) === connectorType,\n );\n if (!connector) throw new Error('Cannot find connector with this wallet type');\n\n try {\n const { uiWallet, accounts: connectedAccount } = await connect(connector as UiWallet);\n const cluster = getCluster({ cluster: chainId as string });\n\n return {\n connectorType,\n address: connectedAccount[0].address,\n chainId: cluster,\n rpcURL: getRpcUrlForCluster({\n cluster: cluster as SolanaClusterMoniker,\n rpcUrls,\n }),\n isConnected: true,\n isContractAddress: false,\n icon: uiWallet?.icon?.trim(),\n connectedAccount: connectedAccount[0],\n connectedWallet: uiWallet,\n };\n } catch (e) {\n throw new Error(e instanceof Error ? e.message : String(e));\n }\n },\n\n async disconnect(activeWallet) {\n if (activeWallet && (activeWallet as SolanaConnection)?.connectedWallet) {\n await disconnect((activeWallet as SolanaConnection).connectedWallet as UiWallet);\n } else {\n const connectors = getAvailableSolanaConnectors();\n const connectedWallets = connectors.filter((wallet) => wallet.accounts.length > 0);\n await Promise.allSettled(\n connectedWallets.map(async (w) => {\n try {\n await disconnect(w);\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n } catch (e) {\n /* empty */\n }\n }),\n );\n }\n },\n\n getConnectors() {\n const connectors = getAvailableSolanaConnectors();\n return {\n adapter: OrbitAdapter.SOLANA,\n connectors: connectors as ConnectorSolana[],\n };\n },\n\n async checkAndSwitchNetwork(chainId, currentChainId, updateActiveWallet) {\n if (currentChainId !== chainId && updateActiveWallet) {\n const cluster = getCluster({ cluster: chainId as string });\n updateActiveWallet({\n chainId: cluster,\n rpcURL: getRpcUrlForCluster({\n cluster: cluster as SolanaClusterMoniker,\n rpcUrls,\n }),\n });\n }\n },\n\n getBalance: async (address, chainId) => {\n const rpc = createSolanaRPC({ rpcUrlOrMoniker: getCluster({ cluster: chainId as string }), rpcUrls });\n const balance = await rpc.getBalance(adr(address)).send();\n return {\n value: lamportsToSol(balance.value),\n symbol: 'SOL',\n };\n },\n\n getExplorerUrl(url, chainId) {\n return getSolanaExplorerLink(url, chainId);\n },\n async getName(address) {\n return getSolanaAddressName(address);\n },\n async getAvatar(name) {\n return getSolanaAddressAvatar(name);\n },\n\n switchConnection: async (connectorType) => {\n const connectors = getAvailableSolanaConnectors();\n const connector = connectors.find(\n (c) => getConnectorTypeFromName(OrbitAdapter.SOLANA, formatConnectorName(c.name)) === connectorType,\n );\n if (!connector) {\n throw new Error(`Cannot find connector with type: ${connectorType}`);\n }\n try {\n await connect(connector);\n } catch (e) {\n throw new Error(\n `Failed to switch to connector ${connectorType}: ${e instanceof Error ? e.message : String(e)}`,\n );\n }\n },\n };\n}\n"]}
package/dist/index.mjs CHANGED
@@ -1,2 +1,2 @@
1
- import {OrbitAdapter,getConnectorTypeFromName,formatConnectorName}from'@tuwaio/orbit-core';import {getAvailableSolanaConnectors,getSolanaAddressAvatar,getSolanaAddressName,getSolanaExplorerLink,createSolanaRPC,getCluster,getRpcUrlForCluster}from'@tuwaio/orbit-solana';import {address,lamportsToSol}from'gill';import {StandardConnect,StandardDisconnect}from'@wallet-standard/features';import {getWalletFeature}from'@wallet-standard/ui';import {getOrCreateUiWalletAccountForStandardWalletAccount_DO_NOT_USE_OR_YOU_WILL_BE_FIRED,getWalletForHandle_DO_NOT_USE_OR_YOU_WILL_BE_FIRED}from'@wallet-standard/ui-registry';async function S(r,t){let a=getWalletFeature(r,StandardConnect),{accounts:o}=await a.connect(t);return {uiWallet:getAvailableSolanaConnectors().filter(e=>e.accounts.find(c=>c.address.toLowerCase()===o[0].address.toLowerCase()))[0],accounts:o.map(e=>getOrCreateUiWalletAccountForStandardWalletAccount_DO_NOT_USE_OR_YOU_WILL_BE_FIRED(getWalletForHandle_DO_NOT_USE_OR_YOU_WILL_BE_FIRED(r),e))}}async function s(r){await getWalletFeature(r,StandardDisconnect)?.disconnect();}function T({rpcUrls:r}){return {key:OrbitAdapter.SOLANA,async connect({connectorType:t,chainId:a}){let n=getAvailableSolanaConnectors().find(e=>getConnectorTypeFromName(OrbitAdapter.SOLANA,formatConnectorName(e.name))===t);if(!n)throw new Error("Cannot find connector with this wallet type");try{let{uiWallet:e,accounts:c}=await S(n),u=getCluster({cluster:a});return {connectorType:t,address:c[0].address,chainId:u,rpcURL:getRpcUrlForCluster({cluster:u,rpcUrls:r}),isConnected:!0,isContractAddress:!1,icon:e?.icon?.trim(),connectedAccount:c[0],connectedWallet:e}}catch(e){throw new Error(e instanceof Error?e.message:String(e))}},async disconnect(t){if(t&&t?.connectedWallet)await s(t.connectedWallet);else {let o=getAvailableSolanaConnectors().filter(n=>n.accounts.length>0);await Promise.allSettled(o.map(async n=>{try{await s(n);}catch{}}));}},getConnectors(){let t=getAvailableSolanaConnectors();return {adapter:OrbitAdapter.SOLANA,connectors:t}},async checkAndSwitchNetwork(t,a,o){if(a!==t&&o){let n=getCluster({cluster:t});o({chainId:n,rpcURL:getRpcUrlForCluster({cluster:n,rpcUrls:r})});}},getBalance:async(t,a)=>{let n=await createSolanaRPC({rpcUrlOrMoniker:getCluster({cluster:a}),rpcUrls:r}).getBalance(address(t)).send();return {value:lamportsToSol(n.value),symbol:"SOL"}},getExplorerUrl(t,a){return getSolanaExplorerLink(t,a)},async getName(t){return getSolanaAddressName(t)},async getAvatar(t){return getSolanaAddressAvatar(t)}}}export{S as connect,s as disconnect,T as satelliteSolanaAdapter};//# sourceMappingURL=index.mjs.map
1
+ import {OrbitAdapter,getConnectorTypeFromName,formatConnectorName}from'@tuwaio/orbit-core';import {getAvailableSolanaConnectors,getSolanaAddressAvatar,getSolanaAddressName,getSolanaExplorerLink,createSolanaRPC,getCluster,getRpcUrlForCluster}from'@tuwaio/orbit-solana';import {address,lamportsToSol}from'gill';import {StandardConnect,StandardDisconnect}from'@wallet-standard/features';import {getWalletFeature}from'@wallet-standard/ui';import {getOrCreateUiWalletAccountForStandardWalletAccount_DO_NOT_USE_OR_YOU_WILL_BE_FIRED,getWalletForHandle_DO_NOT_USE_OR_YOU_WILL_BE_FIRED}from'@wallet-standard/ui-registry';async function i(r,t){let a=getWalletFeature(r,StandardConnect),{accounts:o}=await a.connect(t);return {uiWallet:getAvailableSolanaConnectors().filter(e=>e.accounts.find(c=>c.address.toLowerCase()===o[0].address.toLowerCase()))[0],accounts:o.map(e=>getOrCreateUiWalletAccountForStandardWalletAccount_DO_NOT_USE_OR_YOU_WILL_BE_FIRED(getWalletForHandle_DO_NOT_USE_OR_YOU_WILL_BE_FIRED(r),e))}}async function d(r){await getWalletFeature(r,StandardDisconnect)?.disconnect();}function $({rpcUrls:r}){return {key:OrbitAdapter.SOLANA,async connect({connectorType:t,chainId:a}){let n=getAvailableSolanaConnectors().find(e=>getConnectorTypeFromName(OrbitAdapter.SOLANA,formatConnectorName(e.name))===t);if(!n)throw new Error("Cannot find connector with this wallet type");try{let{uiWallet:e,accounts:c}=await i(n),m=getCluster({cluster:a});return {connectorType:t,address:c[0].address,chainId:m,rpcURL:getRpcUrlForCluster({cluster:m,rpcUrls:r}),isConnected:!0,isContractAddress:!1,icon:e?.icon?.trim(),connectedAccount:c[0],connectedWallet:e}}catch(e){throw new Error(e instanceof Error?e.message:String(e))}},async disconnect(t){if(t&&t?.connectedWallet)await d(t.connectedWallet);else {let o=getAvailableSolanaConnectors().filter(n=>n.accounts.length>0);await Promise.allSettled(o.map(async n=>{try{await d(n);}catch{}}));}},getConnectors(){let t=getAvailableSolanaConnectors();return {adapter:OrbitAdapter.SOLANA,connectors:t}},async checkAndSwitchNetwork(t,a,o){if(a!==t&&o){let n=getCluster({cluster:t});o({chainId:n,rpcURL:getRpcUrlForCluster({cluster:n,rpcUrls:r})});}},getBalance:async(t,a)=>{let n=await createSolanaRPC({rpcUrlOrMoniker:getCluster({cluster:a}),rpcUrls:r}).getBalance(address(t)).send();return {value:lamportsToSol(n.value),symbol:"SOL"}},getExplorerUrl(t,a){return getSolanaExplorerLink(t,a)},async getName(t){return getSolanaAddressName(t)},async getAvatar(t){return getSolanaAddressAvatar(t)},switchConnection:async t=>{let o=getAvailableSolanaConnectors().find(n=>getConnectorTypeFromName(OrbitAdapter.SOLANA,formatConnectorName(n.name))===t);if(!o)throw new Error(`Cannot find connector with type: ${t}`);try{await i(o);}catch(n){throw new Error(`Failed to switch to connector ${t}: ${n instanceof Error?n.message:String(n)}`)}}}}export{i as connect,d as disconnect,$ as satelliteSolanaAdapter};//# sourceMappingURL=index.mjs.map
2
2
  //# sourceMappingURL=index.mjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/utils/connectionUtils.ts","../src/adapters/solanaAdapter.ts"],"names":["connect","uiWallet","input","connectFeature","getWalletFeature","StandardConnect","accounts","getAvailableSolanaConnectors","w","a","account","getOrCreateUiWalletAccountForStandardWalletAccount","getWalletForHandle","disconnect","StandardDisconnect","satelliteSolanaAdapter","rpcUrls","OrbitAdapter","connectorType","chainId","connector","getConnectorTypeFromName","formatConnectorName","connectedAccount","cluster","getCluster","getRpcUrlForCluster","activeWallet","connectedWallets","wallet","connectors","currentChainId","updateActiveWallet","address","balance","createSolanaRPC","adr","lamportsToSol","url","getSolanaExplorerLink","getSolanaAddressName","name","getSolanaAddressAvatar"],"mappings":"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","file":"index.mjs","sourcesContent":["import { getAvailableSolanaConnectors } from '@tuwaio/orbit-solana';\nimport type {\n StandardConnectFeature,\n StandardConnectMethod,\n StandardDisconnectFeature,\n} from '@wallet-standard/features';\nimport { StandardConnect, StandardDisconnect } from '@wallet-standard/features';\nimport { getWalletFeature, type UiWallet, UiWalletAccount } from '@wallet-standard/ui';\nimport {\n getOrCreateUiWalletAccountForStandardWalletAccount_DO_NOT_USE_OR_YOU_WILL_BE_FIRED as getOrCreateUiWalletAccountForStandardWalletAccount,\n getWalletForHandle_DO_NOT_USE_OR_YOU_WILL_BE_FIRED as getWalletForHandle,\n} from '@wallet-standard/ui-registry';\n\n/**\n * Establishes connection with a wallet using Wallet Standard\n *\n * @remarks\n * Connects to a wallet that implements the Wallet Standard interface.\n * Uses the StandardConnect feature to establish connection and retrieve accounts.\n * Converts standard wallet accounts to UI wallet accounts.\n *\n * @param uiWallet - Wallet instance implementing the UI Wallet interface\n * @param input - Optional connection parameters (excluding silent flag)\n * @returns Promise resolving to array of connected wallet accounts\n *\n * @throws {Error} If wallet doesn't support StandardConnect feature\n * @throws {Error} If connection attempt fails\n *\n * @example\n * ```typescript\n * const accounts = await connect(wallet, {\n * // Optional connection parameters\n * });\n * const firstAccount = accounts[0];\n * console.log('Connected account:', firstAccount.address);\n * ```\n */\nexport async function connect(\n uiWallet: UiWallet,\n input?: Omit<NonNullable<Parameters<StandardConnectMethod>[0]>, 'silent'>,\n): Promise<{ uiWallet: UiWallet; accounts: UiWalletAccount[] }> {\n // Get the connect feature from the wallet\n const connectFeature = getWalletFeature(uiWallet, StandardConnect) as StandardConnectFeature[typeof StandardConnect];\n // Initiate connection and get accounts\n const { accounts } = await connectFeature.connect(input);\n const wallets = getAvailableSolanaConnectors();\n // Convert accounts to UI wallet accounts\n return {\n uiWallet: wallets.filter((w) =>\n w.accounts.find((a) => a.address.toLowerCase() === accounts[0].address.toLowerCase()),\n )[0],\n accounts: accounts.map((account) =>\n getOrCreateUiWalletAccountForStandardWalletAccount(getWalletForHandle(uiWallet), account),\n ),\n };\n}\n\n/**\n * Disconnects from a connected wallet\n *\n * @remarks\n * Safely disconnects from a wallet if it supports the StandardDisconnect feature.\n * If the wallet doesn't support disconnection, the operation is silently ignored.\n *\n * @param uiWallet - Wallet instance implementing the UI Wallet interface\n * @returns Promise that resolves when disconnection is complete\n *\n * @example\n * ```typescript\n * await disconnect(wallet);\n * console.log('Wallet disconnected');\n * ```\n */\nexport async function disconnect(uiWallet: UiWallet): Promise<void> {\n // Get the disconnect feature if available\n const disconnectFeature = getWalletFeature(uiWallet, StandardDisconnect) as\n | StandardDisconnectFeature[typeof StandardDisconnect]\n | undefined;\n\n await disconnectFeature?.disconnect();\n}\n","import { formatConnectorName, getConnectorTypeFromName, OrbitAdapter } from '@tuwaio/orbit-core';\nimport {\n createSolanaRPC,\n getAvailableSolanaConnectors,\n getCluster,\n getRpcUrlForCluster,\n getSolanaAddressAvatar,\n getSolanaAddressName,\n getSolanaExplorerLink,\n SolanaRPCUrls,\n} from '@tuwaio/orbit-solana';\nimport { SatelliteAdapter } from '@tuwaio/satellite-core';\nimport { UiWallet } from '@wallet-standard/ui';\nimport { address as adr, lamportsToSol, SolanaClusterMoniker } from 'gill';\n\nimport { ConnectorSolana, SolanaConnection } from '../types';\nimport { connect, disconnect } from '../utils/connectionUtils';\n\n/**\n * Creates a Solana blockchain adapter for the Satellite Connect system\n *\n * @remarks\n * This adapter implements the SatelliteAdapter interface for Solana blockchain,\n * providing connector connection, network switching, and name resolution capabilities.\n * It uses the Wallet Standard for consistent interactions.\n *\n * @param rpcUrls - Configuration object containing RPC endpoints for different Solana networks\n * @returns SatelliteAdapter implementation for Solana\n *\n * @example\n * ```typescript\n * const solanaAdapter = satelliteSolanaAdapter({\n * rpcUrls: {\n * mainnet: 'https://api.mainnet-beta.solana.com',\n * devnet: 'https://api.devnet.solana.com',\n * testnet: 'https://api.testnet.solana.com'\n * }\n * });\n * ```\n */\nexport function satelliteSolanaAdapter({\n rpcUrls,\n}: SolanaRPCUrls): SatelliteAdapter<ConnectorSolana, SolanaConnection> {\n return {\n key: OrbitAdapter.SOLANA,\n\n async connect({ connectorType, chainId }) {\n const connectors = getAvailableSolanaConnectors();\n const connector = connectors.find(\n (connector) =>\n getConnectorTypeFromName(OrbitAdapter.SOLANA, formatConnectorName(connector.name)) === connectorType,\n );\n if (!connector) throw new Error('Cannot find connector with this wallet type');\n\n try {\n const { uiWallet, accounts: connectedAccount } = await connect(connector as UiWallet);\n const cluster = getCluster({ cluster: chainId as string });\n\n return {\n connectorType,\n address: connectedAccount[0].address,\n chainId: cluster,\n rpcURL: getRpcUrlForCluster({\n cluster: cluster as SolanaClusterMoniker,\n rpcUrls,\n }),\n isConnected: true,\n isContractAddress: false,\n icon: uiWallet?.icon?.trim(),\n connectedAccount: connectedAccount[0],\n connectedWallet: uiWallet,\n };\n } catch (e) {\n throw new Error(e instanceof Error ? e.message : String(e));\n }\n },\n\n async disconnect(activeWallet) {\n if (activeWallet && (activeWallet as SolanaConnection)?.connectedWallet) {\n await disconnect((activeWallet as SolanaConnection).connectedWallet as UiWallet);\n } else {\n const connectors = getAvailableSolanaConnectors();\n const connectedWallets = connectors.filter((wallet) => wallet.accounts.length > 0);\n await Promise.allSettled(\n connectedWallets.map(async (w) => {\n try {\n await disconnect(w);\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n } catch (e) {\n /* empty */\n }\n }),\n );\n }\n },\n\n getConnectors() {\n const connectors = getAvailableSolanaConnectors();\n return {\n adapter: OrbitAdapter.SOLANA,\n connectors: connectors as ConnectorSolana[],\n };\n },\n\n async checkAndSwitchNetwork(chainId, currentChainId, updateActiveWallet) {\n if (currentChainId !== chainId && updateActiveWallet) {\n const cluster = getCluster({ cluster: chainId as string });\n updateActiveWallet({\n chainId: cluster,\n rpcURL: getRpcUrlForCluster({\n cluster: cluster as SolanaClusterMoniker,\n rpcUrls,\n }),\n });\n }\n },\n\n getBalance: async (address, chainId) => {\n const rpc = createSolanaRPC({ rpcUrlOrMoniker: getCluster({ cluster: chainId as string }), rpcUrls });\n const balance = await rpc.getBalance(adr(address)).send();\n return {\n value: lamportsToSol(balance.value),\n symbol: 'SOL',\n };\n },\n\n getExplorerUrl(url, chainId) {\n return getSolanaExplorerLink(url, chainId);\n },\n async getName(address) {\n return getSolanaAddressName(address);\n },\n async getAvatar(name) {\n return getSolanaAddressAvatar(name);\n },\n };\n}\n"]}
1
+ {"version":3,"sources":["../src/utils/connectionUtils.ts","../src/adapters/solanaAdapter.ts"],"names":["connect","uiWallet","input","connectFeature","getWalletFeature","StandardConnect","accounts","getAvailableSolanaConnectors","w","a","account","getOrCreateUiWalletAccountForStandardWalletAccount","getWalletForHandle","disconnect","StandardDisconnect","satelliteSolanaAdapter","rpcUrls","OrbitAdapter","connectorType","chainId","connector","getConnectorTypeFromName","formatConnectorName","connectedAccount","cluster","getCluster","getRpcUrlForCluster","activeWallet","connectedWallets","wallet","connectors","currentChainId","updateActiveWallet","address","balance","createSolanaRPC","adr","lamportsToSol","url","getSolanaExplorerLink","getSolanaAddressName","name","getSolanaAddressAvatar","c","e"],"mappings":"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","file":"index.mjs","sourcesContent":["import { getAvailableSolanaConnectors } from '@tuwaio/orbit-solana';\nimport type {\n StandardConnectFeature,\n StandardConnectMethod,\n StandardDisconnectFeature,\n} from '@wallet-standard/features';\nimport { StandardConnect, StandardDisconnect } from '@wallet-standard/features';\nimport { getWalletFeature, type UiWallet, UiWalletAccount } from '@wallet-standard/ui';\nimport {\n getOrCreateUiWalletAccountForStandardWalletAccount_DO_NOT_USE_OR_YOU_WILL_BE_FIRED as getOrCreateUiWalletAccountForStandardWalletAccount,\n getWalletForHandle_DO_NOT_USE_OR_YOU_WILL_BE_FIRED as getWalletForHandle,\n} from '@wallet-standard/ui-registry';\n\n/**\n * Establishes connection with a wallet using Wallet Standard\n *\n * @remarks\n * Connects to a wallet that implements the Wallet Standard interface.\n * Uses the StandardConnect feature to establish connection and retrieve accounts.\n * Converts standard wallet accounts to UI wallet accounts.\n *\n * @param uiWallet - Wallet instance implementing the UI Wallet interface\n * @param input - Optional connection parameters (excluding silent flag)\n * @returns Promise resolving to array of connected wallet accounts\n *\n * @throws {Error} If wallet doesn't support StandardConnect feature\n * @throws {Error} If connection attempt fails\n *\n * @example\n * ```typescript\n * const accounts = await connect(wallet, {\n * // Optional connection parameters\n * });\n * const firstAccount = accounts[0];\n * console.log('Connected account:', firstAccount.address);\n * ```\n */\nexport async function connect(\n uiWallet: UiWallet,\n input?: Omit<NonNullable<Parameters<StandardConnectMethod>[0]>, 'silent'>,\n): Promise<{ uiWallet: UiWallet; accounts: UiWalletAccount[] }> {\n // Get the connect feature from the wallet\n const connectFeature = getWalletFeature(uiWallet, StandardConnect) as StandardConnectFeature[typeof StandardConnect];\n // Initiate connection and get accounts\n const { accounts } = await connectFeature.connect(input);\n const wallets = getAvailableSolanaConnectors();\n // Convert accounts to UI wallet accounts\n return {\n uiWallet: wallets.filter((w) =>\n w.accounts.find((a) => a.address.toLowerCase() === accounts[0].address.toLowerCase()),\n )[0],\n accounts: accounts.map((account) =>\n getOrCreateUiWalletAccountForStandardWalletAccount(getWalletForHandle(uiWallet), account),\n ),\n };\n}\n\n/**\n * Disconnects from a connected wallet\n *\n * @remarks\n * Safely disconnects from a wallet if it supports the StandardDisconnect feature.\n * If the wallet doesn't support disconnection, the operation is silently ignored.\n *\n * @param uiWallet - Wallet instance implementing the UI Wallet interface\n * @returns Promise that resolves when disconnection is complete\n *\n * @example\n * ```typescript\n * await disconnect(wallet);\n * console.log('Wallet disconnected');\n * ```\n */\nexport async function disconnect(uiWallet: UiWallet): Promise<void> {\n // Get the disconnect feature if available\n const disconnectFeature = getWalletFeature(uiWallet, StandardDisconnect) as\n | StandardDisconnectFeature[typeof StandardDisconnect]\n | undefined;\n\n await disconnectFeature?.disconnect();\n}\n","import { formatConnectorName, getConnectorTypeFromName, OrbitAdapter } from '@tuwaio/orbit-core';\nimport {\n createSolanaRPC,\n getAvailableSolanaConnectors,\n getCluster,\n getRpcUrlForCluster,\n getSolanaAddressAvatar,\n getSolanaAddressName,\n getSolanaExplorerLink,\n SolanaRPCUrls,\n} from '@tuwaio/orbit-solana';\nimport { SatelliteAdapter } from '@tuwaio/satellite-core';\nimport { UiWallet } from '@wallet-standard/ui';\nimport { address as adr, lamportsToSol, SolanaClusterMoniker } from 'gill';\n\nimport { ConnectorSolana, SolanaConnection } from '../types';\nimport { connect, disconnect } from '../utils/connectionUtils';\n\n/**\n * Creates a Solana blockchain adapter for the Satellite Connect system\n *\n * @remarks\n * This adapter implements the SatelliteAdapter interface for Solana blockchain,\n * providing connector connection, network switching, and name resolution capabilities.\n * It uses the Wallet Standard for consistent interactions.\n *\n * @param rpcUrls - Configuration object containing RPC endpoints for different Solana networks\n * @returns SatelliteAdapter implementation for Solana\n *\n * @example\n * ```typescript\n * const solanaAdapter = satelliteSolanaAdapter({\n * rpcUrls: {\n * mainnet: 'https://api.mainnet-beta.solana.com',\n * devnet: 'https://api.devnet.solana.com',\n * testnet: 'https://api.testnet.solana.com'\n * }\n * });\n * ```\n */\nexport function satelliteSolanaAdapter({\n rpcUrls,\n}: SolanaRPCUrls): SatelliteAdapter<ConnectorSolana, SolanaConnection> {\n return {\n key: OrbitAdapter.SOLANA,\n\n async connect({ connectorType, chainId }) {\n const connectors = getAvailableSolanaConnectors();\n const connector = connectors.find(\n (connector) =>\n getConnectorTypeFromName(OrbitAdapter.SOLANA, formatConnectorName(connector.name)) === connectorType,\n );\n if (!connector) throw new Error('Cannot find connector with this wallet type');\n\n try {\n const { uiWallet, accounts: connectedAccount } = await connect(connector as UiWallet);\n const cluster = getCluster({ cluster: chainId as string });\n\n return {\n connectorType,\n address: connectedAccount[0].address,\n chainId: cluster,\n rpcURL: getRpcUrlForCluster({\n cluster: cluster as SolanaClusterMoniker,\n rpcUrls,\n }),\n isConnected: true,\n isContractAddress: false,\n icon: uiWallet?.icon?.trim(),\n connectedAccount: connectedAccount[0],\n connectedWallet: uiWallet,\n };\n } catch (e) {\n throw new Error(e instanceof Error ? e.message : String(e));\n }\n },\n\n async disconnect(activeWallet) {\n if (activeWallet && (activeWallet as SolanaConnection)?.connectedWallet) {\n await disconnect((activeWallet as SolanaConnection).connectedWallet as UiWallet);\n } else {\n const connectors = getAvailableSolanaConnectors();\n const connectedWallets = connectors.filter((wallet) => wallet.accounts.length > 0);\n await Promise.allSettled(\n connectedWallets.map(async (w) => {\n try {\n await disconnect(w);\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n } catch (e) {\n /* empty */\n }\n }),\n );\n }\n },\n\n getConnectors() {\n const connectors = getAvailableSolanaConnectors();\n return {\n adapter: OrbitAdapter.SOLANA,\n connectors: connectors as ConnectorSolana[],\n };\n },\n\n async checkAndSwitchNetwork(chainId, currentChainId, updateActiveWallet) {\n if (currentChainId !== chainId && updateActiveWallet) {\n const cluster = getCluster({ cluster: chainId as string });\n updateActiveWallet({\n chainId: cluster,\n rpcURL: getRpcUrlForCluster({\n cluster: cluster as SolanaClusterMoniker,\n rpcUrls,\n }),\n });\n }\n },\n\n getBalance: async (address, chainId) => {\n const rpc = createSolanaRPC({ rpcUrlOrMoniker: getCluster({ cluster: chainId as string }), rpcUrls });\n const balance = await rpc.getBalance(adr(address)).send();\n return {\n value: lamportsToSol(balance.value),\n symbol: 'SOL',\n };\n },\n\n getExplorerUrl(url, chainId) {\n return getSolanaExplorerLink(url, chainId);\n },\n async getName(address) {\n return getSolanaAddressName(address);\n },\n async getAvatar(name) {\n return getSolanaAddressAvatar(name);\n },\n\n switchConnection: async (connectorType) => {\n const connectors = getAvailableSolanaConnectors();\n const connector = connectors.find(\n (c) => getConnectorTypeFromName(OrbitAdapter.SOLANA, formatConnectorName(c.name)) === connectorType,\n );\n if (!connector) {\n throw new Error(`Cannot find connector with type: ${connectorType}`);\n }\n try {\n await connect(connector);\n } catch (e) {\n throw new Error(\n `Failed to switch to connector ${connectorType}: ${e instanceof Error ? e.message : String(e)}`,\n );\n }\n },\n };\n}\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@tuwaio/satellite-solana",
3
- "version": "1.0.0-fix-packages-alpha.16.1695102",
3
+ "version": "1.0.0-fix-packages-alpha.18.f5a3360",
4
4
  "private": false,
5
5
  "author": "Oleksandr Tkach",
6
6
  "license": "Apache-2.0",
@@ -67,7 +67,7 @@
67
67
  "typescript": "^5.9.3",
68
68
  "vitest": "^4.0.13",
69
69
  "zustand": "^5.0.8",
70
- "@tuwaio/satellite-core": "^1.0.0-fix-packages-alpha.16.1695102"
70
+ "@tuwaio/satellite-core": "^1.0.0-fix-packages-alpha.18.f5a3360"
71
71
  },
72
72
  "scripts": {
73
73
  "start": "tsup src/index.ts --watch",