@mojito-inc/secondary-market
Version:
Mojito secondary market is the platform to purchase NFT.
2 lines (1 loc) • 5.24 kB
JavaScript
import{Transaction as e,ComputeBudgetProgram as i,LAMPORTS_PER_SOL as n,PublicKey as a,Connection as t,clusterApiUrl as o,TransactionInstruction as r}from"@solana/web3.js";import{ErrorsType as s}from"../constant/index.js";import{getSolanaEnvByChainId as l}from"./getEtherScanURL.utils.js";import{customErrorMessage as c}from"./customErrorMessage.utils.js";import{getSolanaBalance as u}from"./getSolanaBalance.utils.js";import{fetchSolanaPriorityFee as d}from"./fetchSolanaPriorityFee.utils.js";const v=async(v,f,m,g,h,p,w,y,b,k,E=.00228288)=>{var S,T,j,I,R,B,L,C,D,P,U,F,O,_,x;try{if(!m)return{success:!1,error:"Your wallet session has been closed. Please reconnect your wallet to continue."};const f=l(p),_=await u(v,f,b),{err:x,instruction:A,connectedPublicKey:M,connection:W}=await(async(e,i,n,s,u,d)=>{var v,f,m,g,h;try{const i=new a(e),c=l(n),p=new t(d||o(c),{confirmTransactionInitialTimeout:3e5,commitment:"confirmed"}),w=new a(null!==(v=null==u?void 0:u.offer)&&void 0!==v?v:""),y=new a(null!==(f=null==u?void 0:u.offerEscrow)&&void 0!==f?f:""),b=new a(null!==(m=null==u?void 0:u.systemProgram)&&void 0!==m?m:""),k=new a(null!==(g=null==u?void 0:u.buyer)&&void 0!==g?g:""),E=new a((null==u?void 0:u.mintAccount)||s);return{instruction:new r({programId:y,keys:[{pubkey:i,isSigner:!0,isWritable:!0},{pubkey:k,isSigner:!1,isWritable:!0},{pubkey:E,isSigner:!1,isWritable:!0},{pubkey:w,isSigner:!1,isWritable:!0},{pubkey:b,isSigner:!1,isWritable:!0}],data:Buffer.concat([Buffer.from(null!==(h=null==u?void 0:u.descriminator)&&void 0!==h?h:[])])}),connectedPublicKey:i,connection:p,err:null}}catch(e){return{err:c(e)}}})(v,0,p,w,y,b);if(!x&&A){if("phantom"===g.toLowerCase()||"backpack"===g.toLowerCase()){const a=new e({feePayer:M}).add(A),t=await W.getLatestBlockhash("confirmed");a.recentBlockhash=t.blockhash,a.lastValidBlockHeight=t.lastValidBlockHeight,a.add(i.setComputeUnitLimit({units:14e5}));const o=await d(b,a.serialize({verifySignatures:!1})),r=i.setComputeUnitPrice({microLamports:o});a.add(r);const l=await W.getFeeForMessage(a.compileMessage(),"confirmed"),u=(null!==(S=null==l?void 0:l.value)&&void 0!==S?S:0)+E*n,f=_.native*n;if(f<=0||f<u)return{success:!1,error:"Insufficient SOL for initiating the transaction."};try{h("Initiating reject offer transaction.");const e=await(null===(j=null===(T=null==m?void 0:m.adapter)||void 0===T?void 0:T.sendTransaction)||void 0===j?void 0:j.call(T,a,W,{skipPreflight:!0,preflightCommitment:"confirmed"}));await W.confirmTransaction(Object.assign({signature:e},t),"confirmed");const i=await W.getSignatureStatus(e);return null===(null===(I=null==i?void 0:i.value)||void 0===I?void 0:I.err)?{success:!0,response:{hash:e}}:{success:!1,error:"Transaction Failed"}}catch(e){return(null===(B=null===(R=null==e?void 0:e.message)||void 0===R?void 0:R.includes)||void 0===B?void 0:B.call(R,s.USER_REJECTED))||(null===(L=null==e?void 0:e.includes)||void 0===L?void 0:L.call(e,s.USER_REJECTED))||(null===(C=null==e?void 0:e.includes)||void 0===C?void 0:C.call(e,s.USER_DENIED))||(null===(P=null===(D=null==e?void 0:e.message)||void 0===D?void 0:D.includes)||void 0===P?void 0:P.call(D,s.USER_DENIED))?{success:!1,error:"Transaction has been cancelled by user"}:(null==k||k({key:"Additional Data",value:{address:v,balance:_,providerType:g,chainId:p,path:"Inside an Reject offer solana contract function - 165"}},{exception:e}),{success:!1,error:c(e)})}}if("magic"===g.toLowerCase()){const a=await(null==W?void 0:W.getLatestBlockhash("confirmed")),t=new e(Object.assign(Object.assign({},a),{feePayer:M})).add(A),o=await W.getLatestBlockhash("confirmed");t.recentBlockhash=o.blockhash,t.lastValidBlockHeight=o.lastValidBlockHeight,t.add(i.setComputeUnitLimit({units:14e5}));const r=await d(b,t.serialize({verifySignatures:!1})),s=i.setComputeUnitPrice({microLamports:r});t.add(s);const l=await W.getFeeForMessage(t.compileMessage(),"confirmed"),c=(null!==(U=null==l?void 0:l.value)&&void 0!==U?U:0)+E*n,u=_.native*n;if(u<=0||u<c)return{success:!1,error:"Insufficient SOL for initiating the transaction."};h("Initiating reject offer transaction.");const v=await(null===(F=null==m?void 0:m.solana)||void 0===F?void 0:F.signTransaction(t,{requireAllSignatures:!1,verifySignatures:!0})),f=await W.sendRawTransaction(Buffer.from(v.rawTransaction,"base64"),{skipPreflight:!0,preflightCommitment:"confirmed"});await W.confirmTransaction(Object.assign({signature:f},o),"confirmed");const g=await W.getSignatureStatus(f);return null===(null===(O=null==g?void 0:g.value)||void 0===O?void 0:O.err)?{success:!0,response:{hash:f}}:{success:!1,error:"Transaction Failed"}}}return x?(null==k||k({key:"Additional Data",value:{address:v,balance:_,providerType:g,chainId:p,path:"Inside an Reject offer solana contract function - 243"}},{exception:x}),{success:!1,error:c(x)}):null}catch(e){return(null===(_=e.message)||void 0===_?void 0:_.includes(s.USER_REJECTED))||(null===(x=e.message)||void 0===x?void 0:x.includes(s.USER_DENIED))?{success:!1,error:"Transaction has been cancelled by user"}:(null==k||k({key:"Additional Data",value:{address:v,providerType:g,chainId:p,path:"Inside an Reject offer solana contract function - 270"}},{exception:e}),{success:!1,error:c(e)})}};export{v as rejectOfferSolana};