@micro-cms/crypto-payments 1.0.30 → 1.0.32
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/SolanaProvider-NYVHYJTF.mjs +2 -0
- package/dist/SolanaProvider-NYVHYJTF.mjs.map +1 -0
- package/dist/index.d.mts +1 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +1 -1
- package/dist/index.mjs.map +1 -1
- package/package.json +1 -1
- package/dist/SolanaProvider-ENB75WTB.mjs +0 -2
- package/dist/SolanaProvider-ENB75WTB.mjs.map +0 -1
package/package.json
CHANGED
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import"./chunk-73SFLUWV.mjs";import{Connection as S,PublicKey as r,Transaction as A,SystemProgram as b,LAMPORTS_PER_SOL as E}from"@solana/web3.js";import{TOKEN_PROGRAM_ID as M,createTransferInstruction as I,getMint as N}from"@solana/spl-token";var k=new r("4zMMC9srt5Ri5X14GAgXhaHii3GnPAEERYPJgZJDncDU"),C=new r("EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v"),_=()=>{let s=()=>{if(typeof window<"u"&&"solana"in window){let n=window;if(n.solana?.isPhantom)return n.solana}},w=async()=>{let n=s();if(n)try{return(await n.connect()).publicKey.toString()}catch{throw new Error("User rejected the connection")}else throw new Error("Phantom wallet not found")},m=async n=>{let o=s();if(!o)throw new Error("Wallet not connected");try{let t=!window.location.host.includes("localhost")&&!window.location.host.includes("dev."),u=t?"https://api.mainnet-beta.solana.com":"https://api.devnet.solana.com",i=new S(u,"confirmed"),h=await o.connect({onlyIfTrusted:!0}),a=new r(h.publicKey.toString()),d=new r(n.paymentAddress),e=new A;if(n.currency?.toUpperCase()==="USDC"){let c=t?C:k,f=await N(i,c),P=Math.round(Number(n.amount)*Math.pow(10,f.decimals)),{getAssociatedTokenAddress:l}=await import("@solana/spl-token"),g=await l(c,a),T=await l(c,d);e.add(I(g,T,a,P,[],M))}else e.add(b.transfer({fromPubkey:a,toPubkey:d,lamports:Math.round(Number(n.amount)*E)}));let{blockhash:p}=await i.getLatestBlockhash();e.recentBlockhash=p,e.feePayer=a;let{signature:y}=await o.signAndSendTransaction(e);return y}catch(t){throw console.error("Solana Transaction Error:",t),t.message?.includes("User rejected")?new Error("Transaction rejected by user"):new Error(t.message||"Failed to send Solana transaction")}};return{isAvailable:!!s(),connect:w,sendPayment:m}};export{_ as useSolanaWallet};
|
|
2
|
-
//# sourceMappingURL=SolanaProvider-ENB75WTB.mjs.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/providers/SolanaProvider.ts"],"sourcesContent":["import { PaymentIntent } from '@micro-cms/types';\nimport { \n Connection, \n PublicKey, \n Transaction, \n SystemProgram, \n LAMPORTS_PER_SOL \n} from '@solana/web3.js';\nimport { \n TOKEN_PROGRAM_ID, \n getOrCreateAssociatedTokenAccount, \n createTransferInstruction, \n getMint \n} from '@solana/spl-token';\n\nexport interface SolanaWindow extends Window {\n solana?: {\n isPhantom?: boolean;\n connect: (options?: { onlyIfTrusted?: boolean }) => Promise<{ publicKey: { toString: () => string } }>;\n signTransaction: (transaction: Transaction) => Promise<Transaction>;\n signAndSendTransaction: (transaction: Transaction) => Promise<{ signature: string }>;\n request: (request: { method: string; params?: any }) => Promise<any>;\n };\n}\n\n// USDC Mint Addresses\nconst USDC_MINT_DEVNET = new PublicKey('4zMMC9srt5Ri5X14GAgXhaHii3GnPAEERYPJgZJDncDU');\nconst USDC_MINT_MAINNET = new PublicKey('EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v');\n\nexport const useSolanaWallet = () => {\n const getProvider = (): (SolanaWindow['solana']) => {\n if (typeof window !== 'undefined' && 'solana' in window) {\n const anyWindow = window as SolanaWindow;\n if (anyWindow.solana?.isPhantom) {\n return anyWindow.solana;\n }\n }\n return undefined;\n };\n\n const connect = async () => {\n const provider = getProvider();\n if (provider) {\n try {\n const resp = await provider.connect();\n return resp.publicKey.toString();\n } catch (err) {\n throw new Error('User rejected the connection');\n }\n } else {\n throw new Error('Phantom wallet not found');\n }\n };\n\n const sendPayment = async (intent: PaymentIntent) => {\n const provider = getProvider();\n if (!provider) throw new Error('Wallet not connected');\n\n try {\n // Determine if this is a Devnet or Mainnet transaction\n const isMainnet = !window.location.host.includes('localhost') && !window.location.host.includes('dev.');\n const rpcUrl = isMainnet ? 'https://api.mainnet-beta.solana.com' : 'https://api.devnet.solana.com';\n const connection = new Connection(rpcUrl, 'confirmed');\n \n const accounts = await provider.connect({ onlyIfTrusted: true });\n const fromPubkey = new PublicKey(accounts.publicKey.toString());\n const toPubkey = new PublicKey(intent.paymentAddress);\n\n const transaction = new Transaction();\n\n // Handle USDC vs SOL\n if (intent.currency?.toUpperCase() === 'USDC') {\n const mintAddress = isMainnet ? USDC_MINT_MAINNET : USDC_MINT_DEVNET;\n \n // 1. Get decimals from mint (USDC is usually 6)\n const mintInfo = await getMint(connection, mintAddress);\n const amount = Math.round(Number(intent.amount) * Math.pow(10, mintInfo.decimals));\n\n // Note: For production use with real Phantom, we'd need to handle ATA creation carefully.\n // For simplicity in the widget, we assume the destination has an ATA.\n // We'll use the browser wallet's signAndSendTransaction.\n\n // In a real-world scenario, you'd use getAssociatedTokenAddress for sender and receiver.\n // We need to fetch/create the receiver's ATA if it doesn't exist.\n // Since we can't easily sign for the fee of creating receiver ATA in the widget without knowing the fee payer's full context,\n // we'll use a simplified version for now.\n\n // Get Associated Token Addresses\n const { getAssociatedTokenAddress } = await import('@solana/spl-token');\n const fromAta = await getAssociatedTokenAddress(mintAddress, fromPubkey);\n const toAta = await getAssociatedTokenAddress(mintAddress, toPubkey);\n\n transaction.add(\n createTransferInstruction(\n fromAta,\n toAta,\n fromPubkey,\n amount,\n [],\n TOKEN_PROGRAM_ID\n )\n );\n } else {\n // Fallback to Native SOL\n transaction.add(\n SystemProgram.transfer({\n fromPubkey,\n toPubkey,\n lamports: Math.round(Number(intent.amount) * LAMPORTS_PER_SOL),\n })\n );\n }\n\n // 3. Set latest blockhash\n const { blockhash } = await connection.getLatestBlockhash();\n transaction.recentBlockhash = blockhash;\n transaction.feePayer = fromPubkey;\n\n // 4. Sign and Send\n const { signature } = await provider.signAndSendTransaction(transaction);\n \n return signature;\n } catch (err: any) {\n console.error('Solana Transaction Error:', err);\n if (err.message?.includes('User rejected')) {\n throw new Error('Transaction rejected by user');\n }\n throw new Error(err.message || 'Failed to send Solana transaction');\n }\n };\n\n return { isAvailable: !!getProvider(), connect, sendPayment };\n};\n"],"mappings":"6BACA,OACE,cAAAA,EACA,aAAAC,EACA,eAAAC,EACA,iBAAAC,EACA,oBAAAC,MACK,kBACP,OACE,oBAAAC,EAEA,6BAAAC,EACA,WAAAC,MACK,oBAaP,IAAMC,EAAmB,IAAIP,EAAU,8CAA8C,EAC/EQ,EAAoB,IAAIR,EAAU,8CAA8C,EAEzES,EAAkB,IAAM,CACnC,IAAMC,EAAc,IAAgC,CAClD,GAAI,OAAO,OAAW,KAAe,WAAY,OAAQ,CACvD,IAAMC,EAAY,OAClB,GAAIA,EAAU,QAAQ,UACpB,OAAOA,EAAU,MAErB,CAEF,EAEMC,EAAU,SAAY,CAC1B,IAAMC,EAAWH,EAAY,EAC7B,GAAIG,EACF,GAAI,CAEF,OADa,MAAMA,EAAS,QAAQ,GACxB,UAAU,SAAS,CACjC,MAAc,CACZ,MAAM,IAAI,MAAM,8BAA8B,CAChD,KAEA,OAAM,IAAI,MAAM,0BAA0B,CAE9C,EAEMC,EAAc,MAAOC,GAA0B,CACnD,IAAMF,EAAWH,EAAY,EAC7B,GAAI,CAACG,EAAU,MAAM,IAAI,MAAM,sBAAsB,EAErD,GAAI,CAEF,IAAMG,EAAY,CAAC,OAAO,SAAS,KAAK,SAAS,WAAW,GAAK,CAAC,OAAO,SAAS,KAAK,SAAS,MAAM,EAChGC,EAASD,EAAY,sCAAwC,gCAC7DE,EAAa,IAAInB,EAAWkB,EAAQ,WAAW,EAE/CE,EAAW,MAAMN,EAAS,QAAQ,CAAE,cAAe,EAAK,CAAC,EACzDO,EAAa,IAAIpB,EAAUmB,EAAS,UAAU,SAAS,CAAC,EACxDE,EAAW,IAAIrB,EAAUe,EAAO,cAAc,EAE9CO,EAAc,IAAIrB,EAGxB,GAAIc,EAAO,UAAU,YAAY,IAAM,OAAQ,CAC7C,IAAMQ,EAAcP,EAAYR,EAAoBD,EAG9CiB,EAAW,MAAMlB,EAAQY,EAAYK,CAAW,EAChDE,EAAS,KAAK,MAAM,OAAOV,EAAO,MAAM,EAAI,KAAK,IAAI,GAAIS,EAAS,QAAQ,CAAC,EAY3E,CAAE,0BAAAE,CAA0B,EAAI,KAAM,QAAO,mBAAmB,EAChEC,EAAU,MAAMD,EAA0BH,EAAaH,CAAU,EACjEQ,EAAQ,MAAMF,EAA0BH,EAAaF,CAAQ,EAEnEC,EAAY,IACVjB,EACEsB,EACAC,EACAR,EACAK,EACA,CAAC,EACDrB,CACF,CACF,CACF,MAEEkB,EAAY,IACVpB,EAAc,SAAS,CACrB,WAAAkB,EACA,SAAAC,EACA,SAAU,KAAK,MAAM,OAAON,EAAO,MAAM,EAAIZ,CAAgB,CAC/D,CAAC,CACH,EAIF,GAAM,CAAE,UAAA0B,CAAU,EAAI,MAAMX,EAAW,mBAAmB,EAC1DI,EAAY,gBAAkBO,EAC9BP,EAAY,SAAWF,EAGvB,GAAM,CAAE,UAAAU,CAAU,EAAI,MAAMjB,EAAS,uBAAuBS,CAAW,EAEvE,OAAOQ,CACT,OAASC,EAAU,CAEjB,MADA,QAAQ,MAAM,4BAA6BA,CAAG,EAC1CA,EAAI,SAAS,SAAS,eAAe,EACjC,IAAI,MAAM,8BAA8B,EAE1C,IAAI,MAAMA,EAAI,SAAW,mCAAmC,CACpE,CACF,EAEA,MAAO,CAAE,YAAa,CAAC,CAACrB,EAAY,EAAG,QAAAE,EAAS,YAAAE,CAAY,CAC9D","names":["Connection","PublicKey","Transaction","SystemProgram","LAMPORTS_PER_SOL","TOKEN_PROGRAM_ID","createTransferInstruction","getMint","USDC_MINT_DEVNET","USDC_MINT_MAINNET","useSolanaWallet","getProvider","anyWindow","connect","provider","sendPayment","intent","isMainnet","rpcUrl","connection","accounts","fromPubkey","toPubkey","transaction","mintAddress","mintInfo","amount","getAssociatedTokenAddress","fromAta","toAta","blockhash","signature","err"]}
|