@micro-cms/crypto-payments 1.0.25 → 1.0.27
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.d.mts +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.js +2 -1
- package/dist/index.js.map +1 -0
- package/dist/index.mjs +2 -1
- package/dist/index.mjs.map +1 -0
- package/package.json +3 -2
package/dist/index.d.mts
CHANGED
|
@@ -48,7 +48,7 @@ declare const useEVMWallet: () => {
|
|
|
48
48
|
|
|
49
49
|
declare const PaymentWidget: react__default.FC<PaymentWidgetProps>;
|
|
50
50
|
|
|
51
|
-
declare const CSS_CONTENT = ".mcms-mx-auto{margin-left:auto;margin-right:auto}.mcms-mb-3{margin-bottom:.75rem}.mcms-mb-4{margin-bottom:1rem}.mcms-mb-6{margin-bottom:1.5rem}.mcms-mt-1{margin-top:.25rem}.mcms-flex{display:flex}.mcms-h-12{height:3rem}.mcms-h-3{height:.75rem}.mcms-h-4{height:1rem}.mcms-h-5{height:1.25rem}.mcms-h-8{height:2rem}.mcms-w-12{width:3rem}.mcms-w-3{width:.75rem}.mcms-w-4{width:1rem}.mcms-w-5{width:1.25rem}.mcms-w-8{width:2rem}.mcms-w-full{width:100%}.mcms-shrink-0{flex-shrink:0}@keyframes mcms-spin{to{transform:rotate(1turn)}}.mcms-animate-spin{animation:mcms-spin 1s linear infinite}.mcms-flex-col{flex-direction:column}.mcms-items-center{align-items:center}.mcms-justify-center{justify-content:center}.mcms-justify-between{justify-content:space-between}.mcms-gap-1{gap:.25rem}.mcms-gap-2{gap:.5rem}.mcms-gap-3{gap:.75rem}.mcms-space-y-2>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-top:calc(.5rem*(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.5rem*var(--tw-space-y-reverse))}.mcms-space-y-4>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-top:calc(1rem*(1 - var(--tw-space-y-reverse)));margin-bottom:calc(1rem*var(--tw-space-y-reverse))}.mcms-overflow-hidden{overflow:hidden}.mcms-break-all{word-break:break-all}.mcms-rounded-2xl{border-radius:1rem}.mcms-rounded-lg{border-radius:.5rem}.mcms-rounded-xl{border-radius:.75rem}.mcms-border{border-width:1px}.mcms-border-t{border-top-width:1px}.mcms-border-green-200{--tw-border-opacity:1;border-color:rgb(187 247 208/var(--tw-border-opacity,1))}.mcms-border-red-100{--tw-border-opacity:1;border-color:rgb(254 226 226/var(--tw-border-opacity,1))}.mcms-border-slate-100{--tw-border-opacity:1;border-color:rgb(241 245 249/var(--tw-border-opacity,1))}.mcms-border-slate-200{--tw-border-opacity:1;border-color:rgb(226 232 240/var(--tw-border-opacity,1))}.mcms-bg-green-50{--tw-bg-opacity:1;background-color:rgb(240 253 244/var(--tw-bg-opacity,1))}.mcms-bg-indigo-50{--tw-bg-opacity:1;background-color:rgb(238 242 255/var(--tw-bg-opacity,1))}.mcms-bg-indigo-600{--tw-bg-opacity:1;background-color:rgb(79 70 229/var(--tw-bg-opacity,1))}.mcms-bg-orange-500{--tw-bg-opacity:1;background-color:rgb(249 115 22/var(--tw-bg-opacity,1))}.mcms-bg-red-50{--tw-bg-opacity:1;background-color:rgb(254 242 242/var(--tw-bg-opacity,1))}.mcms-bg-
|
|
51
|
+
declare const CSS_CONTENT = ".mcms-mx-auto{margin-left:auto;margin-right:auto}.mcms-mb-3{margin-bottom:.75rem}.mcms-mb-4{margin-bottom:1rem}.mcms-mb-6{margin-bottom:1.5rem}.mcms-mt-1{margin-top:.25rem}.mcms-flex{display:flex}.mcms-h-12{height:3rem}.mcms-h-3{height:.75rem}.mcms-h-4{height:1rem}.mcms-h-5{height:1.25rem}.mcms-h-8{height:2rem}.mcms-w-12{width:3rem}.mcms-w-3{width:.75rem}.mcms-w-4{width:1rem}.mcms-w-5{width:1.25rem}.mcms-w-8{width:2rem}.mcms-w-full{width:100%}.mcms-shrink-0{flex-shrink:0}@keyframes mcms-spin{to{transform:rotate(1turn)}}.mcms-animate-spin{animation:mcms-spin 1s linear infinite}.mcms-flex-col{flex-direction:column}.mcms-items-center{align-items:center}.mcms-justify-center{justify-content:center}.mcms-justify-between{justify-content:space-between}.mcms-gap-1{gap:.25rem}.mcms-gap-2{gap:.5rem}.mcms-gap-3{gap:.75rem}.mcms-space-y-2>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-top:calc(.5rem*(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.5rem*var(--tw-space-y-reverse))}.mcms-space-y-4>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-top:calc(1rem*(1 - var(--tw-space-y-reverse)));margin-bottom:calc(1rem*var(--tw-space-y-reverse))}.mcms-overflow-hidden{overflow:hidden}.mcms-break-all{word-break:break-all}.mcms-rounded-2xl{border-radius:1rem}.mcms-rounded-lg{border-radius:.5rem}.mcms-rounded-xl{border-radius:.75rem}.mcms-border{border-width:1px}.mcms-border-t{border-top-width:1px}.mcms-border-green-200{--tw-border-opacity:1;border-color:rgb(187 247 208/var(--tw-border-opacity,1))}.mcms-border-red-100{--tw-border-opacity:1;border-color:rgb(254 226 226/var(--tw-border-opacity,1))}.mcms-border-slate-100{--tw-border-opacity:1;border-color:rgb(241 245 249/var(--tw-border-opacity,1))}.mcms-border-slate-200{--tw-border-opacity:1;border-color:rgb(226 232 240/var(--tw-border-opacity,1))}.mcms-bg-green-50{--tw-bg-opacity:1;background-color:rgb(240 253 244/var(--tw-bg-opacity,1))}.mcms-bg-indigo-50{--tw-bg-opacity:1;background-color:rgb(238 242 255/var(--tw-bg-opacity,1))}.mcms-bg-indigo-600{--tw-bg-opacity:1;background-color:rgb(79 70 229/var(--tw-bg-opacity,1))}.mcms-bg-orange-500{--tw-bg-opacity:1;background-color:rgb(249 115 22/var(--tw-bg-opacity,1))}.mcms-bg-red-50{--tw-bg-opacity:1;background-color:rgb(254 242 242/var(--tw-bg-opacity,1))}.mcms-bg-slate-100{--tw-bg-opacity:1;background-color:rgb(241 245 249/var(--tw-bg-opacity,1))}.mcms-bg-slate-50{--tw-bg-opacity:1;background-color:rgb(248 250 252/var(--tw-bg-opacity,1))}.mcms-bg-slate-900{--tw-bg-opacity:1;background-color:rgb(15 23 42/var(--tw-bg-opacity,1))}.mcms-bg-white{--tw-bg-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity,1))}.mcms-p-2{padding:.5rem}.mcms-p-3{padding:.75rem}.mcms-p-4{padding:1rem}.mcms-p-6{padding:1.5rem}.mcms-px-4{padding-left:1rem;padding-right:1rem}.mcms-px-6{padding-left:1.5rem;padding-right:1.5rem}.mcms-py-3{padding-top:.75rem;padding-bottom:.75rem}.mcms-py-8{padding-top:2rem;padding-bottom:2rem}.mcms-text-center{text-align:center}.mcms-font-mono{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace}.mcms-text-lg{font-size:1.125rem;line-height:1.75rem}.mcms-text-sm{font-size:.875rem;line-height:1.25rem}.mcms-text-xs{font-size:.75rem;line-height:1rem}.mcms-font-bold{font-weight:700}.mcms-font-medium{font-weight:500}.mcms-font-semibold{font-weight:600}.mcms-uppercase{text-transform:uppercase}.mcms-tracking-wider{letter-spacing:.05em}.mcms-text-green-500{--tw-text-opacity:1;color:rgb(34 197 94/var(--tw-text-opacity,1))}.mcms-text-green-700{--tw-text-opacity:1;color:rgb(21 128 61/var(--tw-text-opacity,1))}.mcms-text-indigo-600{--tw-text-opacity:1;color:rgb(79 70 229/var(--tw-text-opacity,1))}.mcms-text-red-700{--tw-text-opacity:1;color:rgb(185 28 28/var(--tw-text-opacity,1))}.mcms-text-slate-400{--tw-text-opacity:1;color:rgb(148 163 184/var(--tw-text-opacity,1))}.mcms-text-slate-500{--tw-text-opacity:1;color:rgb(100 116 139/var(--tw-text-opacity,1))}.mcms-text-slate-600{--tw-text-opacity:1;color:rgb(71 85 105/var(--tw-text-opacity,1))}.mcms-text-slate-900{--tw-text-opacity:1;color:rgb(15 23 42/var(--tw-text-opacity,1))}.mcms-text-white{--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity,1))}.mcms-shadow-sm{--tw-shadow:0 1px 2px 0 rgba(0,0,0,.05);--tw-shadow-colored:0 1px 2px 0 var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.mcms-transition-colors{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.hover:mcms-bg-black:hover{--tw-bg-opacity:1;background-color:rgb(0 0 0/var(--tw-bg-opacity,1))}.hover:mcms-bg-indigo-700:hover{--tw-bg-opacity:1;background-color:rgb(67 56 202/var(--tw-bg-opacity,1))}.hover:mcms-bg-orange-600:hover{--tw-bg-opacity:1;background-color:rgb(234 88 12/var(--tw-bg-opacity,1))}.hover:mcms-text-indigo-700:hover{--tw-text-opacity:1;color:rgb(67 56 202/var(--tw-text-opacity,1))}";
|
|
52
52
|
declare const injectStyles: () => void;
|
|
53
53
|
|
|
54
54
|
interface PaymentWidgetProps {
|
package/dist/index.d.ts
CHANGED
|
@@ -48,7 +48,7 @@ declare const useEVMWallet: () => {
|
|
|
48
48
|
|
|
49
49
|
declare const PaymentWidget: react__default.FC<PaymentWidgetProps>;
|
|
50
50
|
|
|
51
|
-
declare const CSS_CONTENT = ".mcms-mx-auto{margin-left:auto;margin-right:auto}.mcms-mb-3{margin-bottom:.75rem}.mcms-mb-4{margin-bottom:1rem}.mcms-mb-6{margin-bottom:1.5rem}.mcms-mt-1{margin-top:.25rem}.mcms-flex{display:flex}.mcms-h-12{height:3rem}.mcms-h-3{height:.75rem}.mcms-h-4{height:1rem}.mcms-h-5{height:1.25rem}.mcms-h-8{height:2rem}.mcms-w-12{width:3rem}.mcms-w-3{width:.75rem}.mcms-w-4{width:1rem}.mcms-w-5{width:1.25rem}.mcms-w-8{width:2rem}.mcms-w-full{width:100%}.mcms-shrink-0{flex-shrink:0}@keyframes mcms-spin{to{transform:rotate(1turn)}}.mcms-animate-spin{animation:mcms-spin 1s linear infinite}.mcms-flex-col{flex-direction:column}.mcms-items-center{align-items:center}.mcms-justify-center{justify-content:center}.mcms-justify-between{justify-content:space-between}.mcms-gap-1{gap:.25rem}.mcms-gap-2{gap:.5rem}.mcms-gap-3{gap:.75rem}.mcms-space-y-2>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-top:calc(.5rem*(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.5rem*var(--tw-space-y-reverse))}.mcms-space-y-4>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-top:calc(1rem*(1 - var(--tw-space-y-reverse)));margin-bottom:calc(1rem*var(--tw-space-y-reverse))}.mcms-overflow-hidden{overflow:hidden}.mcms-break-all{word-break:break-all}.mcms-rounded-2xl{border-radius:1rem}.mcms-rounded-lg{border-radius:.5rem}.mcms-rounded-xl{border-radius:.75rem}.mcms-border{border-width:1px}.mcms-border-t{border-top-width:1px}.mcms-border-green-200{--tw-border-opacity:1;border-color:rgb(187 247 208/var(--tw-border-opacity,1))}.mcms-border-red-100{--tw-border-opacity:1;border-color:rgb(254 226 226/var(--tw-border-opacity,1))}.mcms-border-slate-100{--tw-border-opacity:1;border-color:rgb(241 245 249/var(--tw-border-opacity,1))}.mcms-border-slate-200{--tw-border-opacity:1;border-color:rgb(226 232 240/var(--tw-border-opacity,1))}.mcms-bg-green-50{--tw-bg-opacity:1;background-color:rgb(240 253 244/var(--tw-bg-opacity,1))}.mcms-bg-indigo-50{--tw-bg-opacity:1;background-color:rgb(238 242 255/var(--tw-bg-opacity,1))}.mcms-bg-indigo-600{--tw-bg-opacity:1;background-color:rgb(79 70 229/var(--tw-bg-opacity,1))}.mcms-bg-orange-500{--tw-bg-opacity:1;background-color:rgb(249 115 22/var(--tw-bg-opacity,1))}.mcms-bg-red-50{--tw-bg-opacity:1;background-color:rgb(254 242 242/var(--tw-bg-opacity,1))}.mcms-bg-
|
|
51
|
+
declare const CSS_CONTENT = ".mcms-mx-auto{margin-left:auto;margin-right:auto}.mcms-mb-3{margin-bottom:.75rem}.mcms-mb-4{margin-bottom:1rem}.mcms-mb-6{margin-bottom:1.5rem}.mcms-mt-1{margin-top:.25rem}.mcms-flex{display:flex}.mcms-h-12{height:3rem}.mcms-h-3{height:.75rem}.mcms-h-4{height:1rem}.mcms-h-5{height:1.25rem}.mcms-h-8{height:2rem}.mcms-w-12{width:3rem}.mcms-w-3{width:.75rem}.mcms-w-4{width:1rem}.mcms-w-5{width:1.25rem}.mcms-w-8{width:2rem}.mcms-w-full{width:100%}.mcms-shrink-0{flex-shrink:0}@keyframes mcms-spin{to{transform:rotate(1turn)}}.mcms-animate-spin{animation:mcms-spin 1s linear infinite}.mcms-flex-col{flex-direction:column}.mcms-items-center{align-items:center}.mcms-justify-center{justify-content:center}.mcms-justify-between{justify-content:space-between}.mcms-gap-1{gap:.25rem}.mcms-gap-2{gap:.5rem}.mcms-gap-3{gap:.75rem}.mcms-space-y-2>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-top:calc(.5rem*(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.5rem*var(--tw-space-y-reverse))}.mcms-space-y-4>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-top:calc(1rem*(1 - var(--tw-space-y-reverse)));margin-bottom:calc(1rem*var(--tw-space-y-reverse))}.mcms-overflow-hidden{overflow:hidden}.mcms-break-all{word-break:break-all}.mcms-rounded-2xl{border-radius:1rem}.mcms-rounded-lg{border-radius:.5rem}.mcms-rounded-xl{border-radius:.75rem}.mcms-border{border-width:1px}.mcms-border-t{border-top-width:1px}.mcms-border-green-200{--tw-border-opacity:1;border-color:rgb(187 247 208/var(--tw-border-opacity,1))}.mcms-border-red-100{--tw-border-opacity:1;border-color:rgb(254 226 226/var(--tw-border-opacity,1))}.mcms-border-slate-100{--tw-border-opacity:1;border-color:rgb(241 245 249/var(--tw-border-opacity,1))}.mcms-border-slate-200{--tw-border-opacity:1;border-color:rgb(226 232 240/var(--tw-border-opacity,1))}.mcms-bg-green-50{--tw-bg-opacity:1;background-color:rgb(240 253 244/var(--tw-bg-opacity,1))}.mcms-bg-indigo-50{--tw-bg-opacity:1;background-color:rgb(238 242 255/var(--tw-bg-opacity,1))}.mcms-bg-indigo-600{--tw-bg-opacity:1;background-color:rgb(79 70 229/var(--tw-bg-opacity,1))}.mcms-bg-orange-500{--tw-bg-opacity:1;background-color:rgb(249 115 22/var(--tw-bg-opacity,1))}.mcms-bg-red-50{--tw-bg-opacity:1;background-color:rgb(254 242 242/var(--tw-bg-opacity,1))}.mcms-bg-slate-100{--tw-bg-opacity:1;background-color:rgb(241 245 249/var(--tw-bg-opacity,1))}.mcms-bg-slate-50{--tw-bg-opacity:1;background-color:rgb(248 250 252/var(--tw-bg-opacity,1))}.mcms-bg-slate-900{--tw-bg-opacity:1;background-color:rgb(15 23 42/var(--tw-bg-opacity,1))}.mcms-bg-white{--tw-bg-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity,1))}.mcms-p-2{padding:.5rem}.mcms-p-3{padding:.75rem}.mcms-p-4{padding:1rem}.mcms-p-6{padding:1.5rem}.mcms-px-4{padding-left:1rem;padding-right:1rem}.mcms-px-6{padding-left:1.5rem;padding-right:1.5rem}.mcms-py-3{padding-top:.75rem;padding-bottom:.75rem}.mcms-py-8{padding-top:2rem;padding-bottom:2rem}.mcms-text-center{text-align:center}.mcms-font-mono{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace}.mcms-text-lg{font-size:1.125rem;line-height:1.75rem}.mcms-text-sm{font-size:.875rem;line-height:1.25rem}.mcms-text-xs{font-size:.75rem;line-height:1rem}.mcms-font-bold{font-weight:700}.mcms-font-medium{font-weight:500}.mcms-font-semibold{font-weight:600}.mcms-uppercase{text-transform:uppercase}.mcms-tracking-wider{letter-spacing:.05em}.mcms-text-green-500{--tw-text-opacity:1;color:rgb(34 197 94/var(--tw-text-opacity,1))}.mcms-text-green-700{--tw-text-opacity:1;color:rgb(21 128 61/var(--tw-text-opacity,1))}.mcms-text-indigo-600{--tw-text-opacity:1;color:rgb(79 70 229/var(--tw-text-opacity,1))}.mcms-text-red-700{--tw-text-opacity:1;color:rgb(185 28 28/var(--tw-text-opacity,1))}.mcms-text-slate-400{--tw-text-opacity:1;color:rgb(148 163 184/var(--tw-text-opacity,1))}.mcms-text-slate-500{--tw-text-opacity:1;color:rgb(100 116 139/var(--tw-text-opacity,1))}.mcms-text-slate-600{--tw-text-opacity:1;color:rgb(71 85 105/var(--tw-text-opacity,1))}.mcms-text-slate-900{--tw-text-opacity:1;color:rgb(15 23 42/var(--tw-text-opacity,1))}.mcms-text-white{--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity,1))}.mcms-shadow-sm{--tw-shadow:0 1px 2px 0 rgba(0,0,0,.05);--tw-shadow-colored:0 1px 2px 0 var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.mcms-transition-colors{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.hover:mcms-bg-black:hover{--tw-bg-opacity:1;background-color:rgb(0 0 0/var(--tw-bg-opacity,1))}.hover:mcms-bg-indigo-700:hover{--tw-bg-opacity:1;background-color:rgb(67 56 202/var(--tw-bg-opacity,1))}.hover:mcms-bg-orange-600:hover{--tw-bg-opacity:1;background-color:rgb(234 88 12/var(--tw-bg-opacity,1))}.hover:mcms-text-indigo-700:hover{--tw-text-opacity:1;color:rgb(67 56 202/var(--tw-text-opacity,1))}";
|
|
52
52
|
declare const injectStyles: () => void;
|
|
53
53
|
|
|
54
54
|
interface PaymentWidgetProps {
|
package/dist/index.js
CHANGED
|
@@ -1 +1,2 @@
|
|
|
1
|
-
"use strict";var L=Object.create;var P=Object.defineProperty;var U=Object.getOwnPropertyDescriptor;var q=Object.getOwnPropertyNames;var O=Object.getPrototypeOf,R=Object.prototype.hasOwnProperty;var F=(t,a)=>{for(var r in a)P(t,r,{get:a[r],enumerable:!0})},A=(t,a,r,m)=>{if(a&&typeof a=="object"||typeof a=="function")for(let o of q(a))!R.call(t,o)&&o!==r&&P(t,o,{get:()=>a[o],enumerable:!(m=U(a,o))||m.enumerable});return t};var z=(t,a,r)=>(r=t!=null?L(O(t)):{},A(a||!t||!t.__esModule?P(r,"default",{value:t,enumerable:!0}):r,t)),G=t=>A(P({},"__esModule",{value:!0}),t);var J={};F(J,{CSS_CONTENT:()=>j,PaymentWidget:()=>B,injectStyles:()=>C,useEVMWallet:()=>M,usePayment:()=>I,useSolanaWallet:()=>S});module.exports=G(J);var b=require("react");var i=require("@solana/web3.js"),f=require("@solana/spl-token"),H=new i.PublicKey("4zMMC9srt5Ri5X14GAgXhaHii3GnPAEERYPJgZJDncDU"),K=new i.PublicKey("EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v"),S=()=>{let t=()=>{if(typeof window<"u"&&"solana"in window){let m=window;if(m.solana?.isPhantom)return m.solana}},a=async()=>{let m=t();if(m)try{return(await m.connect()).publicKey.toString()}catch{throw new Error("User rejected the connection")}else throw new Error("Phantom wallet not found")},r=async m=>{let o=t();if(!o)throw new Error("Wallet not connected");try{let s=!window.location.host.includes("localhost")&&!window.location.host.includes("dev."),y=s?"https://api.mainnet-beta.solana.com":"https://api.devnet.solana.com",w=new i.Connection(y,"confirmed"),l=await o.connect({onlyIfTrusted:!0}),p=new i.PublicKey(l.publicKey.toString()),h=new i.PublicKey(m.paymentAddress),g=new i.Transaction;if(m.currency?.toUpperCase()==="USDC"){let v=s?K:H,N=await(0,f.getMint)(w,v),T=Math.round(Number(m.amount)*Math.pow(10,N.decimals)),{getAssociatedTokenAddress:n}=await import("@solana/spl-token"),c=await n(v,p),u=await n(v,h);g.add((0,f.createTransferInstruction)(c,u,p,T,[],f.TOKEN_PROGRAM_ID))}else g.add(i.SystemProgram.transfer({fromPubkey:p,toPubkey:h,lamports:Math.round(Number(m.amount)*i.LAMPORTS_PER_SOL)}));let{blockhash:k}=await w.getLatestBlockhash();g.recentBlockhash=k,g.feePayer=p;let{signature:E}=await o.signAndSendTransaction(g);return E}catch(s){throw console.error("Solana Transaction Error:",s),s.message?.includes("User rejected")?new Error("Transaction rejected by user"):new Error(s.message||"Failed to send Solana transaction")}};return{isAvailable:!!t(),connect:a,sendPayment:r}};var M=()=>{let t=()=>{if(typeof window<"u"&&"ethereum"in window)return window.ethereum},a=async()=>{let m=t();if(m)try{return(await m.request({method:"eth_requestAccounts"}))[0]}catch{throw new Error("User rejected the connection")}else throw new Error("MetaMask or EVM wallet not found")},r=async m=>{let o=t();if(!o)throw new Error("Wallet not connected");let s=await o.request({method:"eth_accounts"});if(!s||s.length===0)throw new Error("No accounts found. Please connect your wallet first.");let y=m.currency.toUpperCase()==="USDC"?6:18,w="0x"+BigInt(Math.floor(Number(m.amount)*Math.pow(10,y))).toString(16);try{return await o.request({method:"eth_sendTransaction",params:[{from:s[0],to:m.paymentAddress,value:m.currency.toUpperCase()==="ETH"?w:"0x0"}]})}catch(l){throw l.code===4001?new Error("Transaction rejected by user"):new Error(l.message||"Failed to send transaction")}};return{isAvailable:!!t(),connect:a,sendPayment:r}};var W=require("react"),d=require("lucide-react"),V=require("clsx"),D=require("tailwind-merge");var j=".mcms-mx-auto{margin-left:auto;margin-right:auto}.mcms-mb-3{margin-bottom:.75rem}.mcms-mb-4{margin-bottom:1rem}.mcms-mb-6{margin-bottom:1.5rem}.mcms-mt-1{margin-top:.25rem}.mcms-flex{display:flex}.mcms-h-12{height:3rem}.mcms-h-3{height:.75rem}.mcms-h-4{height:1rem}.mcms-h-5{height:1.25rem}.mcms-h-8{height:2rem}.mcms-w-12{width:3rem}.mcms-w-3{width:.75rem}.mcms-w-4{width:1rem}.mcms-w-5{width:1.25rem}.mcms-w-8{width:2rem}.mcms-w-full{width:100%}.mcms-shrink-0{flex-shrink:0}@keyframes mcms-spin{to{transform:rotate(1turn)}}.mcms-animate-spin{animation:mcms-spin 1s linear infinite}.mcms-flex-col{flex-direction:column}.mcms-items-center{align-items:center}.mcms-justify-center{justify-content:center}.mcms-justify-between{justify-content:space-between}.mcms-gap-1{gap:.25rem}.mcms-gap-2{gap:.5rem}.mcms-gap-3{gap:.75rem}.mcms-space-y-2>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-top:calc(.5rem*(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.5rem*var(--tw-space-y-reverse))}.mcms-space-y-4>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-top:calc(1rem*(1 - var(--tw-space-y-reverse)));margin-bottom:calc(1rem*var(--tw-space-y-reverse))}.mcms-overflow-hidden{overflow:hidden}.mcms-break-all{word-break:break-all}.mcms-rounded-2xl{border-radius:1rem}.mcms-rounded-lg{border-radius:.5rem}.mcms-rounded-xl{border-radius:.75rem}.mcms-border{border-width:1px}.mcms-border-t{border-top-width:1px}.mcms-border-green-200{--tw-border-opacity:1;border-color:rgb(187 247 208/var(--tw-border-opacity,1))}.mcms-border-red-100{--tw-border-opacity:1;border-color:rgb(254 226 226/var(--tw-border-opacity,1))}.mcms-border-slate-100{--tw-border-opacity:1;border-color:rgb(241 245 249/var(--tw-border-opacity,1))}.mcms-border-slate-200{--tw-border-opacity:1;border-color:rgb(226 232 240/var(--tw-border-opacity,1))}.mcms-bg-green-50{--tw-bg-opacity:1;background-color:rgb(240 253 244/var(--tw-bg-opacity,1))}.mcms-bg-indigo-50{--tw-bg-opacity:1;background-color:rgb(238 242 255/var(--tw-bg-opacity,1))}.mcms-bg-indigo-600{--tw-bg-opacity:1;background-color:rgb(79 70 229/var(--tw-bg-opacity,1))}.mcms-bg-orange-500{--tw-bg-opacity:1;background-color:rgb(249 115 22/var(--tw-bg-opacity,1))}.mcms-bg-red-50{--tw-bg-opacity:1;background-color:rgb(254 242 242/var(--tw-bg-opacity,1))}.mcms-bg-sky-600{--tw-bg-opacity:1;background-color:rgb(2 132 199/var(--tw-bg-opacity,1))}.mcms-bg-slate-100{--tw-bg-opacity:1;background-color:rgb(241 245 249/var(--tw-bg-opacity,1))}.mcms-bg-slate-50{--tw-bg-opacity:1;background-color:rgb(248 250 252/var(--tw-bg-opacity,1))}.mcms-bg-slate-900{--tw-bg-opacity:1;background-color:rgb(15 23 42/var(--tw-bg-opacity,1))}.mcms-bg-white{--tw-bg-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity,1))}.mcms-p-2{padding:.5rem}.mcms-p-3{padding:.75rem}.mcms-p-4{padding:1rem}.mcms-p-6{padding:1.5rem}.mcms-px-4{padding-left:1rem;padding-right:1rem}.mcms-px-6{padding-left:1.5rem;padding-right:1.5rem}.mcms-py-3{padding-top:.75rem;padding-bottom:.75rem}.mcms-py-8{padding-top:2rem;padding-bottom:2rem}.mcms-text-center{text-align:center}.mcms-font-mono{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace}.mcms-text-lg{font-size:1.125rem;line-height:1.75rem}.mcms-text-sm{font-size:.875rem;line-height:1.25rem}.mcms-text-xs{font-size:.75rem;line-height:1rem}.mcms-font-bold{font-weight:700}.mcms-font-medium{font-weight:500}.mcms-font-semibold{font-weight:600}.mcms-uppercase{text-transform:uppercase}.mcms-tracking-wider{letter-spacing:.05em}.mcms-text-green-500{--tw-text-opacity:1;color:rgb(34 197 94/var(--tw-text-opacity,1))}.mcms-text-green-700{--tw-text-opacity:1;color:rgb(21 128 61/var(--tw-text-opacity,1))}.mcms-text-indigo-600{--tw-text-opacity:1;color:rgb(79 70 229/var(--tw-text-opacity,1))}.mcms-text-red-700{--tw-text-opacity:1;color:rgb(185 28 28/var(--tw-text-opacity,1))}.mcms-text-slate-400{--tw-text-opacity:1;color:rgb(148 163 184/var(--tw-text-opacity,1))}.mcms-text-slate-500{--tw-text-opacity:1;color:rgb(100 116 139/var(--tw-text-opacity,1))}.mcms-text-slate-600{--tw-text-opacity:1;color:rgb(71 85 105/var(--tw-text-opacity,1))}.mcms-text-slate-900{--tw-text-opacity:1;color:rgb(15 23 42/var(--tw-text-opacity,1))}.mcms-text-white{--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity,1))}.mcms-shadow-sm{--tw-shadow:0 1px 2px 0 rgba(0,0,0,.05);--tw-shadow-colored:0 1px 2px 0 var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.mcms-transition-colors{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.hover:mcms-bg-black:hover{--tw-bg-opacity:1;background-color:rgb(0 0 0/var(--tw-bg-opacity,1))}.hover:mcms-bg-indigo-700:hover{--tw-bg-opacity:1;background-color:rgb(67 56 202/var(--tw-bg-opacity,1))}.hover:mcms-bg-orange-600:hover{--tw-bg-opacity:1;background-color:rgb(234 88 12/var(--tw-bg-opacity,1))}.hover:mcms-text-indigo-700:hover{--tw-text-opacity:1;color:rgb(67 56 202/var(--tw-text-opacity,1))}",C=()=>{if(typeof document>"u"||document.getElementById("mcms-crypto-styles"))return;let t=document.createElement("style");t.id="mcms-crypto-styles",t.textContent=j,document.head.appendChild(t)};var e=require("react/jsx-runtime");function _(...t){return(0,D.twMerge)((0,V.clsx)(t))}var B=({className:t,...a})=>{(0,W.useLayoutEffect)(()=>{C()},[]);let{status:r,intent:m,error:o,initiate:s,verify:y,setStatus:w,isSolanaAvailable:l,handleSolanaPay:p,isEVMAvailable:h,handleEVMPay:g}=I(a);return r==="success"?(0,e.jsxs)("div",{className:_("mcms-p-6 mcms-text-center mcms-bg-green-50 mcms-rounded-xl mcms-border mcms-border-green-200",t),children:[(0,e.jsx)(d.CheckCircle,{className:"mcms-mx-auto mcms-w-12 mcms-h-12 mcms-text-green-500 mcms-mb-4"}),(0,e.jsx)("h3",{className:"mcms-text-lg mcms-font-semibold mcms-green-900",children:"Payment Successful"}),(0,e.jsx)("p",{className:"mcms-text-green-700 mcms-mt-1",children:"Your order has been confirmed."})]}):(0,e.jsxs)("div",{className:_("mcms-bg-white mcms-rounded-2xl mcms-border mcms-border-slate-200 mcms-shadow-sm mcms-overflow-hidden",t),children:[(0,e.jsxs)("div",{className:"mcms-p-6",children:[(0,e.jsxs)("div",{className:"mcms-flex mcms-items-center mcms-gap-3 mcms-mb-6",children:[(0,e.jsx)("div",{className:"mcms-p-2 mcms-bg-indigo-50 mcms-rounded-lg",children:(0,e.jsx)(d.Wallet,{className:"mcms-w-5 mcms-h-5 mcms-text-indigo-600"})}),(0,e.jsxs)("div",{children:[(0,e.jsx)("h3",{className:"mcms-font-semibold mcms-text-slate-900",children:"Crypto Payment"}),(0,e.jsx)("p",{className:"mcms-text-sm mcms-text-slate-500",children:"Pay securely using your wallet"})]})]}),o&&(0,e.jsxs)("div",{className:"mcms-mb-4 mcms-p-3 mcms-bg-red-50 mcms-border mcms-border-red-100 mcms-rounded-lg mcms-flex mcms-gap-3 mcms-text-red-700 mcms-text-sm",children:[(0,e.jsx)(d.AlertCircle,{className:"mcms-w-4 mcms-h-4 mcms-shrink-0"}),(0,e.jsx)("p",{children:o})]}),r==="idle"&&(0,e.jsx)("button",{onClick:s,className:"mcms-w-full mcms-py-3 mcms-px-4 mcms-bg-indigo-600 hover:mcms-bg-indigo-700 mcms-text-white mcms-font-medium mcms-rounded-xl mcms-transition-colors mcms-flex mcms-items-center mcms-justify-center mcms-gap-2",children:"Start Payment"}),(r==="connecting"||r==="initiating"||r==="verifying")&&(0,e.jsxs)("div",{className:"mcms-py-8 mcms-text-center",children:[(0,e.jsx)(d.Loader2,{className:"mcms-w-8 mcms-h-8 mcms-text-indigo-600 mcms-animate-spin mcms-mx-auto mcms-mb-3"}),(0,e.jsx)("p",{className:"mcms-text-slate-600 mcms-font-medium",children:r==="connecting"?"Connecting wallet...":r==="initiating"?"Preparing transaction...":"Verifying on-chain..."})]}),r==="pending_signature"&&m&&(0,e.jsxs)("div",{className:"mcms-space-y-4",children:[(0,e.jsxs)("div",{className:"mcms-p-4 mcms-bg-slate-50 mcms-rounded-xl mcms-space-y-2",children:[(0,e.jsxs)("div",{className:"mcms-flex mcms-justify-between mcms-text-sm",children:[(0,e.jsx)("span",{className:"mcms-text-slate-500",children:"Amount to pay"}),(0,e.jsxs)("span",{className:"mcms-font-mono mcms-font-medium mcms-text-slate-900",children:[m.amount," ",m.currency]})]}),(0,e.jsxs)("div",{className:"mcms-flex mcms-justify-between mcms-text-sm",children:[(0,e.jsx)("span",{className:"mcms-text-slate-500",children:"Order ID"}),(0,e.jsx)("span",{className:"mcms-font-mono mcms-text-slate-900",children:m.orderId})]}),(0,e.jsxs)("div",{className:"mcms-flex mcms-justify-between mcms-text-sm",children:[(0,e.jsx)("span",{className:"mcms-text-slate-500",children:"Network"}),(0,e.jsx)("span",{className:"mcms-text-slate-900 mcms-font-medium",children:m.network})]})]}),(0,e.jsxs)("div",{className:"mcms-space-y-2",children:[(0,e.jsx)("p",{className:"mcms-text-xs mcms-text-slate-500 mcms-uppercase mcms-font-bold mcms-tracking-wider",children:"Destination Address"}),(0,e.jsx)("div",{className:"mcms-p-3 mcms-bg-slate-100 mcms-rounded-lg mcms-font-mono mcms-text-xs mcms-break-all mcms-text-slate-600 mcms-border mcms-border-slate-200",children:m.paymentAddress})]}),(0,e.jsx)("div",{className:"mcms-flex mcms-flex-col mcms-gap-2",children:m.network?.toLowerCase().includes("solana")&&l?(0,e.jsxs)("button",{onClick:p,className:"mcms-w-full mcms-py-3 mcms-px-4 mcms-bg-indigo-600 hover:mcms-bg-indigo-700 mcms-text-white mcms-font-medium mcms-rounded-xl mcms-transition-colors mcms-flex mcms-items-center mcms-justify-center mcms-gap-2",children:[(0,e.jsx)(d.Cpu,{className:"mcms-w-4 mcms-h-4"}),"Pay with Phantom"]}):(m.network?.toLowerCase().includes("ethereum")||m.network?.toLowerCase().includes("evm")||m.network?.toLowerCase().includes("polygon"))&&h?(0,e.jsxs)("button",{onClick:g,className:"mcms-w-full mcms-py-3 mcms-px-4 mcms-bg-orange-500 hover:mcms-bg-orange-600 mcms-text-white mcms-font-medium mcms-rounded-xl mcms-transition-colors mcms-flex mcms-items-center mcms-justify-center mcms-gap-2",children:[(0,e.jsx)("img",{src:"https://upload.wikimedia.org/wikipedia/commons/3/36/MetaMask_Mirror_Logo.svg",className:"mcms-w-4 mcms-h-4",alt:"MetaMask"}),"Pay with MetaMask"]}):(0,e.jsx)("button",{onClick:()=>{w("verifying"),setTimeout(()=>y("0x_mock_transaction_hash_generic"),2e3)},className:"mcms-w-full mcms-py-3 mcms-px-4 mcms-bg-slate-900 hover:mcms-bg-black mcms-text-white mcms-font-medium mcms-rounded-xl mcms-transition-colors mcms-flex mcms-items-center mcms-justify-center mcms-gap-2",children:"Confirm in Wallet"})})]})]}),(0,e.jsxs)("div",{className:"mcms-bg-slate-50 mcms-px-6 mcms-py-3 mcms-border-t mcms-border-slate-100 mcms-flex mcms-justify-between mcms-items-center",children:[(0,e.jsx)("span",{className:"mcms-text-xs mcms-text-slate-400",children:"Powered by Micro-CMS Crypto"}),(0,e.jsxs)("a",{href:"#",className:"mcms-text-xs mcms-text-indigo-600 hover:mcms-text-indigo-700 mcms-font-medium mcms-flex mcms-items-center mcms-gap-1",children:["Help ",(0,e.jsx)(d.ExternalLink,{className:"mcms-w-3 mcms-h-3"})]})]})]})};var I=t=>{let[a,r]=(0,b.useState)("idle"),[m,o]=(0,b.useState)(null),[s,y]=(0,b.useState)(null),w=(0,b.useCallback)(async()=>{try{if(r("initiating"),o(null),t.provider){let u=await t.provider.initiatePayment(t.orderId,{amount:t.amount,currency:t.currency});y(u),r("pending_signature");return}let n=await fetch(t.endpoints?.initiate||"/api/orders/initiate",{method:"POST",headers:{"Content-Type":"application/json",...t.headers||{}},body:JSON.stringify({productId:t.orderId,amount:t.amount,currency:t.currency,paymentProvider:"crypto"})});if(!n.ok){let u=await n.json();throw new Error(u.error||"Failed to initiate payment intent")}let c=await n.json();y(c),r("pending_signature")}catch(n){o(n.message),r("error"),t.onError?.(n)}},[t.provider,t.endpoints?.initiate,t.orderId,t.amount,t.currency,t.onError,t.headers]),l=(0,b.useCallback)(async n=>{try{if(r("verifying"),t.provider){let x=await t.provider.verifyPayment(n,t.orderId);if(x.status==="confirmed")r("success"),t.onSuccess?.(x);else throw new Error("Payment not confirmed yet, status: "+x.status);return}let c=await fetch(t.endpoints?.verify||"/api/orders/verify-payment",{method:"POST",headers:{"Content-Type":"application/json",...t.headers||{}},body:JSON.stringify({orderId:s?.orderId||t.orderId,transactionHash:n})});if(!c.ok){let x=await c.json();throw new Error(x.error||"Payment verification failed")}let u=await c.json();if(u.status==="confirmed")r("success"),t.onSuccess?.(u);else throw new Error("Payment not confirmed yet, status: "+u.status)}catch(c){o(c.message),r("error"),t.onError?.(c)}},[t.provider,t.endpoints?.verify,t.orderId,t.onSuccess,t.onError,t.headers,s?.orderId]),{isAvailable:p,connect:h,sendPayment:g}=S(),k=async()=>{try{if(!s){o("Payment intent not established."),r("error");return}r("connecting");let n=await h();console.log("Connected to Solana with public key:",n),r("pending_signature");let c=await g(s);r("verifying"),await l(c)}catch(n){o(n.message||"Failed to connect to Phantom or sign transaction."),r("error"),t.onError?.(n instanceof Error?n:new Error(String(n)))}},{isAvailable:E,connect:v,sendPayment:N}=M();return{status:a,intent:s,error:m,initiate:w,verify:l,setStatus:r,isSolanaAvailable:p,handleSolanaPay:k,isEVMAvailable:E,handleEVMPay:async()=>{try{if(!s){o("Payment intent not established."),r("error");return}r("connecting");let n=await v();console.log("Connected to EVM with account:",n),r("pending_signature");let c=await N(s);r("verifying"),await l(c)}catch(n){o(n.message||"Failed to connect to MetaMask or sign transaction."),r("error"),t.onError?.(n instanceof Error?n:new Error(String(n)))}}}};0&&(module.exports={CSS_CONTENT,PaymentWidget,injectStyles,useEVMWallet,usePayment,useSolanaWallet});
|
|
1
|
+
"use strict";var U=Object.create;var P=Object.defineProperty;var q=Object.getOwnPropertyDescriptor;var O=Object.getOwnPropertyNames;var R=Object.getPrototypeOf,F=Object.prototype.hasOwnProperty;var B=(e,a)=>{for(var r in a)P(e,r,{get:a[r],enumerable:!0})},T=(e,a,r,m)=>{if(a&&typeof a=="object"||typeof a=="function")for(let n of O(a))!F.call(e,n)&&n!==r&&P(e,n,{get:()=>a[n],enumerable:!(m=q(a,n))||m.enumerable});return e};var z=(e,a,r)=>(r=e!=null?U(R(e)):{},T(a||!e||!e.__esModule?P(r,"default",{value:e,enumerable:!0}):r,e)),G=e=>T(P({},"__esModule",{value:!0}),e);var X={};B(X,{CSS_CONTENT:()=>j,PaymentWidget:()=>J,injectStyles:()=>C,useEVMWallet:()=>M,usePayment:()=>A,useSolanaWallet:()=>S});module.exports=G(X);var L=require("buffer"),b=require("react");var i=require("@solana/web3.js"),h=require("@solana/spl-token"),H=new i.PublicKey("4zMMC9srt5Ri5X14GAgXhaHii3GnPAEERYPJgZJDncDU"),K=new i.PublicKey("EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v"),S=()=>{let e=()=>{if(typeof window<"u"&&"solana"in window){let m=window;if(m.solana?.isPhantom)return m.solana}},a=async()=>{let m=e();if(m)try{return(await m.connect()).publicKey.toString()}catch{throw new Error("User rejected the connection")}else throw new Error("Phantom wallet not found")},r=async m=>{let n=e();if(!n)throw new Error("Wallet not connected");try{let o=!window.location.host.includes("localhost")&&!window.location.host.includes("dev."),w=o?"https://api.mainnet-beta.solana.com":"https://api.devnet.solana.com",y=new i.Connection(w,"confirmed"),l=await n.connect({onlyIfTrusted:!0}),p=new i.PublicKey(l.publicKey.toString()),f=new i.PublicKey(m.paymentAddress),g=new i.Transaction;if(m.currency?.toUpperCase()==="USDC"){let x=o?K:H,N=await(0,h.getMint)(y,x),I=Math.round(Number(m.amount)*Math.pow(10,N.decimals)),{getAssociatedTokenAddress:s}=await import("@solana/spl-token"),c=await s(x,p),u=await s(x,f);g.add((0,h.createTransferInstruction)(c,u,p,I,[],h.TOKEN_PROGRAM_ID))}else g.add(i.SystemProgram.transfer({fromPubkey:p,toPubkey:f,lamports:Math.round(Number(m.amount)*i.LAMPORTS_PER_SOL)}));let{blockhash:k}=await y.getLatestBlockhash();g.recentBlockhash=k,g.feePayer=p;let{signature:E}=await n.signAndSendTransaction(g);return E}catch(o){throw console.error("Solana Transaction Error:",o),o.message?.includes("User rejected")?new Error("Transaction rejected by user"):new Error(o.message||"Failed to send Solana transaction")}};return{isAvailable:!!e(),connect:a,sendPayment:r}};var M=()=>{let e=()=>{if(typeof window<"u"&&"ethereum"in window)return window.ethereum},a=async()=>{let m=e();if(m)try{return(await m.request({method:"eth_requestAccounts"}))[0]}catch{throw new Error("User rejected the connection")}else throw new Error("MetaMask or EVM wallet not found")},r=async m=>{let n=e();if(!n)throw new Error("Wallet not connected");let o=await n.request({method:"eth_accounts"});if(!o||o.length===0)throw new Error("No accounts found. Please connect your wallet first.");let w=m.currency.toUpperCase()==="USDC"?6:18,y="0x"+BigInt(Math.floor(Number(m.amount)*Math.pow(10,w))).toString(16);try{return await n.request({method:"eth_sendTransaction",params:[{from:o[0],to:m.paymentAddress,value:m.currency.toUpperCase()==="ETH"?y:"0x0"}]})}catch(l){throw l.code===4001?new Error("Transaction rejected by user"):new Error(l.message||"Failed to send transaction")}};return{isAvailable:!!e(),connect:a,sendPayment:r}};var W=require("react"),d=require("lucide-react"),V=require("clsx"),D=require("tailwind-merge");var j=".mcms-mx-auto{margin-left:auto;margin-right:auto}.mcms-mb-3{margin-bottom:.75rem}.mcms-mb-4{margin-bottom:1rem}.mcms-mb-6{margin-bottom:1.5rem}.mcms-mt-1{margin-top:.25rem}.mcms-flex{display:flex}.mcms-h-12{height:3rem}.mcms-h-3{height:.75rem}.mcms-h-4{height:1rem}.mcms-h-5{height:1.25rem}.mcms-h-8{height:2rem}.mcms-w-12{width:3rem}.mcms-w-3{width:.75rem}.mcms-w-4{width:1rem}.mcms-w-5{width:1.25rem}.mcms-w-8{width:2rem}.mcms-w-full{width:100%}.mcms-shrink-0{flex-shrink:0}@keyframes mcms-spin{to{transform:rotate(1turn)}}.mcms-animate-spin{animation:mcms-spin 1s linear infinite}.mcms-flex-col{flex-direction:column}.mcms-items-center{align-items:center}.mcms-justify-center{justify-content:center}.mcms-justify-between{justify-content:space-between}.mcms-gap-1{gap:.25rem}.mcms-gap-2{gap:.5rem}.mcms-gap-3{gap:.75rem}.mcms-space-y-2>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-top:calc(.5rem*(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.5rem*var(--tw-space-y-reverse))}.mcms-space-y-4>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-top:calc(1rem*(1 - var(--tw-space-y-reverse)));margin-bottom:calc(1rem*var(--tw-space-y-reverse))}.mcms-overflow-hidden{overflow:hidden}.mcms-break-all{word-break:break-all}.mcms-rounded-2xl{border-radius:1rem}.mcms-rounded-lg{border-radius:.5rem}.mcms-rounded-xl{border-radius:.75rem}.mcms-border{border-width:1px}.mcms-border-t{border-top-width:1px}.mcms-border-green-200{--tw-border-opacity:1;border-color:rgb(187 247 208/var(--tw-border-opacity,1))}.mcms-border-red-100{--tw-border-opacity:1;border-color:rgb(254 226 226/var(--tw-border-opacity,1))}.mcms-border-slate-100{--tw-border-opacity:1;border-color:rgb(241 245 249/var(--tw-border-opacity,1))}.mcms-border-slate-200{--tw-border-opacity:1;border-color:rgb(226 232 240/var(--tw-border-opacity,1))}.mcms-bg-green-50{--tw-bg-opacity:1;background-color:rgb(240 253 244/var(--tw-bg-opacity,1))}.mcms-bg-indigo-50{--tw-bg-opacity:1;background-color:rgb(238 242 255/var(--tw-bg-opacity,1))}.mcms-bg-indigo-600{--tw-bg-opacity:1;background-color:rgb(79 70 229/var(--tw-bg-opacity,1))}.mcms-bg-orange-500{--tw-bg-opacity:1;background-color:rgb(249 115 22/var(--tw-bg-opacity,1))}.mcms-bg-red-50{--tw-bg-opacity:1;background-color:rgb(254 242 242/var(--tw-bg-opacity,1))}.mcms-bg-slate-100{--tw-bg-opacity:1;background-color:rgb(241 245 249/var(--tw-bg-opacity,1))}.mcms-bg-slate-50{--tw-bg-opacity:1;background-color:rgb(248 250 252/var(--tw-bg-opacity,1))}.mcms-bg-slate-900{--tw-bg-opacity:1;background-color:rgb(15 23 42/var(--tw-bg-opacity,1))}.mcms-bg-white{--tw-bg-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity,1))}.mcms-p-2{padding:.5rem}.mcms-p-3{padding:.75rem}.mcms-p-4{padding:1rem}.mcms-p-6{padding:1.5rem}.mcms-px-4{padding-left:1rem;padding-right:1rem}.mcms-px-6{padding-left:1.5rem;padding-right:1.5rem}.mcms-py-3{padding-top:.75rem;padding-bottom:.75rem}.mcms-py-8{padding-top:2rem;padding-bottom:2rem}.mcms-text-center{text-align:center}.mcms-font-mono{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace}.mcms-text-lg{font-size:1.125rem;line-height:1.75rem}.mcms-text-sm{font-size:.875rem;line-height:1.25rem}.mcms-text-xs{font-size:.75rem;line-height:1rem}.mcms-font-bold{font-weight:700}.mcms-font-medium{font-weight:500}.mcms-font-semibold{font-weight:600}.mcms-uppercase{text-transform:uppercase}.mcms-tracking-wider{letter-spacing:.05em}.mcms-text-green-500{--tw-text-opacity:1;color:rgb(34 197 94/var(--tw-text-opacity,1))}.mcms-text-green-700{--tw-text-opacity:1;color:rgb(21 128 61/var(--tw-text-opacity,1))}.mcms-text-indigo-600{--tw-text-opacity:1;color:rgb(79 70 229/var(--tw-text-opacity,1))}.mcms-text-red-700{--tw-text-opacity:1;color:rgb(185 28 28/var(--tw-text-opacity,1))}.mcms-text-slate-400{--tw-text-opacity:1;color:rgb(148 163 184/var(--tw-text-opacity,1))}.mcms-text-slate-500{--tw-text-opacity:1;color:rgb(100 116 139/var(--tw-text-opacity,1))}.mcms-text-slate-600{--tw-text-opacity:1;color:rgb(71 85 105/var(--tw-text-opacity,1))}.mcms-text-slate-900{--tw-text-opacity:1;color:rgb(15 23 42/var(--tw-text-opacity,1))}.mcms-text-white{--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity,1))}.mcms-shadow-sm{--tw-shadow:0 1px 2px 0 rgba(0,0,0,.05);--tw-shadow-colored:0 1px 2px 0 var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.mcms-transition-colors{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.hover:mcms-bg-black:hover{--tw-bg-opacity:1;background-color:rgb(0 0 0/var(--tw-bg-opacity,1))}.hover:mcms-bg-indigo-700:hover{--tw-bg-opacity:1;background-color:rgb(67 56 202/var(--tw-bg-opacity,1))}.hover:mcms-bg-orange-600:hover{--tw-bg-opacity:1;background-color:rgb(234 88 12/var(--tw-bg-opacity,1))}.hover:mcms-text-indigo-700:hover{--tw-text-opacity:1;color:rgb(67 56 202/var(--tw-text-opacity,1))}",C=()=>{if(typeof document>"u"||document.getElementById("mcms-crypto-styles"))return;let e=document.createElement("style");e.id="mcms-crypto-styles",e.textContent=j,document.head.appendChild(e)};var t=require("react/jsx-runtime");function _(...e){return(0,D.twMerge)((0,V.clsx)(e))}var J=({className:e,...a})=>{(0,W.useLayoutEffect)(()=>{C()},[]);let{status:r,intent:m,error:n,initiate:o,verify:w,setStatus:y,isSolanaAvailable:l,handleSolanaPay:p,isEVMAvailable:f,handleEVMPay:g}=A(a);return r==="success"?(0,t.jsxs)("div",{className:_("mcms-p-6 mcms-text-center mcms-bg-green-50 mcms-rounded-xl mcms-border mcms-border-green-200",e),children:[(0,t.jsx)(d.CheckCircle,{className:"mcms-mx-auto mcms-w-12 mcms-h-12 mcms-text-green-500 mcms-mb-4"}),(0,t.jsx)("h3",{className:"mcms-text-lg mcms-font-semibold mcms-green-900",children:"Payment Successful"}),(0,t.jsx)("p",{className:"mcms-text-green-700 mcms-mt-1",children:"Your order has been confirmed."})]}):(0,t.jsxs)("div",{className:_("mcms-bg-white mcms-rounded-2xl mcms-border mcms-border-slate-200 mcms-shadow-sm mcms-overflow-hidden",e),children:[(0,t.jsxs)("div",{className:"mcms-p-6",children:[(0,t.jsxs)("div",{className:"mcms-flex mcms-items-center mcms-gap-3 mcms-mb-6",children:[(0,t.jsx)("div",{className:"mcms-p-2 mcms-bg-indigo-50 mcms-rounded-lg",children:(0,t.jsx)(d.Wallet,{className:"mcms-w-5 mcms-h-5 mcms-text-indigo-600"})}),(0,t.jsxs)("div",{children:[(0,t.jsx)("h3",{className:"mcms-font-semibold mcms-text-slate-900",children:"Crypto Payment"}),(0,t.jsx)("p",{className:"mcms-text-sm mcms-text-slate-500",children:"Pay securely using your wallet"})]})]}),n&&(0,t.jsxs)("div",{className:"mcms-mb-4 mcms-p-3 mcms-bg-red-50 mcms-border mcms-border-red-100 mcms-rounded-lg mcms-flex mcms-gap-3 mcms-text-red-700 mcms-text-sm",children:[(0,t.jsx)(d.AlertCircle,{className:"mcms-w-4 mcms-h-4 mcms-shrink-0"}),(0,t.jsx)("p",{children:n})]}),r==="idle"&&(0,t.jsx)("button",{onClick:o,className:"mcms-w-full mcms-py-3 mcms-px-4 mcms-bg-indigo-600 hover:mcms-bg-indigo-700 mcms-text-white mcms-font-medium mcms-rounded-xl mcms-transition-colors mcms-flex mcms-items-center mcms-justify-center mcms-gap-2",children:"Start Payment"}),(r==="connecting"||r==="initiating"||r==="verifying")&&(0,t.jsxs)("div",{className:"mcms-py-8 mcms-text-center",children:[(0,t.jsx)(d.Loader2,{className:"mcms-w-8 mcms-h-8 mcms-text-indigo-600 mcms-animate-spin mcms-mx-auto mcms-mb-3"}),(0,t.jsx)("p",{className:"mcms-text-slate-600 mcms-font-medium",children:r==="connecting"?"Connecting wallet...":r==="initiating"?"Preparing transaction...":"Verifying on-chain..."})]}),r==="pending_signature"&&m&&(0,t.jsxs)("div",{className:"mcms-space-y-4",children:[(0,t.jsxs)("div",{className:"mcms-p-4 mcms-bg-slate-50 mcms-rounded-xl mcms-space-y-2",children:[(0,t.jsxs)("div",{className:"mcms-flex mcms-justify-between mcms-text-sm",children:[(0,t.jsx)("span",{className:"mcms-text-slate-500",children:"Amount to pay"}),(0,t.jsxs)("span",{className:"mcms-font-mono mcms-font-medium mcms-text-slate-900",children:[m.amount," ",m.currency]})]}),(0,t.jsxs)("div",{className:"mcms-flex mcms-justify-between mcms-text-sm",children:[(0,t.jsx)("span",{className:"mcms-text-slate-500",children:"Order ID"}),(0,t.jsx)("span",{className:"mcms-font-mono mcms-text-slate-900",children:m.orderId})]}),(0,t.jsxs)("div",{className:"mcms-flex mcms-justify-between mcms-text-sm",children:[(0,t.jsx)("span",{className:"mcms-text-slate-500",children:"Network"}),(0,t.jsx)("span",{className:"mcms-text-slate-900 mcms-font-medium",children:m.network})]})]}),(0,t.jsxs)("div",{className:"mcms-space-y-2",children:[(0,t.jsx)("p",{className:"mcms-text-xs mcms-text-slate-500 mcms-uppercase mcms-font-bold mcms-tracking-wider",children:"Destination Address"}),(0,t.jsx)("div",{className:"mcms-p-3 mcms-bg-slate-100 mcms-rounded-lg mcms-font-mono mcms-text-xs mcms-break-all mcms-text-slate-600 mcms-border mcms-border-slate-200 mcms-flex mcms-justify-center",children:m.paymentAddress?`${m.paymentAddress.slice(0,6)}...${m.paymentAddress.slice(-4)}`:"Establishing..."})]}),(0,t.jsx)("div",{className:"mcms-flex mcms-flex-col mcms-gap-2",children:m.network?.toLowerCase().includes("solana")&&l?(0,t.jsxs)("button",{onClick:p,className:"mcms-w-full mcms-py-3 mcms-px-4 mcms-bg-indigo-600 hover:mcms-bg-indigo-700 mcms-text-white mcms-font-medium mcms-rounded-xl mcms-transition-colors mcms-flex mcms-items-center mcms-justify-center mcms-gap-2",children:[(0,t.jsx)(d.Cpu,{className:"mcms-w-4 mcms-h-4"}),"Pay with Phantom"]}):(m.network?.toLowerCase().includes("ethereum")||m.network?.toLowerCase().includes("evm")||m.network?.toLowerCase().includes("polygon"))&&f?(0,t.jsxs)("button",{onClick:g,className:"mcms-w-full mcms-py-3 mcms-px-4 mcms-bg-orange-500 hover:mcms-bg-orange-600 mcms-text-white mcms-font-medium mcms-rounded-xl mcms-transition-colors mcms-flex mcms-items-center mcms-justify-center mcms-gap-2",children:[(0,t.jsx)("img",{src:"https://upload.wikimedia.org/wikipedia/commons/3/36/MetaMask_Mirror_Logo.svg",className:"mcms-w-4 mcms-h-4",alt:"MetaMask"}),"Pay with MetaMask"]}):(0,t.jsx)("button",{onClick:()=>{y("verifying"),setTimeout(()=>w("0x_mock_transaction_hash_generic"),2e3)},className:"mcms-w-full mcms-py-3 mcms-px-4 mcms-bg-slate-900 hover:mcms-bg-black mcms-text-white mcms-font-medium mcms-rounded-xl mcms-transition-colors mcms-flex mcms-items-center mcms-justify-center mcms-gap-2",children:"Confirm in Wallet"})})]})]}),(0,t.jsxs)("div",{className:"mcms-bg-slate-50 mcms-px-6 mcms-py-3 mcms-border-t mcms-border-slate-100 mcms-flex mcms-justify-between mcms-items-center",children:[(0,t.jsx)("span",{className:"mcms-text-xs mcms-text-slate-400",children:"Powered by Micro-CMS Crypto"}),(0,t.jsxs)("a",{href:"#",className:"mcms-text-xs mcms-text-indigo-600 hover:mcms-text-indigo-700 mcms-font-medium mcms-flex mcms-items-center mcms-gap-1",children:["Help ",(0,t.jsx)(d.ExternalLink,{className:"mcms-w-3 mcms-h-3"})]})]})]})};typeof window<"u"&&(window.Buffer||(window.Buffer=L.Buffer),window.global||(window.global=window));var A=e=>{let[a,r]=(0,b.useState)("idle"),[m,n]=(0,b.useState)(null),[o,w]=(0,b.useState)(null),y=(0,b.useCallback)(async()=>{try{if(r("initiating"),n(null),e.provider){let u=await e.provider.initiatePayment(e.orderId,{amount:e.amount,currency:e.currency});w(u),r("pending_signature");return}let s=await fetch(e.endpoints?.initiate||"/api/orders/initiate",{method:"POST",headers:{"Content-Type":"application/json",...e.headers||{}},body:JSON.stringify({productId:e.orderId,amount:e.amount,currency:e.currency,paymentProvider:"crypto"})});if(!s.ok){let u=await s.json();throw new Error(u.error||"Failed to initiate payment intent")}let c=await s.json();w(c),r("pending_signature")}catch(s){n(s.message),r("error"),e.onError?.(s)}},[e.provider,e.endpoints?.initiate,e.orderId,e.amount,e.currency,e.onError,e.headers]),l=(0,b.useCallback)(async s=>{try{if(r("verifying"),e.provider){let v=await e.provider.verifyPayment(s,e.orderId);if(v.status==="confirmed")r("success"),e.onSuccess?.(v);else throw new Error("Payment not confirmed yet, status: "+v.status);return}let c=await fetch(e.endpoints?.verify||"/api/orders/verify-payment",{method:"POST",headers:{"Content-Type":"application/json",...e.headers||{}},body:JSON.stringify({orderId:o?.orderId||e.orderId,transactionHash:s})});if(!c.ok){let v=await c.json();throw new Error(v.error||"Payment verification failed")}let u=await c.json();if(u.status==="confirmed")r("success"),e.onSuccess?.(u);else throw new Error("Payment not confirmed yet, status: "+u.status)}catch(c){n(c.message),r("error"),e.onError?.(c)}},[e.provider,e.endpoints?.verify,e.orderId,e.onSuccess,e.onError,e.headers,o?.orderId]),{isAvailable:p,connect:f,sendPayment:g}=S(),k=async()=>{try{if(!o){n("Payment intent not established."),r("error");return}r("connecting");let s=await f();console.log("Connected to Solana with public key:",s),r("pending_signature");let c=await g(o);r("verifying"),await l(c)}catch(s){n(s.message||"Failed to connect to Phantom or sign transaction."),r("error"),e.onError?.(s instanceof Error?s:new Error(String(s)))}},{isAvailable:E,connect:x,sendPayment:N}=M();return{status:a,intent:o,error:m,initiate:y,verify:l,setStatus:r,isSolanaAvailable:p,handleSolanaPay:k,isEVMAvailable:E,handleEVMPay:async()=>{try{if(!o){n("Payment intent not established."),r("error");return}r("connecting");let s=await x();console.log("Connected to EVM with account:",s),r("pending_signature");let c=await N(o);r("verifying"),await l(c)}catch(s){n(s.message||"Failed to connect to MetaMask or sign transaction."),r("error"),e.onError?.(s instanceof Error?s:new Error(String(s)))}}}};0&&(module.exports={CSS_CONTENT,PaymentWidget,injectStyles,useEVMWallet,usePayment,useSolanaWallet});
|
|
2
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/index.ts","../src/providers/SolanaProvider.ts","../src/providers/EVMProvider.ts","../src/PaymentWidget.tsx","../src/injectStyles.ts"],"sourcesContent":["import { Buffer } from 'buffer';\n\n// 1. Injected Polyfills for Solana/Crypto compatibility (Top-level)\nif (typeof window !== 'undefined') {\n if (!(window as any).Buffer) {\n (window as any).Buffer = Buffer;\n }\n if (!(window as any).global) {\n (window as any).global = window;\n }\n}\n\nimport { useState, useCallback } from 'react';\nimport { PaymentIntent, PaymentVerification, PaymentProvider } from '@micro-cms/types';\nimport { useSolanaWallet } from './providers/SolanaProvider';\nimport { useEVMWallet } from './providers/EVMProvider';\n\nexport * from './providers/SolanaProvider';\nexport * from './providers/EVMProvider';\nexport * from './PaymentWidget';\nexport * from './injectStyles';\n\nexport interface PaymentWidgetProps {\n orderId: string;\n amount?: number; // Optional, will be determined by backend\n currency?: string; // Optional, will be determined by backend\n onSuccess?: (verification: PaymentVerification) => void;\n onError?: (error: Error) => void;\n provider?: PaymentProvider; // Optional direct provider for standalone use\n endpoints?: {\n initiate?: string; // Default to /api/orders/initiate\n verify?: string; // Default to /api/orders/verify-payment\n };\n headers?: Record<string, string>; // Optional custom headers for fetch calls\n className?: string; // Classname for the wrapper div\n}\n\nexport type PaymentStatus = 'idle' | 'connecting' | 'initiating' | 'pending_signature' | 'verifying' | 'success' | 'error';\n\nexport const usePayment = (props: PaymentWidgetProps) => {\n const [status, setStatus] = useState<PaymentStatus>('idle');\n const [error, setError] = useState<string | null>(null);\n const [intent, setIntent] = useState<PaymentIntent | null>(null);\n\n const initiate = useCallback(async () => {\n try {\n setStatus('initiating');\n setError(null);\n\n if (props.provider) {\n const data = await props.provider.initiatePayment(props.orderId, {\n amount: props.amount,\n currency: props.currency\n });\n setIntent(data);\n setStatus('pending_signature');\n return;\n }\n\n const response = await fetch(props.endpoints?.initiate || '/api/orders/initiate', {\n method: 'POST',\n headers: { \n 'Content-Type': 'application/json',\n ...(props.headers || {})\n },\n body: JSON.stringify({\n productId: props.orderId, // In node_api, it expects productId\n amount: props.amount,\n currency: props.currency,\n paymentProvider: 'crypto' // Tell backend we want crypto\n })\n });\n\n if (!response.ok) {\n const errorData = await response.json();\n throw new Error(errorData.error || 'Failed to initiate payment intent');\n }\n \n const data: PaymentIntent = await response.json();\n setIntent(data);\n setStatus('pending_signature');\n } catch (err: any) {\n setError(err.message);\n setStatus('error');\n props.onError?.(err);\n }\n }, [props.provider, props.endpoints?.initiate, props.orderId, props.amount, props.currency, props.onError, props.headers]);\n\n const verify = useCallback(async (txHash: string) => {\n try {\n setStatus('verifying');\n\n if (props.provider) {\n const data = await props.provider.verifyPayment(txHash, props.orderId);\n if (data.status === 'confirmed') {\n setStatus('success');\n props.onSuccess?.(data);\n } else {\n throw new Error('Payment not confirmed yet, status: ' + data.status);\n }\n return;\n }\n\n const response = await fetch(props.endpoints?.verify || '/api/orders/verify-payment', {\n method: 'POST',\n headers: { \n 'Content-Type': 'application/json',\n ...(props.headers || {})\n },\n body: JSON.stringify({\n orderId: intent?.orderId || props.orderId,\n transactionHash: txHash\n })\n });\n\n if (!response.ok) {\n const errorData = await response.json();\n throw new Error(errorData.error || 'Payment verification failed');\n }\n \n const data: PaymentVerification = await response.json();\n if (data.status === 'confirmed') {\n setStatus('success');\n props.onSuccess?.(data);\n } else {\n throw new Error('Payment not confirmed yet, status: ' + data.status);\n }\n } catch (err: any) {\n setError(err.message);\n setStatus('error');\n props.onError?.(err);\n }\n }, [props.provider, props.endpoints?.verify, props.orderId, props.onSuccess, props.onError, props.headers, intent?.orderId]);\n\n // Integration with Solana\n const { isAvailable: isSolanaAvailable, connect: connectSolana, sendPayment: sendSolanaPayment } = useSolanaWallet();\n\n const handleSolanaPay = async () => {\n try {\n if (!intent) {\n setError('Payment intent not established.');\n setStatus('error');\n return;\n }\n setStatus('connecting');\n const publicKey = await connectSolana();\n console.log('Connected to Solana with public key:', publicKey);\n \n setStatus('pending_signature');\n const signature = await sendSolanaPayment(intent); \n \n setStatus('verifying');\n await verify(signature);\n } catch (err: any) {\n setError(err.message || 'Failed to connect to Phantom or sign transaction.');\n setStatus('error');\n props.onError?.(err instanceof Error ? err : new Error(String(err)));\n }\n };\n\n // Integration with EVM\n const { isAvailable: isEVMAvailable, connect: connectEVM, sendPayment: sendEVMPayment } = useEVMWallet();\n\n const handleEVMPay = async () => {\n try {\n if (!intent) {\n setError('Payment intent not established.');\n setStatus('error');\n return;\n }\n setStatus('connecting');\n const account = await connectEVM();\n console.log('Connected to EVM with account:', account);\n \n setStatus('pending_signature');\n const txHash = await sendEVMPayment(intent); \n \n setStatus('verifying');\n await verify(txHash);\n } catch (err: any) {\n setError(err.message || 'Failed to connect to MetaMask or sign transaction.');\n setStatus('error');\n props.onError?.(err instanceof Error ? err : new Error(String(err)));\n }\n };\n\n return { \n status, \n intent, \n error, \n initiate, \n verify, \n setStatus, \n isSolanaAvailable, \n handleSolanaPay,\n isEVMAvailable,\n handleEVMPay\n };\n};","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","import { PaymentIntent } from '@micro-cms/types';\n\nexport interface EthereumWindow extends Window {\n ethereum?: {\n isMetaMask?: boolean;\n request: (request: { method: string; params?: any[] }) => Promise<any>;\n on: (event: string, callback: (...args: any[]) => void) => void;\n removeListener: (event: string, callback: (...args: any[]) => void) => void;\n };\n}\n\nexport const useEVMWallet = () => {\n const getProvider = (): (EthereumWindow['ethereum']) => {\n if (typeof window !== 'undefined' && 'ethereum' in window) {\n return (window as EthereumWindow).ethereum;\n }\n return undefined;\n };\n\n const connect = async () => {\n const provider = getProvider();\n if (provider) {\n try {\n const accounts = await provider.request({ method: 'eth_requestAccounts' });\n return accounts[0];\n } catch (err) {\n throw new Error('User rejected the connection');\n }\n } else {\n throw new Error('MetaMask or EVM 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 const accounts = await provider.request({ method: 'eth_accounts' });\n if (!accounts || accounts.length === 0) {\n throw new Error('No accounts found. Please connect your wallet first.');\n }\n\n // Convert amount to Wei (assuming 18 decimals for ETH/Standard tokens)\n // For USDC on EVM, it's usually 6 decimals. \n // This logic should ideally be more robust based on the token.\n const decimals = intent.currency.toUpperCase() === 'USDC' ? 6 : 18;\n const value = '0x' + (BigInt(Math.floor(Number(intent.amount) * Math.pow(10, decimals)))).toString(16);\n\n try {\n const txHash = await provider.request({\n method: 'eth_sendTransaction',\n params: [{\n from: accounts[0],\n to: intent.paymentAddress,\n value: intent.currency.toUpperCase() === 'ETH' ? value : '0x0', // Only value for native currency\n // If it was a token transfer, we would need the data field with transfer(address,uint256)\n }],\n });\n\n return txHash;\n } catch (err: any) {\n if (err.code === 4001) {\n throw new Error('Transaction rejected by user');\n }\n throw new Error(err.message || 'Failed to send transaction');\n }\n };\n\n return { isAvailable: !!getProvider(), connect, sendPayment };\n};\n","import React, { useLayoutEffect } from 'react';\nimport { Wallet, CheckCircle, Loader2, AlertCircle, ExternalLink, Cpu } from 'lucide-react';\nimport { clsx, type ClassValue } from 'clsx';\nimport { twMerge } from 'tailwind-merge';\nimport { PaymentWidgetProps, usePayment } from './index'; // Import usePayment from index.ts\nimport { injectStyles } from './injectStyles';\n\nfunction cn(...inputs: ClassValue[]) {\n return twMerge(clsx(inputs));\n}\n\nexport const PaymentWidget: React.FC<PaymentWidgetProps> = ({ \n className,\n ...props \n}) => {\n useLayoutEffect(() => {\n injectStyles();\n }, []);\n\n const { \n status, \n intent, \n error, \n initiate, \n verify, \n setStatus, \n isSolanaAvailable, \n handleSolanaPay,\n isEVMAvailable,\n handleEVMPay\n } = usePayment(props);\n\n if (status === 'success') {\n return (\n <div className={cn(\"mcms-p-6 mcms-text-center mcms-bg-green-50 mcms-rounded-xl mcms-border mcms-border-green-200\", className)}>\n <CheckCircle className=\"mcms-mx-auto mcms-w-12 mcms-h-12 mcms-text-green-500 mcms-mb-4\" />\n <h3 className=\"mcms-text-lg mcms-font-semibold mcms-green-900\">Payment Successful</h3>\n <p className=\"mcms-text-green-700 mcms-mt-1\">Your order has been confirmed.</p>\n </div>\n );\n }\n\n return (\n <div className={cn(\"mcms-bg-white mcms-rounded-2xl mcms-border mcms-border-slate-200 mcms-shadow-sm mcms-overflow-hidden\", className)}>\n <div className=\"mcms-p-6\">\n <div className=\"mcms-flex mcms-items-center mcms-gap-3 mcms-mb-6\">\n <div className=\"mcms-p-2 mcms-bg-indigo-50 mcms-rounded-lg\">\n <Wallet className=\"mcms-w-5 mcms-h-5 mcms-text-indigo-600\" />\n </div>\n <div>\n <h3 className=\"mcms-font-semibold mcms-text-slate-900\">Crypto Payment</h3>\n <p className=\"mcms-text-sm mcms-text-slate-500\">Pay securely using your wallet</p>\n </div>\n </div>\n\n {error && (\n <div className=\"mcms-mb-4 mcms-p-3 mcms-bg-red-50 mcms-border mcms-border-red-100 mcms-rounded-lg mcms-flex mcms-gap-3 mcms-text-red-700 mcms-text-sm\">\n <AlertCircle className=\"mcms-w-4 mcms-h-4 mcms-shrink-0\" />\n <p>{error}</p>\n </div>\n )}\n\n {status === 'idle' && (\n <button\n onClick={initiate}\n className=\"mcms-w-full mcms-py-3 mcms-px-4 mcms-bg-indigo-600 hover:mcms-bg-indigo-700 mcms-text-white mcms-font-medium mcms-rounded-xl mcms-transition-colors mcms-flex mcms-items-center mcms-justify-center mcms-gap-2\"\n >\n Start Payment\n </button>\n )}\n\n {(status === 'connecting' || status === 'initiating' || status === 'verifying') && (\n <div className=\"mcms-py-8 mcms-text-center\">\n <Loader2 className=\"mcms-w-8 mcms-h-8 mcms-text-indigo-600 mcms-animate-spin mcms-mx-auto mcms-mb-3\" />\n <p className=\"mcms-text-slate-600 mcms-font-medium\">\n {status === 'connecting' ? 'Connecting wallet...' : status === 'initiating' ? 'Preparing transaction...' : 'Verifying on-chain...'}\n </p>\n </div>\n )}\n\n {status === 'pending_signature' && intent && (\n <div className=\"mcms-space-y-4\">\n <div className=\"mcms-p-4 mcms-bg-slate-50 mcms-rounded-xl mcms-space-y-2\">\n <div className=\"mcms-flex mcms-justify-between mcms-text-sm\">\n <span className=\"mcms-text-slate-500\">Amount to pay</span>\n <span className=\"mcms-font-mono mcms-font-medium mcms-text-slate-900\">{intent.amount} {intent.currency}</span>\n </div>\n <div className=\"mcms-flex mcms-justify-between mcms-text-sm\">\n <span className=\"mcms-text-slate-500\">Order ID</span>\n <span className=\"mcms-font-mono mcms-text-slate-900\">{intent.orderId}</span>\n </div>\n <div className=\"mcms-flex mcms-justify-between mcms-text-sm\">\n <span className=\"mcms-text-slate-500\">Network</span>\n <span className=\"mcms-text-slate-900 mcms-font-medium\">{intent.network}</span>\n </div>\n </div>\n\n <div className=\"mcms-space-y-2\">\n <p className=\"mcms-text-xs mcms-text-slate-500 mcms-uppercase mcms-font-bold mcms-tracking-wider\">\n Destination Address\n </p>\n <div className=\"mcms-p-3 mcms-bg-slate-100 mcms-rounded-lg mcms-font-mono mcms-text-xs mcms-break-all mcms-text-slate-600 mcms-border mcms-border-slate-200 mcms-flex mcms-justify-center\">\n {intent.paymentAddress ? `${intent.paymentAddress.slice(0, 6)}...${intent.paymentAddress.slice(-4)}` : 'Establishing...'}\n </div>\n </div>\n\n <div className=\"mcms-flex mcms-flex-col mcms-gap-2\">\n {intent.network?.toLowerCase().includes('solana') && isSolanaAvailable ? (\n <button\n onClick={handleSolanaPay}\n className=\"mcms-w-full mcms-py-3 mcms-px-4 mcms-bg-indigo-600 hover:mcms-bg-indigo-700 mcms-text-white mcms-font-medium mcms-rounded-xl mcms-transition-colors mcms-flex mcms-items-center mcms-justify-center mcms-gap-2\"\n >\n <Cpu className=\"mcms-w-4 mcms-h-4\" />\n Pay with Phantom\n </button>\n ) : (intent.network?.toLowerCase().includes('ethereum') || intent.network?.toLowerCase().includes('evm') || intent.network?.toLowerCase().includes('polygon')) && isEVMAvailable ? (\n <button\n onClick={handleEVMPay}\n className=\"mcms-w-full mcms-py-3 mcms-px-4 mcms-bg-orange-500 hover:mcms-bg-orange-600 mcms-text-white mcms-font-medium mcms-rounded-xl mcms-transition-colors mcms-flex mcms-items-center mcms-justify-center mcms-gap-2\"\n >\n <img src=\"https://upload.wikimedia.org/wikipedia/commons/3/36/MetaMask_Mirror_Logo.svg\" className=\"mcms-w-4 mcms-h-4\" alt=\"MetaMask\" />\n Pay with MetaMask\n </button>\n ) : (\n <button\n onClick={() => {\n // For other networks or if dedicated provider is not available, we assume a generic confirmation step\n setStatus('verifying');\n setTimeout(() => verify('0x_mock_transaction_hash_generic'), 2000);\n }}\n className=\"mcms-w-full mcms-py-3 mcms-px-4 mcms-bg-slate-900 hover:mcms-bg-black mcms-text-white mcms-font-medium mcms-rounded-xl mcms-transition-colors mcms-flex mcms-items-center mcms-justify-center mcms-gap-2\"\n >\n Confirm in Wallet\n </button>\n )}\n </div>\n </div>\n )}\n </div>\n \n <div className=\"mcms-bg-slate-50 mcms-px-6 mcms-py-3 mcms-border-t mcms-border-slate-100 mcms-flex mcms-justify-between mcms-items-center\">\n <span className=\"mcms-text-xs mcms-text-slate-400\">Powered by Micro-CMS Crypto</span>\n <a href=\"#\" className=\"mcms-text-xs mcms-text-indigo-600 hover:mcms-text-indigo-700 mcms-font-medium mcms-flex mcms-items-center mcms-gap-1\">\n Help <ExternalLink className=\"mcms-w-3 mcms-h-3\" />\n </a>\n </div>\n </div>\n );\n};\n","// Standard Micro-CMS Style Injection\nexport const CSS_CONTENT = `.mcms-mx-auto{margin-left:auto;margin-right:auto}.mcms-mb-3{margin-bottom:.75rem}.mcms-mb-4{margin-bottom:1rem}.mcms-mb-6{margin-bottom:1.5rem}.mcms-mt-1{margin-top:.25rem}.mcms-flex{display:flex}.mcms-h-12{height:3rem}.mcms-h-3{height:.75rem}.mcms-h-4{height:1rem}.mcms-h-5{height:1.25rem}.mcms-h-8{height:2rem}.mcms-w-12{width:3rem}.mcms-w-3{width:.75rem}.mcms-w-4{width:1rem}.mcms-w-5{width:1.25rem}.mcms-w-8{width:2rem}.mcms-w-full{width:100%}.mcms-shrink-0{flex-shrink:0}@keyframes mcms-spin{to{transform:rotate(1turn)}}.mcms-animate-spin{animation:mcms-spin 1s linear infinite}.mcms-flex-col{flex-direction:column}.mcms-items-center{align-items:center}.mcms-justify-center{justify-content:center}.mcms-justify-between{justify-content:space-between}.mcms-gap-1{gap:.25rem}.mcms-gap-2{gap:.5rem}.mcms-gap-3{gap:.75rem}.mcms-space-y-2>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-top:calc(.5rem*(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.5rem*var(--tw-space-y-reverse))}.mcms-space-y-4>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-top:calc(1rem*(1 - var(--tw-space-y-reverse)));margin-bottom:calc(1rem*var(--tw-space-y-reverse))}.mcms-overflow-hidden{overflow:hidden}.mcms-break-all{word-break:break-all}.mcms-rounded-2xl{border-radius:1rem}.mcms-rounded-lg{border-radius:.5rem}.mcms-rounded-xl{border-radius:.75rem}.mcms-border{border-width:1px}.mcms-border-t{border-top-width:1px}.mcms-border-green-200{--tw-border-opacity:1;border-color:rgb(187 247 208/var(--tw-border-opacity,1))}.mcms-border-red-100{--tw-border-opacity:1;border-color:rgb(254 226 226/var(--tw-border-opacity,1))}.mcms-border-slate-100{--tw-border-opacity:1;border-color:rgb(241 245 249/var(--tw-border-opacity,1))}.mcms-border-slate-200{--tw-border-opacity:1;border-color:rgb(226 232 240/var(--tw-border-opacity,1))}.mcms-bg-green-50{--tw-bg-opacity:1;background-color:rgb(240 253 244/var(--tw-bg-opacity,1))}.mcms-bg-indigo-50{--tw-bg-opacity:1;background-color:rgb(238 242 255/var(--tw-bg-opacity,1))}.mcms-bg-indigo-600{--tw-bg-opacity:1;background-color:rgb(79 70 229/var(--tw-bg-opacity,1))}.mcms-bg-orange-500{--tw-bg-opacity:1;background-color:rgb(249 115 22/var(--tw-bg-opacity,1))}.mcms-bg-red-50{--tw-bg-opacity:1;background-color:rgb(254 242 242/var(--tw-bg-opacity,1))}.mcms-bg-slate-100{--tw-bg-opacity:1;background-color:rgb(241 245 249/var(--tw-bg-opacity,1))}.mcms-bg-slate-50{--tw-bg-opacity:1;background-color:rgb(248 250 252/var(--tw-bg-opacity,1))}.mcms-bg-slate-900{--tw-bg-opacity:1;background-color:rgb(15 23 42/var(--tw-bg-opacity,1))}.mcms-bg-white{--tw-bg-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity,1))}.mcms-p-2{padding:.5rem}.mcms-p-3{padding:.75rem}.mcms-p-4{padding:1rem}.mcms-p-6{padding:1.5rem}.mcms-px-4{padding-left:1rem;padding-right:1rem}.mcms-px-6{padding-left:1.5rem;padding-right:1.5rem}.mcms-py-3{padding-top:.75rem;padding-bottom:.75rem}.mcms-py-8{padding-top:2rem;padding-bottom:2rem}.mcms-text-center{text-align:center}.mcms-font-mono{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace}.mcms-text-lg{font-size:1.125rem;line-height:1.75rem}.mcms-text-sm{font-size:.875rem;line-height:1.25rem}.mcms-text-xs{font-size:.75rem;line-height:1rem}.mcms-font-bold{font-weight:700}.mcms-font-medium{font-weight:500}.mcms-font-semibold{font-weight:600}.mcms-uppercase{text-transform:uppercase}.mcms-tracking-wider{letter-spacing:.05em}.mcms-text-green-500{--tw-text-opacity:1;color:rgb(34 197 94/var(--tw-text-opacity,1))}.mcms-text-green-700{--tw-text-opacity:1;color:rgb(21 128 61/var(--tw-text-opacity,1))}.mcms-text-indigo-600{--tw-text-opacity:1;color:rgb(79 70 229/var(--tw-text-opacity,1))}.mcms-text-red-700{--tw-text-opacity:1;color:rgb(185 28 28/var(--tw-text-opacity,1))}.mcms-text-slate-400{--tw-text-opacity:1;color:rgb(148 163 184/var(--tw-text-opacity,1))}.mcms-text-slate-500{--tw-text-opacity:1;color:rgb(100 116 139/var(--tw-text-opacity,1))}.mcms-text-slate-600{--tw-text-opacity:1;color:rgb(71 85 105/var(--tw-text-opacity,1))}.mcms-text-slate-900{--tw-text-opacity:1;color:rgb(15 23 42/var(--tw-text-opacity,1))}.mcms-text-white{--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity,1))}.mcms-shadow-sm{--tw-shadow:0 1px 2px 0 rgba(0,0,0,.05);--tw-shadow-colored:0 1px 2px 0 var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.mcms-transition-colors{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.hover\\:mcms-bg-black:hover{--tw-bg-opacity:1;background-color:rgb(0 0 0/var(--tw-bg-opacity,1))}.hover\\:mcms-bg-indigo-700:hover{--tw-bg-opacity:1;background-color:rgb(67 56 202/var(--tw-bg-opacity,1))}.hover\\:mcms-bg-orange-600:hover{--tw-bg-opacity:1;background-color:rgb(234 88 12/var(--tw-bg-opacity,1))}.hover\\:mcms-text-indigo-700:hover{--tw-text-opacity:1;color:rgb(67 56 202/var(--tw-text-opacity,1))}`;\n\nexport const injectStyles = () => {\n if (typeof document === 'undefined') return;\n if (document.getElementById('mcms-crypto-styles')) return;\n\n const style = document.createElement('style');\n style.id = 'mcms-crypto-styles';\n style.textContent = CSS_CONTENT;\n document.head.appendChild(style);\n};\n"],"mappings":"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","names":["index_exports","__export","CSS_CONTENT","PaymentWidget","injectStyles","useEVMWallet","usePayment","useSolanaWallet","__toCommonJS","import_buffer","import_react","import_web3","import_spl_token","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","useEVMWallet","getProvider","connect","provider","sendPayment","intent","accounts","decimals","value","err","import_react","import_lucide_react","import_clsx","import_tailwind_merge","CSS_CONTENT","injectStyles","style","import_jsx_runtime","cn","inputs","PaymentWidget","className","props","injectStyles","status","intent","error","initiate","verify","setStatus","isSolanaAvailable","handleSolanaPay","isEVMAvailable","handleEVMPay","usePayment","usePayment","props","status","setStatus","error","setError","intent","setIntent","initiate","data","response","errorData","err","verify","txHash","isSolanaAvailable","connectSolana","sendSolanaPayment","useSolanaWallet","handleSolanaPay","publicKey","signature","isEVMAvailable","connectEVM","sendEVMPayment","useEVMWallet","account"]}
|
package/dist/index.mjs
CHANGED
|
@@ -1 +1,2 @@
|
|
|
1
|
-
import{useState as k,useCallback as T}from"react";import{Connection as A,PublicKey as f,Transaction as j,SystemProgram as _,LAMPORTS_PER_SOL as W}from"@solana/web3.js";import{TOKEN_PROGRAM_ID as V,createTransferInstruction as D,getMint as L}from"@solana/spl-token";var U=new f("4zMMC9srt5Ri5X14GAgXhaHii3GnPAEERYPJgZJDncDU"),q=new f("EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v"),N=()=>{let t=()=>{if(typeof window<"u"&&"solana"in window){let r=window;if(r.solana?.isPhantom)return r.solana}},w=async()=>{let r=t();if(r)try{return(await r.connect()).publicKey.toString()}catch{throw new Error("User rejected the connection")}else throw new Error("Phantom wallet not found")},e=async r=>{let n=t();if(!n)throw new Error("Wallet not connected");try{let s=!window.location.host.includes("localhost")&&!window.location.host.includes("dev."),g=s?"https://api.mainnet-beta.solana.com":"https://api.devnet.solana.com",u=new A(g,"confirmed"),i=await n.connect({onlyIfTrusted:!0}),y=new f(i.publicKey.toString()),p=new f(r.paymentAddress),d=new j;if(r.currency?.toUpperCase()==="USDC"){let b=s?q:U,P=await L(u,b),E=Math.round(Number(r.amount)*Math.pow(10,P.decimals)),{getAssociatedTokenAddress:m}=await import("@solana/spl-token"),c=await m(b,y),l=await m(b,p);d.add(D(c,l,y,E,[],V))}else d.add(_.transfer({fromPubkey:y,toPubkey:p,lamports:Math.round(Number(r.amount)*W)}));let{blockhash:v}=await u.getLatestBlockhash();d.recentBlockhash=v,d.feePayer=y;let{signature:x}=await n.signAndSendTransaction(d);return x}catch(s){throw console.error("Solana Transaction Error:",s),s.message?.includes("User rejected")?new Error("Transaction rejected by user"):new Error(s.message||"Failed to send Solana transaction")}};return{isAvailable:!!t(),connect:w,sendPayment:e}};var S=()=>{let t=()=>{if(typeof window<"u"&&"ethereum"in window)return window.ethereum},w=async()=>{let r=t();if(r)try{return(await r.request({method:"eth_requestAccounts"}))[0]}catch{throw new Error("User rejected the connection")}else throw new Error("MetaMask or EVM wallet not found")},e=async r=>{let n=t();if(!n)throw new Error("Wallet not connected");let s=await n.request({method:"eth_accounts"});if(!s||s.length===0)throw new Error("No accounts found. Please connect your wallet first.");let g=r.currency.toUpperCase()==="USDC"?6:18,u="0x"+BigInt(Math.floor(Number(r.amount)*Math.pow(10,g))).toString(16);try{return await n.request({method:"eth_sendTransaction",params:[{from:s[0],to:r.paymentAddress,value:r.currency.toUpperCase()==="ETH"?u:"0x0"}]})}catch(i){throw i.code===4001?new Error("Transaction rejected by user"):new Error(i.message||"Failed to send transaction")}};return{isAvailable:!!t(),connect:w,sendPayment:e}};import{useLayoutEffect as R}from"react";import{Wallet as F,CheckCircle as z,Loader2 as G,AlertCircle as H,ExternalLink as K,Cpu as B}from"lucide-react";import{clsx as J}from"clsx";import{twMerge as X}from"tailwind-merge";var O=".mcms-mx-auto{margin-left:auto;margin-right:auto}.mcms-mb-3{margin-bottom:.75rem}.mcms-mb-4{margin-bottom:1rem}.mcms-mb-6{margin-bottom:1.5rem}.mcms-mt-1{margin-top:.25rem}.mcms-flex{display:flex}.mcms-h-12{height:3rem}.mcms-h-3{height:.75rem}.mcms-h-4{height:1rem}.mcms-h-5{height:1.25rem}.mcms-h-8{height:2rem}.mcms-w-12{width:3rem}.mcms-w-3{width:.75rem}.mcms-w-4{width:1rem}.mcms-w-5{width:1.25rem}.mcms-w-8{width:2rem}.mcms-w-full{width:100%}.mcms-shrink-0{flex-shrink:0}@keyframes mcms-spin{to{transform:rotate(1turn)}}.mcms-animate-spin{animation:mcms-spin 1s linear infinite}.mcms-flex-col{flex-direction:column}.mcms-items-center{align-items:center}.mcms-justify-center{justify-content:center}.mcms-justify-between{justify-content:space-between}.mcms-gap-1{gap:.25rem}.mcms-gap-2{gap:.5rem}.mcms-gap-3{gap:.75rem}.mcms-space-y-2>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-top:calc(.5rem*(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.5rem*var(--tw-space-y-reverse))}.mcms-space-y-4>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-top:calc(1rem*(1 - var(--tw-space-y-reverse)));margin-bottom:calc(1rem*var(--tw-space-y-reverse))}.mcms-overflow-hidden{overflow:hidden}.mcms-break-all{word-break:break-all}.mcms-rounded-2xl{border-radius:1rem}.mcms-rounded-lg{border-radius:.5rem}.mcms-rounded-xl{border-radius:.75rem}.mcms-border{border-width:1px}.mcms-border-t{border-top-width:1px}.mcms-border-green-200{--tw-border-opacity:1;border-color:rgb(187 247 208/var(--tw-border-opacity,1))}.mcms-border-red-100{--tw-border-opacity:1;border-color:rgb(254 226 226/var(--tw-border-opacity,1))}.mcms-border-slate-100{--tw-border-opacity:1;border-color:rgb(241 245 249/var(--tw-border-opacity,1))}.mcms-border-slate-200{--tw-border-opacity:1;border-color:rgb(226 232 240/var(--tw-border-opacity,1))}.mcms-bg-green-50{--tw-bg-opacity:1;background-color:rgb(240 253 244/var(--tw-bg-opacity,1))}.mcms-bg-indigo-50{--tw-bg-opacity:1;background-color:rgb(238 242 255/var(--tw-bg-opacity,1))}.mcms-bg-indigo-600{--tw-bg-opacity:1;background-color:rgb(79 70 229/var(--tw-bg-opacity,1))}.mcms-bg-orange-500{--tw-bg-opacity:1;background-color:rgb(249 115 22/var(--tw-bg-opacity,1))}.mcms-bg-red-50{--tw-bg-opacity:1;background-color:rgb(254 242 242/var(--tw-bg-opacity,1))}.mcms-bg-sky-600{--tw-bg-opacity:1;background-color:rgb(2 132 199/var(--tw-bg-opacity,1))}.mcms-bg-slate-100{--tw-bg-opacity:1;background-color:rgb(241 245 249/var(--tw-bg-opacity,1))}.mcms-bg-slate-50{--tw-bg-opacity:1;background-color:rgb(248 250 252/var(--tw-bg-opacity,1))}.mcms-bg-slate-900{--tw-bg-opacity:1;background-color:rgb(15 23 42/var(--tw-bg-opacity,1))}.mcms-bg-white{--tw-bg-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity,1))}.mcms-p-2{padding:.5rem}.mcms-p-3{padding:.75rem}.mcms-p-4{padding:1rem}.mcms-p-6{padding:1.5rem}.mcms-px-4{padding-left:1rem;padding-right:1rem}.mcms-px-6{padding-left:1.5rem;padding-right:1.5rem}.mcms-py-3{padding-top:.75rem;padding-bottom:.75rem}.mcms-py-8{padding-top:2rem;padding-bottom:2rem}.mcms-text-center{text-align:center}.mcms-font-mono{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace}.mcms-text-lg{font-size:1.125rem;line-height:1.75rem}.mcms-text-sm{font-size:.875rem;line-height:1.25rem}.mcms-text-xs{font-size:.75rem;line-height:1rem}.mcms-font-bold{font-weight:700}.mcms-font-medium{font-weight:500}.mcms-font-semibold{font-weight:600}.mcms-uppercase{text-transform:uppercase}.mcms-tracking-wider{letter-spacing:.05em}.mcms-text-green-500{--tw-text-opacity:1;color:rgb(34 197 94/var(--tw-text-opacity,1))}.mcms-text-green-700{--tw-text-opacity:1;color:rgb(21 128 61/var(--tw-text-opacity,1))}.mcms-text-indigo-600{--tw-text-opacity:1;color:rgb(79 70 229/var(--tw-text-opacity,1))}.mcms-text-red-700{--tw-text-opacity:1;color:rgb(185 28 28/var(--tw-text-opacity,1))}.mcms-text-slate-400{--tw-text-opacity:1;color:rgb(148 163 184/var(--tw-text-opacity,1))}.mcms-text-slate-500{--tw-text-opacity:1;color:rgb(100 116 139/var(--tw-text-opacity,1))}.mcms-text-slate-600{--tw-text-opacity:1;color:rgb(71 85 105/var(--tw-text-opacity,1))}.mcms-text-slate-900{--tw-text-opacity:1;color:rgb(15 23 42/var(--tw-text-opacity,1))}.mcms-text-white{--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity,1))}.mcms-shadow-sm{--tw-shadow:0 1px 2px 0 rgba(0,0,0,.05);--tw-shadow-colored:0 1px 2px 0 var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.mcms-transition-colors{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.hover:mcms-bg-black:hover{--tw-bg-opacity:1;background-color:rgb(0 0 0/var(--tw-bg-opacity,1))}.hover:mcms-bg-indigo-700:hover{--tw-bg-opacity:1;background-color:rgb(67 56 202/var(--tw-bg-opacity,1))}.hover:mcms-bg-orange-600:hover{--tw-bg-opacity:1;background-color:rgb(234 88 12/var(--tw-bg-opacity,1))}.hover:mcms-text-indigo-700:hover{--tw-text-opacity:1;color:rgb(67 56 202/var(--tw-text-opacity,1))}",M=()=>{if(typeof document>"u"||document.getElementById("mcms-crypto-styles"))return;let t=document.createElement("style");t.id="mcms-crypto-styles",t.textContent=O,document.head.appendChild(t)};import{jsx as o,jsxs as a}from"react/jsx-runtime";function C(...t){return X(J(t))}var dt=({className:t,...w})=>{R(()=>{M()},[]);let{status:e,intent:r,error:n,initiate:s,verify:g,setStatus:u,isSolanaAvailable:i,handleSolanaPay:y,isEVMAvailable:p,handleEVMPay:d}=I(w);return e==="success"?a("div",{className:C("mcms-p-6 mcms-text-center mcms-bg-green-50 mcms-rounded-xl mcms-border mcms-border-green-200",t),children:[o(z,{className:"mcms-mx-auto mcms-w-12 mcms-h-12 mcms-text-green-500 mcms-mb-4"}),o("h3",{className:"mcms-text-lg mcms-font-semibold mcms-green-900",children:"Payment Successful"}),o("p",{className:"mcms-text-green-700 mcms-mt-1",children:"Your order has been confirmed."})]}):a("div",{className:C("mcms-bg-white mcms-rounded-2xl mcms-border mcms-border-slate-200 mcms-shadow-sm mcms-overflow-hidden",t),children:[a("div",{className:"mcms-p-6",children:[a("div",{className:"mcms-flex mcms-items-center mcms-gap-3 mcms-mb-6",children:[o("div",{className:"mcms-p-2 mcms-bg-indigo-50 mcms-rounded-lg",children:o(F,{className:"mcms-w-5 mcms-h-5 mcms-text-indigo-600"})}),a("div",{children:[o("h3",{className:"mcms-font-semibold mcms-text-slate-900",children:"Crypto Payment"}),o("p",{className:"mcms-text-sm mcms-text-slate-500",children:"Pay securely using your wallet"})]})]}),n&&a("div",{className:"mcms-mb-4 mcms-p-3 mcms-bg-red-50 mcms-border mcms-border-red-100 mcms-rounded-lg mcms-flex mcms-gap-3 mcms-text-red-700 mcms-text-sm",children:[o(H,{className:"mcms-w-4 mcms-h-4 mcms-shrink-0"}),o("p",{children:n})]}),e==="idle"&&o("button",{onClick:s,className:"mcms-w-full mcms-py-3 mcms-px-4 mcms-bg-indigo-600 hover:mcms-bg-indigo-700 mcms-text-white mcms-font-medium mcms-rounded-xl mcms-transition-colors mcms-flex mcms-items-center mcms-justify-center mcms-gap-2",children:"Start Payment"}),(e==="connecting"||e==="initiating"||e==="verifying")&&a("div",{className:"mcms-py-8 mcms-text-center",children:[o(G,{className:"mcms-w-8 mcms-h-8 mcms-text-indigo-600 mcms-animate-spin mcms-mx-auto mcms-mb-3"}),o("p",{className:"mcms-text-slate-600 mcms-font-medium",children:e==="connecting"?"Connecting wallet...":e==="initiating"?"Preparing transaction...":"Verifying on-chain..."})]}),e==="pending_signature"&&r&&a("div",{className:"mcms-space-y-4",children:[a("div",{className:"mcms-p-4 mcms-bg-slate-50 mcms-rounded-xl mcms-space-y-2",children:[a("div",{className:"mcms-flex mcms-justify-between mcms-text-sm",children:[o("span",{className:"mcms-text-slate-500",children:"Amount to pay"}),a("span",{className:"mcms-font-mono mcms-font-medium mcms-text-slate-900",children:[r.amount," ",r.currency]})]}),a("div",{className:"mcms-flex mcms-justify-between mcms-text-sm",children:[o("span",{className:"mcms-text-slate-500",children:"Order ID"}),o("span",{className:"mcms-font-mono mcms-text-slate-900",children:r.orderId})]}),a("div",{className:"mcms-flex mcms-justify-between mcms-text-sm",children:[o("span",{className:"mcms-text-slate-500",children:"Network"}),o("span",{className:"mcms-text-slate-900 mcms-font-medium",children:r.network})]})]}),a("div",{className:"mcms-space-y-2",children:[o("p",{className:"mcms-text-xs mcms-text-slate-500 mcms-uppercase mcms-font-bold mcms-tracking-wider",children:"Destination Address"}),o("div",{className:"mcms-p-3 mcms-bg-slate-100 mcms-rounded-lg mcms-font-mono mcms-text-xs mcms-break-all mcms-text-slate-600 mcms-border mcms-border-slate-200",children:r.paymentAddress})]}),o("div",{className:"mcms-flex mcms-flex-col mcms-gap-2",children:r.network?.toLowerCase().includes("solana")&&i?a("button",{onClick:y,className:"mcms-w-full mcms-py-3 mcms-px-4 mcms-bg-indigo-600 hover:mcms-bg-indigo-700 mcms-text-white mcms-font-medium mcms-rounded-xl mcms-transition-colors mcms-flex mcms-items-center mcms-justify-center mcms-gap-2",children:[o(B,{className:"mcms-w-4 mcms-h-4"}),"Pay with Phantom"]}):(r.network?.toLowerCase().includes("ethereum")||r.network?.toLowerCase().includes("evm")||r.network?.toLowerCase().includes("polygon"))&&p?a("button",{onClick:d,className:"mcms-w-full mcms-py-3 mcms-px-4 mcms-bg-orange-500 hover:mcms-bg-orange-600 mcms-text-white mcms-font-medium mcms-rounded-xl mcms-transition-colors mcms-flex mcms-items-center mcms-justify-center mcms-gap-2",children:[o("img",{src:"https://upload.wikimedia.org/wikipedia/commons/3/36/MetaMask_Mirror_Logo.svg",className:"mcms-w-4 mcms-h-4",alt:"MetaMask"}),"Pay with MetaMask"]}):o("button",{onClick:()=>{u("verifying"),setTimeout(()=>g("0x_mock_transaction_hash_generic"),2e3)},className:"mcms-w-full mcms-py-3 mcms-px-4 mcms-bg-slate-900 hover:mcms-bg-black mcms-text-white mcms-font-medium mcms-rounded-xl mcms-transition-colors mcms-flex mcms-items-center mcms-justify-center mcms-gap-2",children:"Confirm in Wallet"})})]})]}),a("div",{className:"mcms-bg-slate-50 mcms-px-6 mcms-py-3 mcms-border-t mcms-border-slate-100 mcms-flex mcms-justify-between mcms-items-center",children:[o("span",{className:"mcms-text-xs mcms-text-slate-400",children:"Powered by Micro-CMS Crypto"}),a("a",{href:"#",className:"mcms-text-xs mcms-text-indigo-600 hover:mcms-text-indigo-700 mcms-font-medium mcms-flex mcms-items-center mcms-gap-1",children:["Help ",o(K,{className:"mcms-w-3 mcms-h-3"})]})]})]})};var I=t=>{let[w,e]=k("idle"),[r,n]=k(null),[s,g]=k(null),u=T(async()=>{try{if(e("initiating"),n(null),t.provider){let l=await t.provider.initiatePayment(t.orderId,{amount:t.amount,currency:t.currency});g(l),e("pending_signature");return}let m=await fetch(t.endpoints?.initiate||"/api/orders/initiate",{method:"POST",headers:{"Content-Type":"application/json",...t.headers||{}},body:JSON.stringify({productId:t.orderId,amount:t.amount,currency:t.currency,paymentProvider:"crypto"})});if(!m.ok){let l=await m.json();throw new Error(l.error||"Failed to initiate payment intent")}let c=await m.json();g(c),e("pending_signature")}catch(m){n(m.message),e("error"),t.onError?.(m)}},[t.provider,t.endpoints?.initiate,t.orderId,t.amount,t.currency,t.onError,t.headers]),i=T(async m=>{try{if(e("verifying"),t.provider){let h=await t.provider.verifyPayment(m,t.orderId);if(h.status==="confirmed")e("success"),t.onSuccess?.(h);else throw new Error("Payment not confirmed yet, status: "+h.status);return}let c=await fetch(t.endpoints?.verify||"/api/orders/verify-payment",{method:"POST",headers:{"Content-Type":"application/json",...t.headers||{}},body:JSON.stringify({orderId:s?.orderId||t.orderId,transactionHash:m})});if(!c.ok){let h=await c.json();throw new Error(h.error||"Payment verification failed")}let l=await c.json();if(l.status==="confirmed")e("success"),t.onSuccess?.(l);else throw new Error("Payment not confirmed yet, status: "+l.status)}catch(c){n(c.message),e("error"),t.onError?.(c)}},[t.provider,t.endpoints?.verify,t.orderId,t.onSuccess,t.onError,t.headers,s?.orderId]),{isAvailable:y,connect:p,sendPayment:d}=N(),v=async()=>{try{if(!s){n("Payment intent not established."),e("error");return}e("connecting");let m=await p();console.log("Connected to Solana with public key:",m),e("pending_signature");let c=await d(s);e("verifying"),await i(c)}catch(m){n(m.message||"Failed to connect to Phantom or sign transaction."),e("error"),t.onError?.(m instanceof Error?m:new Error(String(m)))}},{isAvailable:x,connect:b,sendPayment:P}=S();return{status:w,intent:s,error:r,initiate:u,verify:i,setStatus:e,isSolanaAvailable:y,handleSolanaPay:v,isEVMAvailable:x,handleEVMPay:async()=>{try{if(!s){n("Payment intent not established."),e("error");return}e("connecting");let m=await b();console.log("Connected to EVM with account:",m),e("pending_signature");let c=await P(s);e("verifying"),await i(c)}catch(m){n(m.message||"Failed to connect to MetaMask or sign transaction."),e("error"),t.onError?.(m instanceof Error?m:new Error(String(m)))}}}};export{O as CSS_CONTENT,dt as PaymentWidget,M as injectStyles,S as useEVMWallet,I as usePayment,N as useSolanaWallet};
|
|
1
|
+
import{Buffer as Y}from"buffer";import{useState as k,useCallback as I}from"react";import{Connection as T,PublicKey as h,Transaction as j,SystemProgram as _,LAMPORTS_PER_SOL as W}from"@solana/web3.js";import{TOKEN_PROGRAM_ID as V,createTransferInstruction as D,getMint as L}from"@solana/spl-token";var U=new h("4zMMC9srt5Ri5X14GAgXhaHii3GnPAEERYPJgZJDncDU"),q=new h("EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v"),N=()=>{let e=()=>{if(typeof window<"u"&&"solana"in window){let t=window;if(t.solana?.isPhantom)return t.solana}},y=async()=>{let t=e();if(t)try{return(await t.connect()).publicKey.toString()}catch{throw new Error("User rejected the connection")}else throw new Error("Phantom wallet not found")},r=async t=>{let s=e();if(!s)throw new Error("Wallet not connected");try{let o=!window.location.host.includes("localhost")&&!window.location.host.includes("dev."),g=o?"https://api.mainnet-beta.solana.com":"https://api.devnet.solana.com",u=new T(g,"confirmed"),i=await s.connect({onlyIfTrusted:!0}),w=new h(i.publicKey.toString()),p=new h(t.paymentAddress),d=new j;if(t.currency?.toUpperCase()==="USDC"){let b=o?q:U,P=await L(u,b),E=Math.round(Number(t.amount)*Math.pow(10,P.decimals)),{getAssociatedTokenAddress:m}=await import("@solana/spl-token"),c=await m(b,w),l=await m(b,p);d.add(D(c,l,w,E,[],V))}else d.add(_.transfer({fromPubkey:w,toPubkey:p,lamports:Math.round(Number(t.amount)*W)}));let{blockhash:x}=await u.getLatestBlockhash();d.recentBlockhash=x,d.feePayer=w;let{signature:v}=await s.signAndSendTransaction(d);return v}catch(o){throw console.error("Solana Transaction Error:",o),o.message?.includes("User rejected")?new Error("Transaction rejected by user"):new Error(o.message||"Failed to send Solana transaction")}};return{isAvailable:!!e(),connect:y,sendPayment:r}};var S=()=>{let e=()=>{if(typeof window<"u"&&"ethereum"in window)return window.ethereum},y=async()=>{let t=e();if(t)try{return(await t.request({method:"eth_requestAccounts"}))[0]}catch{throw new Error("User rejected the connection")}else throw new Error("MetaMask or EVM wallet not found")},r=async t=>{let s=e();if(!s)throw new Error("Wallet not connected");let o=await s.request({method:"eth_accounts"});if(!o||o.length===0)throw new Error("No accounts found. Please connect your wallet first.");let g=t.currency.toUpperCase()==="USDC"?6:18,u="0x"+BigInt(Math.floor(Number(t.amount)*Math.pow(10,g))).toString(16);try{return await s.request({method:"eth_sendTransaction",params:[{from:o[0],to:t.paymentAddress,value:t.currency.toUpperCase()==="ETH"?u:"0x0"}]})}catch(i){throw i.code===4001?new Error("Transaction rejected by user"):new Error(i.message||"Failed to send transaction")}};return{isAvailable:!!e(),connect:y,sendPayment:r}};import{useLayoutEffect as R}from"react";import{Wallet as F,CheckCircle as B,Loader2 as z,AlertCircle as G,ExternalLink as H,Cpu as K}from"lucide-react";import{clsx as J}from"clsx";import{twMerge as X}from"tailwind-merge";var O=".mcms-mx-auto{margin-left:auto;margin-right:auto}.mcms-mb-3{margin-bottom:.75rem}.mcms-mb-4{margin-bottom:1rem}.mcms-mb-6{margin-bottom:1.5rem}.mcms-mt-1{margin-top:.25rem}.mcms-flex{display:flex}.mcms-h-12{height:3rem}.mcms-h-3{height:.75rem}.mcms-h-4{height:1rem}.mcms-h-5{height:1.25rem}.mcms-h-8{height:2rem}.mcms-w-12{width:3rem}.mcms-w-3{width:.75rem}.mcms-w-4{width:1rem}.mcms-w-5{width:1.25rem}.mcms-w-8{width:2rem}.mcms-w-full{width:100%}.mcms-shrink-0{flex-shrink:0}@keyframes mcms-spin{to{transform:rotate(1turn)}}.mcms-animate-spin{animation:mcms-spin 1s linear infinite}.mcms-flex-col{flex-direction:column}.mcms-items-center{align-items:center}.mcms-justify-center{justify-content:center}.mcms-justify-between{justify-content:space-between}.mcms-gap-1{gap:.25rem}.mcms-gap-2{gap:.5rem}.mcms-gap-3{gap:.75rem}.mcms-space-y-2>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-top:calc(.5rem*(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.5rem*var(--tw-space-y-reverse))}.mcms-space-y-4>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-top:calc(1rem*(1 - var(--tw-space-y-reverse)));margin-bottom:calc(1rem*var(--tw-space-y-reverse))}.mcms-overflow-hidden{overflow:hidden}.mcms-break-all{word-break:break-all}.mcms-rounded-2xl{border-radius:1rem}.mcms-rounded-lg{border-radius:.5rem}.mcms-rounded-xl{border-radius:.75rem}.mcms-border{border-width:1px}.mcms-border-t{border-top-width:1px}.mcms-border-green-200{--tw-border-opacity:1;border-color:rgb(187 247 208/var(--tw-border-opacity,1))}.mcms-border-red-100{--tw-border-opacity:1;border-color:rgb(254 226 226/var(--tw-border-opacity,1))}.mcms-border-slate-100{--tw-border-opacity:1;border-color:rgb(241 245 249/var(--tw-border-opacity,1))}.mcms-border-slate-200{--tw-border-opacity:1;border-color:rgb(226 232 240/var(--tw-border-opacity,1))}.mcms-bg-green-50{--tw-bg-opacity:1;background-color:rgb(240 253 244/var(--tw-bg-opacity,1))}.mcms-bg-indigo-50{--tw-bg-opacity:1;background-color:rgb(238 242 255/var(--tw-bg-opacity,1))}.mcms-bg-indigo-600{--tw-bg-opacity:1;background-color:rgb(79 70 229/var(--tw-bg-opacity,1))}.mcms-bg-orange-500{--tw-bg-opacity:1;background-color:rgb(249 115 22/var(--tw-bg-opacity,1))}.mcms-bg-red-50{--tw-bg-opacity:1;background-color:rgb(254 242 242/var(--tw-bg-opacity,1))}.mcms-bg-slate-100{--tw-bg-opacity:1;background-color:rgb(241 245 249/var(--tw-bg-opacity,1))}.mcms-bg-slate-50{--tw-bg-opacity:1;background-color:rgb(248 250 252/var(--tw-bg-opacity,1))}.mcms-bg-slate-900{--tw-bg-opacity:1;background-color:rgb(15 23 42/var(--tw-bg-opacity,1))}.mcms-bg-white{--tw-bg-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity,1))}.mcms-p-2{padding:.5rem}.mcms-p-3{padding:.75rem}.mcms-p-4{padding:1rem}.mcms-p-6{padding:1.5rem}.mcms-px-4{padding-left:1rem;padding-right:1rem}.mcms-px-6{padding-left:1.5rem;padding-right:1.5rem}.mcms-py-3{padding-top:.75rem;padding-bottom:.75rem}.mcms-py-8{padding-top:2rem;padding-bottom:2rem}.mcms-text-center{text-align:center}.mcms-font-mono{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace}.mcms-text-lg{font-size:1.125rem;line-height:1.75rem}.mcms-text-sm{font-size:.875rem;line-height:1.25rem}.mcms-text-xs{font-size:.75rem;line-height:1rem}.mcms-font-bold{font-weight:700}.mcms-font-medium{font-weight:500}.mcms-font-semibold{font-weight:600}.mcms-uppercase{text-transform:uppercase}.mcms-tracking-wider{letter-spacing:.05em}.mcms-text-green-500{--tw-text-opacity:1;color:rgb(34 197 94/var(--tw-text-opacity,1))}.mcms-text-green-700{--tw-text-opacity:1;color:rgb(21 128 61/var(--tw-text-opacity,1))}.mcms-text-indigo-600{--tw-text-opacity:1;color:rgb(79 70 229/var(--tw-text-opacity,1))}.mcms-text-red-700{--tw-text-opacity:1;color:rgb(185 28 28/var(--tw-text-opacity,1))}.mcms-text-slate-400{--tw-text-opacity:1;color:rgb(148 163 184/var(--tw-text-opacity,1))}.mcms-text-slate-500{--tw-text-opacity:1;color:rgb(100 116 139/var(--tw-text-opacity,1))}.mcms-text-slate-600{--tw-text-opacity:1;color:rgb(71 85 105/var(--tw-text-opacity,1))}.mcms-text-slate-900{--tw-text-opacity:1;color:rgb(15 23 42/var(--tw-text-opacity,1))}.mcms-text-white{--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity,1))}.mcms-shadow-sm{--tw-shadow:0 1px 2px 0 rgba(0,0,0,.05);--tw-shadow-colored:0 1px 2px 0 var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.mcms-transition-colors{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.hover:mcms-bg-black:hover{--tw-bg-opacity:1;background-color:rgb(0 0 0/var(--tw-bg-opacity,1))}.hover:mcms-bg-indigo-700:hover{--tw-bg-opacity:1;background-color:rgb(67 56 202/var(--tw-bg-opacity,1))}.hover:mcms-bg-orange-600:hover{--tw-bg-opacity:1;background-color:rgb(234 88 12/var(--tw-bg-opacity,1))}.hover:mcms-text-indigo-700:hover{--tw-text-opacity:1;color:rgb(67 56 202/var(--tw-text-opacity,1))}",M=()=>{if(typeof document>"u"||document.getElementById("mcms-crypto-styles"))return;let e=document.createElement("style");e.id="mcms-crypto-styles",e.textContent=O,document.head.appendChild(e)};import{jsx as n,jsxs as a}from"react/jsx-runtime";function C(...e){return X(J(e))}var le=({className:e,...y})=>{R(()=>{M()},[]);let{status:r,intent:t,error:s,initiate:o,verify:g,setStatus:u,isSolanaAvailable:i,handleSolanaPay:w,isEVMAvailable:p,handleEVMPay:d}=A(y);return r==="success"?a("div",{className:C("mcms-p-6 mcms-text-center mcms-bg-green-50 mcms-rounded-xl mcms-border mcms-border-green-200",e),children:[n(B,{className:"mcms-mx-auto mcms-w-12 mcms-h-12 mcms-text-green-500 mcms-mb-4"}),n("h3",{className:"mcms-text-lg mcms-font-semibold mcms-green-900",children:"Payment Successful"}),n("p",{className:"mcms-text-green-700 mcms-mt-1",children:"Your order has been confirmed."})]}):a("div",{className:C("mcms-bg-white mcms-rounded-2xl mcms-border mcms-border-slate-200 mcms-shadow-sm mcms-overflow-hidden",e),children:[a("div",{className:"mcms-p-6",children:[a("div",{className:"mcms-flex mcms-items-center mcms-gap-3 mcms-mb-6",children:[n("div",{className:"mcms-p-2 mcms-bg-indigo-50 mcms-rounded-lg",children:n(F,{className:"mcms-w-5 mcms-h-5 mcms-text-indigo-600"})}),a("div",{children:[n("h3",{className:"mcms-font-semibold mcms-text-slate-900",children:"Crypto Payment"}),n("p",{className:"mcms-text-sm mcms-text-slate-500",children:"Pay securely using your wallet"})]})]}),s&&a("div",{className:"mcms-mb-4 mcms-p-3 mcms-bg-red-50 mcms-border mcms-border-red-100 mcms-rounded-lg mcms-flex mcms-gap-3 mcms-text-red-700 mcms-text-sm",children:[n(G,{className:"mcms-w-4 mcms-h-4 mcms-shrink-0"}),n("p",{children:s})]}),r==="idle"&&n("button",{onClick:o,className:"mcms-w-full mcms-py-3 mcms-px-4 mcms-bg-indigo-600 hover:mcms-bg-indigo-700 mcms-text-white mcms-font-medium mcms-rounded-xl mcms-transition-colors mcms-flex mcms-items-center mcms-justify-center mcms-gap-2",children:"Start Payment"}),(r==="connecting"||r==="initiating"||r==="verifying")&&a("div",{className:"mcms-py-8 mcms-text-center",children:[n(z,{className:"mcms-w-8 mcms-h-8 mcms-text-indigo-600 mcms-animate-spin mcms-mx-auto mcms-mb-3"}),n("p",{className:"mcms-text-slate-600 mcms-font-medium",children:r==="connecting"?"Connecting wallet...":r==="initiating"?"Preparing transaction...":"Verifying on-chain..."})]}),r==="pending_signature"&&t&&a("div",{className:"mcms-space-y-4",children:[a("div",{className:"mcms-p-4 mcms-bg-slate-50 mcms-rounded-xl mcms-space-y-2",children:[a("div",{className:"mcms-flex mcms-justify-between mcms-text-sm",children:[n("span",{className:"mcms-text-slate-500",children:"Amount to pay"}),a("span",{className:"mcms-font-mono mcms-font-medium mcms-text-slate-900",children:[t.amount," ",t.currency]})]}),a("div",{className:"mcms-flex mcms-justify-between mcms-text-sm",children:[n("span",{className:"mcms-text-slate-500",children:"Order ID"}),n("span",{className:"mcms-font-mono mcms-text-slate-900",children:t.orderId})]}),a("div",{className:"mcms-flex mcms-justify-between mcms-text-sm",children:[n("span",{className:"mcms-text-slate-500",children:"Network"}),n("span",{className:"mcms-text-slate-900 mcms-font-medium",children:t.network})]})]}),a("div",{className:"mcms-space-y-2",children:[n("p",{className:"mcms-text-xs mcms-text-slate-500 mcms-uppercase mcms-font-bold mcms-tracking-wider",children:"Destination Address"}),n("div",{className:"mcms-p-3 mcms-bg-slate-100 mcms-rounded-lg mcms-font-mono mcms-text-xs mcms-break-all mcms-text-slate-600 mcms-border mcms-border-slate-200 mcms-flex mcms-justify-center",children:t.paymentAddress?`${t.paymentAddress.slice(0,6)}...${t.paymentAddress.slice(-4)}`:"Establishing..."})]}),n("div",{className:"mcms-flex mcms-flex-col mcms-gap-2",children:t.network?.toLowerCase().includes("solana")&&i?a("button",{onClick:w,className:"mcms-w-full mcms-py-3 mcms-px-4 mcms-bg-indigo-600 hover:mcms-bg-indigo-700 mcms-text-white mcms-font-medium mcms-rounded-xl mcms-transition-colors mcms-flex mcms-items-center mcms-justify-center mcms-gap-2",children:[n(K,{className:"mcms-w-4 mcms-h-4"}),"Pay with Phantom"]}):(t.network?.toLowerCase().includes("ethereum")||t.network?.toLowerCase().includes("evm")||t.network?.toLowerCase().includes("polygon"))&&p?a("button",{onClick:d,className:"mcms-w-full mcms-py-3 mcms-px-4 mcms-bg-orange-500 hover:mcms-bg-orange-600 mcms-text-white mcms-font-medium mcms-rounded-xl mcms-transition-colors mcms-flex mcms-items-center mcms-justify-center mcms-gap-2",children:[n("img",{src:"https://upload.wikimedia.org/wikipedia/commons/3/36/MetaMask_Mirror_Logo.svg",className:"mcms-w-4 mcms-h-4",alt:"MetaMask"}),"Pay with MetaMask"]}):n("button",{onClick:()=>{u("verifying"),setTimeout(()=>g("0x_mock_transaction_hash_generic"),2e3)},className:"mcms-w-full mcms-py-3 mcms-px-4 mcms-bg-slate-900 hover:mcms-bg-black mcms-text-white mcms-font-medium mcms-rounded-xl mcms-transition-colors mcms-flex mcms-items-center mcms-justify-center mcms-gap-2",children:"Confirm in Wallet"})})]})]}),a("div",{className:"mcms-bg-slate-50 mcms-px-6 mcms-py-3 mcms-border-t mcms-border-slate-100 mcms-flex mcms-justify-between mcms-items-center",children:[n("span",{className:"mcms-text-xs mcms-text-slate-400",children:"Powered by Micro-CMS Crypto"}),a("a",{href:"#",className:"mcms-text-xs mcms-text-indigo-600 hover:mcms-text-indigo-700 mcms-font-medium mcms-flex mcms-items-center mcms-gap-1",children:["Help ",n(H,{className:"mcms-w-3 mcms-h-3"})]})]})]})};typeof window<"u"&&(window.Buffer||(window.Buffer=Y),window.global||(window.global=window));var A=e=>{let[y,r]=k("idle"),[t,s]=k(null),[o,g]=k(null),u=I(async()=>{try{if(r("initiating"),s(null),e.provider){let l=await e.provider.initiatePayment(e.orderId,{amount:e.amount,currency:e.currency});g(l),r("pending_signature");return}let m=await fetch(e.endpoints?.initiate||"/api/orders/initiate",{method:"POST",headers:{"Content-Type":"application/json",...e.headers||{}},body:JSON.stringify({productId:e.orderId,amount:e.amount,currency:e.currency,paymentProvider:"crypto"})});if(!m.ok){let l=await m.json();throw new Error(l.error||"Failed to initiate payment intent")}let c=await m.json();g(c),r("pending_signature")}catch(m){s(m.message),r("error"),e.onError?.(m)}},[e.provider,e.endpoints?.initiate,e.orderId,e.amount,e.currency,e.onError,e.headers]),i=I(async m=>{try{if(r("verifying"),e.provider){let f=await e.provider.verifyPayment(m,e.orderId);if(f.status==="confirmed")r("success"),e.onSuccess?.(f);else throw new Error("Payment not confirmed yet, status: "+f.status);return}let c=await fetch(e.endpoints?.verify||"/api/orders/verify-payment",{method:"POST",headers:{"Content-Type":"application/json",...e.headers||{}},body:JSON.stringify({orderId:o?.orderId||e.orderId,transactionHash:m})});if(!c.ok){let f=await c.json();throw new Error(f.error||"Payment verification failed")}let l=await c.json();if(l.status==="confirmed")r("success"),e.onSuccess?.(l);else throw new Error("Payment not confirmed yet, status: "+l.status)}catch(c){s(c.message),r("error"),e.onError?.(c)}},[e.provider,e.endpoints?.verify,e.orderId,e.onSuccess,e.onError,e.headers,o?.orderId]),{isAvailable:w,connect:p,sendPayment:d}=N(),x=async()=>{try{if(!o){s("Payment intent not established."),r("error");return}r("connecting");let m=await p();console.log("Connected to Solana with public key:",m),r("pending_signature");let c=await d(o);r("verifying"),await i(c)}catch(m){s(m.message||"Failed to connect to Phantom or sign transaction."),r("error"),e.onError?.(m instanceof Error?m:new Error(String(m)))}},{isAvailable:v,connect:b,sendPayment:P}=S();return{status:y,intent:o,error:t,initiate:u,verify:i,setStatus:r,isSolanaAvailable:w,handleSolanaPay:x,isEVMAvailable:v,handleEVMPay:async()=>{try{if(!o){s("Payment intent not established."),r("error");return}r("connecting");let m=await b();console.log("Connected to EVM with account:",m),r("pending_signature");let c=await P(o);r("verifying"),await i(c)}catch(m){s(m.message||"Failed to connect to MetaMask or sign transaction."),r("error"),e.onError?.(m instanceof Error?m:new Error(String(m)))}}}};export{O as CSS_CONTENT,le as PaymentWidget,M as injectStyles,S as useEVMWallet,A as usePayment,N as useSolanaWallet};
|
|
2
|
+
//# sourceMappingURL=index.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/index.ts","../src/providers/SolanaProvider.ts","../src/providers/EVMProvider.ts","../src/PaymentWidget.tsx","../src/injectStyles.ts"],"sourcesContent":["import { Buffer } from 'buffer';\n\n// 1. Injected Polyfills for Solana/Crypto compatibility (Top-level)\nif (typeof window !== 'undefined') {\n if (!(window as any).Buffer) {\n (window as any).Buffer = Buffer;\n }\n if (!(window as any).global) {\n (window as any).global = window;\n }\n}\n\nimport { useState, useCallback } from 'react';\nimport { PaymentIntent, PaymentVerification, PaymentProvider } from '@micro-cms/types';\nimport { useSolanaWallet } from './providers/SolanaProvider';\nimport { useEVMWallet } from './providers/EVMProvider';\n\nexport * from './providers/SolanaProvider';\nexport * from './providers/EVMProvider';\nexport * from './PaymentWidget';\nexport * from './injectStyles';\n\nexport interface PaymentWidgetProps {\n orderId: string;\n amount?: number; // Optional, will be determined by backend\n currency?: string; // Optional, will be determined by backend\n onSuccess?: (verification: PaymentVerification) => void;\n onError?: (error: Error) => void;\n provider?: PaymentProvider; // Optional direct provider for standalone use\n endpoints?: {\n initiate?: string; // Default to /api/orders/initiate\n verify?: string; // Default to /api/orders/verify-payment\n };\n headers?: Record<string, string>; // Optional custom headers for fetch calls\n className?: string; // Classname for the wrapper div\n}\n\nexport type PaymentStatus = 'idle' | 'connecting' | 'initiating' | 'pending_signature' | 'verifying' | 'success' | 'error';\n\nexport const usePayment = (props: PaymentWidgetProps) => {\n const [status, setStatus] = useState<PaymentStatus>('idle');\n const [error, setError] = useState<string | null>(null);\n const [intent, setIntent] = useState<PaymentIntent | null>(null);\n\n const initiate = useCallback(async () => {\n try {\n setStatus('initiating');\n setError(null);\n\n if (props.provider) {\n const data = await props.provider.initiatePayment(props.orderId, {\n amount: props.amount,\n currency: props.currency\n });\n setIntent(data);\n setStatus('pending_signature');\n return;\n }\n\n const response = await fetch(props.endpoints?.initiate || '/api/orders/initiate', {\n method: 'POST',\n headers: { \n 'Content-Type': 'application/json',\n ...(props.headers || {})\n },\n body: JSON.stringify({\n productId: props.orderId, // In node_api, it expects productId\n amount: props.amount,\n currency: props.currency,\n paymentProvider: 'crypto' // Tell backend we want crypto\n })\n });\n\n if (!response.ok) {\n const errorData = await response.json();\n throw new Error(errorData.error || 'Failed to initiate payment intent');\n }\n \n const data: PaymentIntent = await response.json();\n setIntent(data);\n setStatus('pending_signature');\n } catch (err: any) {\n setError(err.message);\n setStatus('error');\n props.onError?.(err);\n }\n }, [props.provider, props.endpoints?.initiate, props.orderId, props.amount, props.currency, props.onError, props.headers]);\n\n const verify = useCallback(async (txHash: string) => {\n try {\n setStatus('verifying');\n\n if (props.provider) {\n const data = await props.provider.verifyPayment(txHash, props.orderId);\n if (data.status === 'confirmed') {\n setStatus('success');\n props.onSuccess?.(data);\n } else {\n throw new Error('Payment not confirmed yet, status: ' + data.status);\n }\n return;\n }\n\n const response = await fetch(props.endpoints?.verify || '/api/orders/verify-payment', {\n method: 'POST',\n headers: { \n 'Content-Type': 'application/json',\n ...(props.headers || {})\n },\n body: JSON.stringify({\n orderId: intent?.orderId || props.orderId,\n transactionHash: txHash\n })\n });\n\n if (!response.ok) {\n const errorData = await response.json();\n throw new Error(errorData.error || 'Payment verification failed');\n }\n \n const data: PaymentVerification = await response.json();\n if (data.status === 'confirmed') {\n setStatus('success');\n props.onSuccess?.(data);\n } else {\n throw new Error('Payment not confirmed yet, status: ' + data.status);\n }\n } catch (err: any) {\n setError(err.message);\n setStatus('error');\n props.onError?.(err);\n }\n }, [props.provider, props.endpoints?.verify, props.orderId, props.onSuccess, props.onError, props.headers, intent?.orderId]);\n\n // Integration with Solana\n const { isAvailable: isSolanaAvailable, connect: connectSolana, sendPayment: sendSolanaPayment } = useSolanaWallet();\n\n const handleSolanaPay = async () => {\n try {\n if (!intent) {\n setError('Payment intent not established.');\n setStatus('error');\n return;\n }\n setStatus('connecting');\n const publicKey = await connectSolana();\n console.log('Connected to Solana with public key:', publicKey);\n \n setStatus('pending_signature');\n const signature = await sendSolanaPayment(intent); \n \n setStatus('verifying');\n await verify(signature);\n } catch (err: any) {\n setError(err.message || 'Failed to connect to Phantom or sign transaction.');\n setStatus('error');\n props.onError?.(err instanceof Error ? err : new Error(String(err)));\n }\n };\n\n // Integration with EVM\n const { isAvailable: isEVMAvailable, connect: connectEVM, sendPayment: sendEVMPayment } = useEVMWallet();\n\n const handleEVMPay = async () => {\n try {\n if (!intent) {\n setError('Payment intent not established.');\n setStatus('error');\n return;\n }\n setStatus('connecting');\n const account = await connectEVM();\n console.log('Connected to EVM with account:', account);\n \n setStatus('pending_signature');\n const txHash = await sendEVMPayment(intent); \n \n setStatus('verifying');\n await verify(txHash);\n } catch (err: any) {\n setError(err.message || 'Failed to connect to MetaMask or sign transaction.');\n setStatus('error');\n props.onError?.(err instanceof Error ? err : new Error(String(err)));\n }\n };\n\n return { \n status, \n intent, \n error, \n initiate, \n verify, \n setStatus, \n isSolanaAvailable, \n handleSolanaPay,\n isEVMAvailable,\n handleEVMPay\n };\n};","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","import { PaymentIntent } from '@micro-cms/types';\n\nexport interface EthereumWindow extends Window {\n ethereum?: {\n isMetaMask?: boolean;\n request: (request: { method: string; params?: any[] }) => Promise<any>;\n on: (event: string, callback: (...args: any[]) => void) => void;\n removeListener: (event: string, callback: (...args: any[]) => void) => void;\n };\n}\n\nexport const useEVMWallet = () => {\n const getProvider = (): (EthereumWindow['ethereum']) => {\n if (typeof window !== 'undefined' && 'ethereum' in window) {\n return (window as EthereumWindow).ethereum;\n }\n return undefined;\n };\n\n const connect = async () => {\n const provider = getProvider();\n if (provider) {\n try {\n const accounts = await provider.request({ method: 'eth_requestAccounts' });\n return accounts[0];\n } catch (err) {\n throw new Error('User rejected the connection');\n }\n } else {\n throw new Error('MetaMask or EVM 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 const accounts = await provider.request({ method: 'eth_accounts' });\n if (!accounts || accounts.length === 0) {\n throw new Error('No accounts found. Please connect your wallet first.');\n }\n\n // Convert amount to Wei (assuming 18 decimals for ETH/Standard tokens)\n // For USDC on EVM, it's usually 6 decimals. \n // This logic should ideally be more robust based on the token.\n const decimals = intent.currency.toUpperCase() === 'USDC' ? 6 : 18;\n const value = '0x' + (BigInt(Math.floor(Number(intent.amount) * Math.pow(10, decimals)))).toString(16);\n\n try {\n const txHash = await provider.request({\n method: 'eth_sendTransaction',\n params: [{\n from: accounts[0],\n to: intent.paymentAddress,\n value: intent.currency.toUpperCase() === 'ETH' ? value : '0x0', // Only value for native currency\n // If it was a token transfer, we would need the data field with transfer(address,uint256)\n }],\n });\n\n return txHash;\n } catch (err: any) {\n if (err.code === 4001) {\n throw new Error('Transaction rejected by user');\n }\n throw new Error(err.message || 'Failed to send transaction');\n }\n };\n\n return { isAvailable: !!getProvider(), connect, sendPayment };\n};\n","import React, { useLayoutEffect } from 'react';\nimport { Wallet, CheckCircle, Loader2, AlertCircle, ExternalLink, Cpu } from 'lucide-react';\nimport { clsx, type ClassValue } from 'clsx';\nimport { twMerge } from 'tailwind-merge';\nimport { PaymentWidgetProps, usePayment } from './index'; // Import usePayment from index.ts\nimport { injectStyles } from './injectStyles';\n\nfunction cn(...inputs: ClassValue[]) {\n return twMerge(clsx(inputs));\n}\n\nexport const PaymentWidget: React.FC<PaymentWidgetProps> = ({ \n className,\n ...props \n}) => {\n useLayoutEffect(() => {\n injectStyles();\n }, []);\n\n const { \n status, \n intent, \n error, \n initiate, \n verify, \n setStatus, \n isSolanaAvailable, \n handleSolanaPay,\n isEVMAvailable,\n handleEVMPay\n } = usePayment(props);\n\n if (status === 'success') {\n return (\n <div className={cn(\"mcms-p-6 mcms-text-center mcms-bg-green-50 mcms-rounded-xl mcms-border mcms-border-green-200\", className)}>\n <CheckCircle className=\"mcms-mx-auto mcms-w-12 mcms-h-12 mcms-text-green-500 mcms-mb-4\" />\n <h3 className=\"mcms-text-lg mcms-font-semibold mcms-green-900\">Payment Successful</h3>\n <p className=\"mcms-text-green-700 mcms-mt-1\">Your order has been confirmed.</p>\n </div>\n );\n }\n\n return (\n <div className={cn(\"mcms-bg-white mcms-rounded-2xl mcms-border mcms-border-slate-200 mcms-shadow-sm mcms-overflow-hidden\", className)}>\n <div className=\"mcms-p-6\">\n <div className=\"mcms-flex mcms-items-center mcms-gap-3 mcms-mb-6\">\n <div className=\"mcms-p-2 mcms-bg-indigo-50 mcms-rounded-lg\">\n <Wallet className=\"mcms-w-5 mcms-h-5 mcms-text-indigo-600\" />\n </div>\n <div>\n <h3 className=\"mcms-font-semibold mcms-text-slate-900\">Crypto Payment</h3>\n <p className=\"mcms-text-sm mcms-text-slate-500\">Pay securely using your wallet</p>\n </div>\n </div>\n\n {error && (\n <div className=\"mcms-mb-4 mcms-p-3 mcms-bg-red-50 mcms-border mcms-border-red-100 mcms-rounded-lg mcms-flex mcms-gap-3 mcms-text-red-700 mcms-text-sm\">\n <AlertCircle className=\"mcms-w-4 mcms-h-4 mcms-shrink-0\" />\n <p>{error}</p>\n </div>\n )}\n\n {status === 'idle' && (\n <button\n onClick={initiate}\n className=\"mcms-w-full mcms-py-3 mcms-px-4 mcms-bg-indigo-600 hover:mcms-bg-indigo-700 mcms-text-white mcms-font-medium mcms-rounded-xl mcms-transition-colors mcms-flex mcms-items-center mcms-justify-center mcms-gap-2\"\n >\n Start Payment\n </button>\n )}\n\n {(status === 'connecting' || status === 'initiating' || status === 'verifying') && (\n <div className=\"mcms-py-8 mcms-text-center\">\n <Loader2 className=\"mcms-w-8 mcms-h-8 mcms-text-indigo-600 mcms-animate-spin mcms-mx-auto mcms-mb-3\" />\n <p className=\"mcms-text-slate-600 mcms-font-medium\">\n {status === 'connecting' ? 'Connecting wallet...' : status === 'initiating' ? 'Preparing transaction...' : 'Verifying on-chain...'}\n </p>\n </div>\n )}\n\n {status === 'pending_signature' && intent && (\n <div className=\"mcms-space-y-4\">\n <div className=\"mcms-p-4 mcms-bg-slate-50 mcms-rounded-xl mcms-space-y-2\">\n <div className=\"mcms-flex mcms-justify-between mcms-text-sm\">\n <span className=\"mcms-text-slate-500\">Amount to pay</span>\n <span className=\"mcms-font-mono mcms-font-medium mcms-text-slate-900\">{intent.amount} {intent.currency}</span>\n </div>\n <div className=\"mcms-flex mcms-justify-between mcms-text-sm\">\n <span className=\"mcms-text-slate-500\">Order ID</span>\n <span className=\"mcms-font-mono mcms-text-slate-900\">{intent.orderId}</span>\n </div>\n <div className=\"mcms-flex mcms-justify-between mcms-text-sm\">\n <span className=\"mcms-text-slate-500\">Network</span>\n <span className=\"mcms-text-slate-900 mcms-font-medium\">{intent.network}</span>\n </div>\n </div>\n\n <div className=\"mcms-space-y-2\">\n <p className=\"mcms-text-xs mcms-text-slate-500 mcms-uppercase mcms-font-bold mcms-tracking-wider\">\n Destination Address\n </p>\n <div className=\"mcms-p-3 mcms-bg-slate-100 mcms-rounded-lg mcms-font-mono mcms-text-xs mcms-break-all mcms-text-slate-600 mcms-border mcms-border-slate-200 mcms-flex mcms-justify-center\">\n {intent.paymentAddress ? `${intent.paymentAddress.slice(0, 6)}...${intent.paymentAddress.slice(-4)}` : 'Establishing...'}\n </div>\n </div>\n\n <div className=\"mcms-flex mcms-flex-col mcms-gap-2\">\n {intent.network?.toLowerCase().includes('solana') && isSolanaAvailable ? (\n <button\n onClick={handleSolanaPay}\n className=\"mcms-w-full mcms-py-3 mcms-px-4 mcms-bg-indigo-600 hover:mcms-bg-indigo-700 mcms-text-white mcms-font-medium mcms-rounded-xl mcms-transition-colors mcms-flex mcms-items-center mcms-justify-center mcms-gap-2\"\n >\n <Cpu className=\"mcms-w-4 mcms-h-4\" />\n Pay with Phantom\n </button>\n ) : (intent.network?.toLowerCase().includes('ethereum') || intent.network?.toLowerCase().includes('evm') || intent.network?.toLowerCase().includes('polygon')) && isEVMAvailable ? (\n <button\n onClick={handleEVMPay}\n className=\"mcms-w-full mcms-py-3 mcms-px-4 mcms-bg-orange-500 hover:mcms-bg-orange-600 mcms-text-white mcms-font-medium mcms-rounded-xl mcms-transition-colors mcms-flex mcms-items-center mcms-justify-center mcms-gap-2\"\n >\n <img src=\"https://upload.wikimedia.org/wikipedia/commons/3/36/MetaMask_Mirror_Logo.svg\" className=\"mcms-w-4 mcms-h-4\" alt=\"MetaMask\" />\n Pay with MetaMask\n </button>\n ) : (\n <button\n onClick={() => {\n // For other networks or if dedicated provider is not available, we assume a generic confirmation step\n setStatus('verifying');\n setTimeout(() => verify('0x_mock_transaction_hash_generic'), 2000);\n }}\n className=\"mcms-w-full mcms-py-3 mcms-px-4 mcms-bg-slate-900 hover:mcms-bg-black mcms-text-white mcms-font-medium mcms-rounded-xl mcms-transition-colors mcms-flex mcms-items-center mcms-justify-center mcms-gap-2\"\n >\n Confirm in Wallet\n </button>\n )}\n </div>\n </div>\n )}\n </div>\n \n <div className=\"mcms-bg-slate-50 mcms-px-6 mcms-py-3 mcms-border-t mcms-border-slate-100 mcms-flex mcms-justify-between mcms-items-center\">\n <span className=\"mcms-text-xs mcms-text-slate-400\">Powered by Micro-CMS Crypto</span>\n <a href=\"#\" className=\"mcms-text-xs mcms-text-indigo-600 hover:mcms-text-indigo-700 mcms-font-medium mcms-flex mcms-items-center mcms-gap-1\">\n Help <ExternalLink className=\"mcms-w-3 mcms-h-3\" />\n </a>\n </div>\n </div>\n );\n};\n","// Standard Micro-CMS Style Injection\nexport const CSS_CONTENT = `.mcms-mx-auto{margin-left:auto;margin-right:auto}.mcms-mb-3{margin-bottom:.75rem}.mcms-mb-4{margin-bottom:1rem}.mcms-mb-6{margin-bottom:1.5rem}.mcms-mt-1{margin-top:.25rem}.mcms-flex{display:flex}.mcms-h-12{height:3rem}.mcms-h-3{height:.75rem}.mcms-h-4{height:1rem}.mcms-h-5{height:1.25rem}.mcms-h-8{height:2rem}.mcms-w-12{width:3rem}.mcms-w-3{width:.75rem}.mcms-w-4{width:1rem}.mcms-w-5{width:1.25rem}.mcms-w-8{width:2rem}.mcms-w-full{width:100%}.mcms-shrink-0{flex-shrink:0}@keyframes mcms-spin{to{transform:rotate(1turn)}}.mcms-animate-spin{animation:mcms-spin 1s linear infinite}.mcms-flex-col{flex-direction:column}.mcms-items-center{align-items:center}.mcms-justify-center{justify-content:center}.mcms-justify-between{justify-content:space-between}.mcms-gap-1{gap:.25rem}.mcms-gap-2{gap:.5rem}.mcms-gap-3{gap:.75rem}.mcms-space-y-2>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-top:calc(.5rem*(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.5rem*var(--tw-space-y-reverse))}.mcms-space-y-4>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-top:calc(1rem*(1 - var(--tw-space-y-reverse)));margin-bottom:calc(1rem*var(--tw-space-y-reverse))}.mcms-overflow-hidden{overflow:hidden}.mcms-break-all{word-break:break-all}.mcms-rounded-2xl{border-radius:1rem}.mcms-rounded-lg{border-radius:.5rem}.mcms-rounded-xl{border-radius:.75rem}.mcms-border{border-width:1px}.mcms-border-t{border-top-width:1px}.mcms-border-green-200{--tw-border-opacity:1;border-color:rgb(187 247 208/var(--tw-border-opacity,1))}.mcms-border-red-100{--tw-border-opacity:1;border-color:rgb(254 226 226/var(--tw-border-opacity,1))}.mcms-border-slate-100{--tw-border-opacity:1;border-color:rgb(241 245 249/var(--tw-border-opacity,1))}.mcms-border-slate-200{--tw-border-opacity:1;border-color:rgb(226 232 240/var(--tw-border-opacity,1))}.mcms-bg-green-50{--tw-bg-opacity:1;background-color:rgb(240 253 244/var(--tw-bg-opacity,1))}.mcms-bg-indigo-50{--tw-bg-opacity:1;background-color:rgb(238 242 255/var(--tw-bg-opacity,1))}.mcms-bg-indigo-600{--tw-bg-opacity:1;background-color:rgb(79 70 229/var(--tw-bg-opacity,1))}.mcms-bg-orange-500{--tw-bg-opacity:1;background-color:rgb(249 115 22/var(--tw-bg-opacity,1))}.mcms-bg-red-50{--tw-bg-opacity:1;background-color:rgb(254 242 242/var(--tw-bg-opacity,1))}.mcms-bg-slate-100{--tw-bg-opacity:1;background-color:rgb(241 245 249/var(--tw-bg-opacity,1))}.mcms-bg-slate-50{--tw-bg-opacity:1;background-color:rgb(248 250 252/var(--tw-bg-opacity,1))}.mcms-bg-slate-900{--tw-bg-opacity:1;background-color:rgb(15 23 42/var(--tw-bg-opacity,1))}.mcms-bg-white{--tw-bg-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity,1))}.mcms-p-2{padding:.5rem}.mcms-p-3{padding:.75rem}.mcms-p-4{padding:1rem}.mcms-p-6{padding:1.5rem}.mcms-px-4{padding-left:1rem;padding-right:1rem}.mcms-px-6{padding-left:1.5rem;padding-right:1.5rem}.mcms-py-3{padding-top:.75rem;padding-bottom:.75rem}.mcms-py-8{padding-top:2rem;padding-bottom:2rem}.mcms-text-center{text-align:center}.mcms-font-mono{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace}.mcms-text-lg{font-size:1.125rem;line-height:1.75rem}.mcms-text-sm{font-size:.875rem;line-height:1.25rem}.mcms-text-xs{font-size:.75rem;line-height:1rem}.mcms-font-bold{font-weight:700}.mcms-font-medium{font-weight:500}.mcms-font-semibold{font-weight:600}.mcms-uppercase{text-transform:uppercase}.mcms-tracking-wider{letter-spacing:.05em}.mcms-text-green-500{--tw-text-opacity:1;color:rgb(34 197 94/var(--tw-text-opacity,1))}.mcms-text-green-700{--tw-text-opacity:1;color:rgb(21 128 61/var(--tw-text-opacity,1))}.mcms-text-indigo-600{--tw-text-opacity:1;color:rgb(79 70 229/var(--tw-text-opacity,1))}.mcms-text-red-700{--tw-text-opacity:1;color:rgb(185 28 28/var(--tw-text-opacity,1))}.mcms-text-slate-400{--tw-text-opacity:1;color:rgb(148 163 184/var(--tw-text-opacity,1))}.mcms-text-slate-500{--tw-text-opacity:1;color:rgb(100 116 139/var(--tw-text-opacity,1))}.mcms-text-slate-600{--tw-text-opacity:1;color:rgb(71 85 105/var(--tw-text-opacity,1))}.mcms-text-slate-900{--tw-text-opacity:1;color:rgb(15 23 42/var(--tw-text-opacity,1))}.mcms-text-white{--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity,1))}.mcms-shadow-sm{--tw-shadow:0 1px 2px 0 rgba(0,0,0,.05);--tw-shadow-colored:0 1px 2px 0 var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.mcms-transition-colors{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.hover\\:mcms-bg-black:hover{--tw-bg-opacity:1;background-color:rgb(0 0 0/var(--tw-bg-opacity,1))}.hover\\:mcms-bg-indigo-700:hover{--tw-bg-opacity:1;background-color:rgb(67 56 202/var(--tw-bg-opacity,1))}.hover\\:mcms-bg-orange-600:hover{--tw-bg-opacity:1;background-color:rgb(234 88 12/var(--tw-bg-opacity,1))}.hover\\:mcms-text-indigo-700:hover{--tw-text-opacity:1;color:rgb(67 56 202/var(--tw-text-opacity,1))}`;\n\nexport const injectStyles = () => {\n if (typeof document === 'undefined') return;\n if (document.getElementById('mcms-crypto-styles')) return;\n\n const style = document.createElement('style');\n style.id = 'mcms-crypto-styles';\n style.textContent = CSS_CONTENT;\n document.head.appendChild(style);\n};\n"],"mappings":"AAAA,OAAS,UAAAA,MAAc,SAYvB,OAAS,YAAAC,EAAU,eAAAC,MAAmB,QCXtC,OACE,cAAAC,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,ECzHO,IAAMkB,EAAe,IAAM,CAChC,IAAMC,EAAc,IAAoC,CACtD,GAAI,OAAO,OAAW,KAAe,aAAc,OACjD,OAAQ,OAA0B,QAGtC,EAEMC,EAAU,SAAY,CAC1B,IAAMC,EAAWF,EAAY,EAC7B,GAAIE,EACF,GAAI,CAEF,OADiB,MAAMA,EAAS,QAAQ,CAAE,OAAQ,qBAAsB,CAAC,GACzD,CAAC,CACnB,MAAc,CACZ,MAAM,IAAI,MAAM,8BAA8B,CAChD,KAEA,OAAM,IAAI,MAAM,kCAAkC,CAEtD,EAEMC,EAAc,MAAOC,GAA0B,CACnD,IAAMF,EAAWF,EAAY,EAC7B,GAAI,CAACE,EAAU,MAAM,IAAI,MAAM,sBAAsB,EAErD,IAAMG,EAAW,MAAMH,EAAS,QAAQ,CAAE,OAAQ,cAAe,CAAC,EAClE,GAAI,CAACG,GAAYA,EAAS,SAAW,EACnC,MAAM,IAAI,MAAM,sDAAsD,EAMxE,IAAMC,EAAWF,EAAO,SAAS,YAAY,IAAM,OAAS,EAAI,GAC1DG,EAAQ,KAAQ,OAAO,KAAK,MAAM,OAAOH,EAAO,MAAM,EAAI,KAAK,IAAI,GAAIE,CAAQ,CAAC,CAAC,EAAG,SAAS,EAAE,EAErG,GAAI,CAWF,OAVe,MAAMJ,EAAS,QAAQ,CACpC,OAAQ,sBACR,OAAQ,CAAC,CACP,KAAMG,EAAS,CAAC,EAChB,GAAID,EAAO,eACX,MAAOA,EAAO,SAAS,YAAY,IAAM,MAAQG,EAAQ,KAE3D,CAAC,CACH,CAAC,CAGH,OAASC,EAAU,CACjB,MAAIA,EAAI,OAAS,KACT,IAAI,MAAM,8BAA8B,EAE1C,IAAI,MAAMA,EAAI,SAAW,4BAA4B,CAC7D,CACF,EAEA,MAAO,CAAE,YAAa,CAAC,CAACR,EAAY,EAAG,QAAAC,EAAS,YAAAE,CAAY,CAC9D,ECrEA,OAAgB,mBAAAM,MAAuB,QACvC,OAAS,UAAAC,EAAQ,eAAAC,EAAa,WAAAC,EAAS,eAAAC,EAAa,gBAAAC,EAAc,OAAAC,MAAW,eAC7E,OAAS,QAAAC,MAA6B,OACtC,OAAS,WAAAC,MAAe,iBCFjB,IAAMC,EAAc,m7JAEdC,EAAe,IAAM,CAEhC,GADI,OAAO,SAAa,KACpB,SAAS,eAAe,oBAAoB,EAAG,OAEnD,IAAMC,EAAQ,SAAS,cAAc,OAAO,EAC5CA,EAAM,GAAK,qBACXA,EAAM,YAAcF,EACpB,SAAS,KAAK,YAAYE,CAAK,CACjC,EDuBM,OACE,OAAAC,EADF,QAAAC,MAAA,oBA3BN,SAASC,KAAMC,EAAsB,CACnC,OAAOC,EAAQC,EAAKF,CAAM,CAAC,CAC7B,CAEO,IAAMG,GAA8C,CAAC,CAC1D,UAAAC,EACA,GAAGC,CACL,IAAM,CACJC,EAAgB,IAAM,CACpBC,EAAa,CACf,EAAG,CAAC,CAAC,EAEL,GAAM,CACJ,OAAAC,EACA,OAAAC,EACA,MAAAC,EACA,SAAAC,EACA,OAAAC,EACA,UAAAC,EACA,kBAAAC,EACA,gBAAAC,EACA,eAAAC,EACA,aAAAC,CACF,EAAIC,EAAWb,CAAK,EAEpB,OAAIG,IAAW,UAEXV,EAAC,OAAI,UAAWC,EAAG,+FAAgGK,CAAS,EAC1H,UAAAP,EAACsB,EAAA,CAAY,UAAU,iEAAiE,EACxFtB,EAAC,MAAG,UAAU,iDAAiD,8BAAkB,EACjFA,EAAC,KAAE,UAAU,gCAAgC,0CAA8B,GAC7E,EAKFC,EAAC,OAAI,UAAWC,EAAG,uGAAwGK,CAAS,EAClI,UAAAN,EAAC,OAAI,UAAU,WACb,UAAAA,EAAC,OAAI,UAAU,mDACb,UAAAD,EAAC,OAAI,UAAU,6CACb,SAAAA,EAACuB,EAAA,CAAO,UAAU,yCAAyC,EAC7D,EACAtB,EAAC,OACC,UAAAD,EAAC,MAAG,UAAU,yCAAyC,0BAAc,EACrEA,EAAC,KAAE,UAAU,mCAAmC,0CAA8B,GAChF,GACF,EAECa,GACCZ,EAAC,OAAI,UAAU,wIACb,UAAAD,EAACwB,EAAA,CAAY,UAAU,kCAAkC,EACzDxB,EAAC,KAAG,SAAAa,EAAM,GACZ,EAGDF,IAAW,QACVX,EAAC,UACC,QAASc,EACT,UAAU,iNACX,yBAED,GAGAH,IAAW,cAAgBA,IAAW,cAAgBA,IAAW,cACjEV,EAAC,OAAI,UAAU,6BACb,UAAAD,EAACyB,EAAA,CAAQ,UAAU,kFAAkF,EACrGzB,EAAC,KAAE,UAAU,uCACV,SAAAW,IAAW,aAAe,uBAAyBA,IAAW,aAAe,2BAA6B,wBAC7G,GACF,EAGDA,IAAW,qBAAuBC,GACjCX,EAAC,OAAI,UAAU,iBACb,UAAAA,EAAC,OAAI,UAAU,2DACb,UAAAA,EAAC,OAAI,UAAU,8CACb,UAAAD,EAAC,QAAK,UAAU,sBAAsB,yBAAa,EACnDC,EAAC,QAAK,UAAU,sDAAuD,UAAAW,EAAO,OAAO,IAAEA,EAAO,UAAS,GACzG,EACAX,EAAC,OAAI,UAAU,8CACb,UAAAD,EAAC,QAAK,UAAU,sBAAsB,oBAAQ,EAC9CA,EAAC,QAAK,UAAU,qCAAsC,SAAAY,EAAO,QAAQ,GACvE,EACAX,EAAC,OAAI,UAAU,8CACb,UAAAD,EAAC,QAAK,UAAU,sBAAsB,mBAAO,EAC7CA,EAAC,QAAK,UAAU,uCAAwC,SAAAY,EAAO,QAAQ,GACzE,GACF,EAEAX,EAAC,OAAI,UAAU,iBACb,UAAAD,EAAC,KAAE,UAAU,qFAAqF,+BAElG,EACAA,EAAC,OAAI,UAAU,4KACZ,SAAAY,EAAO,eAAiB,GAAGA,EAAO,eAAe,MAAM,EAAG,CAAC,CAAC,MAAMA,EAAO,eAAe,MAAM,EAAE,CAAC,GAAK,kBACzG,GACF,EAEAZ,EAAC,OAAI,UAAU,qCACZ,SAAAY,EAAO,SAAS,YAAY,EAAE,SAAS,QAAQ,GAAKK,EACnDhB,EAAC,UACC,QAASiB,EACT,UAAU,iNAEV,UAAAlB,EAAC0B,EAAA,CAAI,UAAU,oBAAoB,EAAE,oBAEvC,GACGd,EAAO,SAAS,YAAY,EAAE,SAAS,UAAU,GAAKA,EAAO,SAAS,YAAY,EAAE,SAAS,KAAK,GAAKA,EAAO,SAAS,YAAY,EAAE,SAAS,SAAS,IAAMO,EAChKlB,EAAC,UACC,QAASmB,EACT,UAAU,iNAEV,UAAApB,EAAC,OAAI,IAAI,+EAA+E,UAAU,oBAAoB,IAAI,WAAW,EAAE,qBAEzI,EAEAA,EAAC,UACC,QAAS,IAAM,CAEbgB,EAAU,WAAW,EACrB,WAAW,IAAMD,EAAO,kCAAkC,EAAG,GAAI,CACnE,EACA,UAAU,2MACX,6BAED,EAEJ,GACF,GAEJ,EAEAd,EAAC,OAAI,UAAU,4HACb,UAAAD,EAAC,QAAK,UAAU,mCAAmC,uCAA2B,EAC9EC,EAAC,KAAE,KAAK,IAAI,UAAU,uHAAuH,kBACtID,EAAC2B,EAAA,CAAa,UAAU,oBAAoB,GACnD,GACF,GACF,CAEJ,EHjJI,OAAO,OAAW,MACd,OAAe,SAClB,OAAe,OAASC,GAErB,OAAe,SAClB,OAAe,OAAS,SA+BtB,IAAMC,EAAcC,GAA8B,CACvD,GAAM,CAACC,EAAQC,CAAS,EAAIC,EAAwB,MAAM,EACpD,CAACC,EAAOC,CAAQ,EAAIF,EAAwB,IAAI,EAChD,CAACG,EAAQC,CAAS,EAAIJ,EAA+B,IAAI,EAEzDK,EAAWC,EAAY,SAAY,CACvC,GAAI,CAIF,GAHAP,EAAU,YAAY,EACtBG,EAAS,IAAI,EAETL,EAAM,SAAU,CAClB,IAAMU,EAAO,MAAMV,EAAM,SAAS,gBAAgBA,EAAM,QAAS,CAC/D,OAAQA,EAAM,OACd,SAAUA,EAAM,QAClB,CAAC,EACDO,EAAUG,CAAI,EACdR,EAAU,mBAAmB,EAC7B,MACF,CAEA,IAAMS,EAAW,MAAM,MAAMX,EAAM,WAAW,UAAY,uBAAwB,CAChF,OAAQ,OACR,QAAS,CACP,eAAgB,mBAChB,GAAIA,EAAM,SAAW,CAAC,CACxB,EACA,KAAM,KAAK,UAAU,CACnB,UAAWA,EAAM,QACjB,OAAQA,EAAM,OACd,SAAUA,EAAM,SAChB,gBAAiB,QACnB,CAAC,CACH,CAAC,EAED,GAAI,CAACW,EAAS,GAAI,CAChB,IAAMC,EAAY,MAAMD,EAAS,KAAK,EACtC,MAAM,IAAI,MAAMC,EAAU,OAAS,mCAAmC,CACxE,CAEA,IAAMF,EAAsB,MAAMC,EAAS,KAAK,EAChDJ,EAAUG,CAAI,EACdR,EAAU,mBAAmB,CAC/B,OAASW,EAAU,CACjBR,EAASQ,EAAI,OAAO,EACpBX,EAAU,OAAO,EACjBF,EAAM,UAAUa,CAAG,CACrB,CACF,EAAG,CAACb,EAAM,SAAUA,EAAM,WAAW,SAAUA,EAAM,QAASA,EAAM,OAAQA,EAAM,SAAUA,EAAM,QAASA,EAAM,OAAO,CAAC,EAEnHc,EAASL,EAAY,MAAOM,GAAmB,CACnD,GAAI,CAGF,GAFAb,EAAU,WAAW,EAEjBF,EAAM,SAAU,CAClB,IAAMU,EAAO,MAAMV,EAAM,SAAS,cAAce,EAAQf,EAAM,OAAO,EACrE,GAAIU,EAAK,SAAW,YAClBR,EAAU,SAAS,EACnBF,EAAM,YAAYU,CAAI,MAEtB,OAAM,IAAI,MAAM,sCAAwCA,EAAK,MAAM,EAErE,MACF,CAEA,IAAMC,EAAW,MAAM,MAAMX,EAAM,WAAW,QAAU,6BAA8B,CACpF,OAAQ,OACR,QAAS,CACP,eAAgB,mBAChB,GAAIA,EAAM,SAAW,CAAC,CACxB,EACA,KAAM,KAAK,UAAU,CACnB,QAASM,GAAQ,SAAWN,EAAM,QAClC,gBAAiBe,CACnB,CAAC,CACH,CAAC,EAED,GAAI,CAACJ,EAAS,GAAI,CAChB,IAAMC,EAAY,MAAMD,EAAS,KAAK,EACtC,MAAM,IAAI,MAAMC,EAAU,OAAS,6BAA6B,CAClE,CAEA,IAAMF,EAA4B,MAAMC,EAAS,KAAK,EACtD,GAAID,EAAK,SAAW,YAClBR,EAAU,SAAS,EACnBF,EAAM,YAAYU,CAAI,MAEtB,OAAM,IAAI,MAAM,sCAAwCA,EAAK,MAAM,CAEvE,OAASG,EAAU,CACjBR,EAASQ,EAAI,OAAO,EACpBX,EAAU,OAAO,EACjBF,EAAM,UAAUa,CAAG,CACrB,CACF,EAAG,CAACb,EAAM,SAAUA,EAAM,WAAW,OAAQA,EAAM,QAASA,EAAM,UAAWA,EAAM,QAASA,EAAM,QAASM,GAAQ,OAAO,CAAC,EAGrH,CAAE,YAAaU,EAAmB,QAASC,EAAe,YAAaC,CAAkB,EAAIC,EAAgB,EAE7GC,EAAkB,SAAY,CAClC,GAAI,CACF,GAAI,CAACd,EAAQ,CACXD,EAAS,iCAAiC,EAC1CH,EAAU,OAAO,EACjB,MACF,CACAA,EAAU,YAAY,EACtB,IAAMmB,EAAY,MAAMJ,EAAc,EACtC,QAAQ,IAAI,uCAAwCI,CAAS,EAE7DnB,EAAU,mBAAmB,EAC7B,IAAMoB,EAAY,MAAMJ,EAAkBZ,CAAM,EAEhDJ,EAAU,WAAW,EACrB,MAAMY,EAAOQ,CAAS,CACxB,OAAST,EAAU,CACjBR,EAASQ,EAAI,SAAW,mDAAmD,EAC3EX,EAAU,OAAO,EACjBF,EAAM,UAAUa,aAAe,MAAQA,EAAM,IAAI,MAAM,OAAOA,CAAG,CAAC,CAAC,CACrE,CACF,EAGM,CAAE,YAAaU,EAAgB,QAASC,EAAY,YAAaC,CAAe,EAAIC,EAAa,EAyBvG,MAAO,CACL,OAAAzB,EACA,OAAAK,EACA,MAAAF,EACA,SAAAI,EACA,OAAAM,EACA,UAAAZ,EACA,kBAAAc,EACA,gBAAAI,EACA,eAAAG,EACA,aAjCmB,SAAY,CAC/B,GAAI,CACF,GAAI,CAACjB,EAAQ,CACXD,EAAS,iCAAiC,EAC1CH,EAAU,OAAO,EACjB,MACF,CACAA,EAAU,YAAY,EACtB,IAAMyB,EAAU,MAAMH,EAAW,EACjC,QAAQ,IAAI,iCAAkCG,CAAO,EAErDzB,EAAU,mBAAmB,EAC7B,IAAMa,EAAS,MAAMU,EAAenB,CAAM,EAE1CJ,EAAU,WAAW,EACrB,MAAMY,EAAOC,CAAM,CACrB,OAASF,EAAU,CACjBR,EAASQ,EAAI,SAAW,oDAAoD,EAC5EX,EAAU,OAAO,EACjBF,EAAM,UAAUa,aAAe,MAAQA,EAAM,IAAI,MAAM,OAAOA,CAAG,CAAC,CAAC,CACrE,CACF,CAaA,CACF","names":["Buffer","useState","useCallback","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","useEVMWallet","getProvider","connect","provider","sendPayment","intent","accounts","decimals","value","err","useLayoutEffect","Wallet","CheckCircle","Loader2","AlertCircle","ExternalLink","Cpu","clsx","twMerge","CSS_CONTENT","injectStyles","style","jsx","jsxs","cn","inputs","twMerge","clsx","PaymentWidget","className","props","useLayoutEffect","injectStyles","status","intent","error","initiate","verify","setStatus","isSolanaAvailable","handleSolanaPay","isEVMAvailable","handleEVMPay","usePayment","CheckCircle","Wallet","AlertCircle","Loader2","Cpu","ExternalLink","Buffer","usePayment","props","status","setStatus","useState","error","setError","intent","setIntent","initiate","useCallback","data","response","errorData","err","verify","txHash","isSolanaAvailable","connectSolana","sendSolanaPayment","useSolanaWallet","handleSolanaPay","publicKey","signature","isEVMAvailable","connectEVM","sendEVMPayment","useEVMWallet","account"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@micro-cms/crypto-payments",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.27",
|
|
4
4
|
"description": "Composable Crypto Payment Widget for Micro-CMS",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"module": "dist/index.mjs",
|
|
@@ -9,7 +9,7 @@
|
|
|
9
9
|
"dist"
|
|
10
10
|
],
|
|
11
11
|
"scripts": {
|
|
12
|
-
"build": "npx tailwindcss -i src/index.css -o dist/index.css --minify && bash ./scripts/sync-styles.sh && tsup
|
|
12
|
+
"build": "npx tailwindcss -i src/index.css -o dist/index.css --minify && bash ./scripts/sync-styles.sh && tsup",
|
|
13
13
|
"dev": "tsup src/index.ts --format cjs,esm --watch --dts",
|
|
14
14
|
"lint": "eslint src/**/*.ts"
|
|
15
15
|
},
|
|
@@ -18,6 +18,7 @@
|
|
|
18
18
|
"@solana/spl-token": "^0.4.14",
|
|
19
19
|
"@solana/web3.js": "^1.91.1",
|
|
20
20
|
"bs58": "^5.0.0",
|
|
21
|
+
"buffer": "^6.0.3",
|
|
21
22
|
"clsx": "^2.1.0",
|
|
22
23
|
"lucide-react": "^0.344.0",
|
|
23
24
|
"tailwind-merge": "^2.2.1"
|