require(`../../../_virtual/_rolldown/runtime.cjs`);const e=require(`../constants/chains.constants.cjs`),t=require(`../error-handling/error-codes.constants.cjs`),n=require(`../functions/utils/create-provider.cjs`);let r=require(`@coral-xyz/anchor`);var i=class{chainId;connection;wallet;ethereumAddress;connectHandler;disconnectHandler;chainEventListener;anchorProvider;constructor(t,r){let i=e.networkRegistry[t].fetchRpcUrl;if(!i)throw Error(`RPC URL not found for the specified chain ID`);this.connection=n.createCustomSolanaConnection(i),this.chainId=t,this.ethereumAddress=r}initConnector(e){this.wallet=e,this.initializeAnchorProvider()}async init(e){e&&(this.chainId=e)}async connectToConnector(){return this.chainId??0}async disconnectFromConnector(){}async connectAndPatchProvider(){if(!this.chainId)throw Error(`No Chain Id In Provider Adapter`);return this.chainId}getChainId(){return this.chainId}async waitForTransaction(e,n,r){try{return(await this.connection.confirmTransaction(n,`confirmed`)).value.err===null}catch{throw Error(t.transactionErrorCodes.TRANSACTION_NOT_CONFIRMED)}}async signMessage(e){if(!this.wallet?.signMessage)throw Error(t.transactionErrorCodes.SIGNING_FAILED);let n=typeof e==`string`?new TextEncoder().encode(e):e,{signature:r}=await this.wallet.signMessage(n,`utf8`);if(!r)throw Error(t.transactionErrorCodes.SIGNING_FAILED);return`0x${Buffer.from(r).toString(`hex`)}`}async signTransactionWithoutBroadcast(e){if(!this.wallet)throw Error(t.transactionErrorCodes.SIGNING_FAILED);let n=await this.wallet.signTransaction(e),r=Buffer.from(n.serializeMessage()).toString(`base64`),i=n.signatures.find(({publicKey:e})=>e.equals(this.wallet.publicKey))?.signature;if(!i)throw Error(t.transactionErrorCodes.SIGNING_FAILED);return{signature:`0x${Buffer.from(i).toString(`hex`)}`,transactionMessageB64:r}}async getAddress(){let e=this.ethereumAddress??this.wallet?.publicKey.toString();if(!e)throw Error(`IllegalState`);return e}setChainEventListener(e){this.chainEventListener=e,this.setupWalletListeners()}async switchNetwork(e){this.chainEventListener?.onChainChanged(e.chainId)}async signTypedData(e,t,n){throw Error(`Typed data signing not supported on Solana`)}async onAccountChanged(){return this.init()}async onChainChanged(e){return this.init(e)}release(){this.removeWalletListeners(),this.chainEventListener=void 0}getContract(e,t,n,r){throw Error(`Not implemented from SolanaProviderAdapter`)}getContractWithSigner(e,t,n){throw Error(`Not implemented from SolanaProviderAdapter`)}getContractWithFetcher(e,t,n){throw Error(`Not implemented from SolanaProviderAdapter`)}async sendTransaction(e){throw Error(`Not implemented from SolanaProviderAdapter`)}async getGasPrice(e){throw Error(`Not implemented from SolanaProviderAdapter`)}isPermitterAvailable(){return!1}getConnection(){return this.connection}initializeAnchorProvider(){if(!this.wallet)throw Error(`No wallet provided`);return this.anchorProvider=new r.AnchorProvider(this.connection,this.wallet,{preflightCommitment:`confirmed`,commitment:`confirmed`}),this.anchorProvider}getAnchorProvider(){return this.anchorProvider??this.initializeAnchorProvider()}getSolanaProgram(e){return new r.Program(e,this.getAnchorProvider())}getSolanaPublicKey(){if(!this.wallet)throw Error(`No wallet provided`);return this.wallet.publicKey}setupWalletListeners(){!this.wallet?.adapter||!this.chainEventListener||(this.connectHandler=e=>{if(!e){this.chainEventListener?.onChainChanged();return}if(!this.wallet)throw Error(`No wallet provided`);this.wallet={...this.wallet,publicKey:e},this.anchorProvider=new r.AnchorProvider(this.connection,this.wallet,{preflightCommitment:`confirmed`,commitment:`confirmed`}),this.chainEventListener?.onAccountChanged()},this.disconnectHandler=()=>{this.chainEventListener?.onChainChanged()},this.wallet.adapter.on(`connect`,this.connectHandler),this.wallet.adapter.on(`disconnect`,this.disconnectHandler))}removeWalletListeners(){this.wallet?.adapter&&this.connectHandler&&this.wallet.adapter.off(`connect`,this.connectHandler),this.wallet?.adapter&&this.disconnectHandler&&this.wallet.adapter.off(`disconnect`,this.disconnectHandler),this.connectHandler=void 0,this.disconnectHandler=void 0}isSolanaLedger(){if(!this.wallet)throw Error(`No wallet provided`);return this.wallet.isLedger??!1}},a=(e,t)=>new i(e,t);exports.SolanaProviderAdapter=i,exports.default=a;