zh-web-sdk 3.1.0 → 3.1.1
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/CHANGELOG.md +1 -1
- package/dist/index.js +1 -1
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -6,7 +6,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
|
|
|
6
6
|
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
7
7
|
|
|
8
8
|
|
|
9
|
-
## [3.0
|
|
9
|
+
## [3.1.0] - 2026-06-17
|
|
10
10
|
|
|
11
11
|
### Added
|
|
12
12
|
- Added `sdk-cdn.zerohash.com` (prod), `sdk-cdn.cert.zerohash.com` (cert), and `sdk-cdn.dev.0hash.com` (dev) as trusted new-SDK origins. The old `sdk.connect.xyz` origins stay trusted during migration.
|
package/dist/index.js
CHANGED
|
@@ -71,7 +71,7 @@ ${Ir.current.stack}
|
|
|
71
71
|
`),t};var qp=e=>{window.webkit?window.webkit?.messageHandlers?.minikit?.postMessage?.(e):window.Android&&window.Android.postMessage?.(JSON.stringify(e))},mk=!1,kj=()=>{if(mk||typeof navigator<"u"&&!navigator.mediaDevices?.getUserMedia)return;let e=MediaStreamTrack.prototype.stop;MediaStreamTrack.prototype.stop=function(){e.call(this),this.readyState==="ended"&&setTimeout(()=>this.dispatchEvent(new Event("ended")),0)};let t=navigator.mediaDevices.getUserMedia.bind(navigator.mediaDevices),r=new Set;async function n(i){let s=await t(i);return qp({command:"microphone-stream-started",version:1,payload:{streamId:s.id}}),r.add(s),s.getTracks().forEach(a=>{a.addEventListener("ended",()=>{qp({command:"microphone-stream-ended",version:1,payload:{streamId:s.id}}),r.delete(s)})}),s}Object.defineProperty(navigator.mediaDevices,"getUserMedia",{value:n,writable:!1,configurable:!1,enumerable:!0}),Object.freeze(navigator.mediaDevices);let o=()=>{r.forEach(i=>{i.getTracks().forEach(s=>{s.stop(),qp({command:"microphone-stream-ended",version:1,payload:{streamId:i.id}})})}),r.clear()};bk.subscribe("miniapp-microphone",i=>{i.status==="error"&&(i.error_code==="mini_app_permission_not_enabled"||i.error_code==="world_app_permission_not_enabled")&&(console.log("stopping all microphone streams",i),o())}),window.__stopAllMiniAppMicrophoneStreams=o,mk=!0},Bj="0x79f46b94d134109EbcbbddBAeD0E88790409A0e4",Rj=[{inputs:[{internalType:"uint256[8]",name:"proof",type:"uint256[8]"}],name:"compressProof",outputs:[{internalType:"uint256[4]",name:"compressed",type:"uint256[4]"}],stateMutability:"view",type:"function"}],gk=async(e,t)=>{try{let r=K2({chain:Z2,transport:Y2(t||"https://worldchain-mainnet.g.alchemy.com/public")}),n=cn([{type:"uint256[8]"}],e)[0],i=[...await r.readContract({address:Bj,abi:Rj,functionName:"compressProof",args:[n]}),0n,0n,0n,0n];return ct([{type:"uint256[8]"}],[i])}catch{return e}},hk=10,xk=50,Oj=xk*1024*1024,Nj=async e=>{let t=await e.arrayBuffer(),r=new Uint8Array(t),n="",o=32768;for(let s=0;s<r.length;s+=o){let a=r.subarray(s,Math.min(s+o,r.length));n+=String.fromCharCode.apply(null,Array.from(a))}let i=btoa(n);return{name:e.name,type:e.type,data:i}},Lj=async e=>{if(!e.files)return{title:e.title,text:e.text,url:e.url};if(!Array.isArray(e.files))throw new Error('The "files" property must be an array.');if(e.files.length!==0){if(e.files.length>hk)throw new Error(`Cannot share more than ${hk} files.`);let n=0;for(let o of e.files){if(!(o instanceof File))throw new Error(`Each item in the 'files' array must be a File object. Received: ${typeof o}`);n+=o.size}if(n>Oj)throw new Error(`Total file size cannot exceed ${xk}MB.`)}let t=e.files.map(n=>Nj(n));return{files:await Promise.all(t),title:e.title,text:e.text,url:e.url}},Fj=e=>e.nonce?e.nonce.length<8?{valid:!1,message:"'nonce' must be at least 8 characters"}:e.statement&&e.statement.includes(`
|
|
72
72
|
`)?{valid:!1,message:"'statement' must not contain newlines"}:e.expirationTime&&new Date(e.expirationTime)<new Date?{valid:!1,message:"'expirationTime' must be in the future"}:e.expirationTime&&new Date(e.expirationTime)>new Date(Date.now()+7*24*60*60*1e3)?{valid:!1,message:"'expirationTime' must be within 7 days"}:e.notBefore&&new Date(e.notBefore)>new Date(Date.now()+7*24*60*60*1e3)?{valid:!1,message:"'notBefore' must be within 7 days"}:{valid:!0}:{valid:!1,message:"'nonce' is required"},Uj=e=>/^0x[0-9A-Fa-f]+$/.test(e),Q2=e=>e===null||typeof e!="object"?e:Array.isArray(e)?e.map(r=>Q2(r)):Object.values(e).map(r=>Q2(r)),X2=e=>{if(typeof e=="boolean"||typeof e=="string"||e===null||e===void 0)return e;if(typeof e=="number"||typeof e=="bigint")return String(e);if(Array.isArray(e))return e.map(t=>X2(t));if(typeof e=="object"){let t={...e};if("value"in t&&t.value!==void 0&&(typeof t.value!="string"&&(t.value=String(t.value)),!Uj(t.value)))throw console.error("Transaction value must be a valid hex string",t.value),new Error(`Transaction value must be a valid hex string: ${t.value}`);for(let r in t)Object.prototype.hasOwnProperty.call(t,r)&&(t[r]=X2(t[r]));return t}return e},zj=e=>{if(e.formatPayload){let t=X2(e);return t.transaction=t.transaction.map(r=>{let n=Q2(r.args);return{...r,args:n}}),t}return e},Mj=async e=>(await(await fetch("https://usernames.worldcoin.org/api/v1/query",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({addresses:[e]})})).json())?.[0]??{username:null,profile_picture_url:null},xn=e=>{qp(e)},$=class At{static sendInit(){qp({command:"init",payload:{version:this.MINIKIT_VERSION,minorVersion:this.MINIKIT_MINOR_VERSION}})}static subscribe(t,r){if(t==="miniapp-wallet-auth"){let n=r,o=async i=>{if(i.status==="success"){At.user.walletAddress=i.address;try{let s=await At.getUserByAddress(i.address);At.user={...At.user,...s}}catch(s){console.error("Failed to fetch user profile:",s)}}n(i)};this.listeners[t]=o}else if(t==="miniapp-verify-action"){let n=r,o=i=>{i.status==="success"&&i.verification_level===Fc.Orb?gk(i.proof).then(s=>{i.proof=s,n(i)}):n(i)};this.listeners[t]=o}else this.listeners[t]=r}static unsubscribe(t){delete this.listeners[t]}static trigger(t,r){if(!this.listeners[t]){console.error(`No handler for event ${t}, payload: ${JSON.stringify(r)}`);return}this.listeners[t](r)}static async awaitCommand(t,r,n){return new Promise(o=>{let i=null,s=a=>{this.unsubscribe(t),o({commandPayload:i,finalPayload:a})};this.subscribe(t,s),i=n()})}static commandsValid(t){let r=!0;return Object.entries(this.miniKitCommandVersion).forEach(([n,o])=>{let i=t.find(a=>a.name===n),s=!1;i?i.supported_versions.includes(o)?(At.isCommandAvailable[n]=!0,s=!0):(s=!0,console.warn(`Command ${n} version ${o} is not supported by the app. Supported versions: ${i.supported_versions.join(", ")}. This is not an error, but it is recommended to update the World App version.`),At.isCommandAvailable[n]=s):console.warn(`Command ${n} is not supported by the app. Try updating the app version`),s||(r=!1)}),r}static install(t){if(typeof window>"u"||window.MiniKit)return{success:!1,errorCode:"already_installed",errorMessage:fl.already_installed};if(t?At.appId=t:console.warn("App ID not provided during install"),!window.WorldApp)return{success:!1,errorCode:"outside_of_worldapp",errorMessage:fl.outside_of_worldapp};At.user.optedIntoOptionalAnalytics=window.WorldApp.is_optional_analytics,At.user.deviceOS=window.WorldApp.device_os,At.user.worldAppVersion=window.WorldApp.world_app_version,At.deviceProperties.safeAreaInsets=window.WorldApp.safe_area_insets,At.deviceProperties.deviceOS=window.WorldApp.device_os,At.deviceProperties.worldAppVersion=window.WorldApp.world_app_version;try{window.MiniKit=At,this.sendInit()}catch(r){return console.error(fl.unknown,r),{success:!1,errorCode:"unknown",errorMessage:fl.unknown}}return At.isReady=!0,kj(),this.commandsValid(window.WorldApp.supported_commands)?{success:!0}:{success:!1,errorCode:"app_out_of_date",errorMessage:fl.app_out_of_date}}static isInstalled(t){let r=At.isReady&&!!window.MiniKit;return r||console.error("MiniKit is not installed. Make sure you're running the application inside of World App"),t&&r&&console.log("MiniKit is alive!"),r}};$.MINIKIT_VERSION=1;$.MINIKIT_MINOR_VERSION=96;$.miniKitCommandVersion={verify:1,pay:1,"wallet-auth":2,"send-transaction":1,"sign-message":1,"sign-typed-data":1,"share-contacts":1,"request-permission":1,"get-permissions":1,"send-haptic-feedback":1,share:1};$.isCommandAvailable={verify:!1,pay:!1,"wallet-auth":!1,"send-transaction":!1,"sign-message":!1,"sign-typed-data":!1,"share-contacts":!1,"request-permission":!1,"get-permissions":!1,"send-haptic-feedback":!1,share:!1};$.listeners={"miniapp-verify-action":()=>{},"miniapp-payment":()=>{},"miniapp-wallet-auth":()=>{},"miniapp-send-transaction":()=>{},"miniapp-sign-message":()=>{},"miniapp-sign-typed-data":()=>{},"miniapp-share-contacts":()=>{},"miniapp-request-permission":()=>{},"miniapp-get-permissions":()=>{},"miniapp-send-haptic-feedback":()=>{},"miniapp-share":()=>{},"miniapp-microphone":()=>{}};$.appId=null;$.user={};$.isReady=!1;$.deviceProperties={};$.getUserByAddress=async e=>{let t=await Mj(e??$.user.walletAddress);return{walletAddress:e??$.user.walletAddress,username:t.username,profilePictureUrl:t.profile_picture_url}};$.getUserByUsername=async e=>{let r=await(await fetch(`https://usernames.worldcoin.org/api/v1/${e}`,{method:"GET",headers:{"Content-Type":"application/json"}})).json();return{walletAddress:r.address,username:r.username,profilePictureUrl:r.profile_picture_url}};$.getUserInfo=$.getUserByAddress;$.commands={verify:e=>{if(typeof window>"u"||!$.isCommandAvailable.verify)return console.error("'verify' command is unavailable. Check MiniKit.install() or update the app version"),null;let t=new Date().toISOString(),r={action:Kf(e.action),signal:qf(e.signal).digest,verification_level:e.verification_level||Fc.Orb,timestamp:t};return xn({command:"verify",version:$.miniKitCommandVersion.verify,payload:r}),r},pay:e=>{if(typeof window>"u"||!$.isCommandAvailable.pay)return console.error("'pay' command is unavailable. Check MiniKit.install() or update the app version"),null;if(!Cj(e))return null;let t={...e,network:"worldchain"};return xn({command:"pay",version:$.miniKitCommandVersion.pay,payload:t}),t},walletAuth:e=>{if(typeof window>"u"||!$.isCommandAvailable["wallet-auth"])return console.error("'walletAuth' command is unavailable. Check MiniKit.install() or update the app version"),null;let t=Fj(e);if(!t.valid)return console.error(`Failed to validate wallet auth input:
|
|
73
73
|
|
|
74
|
-
-->`,t.message),null;let r=null;try{r=new URL(window.location.href).protocol.split(":")[0]}catch(s){return console.error("Failed to get current URL",s),null}let o={siweMessage:Pj({scheme:r,domain:window.location.host,statement:e.statement??void 0,uri:window.location.href,version:"1",chain_id:480,nonce:e.nonce,issued_at:new Date().toISOString(),expiration_time:e.expirationTime?.toISOString()??void 0,not_before:e.notBefore?.toISOString()??void 0,request_id:e.requestId??void 0})},i=$.user.worldAppVersion&&$.user.worldAppVersion>2087900?$.miniKitCommandVersion["wallet-auth"]:1;return xn({command:"wallet-auth",version:i,payload:o}),o},sendTransaction:e=>{if(typeof window>"u"||!$.isCommandAvailable["send-transaction"])return console.error("'sendTransaction' command is unavailable. Check MiniKit.install() or update the app version"),null;e.formatPayload=e.formatPayload!==!1;let t=zj(e);return xn({command:"send-transaction",version:$.miniKitCommandVersion["send-transaction"],payload:t}),t},signMessage:e=>typeof window>"u"||!$.isCommandAvailable["sign-message"]?(console.error("'signMessage' command is unavailable. Check MiniKit.install() or update the app version"),null):(xn({command:"sign-message",version:$.miniKitCommandVersion["sign-message"],payload:e}),e),signTypedData:e=>typeof window>"u"||!$.isCommandAvailable["sign-typed-data"]?(console.error("'signTypedData' command is unavailable. Check MiniKit.install() or update the app version"),null):(e.chainId||(e.chainId=480),xn({command:"sign-typed-data",version:$.miniKitCommandVersion["sign-typed-data"],payload:e}),e),shareContacts:e=>typeof window>"u"||!$.isCommandAvailable["share-contacts"]?(console.error("'shareContacts' command is unavailable. Check MiniKit.install() or update the app version"),null):(xn({command:"share-contacts",version:$.miniKitCommandVersion["share-contacts"],payload:e}),e),requestPermission:e=>typeof window>"u"||!$.isCommandAvailable["request-permission"]?(console.error("'requestPermission' command is unavailable. Check MiniKit.install() or update the app version"),null):(xn({command:"request-permission",version:$.miniKitCommandVersion["request-permission"],payload:e}),e),getPermissions:()=>typeof window>"u"||!$.isCommandAvailable["get-permissions"]?(console.error("'getPermissions' command is unavailable. Check MiniKit.install() or update the app version"),null):(xn({command:"get-permissions",version:$.miniKitCommandVersion["get-permissions"],payload:{}}),{status:"sent"}),sendHapticFeedback:e=>typeof window>"u"||!$.isCommandAvailable["send-haptic-feedback"]?(console.error("'sendHapticFeedback' command is unavailable. Check MiniKit.install() or update the app version"),null):(xn({command:"send-haptic-feedback",version:$.miniKitCommandVersion["send-haptic-feedback"],payload:e}),e),share:e=>typeof window>"u"||!$.isCommandAvailable.share?(console.error("'share' command is unavailable. Check MiniKit.install() or update the app version"),null):($.deviceProperties.deviceOS==="ios"&&typeof navigator<"u"?(xn({command:"share",version:$.miniKitCommandVersion.share,payload:e}),navigator.share(e)):(Lj(e).then(t=>{xn({command:"share",version:$.miniKitCommandVersion.share,payload:t})}).catch(t=>{console.error("Failed to format share input",t)}),$.subscribe("miniapp-share",t=>{console.log("Share Response",t)})),e)};$.commandsAsync={verify:async e=>new Promise(async(t,r)=>{try{let n=await $.awaitCommand("miniapp-verify-action","verify",()=>$.commands.verify(e));n.finalPayload.status==="success"&&n.finalPayload.verification_level===Fc.Orb&&(n.finalPayload.proof=await gk(n.finalPayload.proof)),t(n)}catch(n){r(n)}}),pay:async e=>new Promise(async(t,r)=>{try{let n=await $.awaitCommand("miniapp-payment","pay",()=>$.commands.pay(e));t(n)}catch(n){r(n)}}),walletAuth:async e=>new Promise(async(t,r)=>{try{let n=await $.awaitCommand("miniapp-wallet-auth","wallet-auth",()=>$.commands.walletAuth(e));return t(n)}catch(n){r(n)}}),sendTransaction:async e=>new Promise(async(t,r)=>{try{let n=await $.awaitCommand("miniapp-send-transaction","send-transaction",()=>$.commands.sendTransaction(e));return t(n)}catch(n){r(n)}}),signMessage:async e=>new Promise(async(t,r)=>{try{let n=await $.awaitCommand("miniapp-sign-message","sign-message",()=>$.commands.signMessage(e));return t(n)}catch(n){r(n)}}),signTypedData:async e=>new Promise(async(t,r)=>{try{let n=await $.awaitCommand("miniapp-sign-typed-data","sign-typed-data",()=>$.commands.signTypedData(e));return t(n)}catch(n){r(n)}}),shareContacts:async e=>new Promise(async(t,r)=>{try{let n=await $.awaitCommand("miniapp-share-contacts","share-contacts",()=>$.commands.shareContacts(e));return t(n)}catch(n){r(n)}}),requestPermission:async e=>new Promise(async(t,r)=>{try{let n=await $.awaitCommand("miniapp-request-permission","request-permission",()=>$.commands.requestPermission(e));t(n)}catch(n){r(n)}}),getPermissions:async()=>new Promise(async(e,t)=>{try{let r=await $.awaitCommand("miniapp-get-permissions","get-permissions",()=>$.commands.getPermissions());e(r)}catch(r){t(r)}}),sendHapticFeedback:async e=>new Promise(async(t,r)=>{try{let n=await $.awaitCommand("miniapp-send-haptic-feedback","send-haptic-feedback",()=>$.commands.sendHapticFeedback(e));t(n)}catch(n){r(n)}}),share:async e=>new Promise(async(t,r)=>{try{let n=await $.awaitCommand("miniapp-share","share",()=>$.commands.share(e));t({commandPayload:n.commandPayload,finalPayload:n.finalPayload})}catch(n){r(n)}})};var bk=$;var Bs=q(ie()),wk=(e,t)=>{let[r,n]=(0,Bs.useState)(t),[o,i]=(0,Bs.useState)(!1);(0,Bs.useEffect)(()=>{let c=setTimeout(()=>{i(u=>u||!0)},4500);return()=>clearTimeout(c)},[]);let s=(0,Bs.useCallback)((c,u)=>{let l=new URL(e).origin;return u===l||u===window.location.origin?(n(p=>({appWrapperStyle:c.appWrapperStyle?{...p.appWrapperStyle,...c.appWrapperStyle}:p.appWrapperStyle,modalStyle:c.modalStyle?{...p.modalStyle,...c.modalStyle}:p.modalStyle,iframeWrapperStyle:c.iframeWrapperStyle?{...p.iframeWrapperStyle,...c.iframeWrapperStyle}:p.iframeWrapperStyle,iframeStyle:c.iframeStyle?{...p.iframeStyle,...c.iframeStyle}:p.iframeStyle})),i(!0),!0):!1},[e]),a=(0,Bs.useCallback)(()=>{i(!0)},[]);return{styles:r,stylesLoaded:o,handleStyleConfig:s,markStylesLoaded:a}};var Dj={local:["localhost","127.0.0.1"],cert:["web-sdk.cert.0hash.com","web-sdk.sandbox.connect.xyz","onboarding.cert.zerohash.com","web-sdk.cert.zerohash.com","onboarding.cert.zerohash.eu","web-sdk.cert.zerohash.eu","onboarding.sandbox.connect.xyz","onboarding.gating.0hash.com","web-sdk.gating.0hash.com"],dev:["web-sdk.dev.0hash.com","onboarding.dev.0hash.com","onboarding.dev.zerohash.com","web-sdk.dev.zerohash.com","connect-sdk.dev.0hash.com"],prod:[]},P1={local:"http://localhost:5173",dev:"https://sdk-cdn.dev.0hash.com",cert:"https://sdk-cdn.cert.zerohash.com",prod:"https://sdk-cdn.zerohash.com"},Sk=new Set(["https://sdk-cdn.zerohash.com","https://sdk-cdn.cert.zerohash.com","https://sdk-cdn.dev.0hash.com","https://sdk-cdn.zerohash.eu","https://sdk-cdn.cert.zerohash.eu","https://sdk.connect.xyz","https://sdk.sandbox.connect.xyz","https://connect-sdk.dev.0hash.com","http://localhost:5173"]),vk=new Set;function Kp(e){let t;try{t=new URL(e).hostname}catch{return Ek(e),"prod"}for(let r of["local","cert","dev"])if(Dj[r].includes(t))return r;return Ek(e),"prod"}function Ek(e){vk.has(e)||(vk.add(e),console.warn(`[zh-web-sdk] Could not infer environment from "${e}"; defaulting to "prod". Pass the explicit \`env\` option to ZeroHashSDK to silence this warning.`))}var $j={local:"sandbox",dev:"sandbox",cert:"sandbox",prod:"production"};function Ak(e){return $j[e]}function k1(e){try{let t=e.split(".");if(t.length!==3)return console.error("[zh-web-sdk] Invalid JWT format"),null;let r=t[1],n=atob(r.replace(/-/g,"+").replace(/_/g,"/"));return JSON.parse(n)}catch(t){return console.error("[zh-web-sdk] Error decoding JWT:",t),null}}var jj=["connect-xyz.us.auth0.com","connect-xyz-dev.us.auth0.com"];function Tk(e){if(typeof e!="string")return!1;try{let{hostname:t}=new URL(e);return jj.includes(t)}catch{return!1}}var B1="3.1.0";var Ut=q(Ke()),Hj=Date.now(),Wj={"crypto-account-link":t0,"crypto-account-link-payouts":t0,"crypto-sell":v8,"csp-crypto-sell":I8,"crypto-buy":B8,onboarding:F8,"fiat-deposits":$8,"fiat-withdrawals":G8,"csp-fiat-withdrawals":aT,"crypto-withdrawals":Z8,"csp-crypto-withdrawals":rT,"fiat-account-link":pT,fund:r0,pay:r0,payouts:n0,profile:TT},Vj=["withdrawal_request_amount","external_account_id","quoted_asset"];function Gj(e,t){if(e==="crypto-withdrawals"&&t){let n=k1(t)?.payload?.withdrawal_details;if(n){for(let o of Vj)n[o]===void 0&&console.error(`the '${o}' was not found in the JWT payload`);return n0}}return Wj[e]}var qj={onboarding:"Onboarding","crypto-withdrawals":"Crypto Withdrawals","fiat-deposits":"Fiat Deposits","fiat-withdrawals":"Fiat Withdrawals","crypto-buy":"Crypto Buy","crypto-sell":"Crypto Sell","csp-crypto-withdrawals":"CBP Crypto Withdrawals","csp-fiat-withdrawals":"CBP Fiat Withdrawals","csp-crypto-sell":"Crypto Sell",fund:"Fund",profile:"Profile","crypto-account-link":"Crypto Account Link","crypto-account-link-payouts":"Crypto Account Link Payouts",payouts:"Payouts",pay:"Pay","fiat-account-link":"Fiat Account Link"},Kj=({isAppActive:e,isAppLoaded:t,jwt:r,zeroHashAppURL:n,appIdentifier:o,navigate:i,useAuth:s,authSettings:a,useNewSdk:c,theme:u,env:l})=>{let f=qj[o],p=!!r,[d,b]=(0,Hn.useState)($b),h=mb(k=>k),{height:A}=FT(),{styles:y,stylesLoaded:m,handleStyleConfig:g,markStylesLoaded:x}=wk(n,{appWrapperStyle:kT,modalStyle:BT,iframeWrapperStyle:RT,iframeStyle:OT}),S=Ak(l??Kp(n)),v=()=>{let k=CT(),z=PT[k];b({...$b,...z})},E=(0,Hn.useRef)(null);(0,Hn.useEffect)(()=>{n&&t&&p&&E.current?.contentWindow&&Object.keys(h).forEach(k=>{h[k].jwt&&(E.current?.contentWindow?.postMessage({type:`${W.get(k)}SEND_JWT_TOKEN`,jwt:h[k].jwt},n),E.current?.contentWindow?.postMessage({type:`${W.get(k)}SEND_SDK_VERSION`,version:B1},n),UT()&&E.current?.contentWindow?.postMessage({type:"WORLD_APP_OBJECT",WorldApp:window.WorldApp},n),h[k].filters&&E.current?.contentWindow?.postMessage({type:`${W.get(k)}SEND_FILTERS`,filters:h[k].filters},n),o==="onboarding"&&i&&E.current?.contentWindow?.postMessage({type:`${W.get("onboarding")}NAVIGATE`,navigate:i},n))})},[o,p,t,r,n,h,i]),(0,Hn.useEffect)(()=>{if(v(),window)return Sf.forEach(({size:k})=>{window.matchMedia(`(min-width: ${k}px)`).addEventListener("change",v)}),()=>Sf.forEach(({size:k})=>{window.matchMedia(`(min-width: ${k}px)`).removeEventListener("change",v)})},[]);let w=(0,Hn.useCallback)(async k=>{let z=new URL(n);if(E.current?.contentWindow?.postMessage({type:"MINIKIT_PAY_COMMAND_RECEIVED",payload:{origin:k.origin,zhAppsURLOrigin:z.origin,data:k.data}},n),!window.MiniKit){E.current?.contentWindow?.postMessage({type:"MINIKIT_PAY_COMMAND_CANCELED",payload:{reason:"window.Minikit not found"}},n);return}try{if(k.data?.type==="MINIKIT_PAY_COMMAND"){let R=k.data.payload,D={reference:R.reference,to:R.to,tokens:[{symbol:R.token,token_amount:ev(Number(R.amount),R.token).toString()}],description:R.description};E.current?.contentWindow?.postMessage({type:"MINIKIT_PAY_COMMAND_SUBMITTING_PAYMENT",payload:{minikitPayload:D}},n);let{finalPayload:K}=await window.MiniKit.commandsAsync.pay(D);E.current?.contentWindow?.postMessage({type:"MINIKIT_PAY_COMMAND_RESULT",payload:{finalPayload:K}},n)}}catch(R){E.current?.contentWindow?.postMessage({type:"MINIKIT_PAY_COMMAND_ERROR",payload:{error:R,status:"error"}},n)}},[n]),C=(0,Hn.useCallback)(async k=>{if(k.data.type==="STYLE_CONFIG"){g(k.data,k.origin);return}await w(k)},[g,w]);(0,Hn.useEffect)(()=>(window.addEventListener("message",C),()=>window.removeEventListener("message",C)),[C,n]);let T=new URL(n);if(T.searchParams.set("name",Hj.toString()),window&&T.searchParams.set("origin",window.location.origin),!e)return(0,Ut.jsx)(Ut.Fragment,{});let{appWrapperStyle:I,modalStyle:U,iframeWrapperStyle:M,iframeStyle:H}=y,O=Gj(o,r);if(c&&p&&O){let k=l??Kp(n),z=O===n0?{isPayouts:o==="payouts"}:O===t0?{isPayouts:o==="crypto-account-link-payouts"}:O===r0?{isPay:o==="pay"}:{};return(0,Ut.jsx)("div",{style:{...I,maxHeight:CSS.supports("height: 100dvh")?"100dvh":`${A}px`,height:CSS.supports("height: 100dvh")?"100dvh":`${A}px`},onClick:()=>Me(o),children:(0,Ut.jsx)("div",{style:{...o0(u),...d,opacity:m?1:0},onClick:R=>R.stopPropagation(),children:(0,Ut.jsx)("div",{style:{...M,...H},children:(0,Ut.jsx)(O,{jwt:r,env:k,theme:u??"light",...z,onLoaded:()=>{Bt(o),x()},onCompleted:()=>{ht(o)},onError:()=>{yt(o)},onClose:()=>{Me(o)}})})})})}if(s&&p){let k=IT(window.location.origin),z=a?.theme||"auto";return(0,Ut.jsx)("div",{style:{...I,maxHeight:CSS.supports("height: 100dvh")?"100dvh":`${A}px`,height:CSS.supports("height: 100dvh")?"100dvh":`${A}px`},onClick:()=>Me(o),children:(0,Ut.jsx)("div",{style:{...o0(z),...d,zIndex:"9999",opacity:m?1:0},onClick:R=>R.stopPropagation(),children:(0,Ut.jsx)("div",{style:{...M,...H},children:(0,Ut.jsx)(p8,{jwt:r,env:S,theme:z,...k})})})})}return(0,Ut.jsx)("div",{style:{...I,maxHeight:CSS.supports("height: 100dvh")?"100dvh":`${A}px`,height:CSS.supports("height: 100dvh")?"100dvh":`${A}px`},onClick:()=>Me(o),children:(0,Ut.jsx)("div",{style:{...U,...d,opacity:m?1:0},children:(0,Ut.jsx)("div",{style:M,children:(0,Ut.jsx)("iframe",{ref:E,title:f,src:T.toString(),allow:"camera *; fullscreen *; accelerometer *; gyroscope *; magnetometer *; local-network-access *;",sandbox:"allow-downloads allow-forms allow-modals allow-popups allow-popups-to-escape-sandbox allow-same-origin allow-scripts allow-top-navigation",style:H})})})})},Yj=(e,t)=>({isAppActive:e[t.appIdentifier].isAppActive,isAppLoaded:e[t.appIdentifier].isAppLoaded,jwt:e[t.appIdentifier].jwt,filters:e[t.appIdentifier].filters,navigate:t.appIdentifier==="onboarding"?e[t.appIdentifier].navigate:void 0,useAuth:t.appIdentifier==="fund"?e[t.appIdentifier].useAuth:void 0,authSettings:t.appIdentifier==="fund"?e[t.appIdentifier].authSettings:void 0,useNewSdk:e["new-sdk-flags"]?.flags?.[t.appIdentifier]??!1,theme:e.theme?.value??"light"}),tv=Tb(Yj)(Kj);var Jp=q(Ke());window.__ZH_WEB_SDK_VERSION__=B1;var Yp=rb,_k="",rv,R1=P1.prod,ov=!1,Ik={ONBOARDING_APP_LOADED:()=>{Bt("onboarding")},ONBOARDING_CLOSE_BUTTON_CLICKED:()=>{Me("onboarding")},ONBOARDING_PENDING_APPROVAL:()=>{NT("onboarding")},ONBOARDING_COMPLETED:()=>{ht("onboarding")},ONBOARDING_FAILED:()=>{yt("onboarding")},CRYPTO_WITHDRAWALS_CLOSE_BUTTON_CLICKED:()=>{Me("crypto-withdrawals")},CRYPTO_WITHDRAWALS_APP_LOADED:()=>{Bt("crypto-withdrawals")},CRYPTO_WITHDRAWALS_COMPLETED:()=>{ht("crypto-withdrawals")},CRYPTO_WITHDRAWALS_FAILED:()=>{yt("crypto-withdrawals")},FIAT_DEPOSITS_CLOSE_BUTTON_CLICKED:()=>{Me("fiat-deposits")},FIAT_DEPOSITS_APP_LOADED:()=>{Bt("fiat-deposits")},FIAT_DEPOSITS_COMPLETED:()=>{ht("fiat-deposits")},FIAT_DEPOSITS_FAILED:()=>{yt("fiat-deposits")},FIAT_WITHDRAWALS_CLOSE_BUTTON_CLICKED:()=>{Me("fiat-withdrawals")},FIAT_WITHDRAWALS_APP_LOADED:()=>{Bt("fiat-withdrawals")},FIAT_WITHDRAWALS_COMPLETED:()=>{ht("fiat-withdrawals")},FIAT_WITHDRAWALS_FAILED:()=>{yt("fiat-withdrawals")},CRYPTO_BUY_CLOSE_BUTTON_CLICKED:()=>{Me("crypto-buy")},CRYPTO_BUY_APP_LOADED:()=>{Bt("crypto-buy")},CRYPTO_BUY_COMPLETED:()=>{ht("crypto-buy")},CRYPTO_BUY_FAILED:()=>{yt("crypto-buy")},CRYPTO_SELL_CLOSE_BUTTON_CLICKED:()=>{Me("crypto-sell")},CRYPTO_SELL_APP_LOADED:()=>{Bt("crypto-sell")},CRYPTO_SELL_COMPLETED:()=>{ht("crypto-sell")},CRYPTO_SELL_FAILED:()=>{yt("crypto-sell")},FUND_APP_LOADED:()=>{Bt("fund")},FUND_CLOSE_BUTTON_CLICKED:()=>{Me("fund")},FUND_COMPLETED:()=>{ht("fund")},FUND_FAILED:()=>{yt("fund")},FUND_ERROR:()=>{yt("fund")},FUND_DEPOSIT_SUBMITTED:()=>{ht("fund")},FUND_CONNECT_DEPOSIT:()=>{ht("fund")},FUND_CONNECT_EVENT:()=>{},PROFILE_APP_LOADED:()=>{Bt("profile")},PROFILE_CLOSE_BUTTON_CLICKED:()=>{Me("profile")},PROFILE_FAILED:()=>{yt("profile")},CRYPTO_ACCOUNT_LINK_APP_LOADED:()=>{Bt("crypto-account-link")},CRYPTO_ACCOUNT_LINK_CLOSE_BUTTON_CLICKED:()=>{Me("crypto-account-link")},CRYPTO_ACCOUNT_LINK_FAILED:()=>{yt("crypto-account-link")},CRYPTO_ACCOUNT_LINK_COMPLETED:()=>{ht("crypto-account-link")},CRYPTO_ACCOUNT_LINK_PAYOUTS_APP_LOADED:()=>{Bt("crypto-account-link-payouts")},CRYPTO_ACCOUNT_LINK_PAYOUTS_CLOSE_BUTTON_CLICKED:()=>{Me("crypto-account-link-payouts")},CRYPTO_ACCOUNT_LINK_PAYOUTS_FAILED:()=>{yt("crypto-account-link-payouts")},CRYPTO_ACCOUNT_LINK_PAYOUTS_COMPLETED:()=>{ht("crypto-account-link-payouts")},PAYOUTS_APP_LOADED:()=>{Bt("payouts")},PAYOUTS_CLOSE_BUTTON_CLICKED:()=>{Me("payouts")},PAYOUTS_COMPLETED:()=>{ht("payouts")},PAYOUTS_FAILED:()=>{yt("payouts")},PAY_APP_LOADED:()=>{Bt("pay")},PAY_CLOSE_BUTTON_CLICKED:()=>{Me("pay")},PAY_COMPLETED:()=>{ht("pay")},PAY_FAILED:()=>{yt("pay")},FIAT_ACCOUNT_LINK_APP_LOADED:()=>{Bt("fiat-account-link")},FIAT_ACCOUNT_LINK_CLOSE_BUTTON_CLICKED:()=>{Me("fiat-account-link")},FIAT_ACCOUNT_LINK_COMPLETED:()=>{ht("fiat-account-link")},FIAT_ACCOUNT_LINK_FAILED:()=>{yt("fiat-account-link")},STYLE_CONFIG:()=>{}},Jj=e=>{let t=window.location.origin===e.origin,r=e.origin===_k,n=Sk.has(e.origin),o=Pn.getState().fund?.useAuth||!1;if(r||n||t&&o){let i=e.data;if(i&&i.type&&Ik[i.type])try{Ik[i.type](i.payload)}catch(s){console.error(s)}}},O1=class{rootQuerySelector="";onboardingInitialized=!1;initializedApps=new Map([["crypto-withdrawals",!1],["onboarding",!1],["fiat-deposits",!1],["fiat-withdrawals",!1],["crypto-buy",!1],["crypto-sell",!1],["fund",!1],["profile",!1],["crypto-account-link",!1],["crypto-account-link-payouts",!1],["payouts",!1],["pay",!1],["fiat-account-link",!1]]);constructor({zeroHashOnboardingURL:t=rb,rootQuerySelector:r,userOnboardingJWT:n,cryptoWithdrawalsJWT:o,fiatDepositsJWT:i,fiatWithdrawalsJWT:s,cryptoBuyJWT:a,cryptoSellJWT:c,fundJWT:u,profileJWT:l,cryptoAccountLinkJWT:f,cryptoAccountLinkPayoutsJWT:p,payoutsJWT:d,payJWT:b,fiatAccountLinkJWT:h,zeroHashAppsURL:A,env:y,theme:m}){Yp=A||t,_k=new URL(Yp).origin,rv=y;let x=y??Kp(Yp),S=P1[x];ov?S!==R1&&console.warn(`[zh-web-sdk] ZeroHashSDK has already been initialized with new-SDK origin "${R1}"; ignoring re-initialization that would change it to "${S}". Construct ZeroHashSDK once per page.`):(R1=S,ov=!0),r&&(this.rootQuerySelector=r),Hb(m??"light"),window.addEventListener("message",Jj,!1),n&&this.setJWT({jwt:n,appIdentifier:"onboarding"}),o&&this.setJWT({jwt:o,appIdentifier:"crypto-withdrawals"}),i&&this.setJWT({jwt:i,appIdentifier:"fiat-deposits"}),s&&this.setJWT({jwt:s,appIdentifier:"fiat-withdrawals"}),a&&this.setJWT({jwt:a,appIdentifier:"crypto-buy"}),c&&this.setJWT({jwt:c,appIdentifier:"crypto-sell"}),u&&this.setJWT({jwt:u,appIdentifier:"fund"}),l&&this.setJWT({jwt:l,appIdentifier:"profile"}),f&&this.setJWT({jwt:f,appIdentifier:"crypto-account-link"}),p&&this.setJWT({jwt:p,appIdentifier:"crypto-account-link-payouts"}),d&&this.setJWT({jwt:d,appIdentifier:"payouts"}),b&&this.setJWT({jwt:b,appIdentifier:"pay"}),h&&this.setJWT({jwt:h,appIdentifier:"fiat-account-link"})}setJWT({jwt:t,appIdentifier:r}){Nr(r,de,{jwt:t})}setFilters({filters:t,appIdentifier:r}){Nr(r,vm,{filters:t})}setNavigate({appIdentifier:t,navigate:r}){Nr(t,Em,{navigate:r})}setTheme({theme:t}){Hb(t)}setUserOnboardingJWT(t){this.setJWT({jwt:t.userOnboardingJWT,appIdentifier:"onboarding"})}isOnboardingModalOpen(){return Pn.getState().onboarding.isAppActive}isModalOpen(t){return Pn.getState()[t].isAppActive}closeModal(t){Me(t)}openModal({jwt:t,appIdentifier:r,filters:n,navigate:o}){n&&this.setFilters({filters:n,appIdentifier:r}),o&&this.setNavigate({appIdentifier:r,navigate:o});let i=!1,s=!1;if(t){let c=k1(t);c&&Tk(c.iss)&&(i=!0),c?.payload?.use_new_sdk===!0&&(s=!0)}if(t&&this.setJWT({jwt:t,appIdentifier:r}),r==="fund"&&Nr(r,Sm,{useAuth:i}),LT(r,s),jb(r),this.initializedApps.get(r))return;let a=null;if(this.rootQuerySelector&&(a=document.querySelector(this.rootQuerySelector)),!this.initializedApps.get(r)){a=document.createElement("div");let c=cb(r);a.id=c,a.style.position="absolute",a.style.top="0",a.style.left="0",this.rootQuerySelector=`#${c}`,document.querySelector("body").appendChild(a)}if(a){let c=a.attachShadow({mode:"closed"}),u=new URL(r,Yp).href;nv.default.createRoot(c).render((0,Jp.jsx)(Xm,{store:Pn,children:(0,Jp.jsx)(tv,{appIdentifier:r,zeroHashAppURL:u,env:rv,useAuth:i})})),this.initializedApps.set(r,!0)}else{let c="failed to append ZeroHash root to the page: root not found";throw console.error(c),new Error(c)}}openOnboardingModal(t){if(t.userOnboardingJWT&&this.setUserOnboardingJWT({userOnboardingJWT:t.userOnboardingJWT}),jb("onboarding"),this.onboardingInitialized)return;let r=null;if(this.rootQuerySelector&&(r=document.querySelector(this.rootQuerySelector)),!r){r=document.createElement("div");let n=cb();r.id=n,r.style.position="absolute",r.style.top="0",r.style.left="0",this.rootQuerySelector=`#${n}`,document.querySelector("body").appendChild(r)}if(r){let n=r.attachShadow({mode:"closed"});nv.default.createRoot(n).render((0,Jp.jsx)(Xm,{store:Pn,children:(0,Jp.jsx)(tv,{appIdentifier:"onboarding",zeroHashAppURL:Yp,env:rv})})),this.onboardingInitialized=!0}else{let n="failed to append ZeroHash root to the page: root not found";throw console.error(n),new Error(n)}}closeOnboardingModal(){Me("onboarding")}};window&&(window.zerohash=O1);function Hwe(){R1=P1.prod,ov=!1}var Wwe=O1;export{kt as AppIdentifier,bm as IncomingMessageType,O1 as ZeroHashSDK,Hwe as _resetNewSdkOriginForTests,W as appIdentifierToActionPrefixMap,Wwe as default};
|
|
74
|
+
-->`,t.message),null;let r=null;try{r=new URL(window.location.href).protocol.split(":")[0]}catch(s){return console.error("Failed to get current URL",s),null}let o={siweMessage:Pj({scheme:r,domain:window.location.host,statement:e.statement??void 0,uri:window.location.href,version:"1",chain_id:480,nonce:e.nonce,issued_at:new Date().toISOString(),expiration_time:e.expirationTime?.toISOString()??void 0,not_before:e.notBefore?.toISOString()??void 0,request_id:e.requestId??void 0})},i=$.user.worldAppVersion&&$.user.worldAppVersion>2087900?$.miniKitCommandVersion["wallet-auth"]:1;return xn({command:"wallet-auth",version:i,payload:o}),o},sendTransaction:e=>{if(typeof window>"u"||!$.isCommandAvailable["send-transaction"])return console.error("'sendTransaction' command is unavailable. Check MiniKit.install() or update the app version"),null;e.formatPayload=e.formatPayload!==!1;let t=zj(e);return xn({command:"send-transaction",version:$.miniKitCommandVersion["send-transaction"],payload:t}),t},signMessage:e=>typeof window>"u"||!$.isCommandAvailable["sign-message"]?(console.error("'signMessage' command is unavailable. Check MiniKit.install() or update the app version"),null):(xn({command:"sign-message",version:$.miniKitCommandVersion["sign-message"],payload:e}),e),signTypedData:e=>typeof window>"u"||!$.isCommandAvailable["sign-typed-data"]?(console.error("'signTypedData' command is unavailable. Check MiniKit.install() or update the app version"),null):(e.chainId||(e.chainId=480),xn({command:"sign-typed-data",version:$.miniKitCommandVersion["sign-typed-data"],payload:e}),e),shareContacts:e=>typeof window>"u"||!$.isCommandAvailable["share-contacts"]?(console.error("'shareContacts' command is unavailable. Check MiniKit.install() or update the app version"),null):(xn({command:"share-contacts",version:$.miniKitCommandVersion["share-contacts"],payload:e}),e),requestPermission:e=>typeof window>"u"||!$.isCommandAvailable["request-permission"]?(console.error("'requestPermission' command is unavailable. Check MiniKit.install() or update the app version"),null):(xn({command:"request-permission",version:$.miniKitCommandVersion["request-permission"],payload:e}),e),getPermissions:()=>typeof window>"u"||!$.isCommandAvailable["get-permissions"]?(console.error("'getPermissions' command is unavailable. Check MiniKit.install() or update the app version"),null):(xn({command:"get-permissions",version:$.miniKitCommandVersion["get-permissions"],payload:{}}),{status:"sent"}),sendHapticFeedback:e=>typeof window>"u"||!$.isCommandAvailable["send-haptic-feedback"]?(console.error("'sendHapticFeedback' command is unavailable. Check MiniKit.install() or update the app version"),null):(xn({command:"send-haptic-feedback",version:$.miniKitCommandVersion["send-haptic-feedback"],payload:e}),e),share:e=>typeof window>"u"||!$.isCommandAvailable.share?(console.error("'share' command is unavailable. Check MiniKit.install() or update the app version"),null):($.deviceProperties.deviceOS==="ios"&&typeof navigator<"u"?(xn({command:"share",version:$.miniKitCommandVersion.share,payload:e}),navigator.share(e)):(Lj(e).then(t=>{xn({command:"share",version:$.miniKitCommandVersion.share,payload:t})}).catch(t=>{console.error("Failed to format share input",t)}),$.subscribe("miniapp-share",t=>{console.log("Share Response",t)})),e)};$.commandsAsync={verify:async e=>new Promise(async(t,r)=>{try{let n=await $.awaitCommand("miniapp-verify-action","verify",()=>$.commands.verify(e));n.finalPayload.status==="success"&&n.finalPayload.verification_level===Fc.Orb&&(n.finalPayload.proof=await gk(n.finalPayload.proof)),t(n)}catch(n){r(n)}}),pay:async e=>new Promise(async(t,r)=>{try{let n=await $.awaitCommand("miniapp-payment","pay",()=>$.commands.pay(e));t(n)}catch(n){r(n)}}),walletAuth:async e=>new Promise(async(t,r)=>{try{let n=await $.awaitCommand("miniapp-wallet-auth","wallet-auth",()=>$.commands.walletAuth(e));return t(n)}catch(n){r(n)}}),sendTransaction:async e=>new Promise(async(t,r)=>{try{let n=await $.awaitCommand("miniapp-send-transaction","send-transaction",()=>$.commands.sendTransaction(e));return t(n)}catch(n){r(n)}}),signMessage:async e=>new Promise(async(t,r)=>{try{let n=await $.awaitCommand("miniapp-sign-message","sign-message",()=>$.commands.signMessage(e));return t(n)}catch(n){r(n)}}),signTypedData:async e=>new Promise(async(t,r)=>{try{let n=await $.awaitCommand("miniapp-sign-typed-data","sign-typed-data",()=>$.commands.signTypedData(e));return t(n)}catch(n){r(n)}}),shareContacts:async e=>new Promise(async(t,r)=>{try{let n=await $.awaitCommand("miniapp-share-contacts","share-contacts",()=>$.commands.shareContacts(e));return t(n)}catch(n){r(n)}}),requestPermission:async e=>new Promise(async(t,r)=>{try{let n=await $.awaitCommand("miniapp-request-permission","request-permission",()=>$.commands.requestPermission(e));t(n)}catch(n){r(n)}}),getPermissions:async()=>new Promise(async(e,t)=>{try{let r=await $.awaitCommand("miniapp-get-permissions","get-permissions",()=>$.commands.getPermissions());e(r)}catch(r){t(r)}}),sendHapticFeedback:async e=>new Promise(async(t,r)=>{try{let n=await $.awaitCommand("miniapp-send-haptic-feedback","send-haptic-feedback",()=>$.commands.sendHapticFeedback(e));t(n)}catch(n){r(n)}}),share:async e=>new Promise(async(t,r)=>{try{let n=await $.awaitCommand("miniapp-share","share",()=>$.commands.share(e));t({commandPayload:n.commandPayload,finalPayload:n.finalPayload})}catch(n){r(n)}})};var bk=$;var Bs=q(ie()),wk=(e,t)=>{let[r,n]=(0,Bs.useState)(t),[o,i]=(0,Bs.useState)(!1);(0,Bs.useEffect)(()=>{let c=setTimeout(()=>{i(u=>u||!0)},4500);return()=>clearTimeout(c)},[]);let s=(0,Bs.useCallback)((c,u)=>{let l=new URL(e).origin;return u===l||u===window.location.origin?(n(p=>({appWrapperStyle:c.appWrapperStyle?{...p.appWrapperStyle,...c.appWrapperStyle}:p.appWrapperStyle,modalStyle:c.modalStyle?{...p.modalStyle,...c.modalStyle}:p.modalStyle,iframeWrapperStyle:c.iframeWrapperStyle?{...p.iframeWrapperStyle,...c.iframeWrapperStyle}:p.iframeWrapperStyle,iframeStyle:c.iframeStyle?{...p.iframeStyle,...c.iframeStyle}:p.iframeStyle})),i(!0),!0):!1},[e]),a=(0,Bs.useCallback)(()=>{i(!0)},[]);return{styles:r,stylesLoaded:o,handleStyleConfig:s,markStylesLoaded:a}};var Dj={local:["localhost","127.0.0.1"],cert:["web-sdk.cert.0hash.com","web-sdk.sandbox.connect.xyz","onboarding.cert.zerohash.com","web-sdk.cert.zerohash.com","onboarding.cert.zerohash.eu","web-sdk.cert.zerohash.eu","onboarding.sandbox.connect.xyz","onboarding.gating.0hash.com","web-sdk.gating.0hash.com"],dev:["web-sdk.dev.0hash.com","onboarding.dev.0hash.com","onboarding.dev.zerohash.com","web-sdk.dev.zerohash.com","connect-sdk.dev.0hash.com"],prod:[]},P1={local:"http://localhost:5173",dev:"https://sdk-cdn.dev.0hash.com",cert:"https://sdk-cdn.cert.zerohash.com",prod:"https://sdk-cdn.zerohash.com"},Sk=new Set(["https://sdk-cdn.zerohash.com","https://sdk-cdn.cert.zerohash.com","https://sdk-cdn.dev.0hash.com","https://sdk-cdn.zerohash.eu","https://sdk-cdn.cert.zerohash.eu","https://sdk.connect.xyz","https://sdk.sandbox.connect.xyz","https://connect-sdk.dev.0hash.com","http://localhost:5173"]),vk=new Set;function Kp(e){let t;try{t=new URL(e).hostname}catch{return Ek(e),"prod"}for(let r of["local","cert","dev"])if(Dj[r].includes(t))return r;return Ek(e),"prod"}function Ek(e){vk.has(e)||(vk.add(e),console.warn(`[zh-web-sdk] Could not infer environment from "${e}"; defaulting to "prod". Pass the explicit \`env\` option to ZeroHashSDK to silence this warning.`))}var $j={local:"sandbox",dev:"sandbox",cert:"sandbox",prod:"production"};function Ak(e){return $j[e]}function k1(e){try{let t=e.split(".");if(t.length!==3)return console.error("[zh-web-sdk] Invalid JWT format"),null;let r=t[1],n=atob(r.replace(/-/g,"+").replace(/_/g,"/"));return JSON.parse(n)}catch(t){return console.error("[zh-web-sdk] Error decoding JWT:",t),null}}var jj=["connect-xyz.us.auth0.com","connect-xyz-dev.us.auth0.com"];function Tk(e){if(typeof e!="string")return!1;try{let{hostname:t}=new URL(e);return jj.includes(t)}catch{return!1}}var B1="3.1.1";var Ut=q(Ke()),Hj=Date.now(),Wj={"crypto-account-link":t0,"crypto-account-link-payouts":t0,"crypto-sell":v8,"csp-crypto-sell":I8,"crypto-buy":B8,onboarding:F8,"fiat-deposits":$8,"fiat-withdrawals":G8,"csp-fiat-withdrawals":aT,"crypto-withdrawals":Z8,"csp-crypto-withdrawals":rT,"fiat-account-link":pT,fund:r0,pay:r0,payouts:n0,profile:TT},Vj=["withdrawal_request_amount","external_account_id","quoted_asset"];function Gj(e,t){if(e==="crypto-withdrawals"&&t){let n=k1(t)?.payload?.withdrawal_details;if(n){for(let o of Vj)n[o]===void 0&&console.error(`the '${o}' was not found in the JWT payload`);return n0}}return Wj[e]}var qj={onboarding:"Onboarding","crypto-withdrawals":"Crypto Withdrawals","fiat-deposits":"Fiat Deposits","fiat-withdrawals":"Fiat Withdrawals","crypto-buy":"Crypto Buy","crypto-sell":"Crypto Sell","csp-crypto-withdrawals":"CBP Crypto Withdrawals","csp-fiat-withdrawals":"CBP Fiat Withdrawals","csp-crypto-sell":"Crypto Sell",fund:"Fund",profile:"Profile","crypto-account-link":"Crypto Account Link","crypto-account-link-payouts":"Crypto Account Link Payouts",payouts:"Payouts",pay:"Pay","fiat-account-link":"Fiat Account Link"},Kj=({isAppActive:e,isAppLoaded:t,jwt:r,zeroHashAppURL:n,appIdentifier:o,navigate:i,useAuth:s,authSettings:a,useNewSdk:c,theme:u,env:l})=>{let f=qj[o],p=!!r,[d,b]=(0,Hn.useState)($b),h=mb(k=>k),{height:A}=FT(),{styles:y,stylesLoaded:m,handleStyleConfig:g,markStylesLoaded:x}=wk(n,{appWrapperStyle:kT,modalStyle:BT,iframeWrapperStyle:RT,iframeStyle:OT}),S=Ak(l??Kp(n)),v=()=>{let k=CT(),z=PT[k];b({...$b,...z})},E=(0,Hn.useRef)(null);(0,Hn.useEffect)(()=>{n&&t&&p&&E.current?.contentWindow&&Object.keys(h).forEach(k=>{h[k].jwt&&(E.current?.contentWindow?.postMessage({type:`${W.get(k)}SEND_JWT_TOKEN`,jwt:h[k].jwt},n),E.current?.contentWindow?.postMessage({type:`${W.get(k)}SEND_SDK_VERSION`,version:B1},n),UT()&&E.current?.contentWindow?.postMessage({type:"WORLD_APP_OBJECT",WorldApp:window.WorldApp},n),h[k].filters&&E.current?.contentWindow?.postMessage({type:`${W.get(k)}SEND_FILTERS`,filters:h[k].filters},n),o==="onboarding"&&i&&E.current?.contentWindow?.postMessage({type:`${W.get("onboarding")}NAVIGATE`,navigate:i},n))})},[o,p,t,r,n,h,i]),(0,Hn.useEffect)(()=>{if(v(),window)return Sf.forEach(({size:k})=>{window.matchMedia(`(min-width: ${k}px)`).addEventListener("change",v)}),()=>Sf.forEach(({size:k})=>{window.matchMedia(`(min-width: ${k}px)`).removeEventListener("change",v)})},[]);let w=(0,Hn.useCallback)(async k=>{let z=new URL(n);if(E.current?.contentWindow?.postMessage({type:"MINIKIT_PAY_COMMAND_RECEIVED",payload:{origin:k.origin,zhAppsURLOrigin:z.origin,data:k.data}},n),!window.MiniKit){E.current?.contentWindow?.postMessage({type:"MINIKIT_PAY_COMMAND_CANCELED",payload:{reason:"window.Minikit not found"}},n);return}try{if(k.data?.type==="MINIKIT_PAY_COMMAND"){let R=k.data.payload,D={reference:R.reference,to:R.to,tokens:[{symbol:R.token,token_amount:ev(Number(R.amount),R.token).toString()}],description:R.description};E.current?.contentWindow?.postMessage({type:"MINIKIT_PAY_COMMAND_SUBMITTING_PAYMENT",payload:{minikitPayload:D}},n);let{finalPayload:K}=await window.MiniKit.commandsAsync.pay(D);E.current?.contentWindow?.postMessage({type:"MINIKIT_PAY_COMMAND_RESULT",payload:{finalPayload:K}},n)}}catch(R){E.current?.contentWindow?.postMessage({type:"MINIKIT_PAY_COMMAND_ERROR",payload:{error:R,status:"error"}},n)}},[n]),C=(0,Hn.useCallback)(async k=>{if(k.data.type==="STYLE_CONFIG"){g(k.data,k.origin);return}await w(k)},[g,w]);(0,Hn.useEffect)(()=>(window.addEventListener("message",C),()=>window.removeEventListener("message",C)),[C,n]);let T=new URL(n);if(T.searchParams.set("name",Hj.toString()),window&&T.searchParams.set("origin",window.location.origin),!e)return(0,Ut.jsx)(Ut.Fragment,{});let{appWrapperStyle:I,modalStyle:U,iframeWrapperStyle:M,iframeStyle:H}=y,O=Gj(o,r);if(c&&p&&O){let k=l??Kp(n),z=O===n0?{isPayouts:o==="payouts"}:O===t0?{isPayouts:o==="crypto-account-link-payouts"}:O===r0?{isPay:o==="pay"}:{};return(0,Ut.jsx)("div",{style:{...I,maxHeight:CSS.supports("height: 100dvh")?"100dvh":`${A}px`,height:CSS.supports("height: 100dvh")?"100dvh":`${A}px`},onClick:()=>Me(o),children:(0,Ut.jsx)("div",{style:{...o0(u),...d,opacity:m?1:0},onClick:R=>R.stopPropagation(),children:(0,Ut.jsx)("div",{style:{...M,...H},children:(0,Ut.jsx)(O,{jwt:r,env:k,theme:u??"light",...z,onLoaded:()=>{Bt(o),x()},onCompleted:()=>{ht(o)},onError:()=>{yt(o)},onClose:()=>{Me(o)}})})})})}if(s&&p){let k=IT(window.location.origin),z=a?.theme||"auto";return(0,Ut.jsx)("div",{style:{...I,maxHeight:CSS.supports("height: 100dvh")?"100dvh":`${A}px`,height:CSS.supports("height: 100dvh")?"100dvh":`${A}px`},onClick:()=>Me(o),children:(0,Ut.jsx)("div",{style:{...o0(z),...d,zIndex:"9999",opacity:m?1:0},onClick:R=>R.stopPropagation(),children:(0,Ut.jsx)("div",{style:{...M,...H},children:(0,Ut.jsx)(p8,{jwt:r,env:S,theme:z,...k})})})})}return(0,Ut.jsx)("div",{style:{...I,maxHeight:CSS.supports("height: 100dvh")?"100dvh":`${A}px`,height:CSS.supports("height: 100dvh")?"100dvh":`${A}px`},onClick:()=>Me(o),children:(0,Ut.jsx)("div",{style:{...U,...d,opacity:m?1:0},children:(0,Ut.jsx)("div",{style:M,children:(0,Ut.jsx)("iframe",{ref:E,title:f,src:T.toString(),allow:"camera *; fullscreen *; accelerometer *; gyroscope *; magnetometer *; local-network-access *;",sandbox:"allow-downloads allow-forms allow-modals allow-popups allow-popups-to-escape-sandbox allow-same-origin allow-scripts allow-top-navigation",style:H})})})})},Yj=(e,t)=>({isAppActive:e[t.appIdentifier].isAppActive,isAppLoaded:e[t.appIdentifier].isAppLoaded,jwt:e[t.appIdentifier].jwt,filters:e[t.appIdentifier].filters,navigate:t.appIdentifier==="onboarding"?e[t.appIdentifier].navigate:void 0,useAuth:t.appIdentifier==="fund"?e[t.appIdentifier].useAuth:void 0,authSettings:t.appIdentifier==="fund"?e[t.appIdentifier].authSettings:void 0,useNewSdk:e["new-sdk-flags"]?.flags?.[t.appIdentifier]??!1,theme:e.theme?.value??"light"}),tv=Tb(Yj)(Kj);var Jp=q(Ke());window.__ZH_WEB_SDK_VERSION__=B1;var Yp=rb,_k="",rv,R1=P1.prod,ov=!1,Ik={ONBOARDING_APP_LOADED:()=>{Bt("onboarding")},ONBOARDING_CLOSE_BUTTON_CLICKED:()=>{Me("onboarding")},ONBOARDING_PENDING_APPROVAL:()=>{NT("onboarding")},ONBOARDING_COMPLETED:()=>{ht("onboarding")},ONBOARDING_FAILED:()=>{yt("onboarding")},CRYPTO_WITHDRAWALS_CLOSE_BUTTON_CLICKED:()=>{Me("crypto-withdrawals")},CRYPTO_WITHDRAWALS_APP_LOADED:()=>{Bt("crypto-withdrawals")},CRYPTO_WITHDRAWALS_COMPLETED:()=>{ht("crypto-withdrawals")},CRYPTO_WITHDRAWALS_FAILED:()=>{yt("crypto-withdrawals")},FIAT_DEPOSITS_CLOSE_BUTTON_CLICKED:()=>{Me("fiat-deposits")},FIAT_DEPOSITS_APP_LOADED:()=>{Bt("fiat-deposits")},FIAT_DEPOSITS_COMPLETED:()=>{ht("fiat-deposits")},FIAT_DEPOSITS_FAILED:()=>{yt("fiat-deposits")},FIAT_WITHDRAWALS_CLOSE_BUTTON_CLICKED:()=>{Me("fiat-withdrawals")},FIAT_WITHDRAWALS_APP_LOADED:()=>{Bt("fiat-withdrawals")},FIAT_WITHDRAWALS_COMPLETED:()=>{ht("fiat-withdrawals")},FIAT_WITHDRAWALS_FAILED:()=>{yt("fiat-withdrawals")},CRYPTO_BUY_CLOSE_BUTTON_CLICKED:()=>{Me("crypto-buy")},CRYPTO_BUY_APP_LOADED:()=>{Bt("crypto-buy")},CRYPTO_BUY_COMPLETED:()=>{ht("crypto-buy")},CRYPTO_BUY_FAILED:()=>{yt("crypto-buy")},CRYPTO_SELL_CLOSE_BUTTON_CLICKED:()=>{Me("crypto-sell")},CRYPTO_SELL_APP_LOADED:()=>{Bt("crypto-sell")},CRYPTO_SELL_COMPLETED:()=>{ht("crypto-sell")},CRYPTO_SELL_FAILED:()=>{yt("crypto-sell")},FUND_APP_LOADED:()=>{Bt("fund")},FUND_CLOSE_BUTTON_CLICKED:()=>{Me("fund")},FUND_COMPLETED:()=>{ht("fund")},FUND_FAILED:()=>{yt("fund")},FUND_ERROR:()=>{yt("fund")},FUND_DEPOSIT_SUBMITTED:()=>{ht("fund")},FUND_CONNECT_DEPOSIT:()=>{ht("fund")},FUND_CONNECT_EVENT:()=>{},PROFILE_APP_LOADED:()=>{Bt("profile")},PROFILE_CLOSE_BUTTON_CLICKED:()=>{Me("profile")},PROFILE_FAILED:()=>{yt("profile")},CRYPTO_ACCOUNT_LINK_APP_LOADED:()=>{Bt("crypto-account-link")},CRYPTO_ACCOUNT_LINK_CLOSE_BUTTON_CLICKED:()=>{Me("crypto-account-link")},CRYPTO_ACCOUNT_LINK_FAILED:()=>{yt("crypto-account-link")},CRYPTO_ACCOUNT_LINK_COMPLETED:()=>{ht("crypto-account-link")},CRYPTO_ACCOUNT_LINK_PAYOUTS_APP_LOADED:()=>{Bt("crypto-account-link-payouts")},CRYPTO_ACCOUNT_LINK_PAYOUTS_CLOSE_BUTTON_CLICKED:()=>{Me("crypto-account-link-payouts")},CRYPTO_ACCOUNT_LINK_PAYOUTS_FAILED:()=>{yt("crypto-account-link-payouts")},CRYPTO_ACCOUNT_LINK_PAYOUTS_COMPLETED:()=>{ht("crypto-account-link-payouts")},PAYOUTS_APP_LOADED:()=>{Bt("payouts")},PAYOUTS_CLOSE_BUTTON_CLICKED:()=>{Me("payouts")},PAYOUTS_COMPLETED:()=>{ht("payouts")},PAYOUTS_FAILED:()=>{yt("payouts")},PAY_APP_LOADED:()=>{Bt("pay")},PAY_CLOSE_BUTTON_CLICKED:()=>{Me("pay")},PAY_COMPLETED:()=>{ht("pay")},PAY_FAILED:()=>{yt("pay")},FIAT_ACCOUNT_LINK_APP_LOADED:()=>{Bt("fiat-account-link")},FIAT_ACCOUNT_LINK_CLOSE_BUTTON_CLICKED:()=>{Me("fiat-account-link")},FIAT_ACCOUNT_LINK_COMPLETED:()=>{ht("fiat-account-link")},FIAT_ACCOUNT_LINK_FAILED:()=>{yt("fiat-account-link")},STYLE_CONFIG:()=>{}},Jj=e=>{let t=window.location.origin===e.origin,r=e.origin===_k,n=Sk.has(e.origin),o=Pn.getState().fund?.useAuth||!1;if(r||n||t&&o){let i=e.data;if(i&&i.type&&Ik[i.type])try{Ik[i.type](i.payload)}catch(s){console.error(s)}}},O1=class{rootQuerySelector="";onboardingInitialized=!1;initializedApps=new Map([["crypto-withdrawals",!1],["onboarding",!1],["fiat-deposits",!1],["fiat-withdrawals",!1],["crypto-buy",!1],["crypto-sell",!1],["fund",!1],["profile",!1],["crypto-account-link",!1],["crypto-account-link-payouts",!1],["payouts",!1],["pay",!1],["fiat-account-link",!1]]);constructor({zeroHashOnboardingURL:t=rb,rootQuerySelector:r,userOnboardingJWT:n,cryptoWithdrawalsJWT:o,fiatDepositsJWT:i,fiatWithdrawalsJWT:s,cryptoBuyJWT:a,cryptoSellJWT:c,fundJWT:u,profileJWT:l,cryptoAccountLinkJWT:f,cryptoAccountLinkPayoutsJWT:p,payoutsJWT:d,payJWT:b,fiatAccountLinkJWT:h,zeroHashAppsURL:A,env:y,theme:m}){Yp=A||t,_k=new URL(Yp).origin,rv=y;let x=y??Kp(Yp),S=P1[x];ov?S!==R1&&console.warn(`[zh-web-sdk] ZeroHashSDK has already been initialized with new-SDK origin "${R1}"; ignoring re-initialization that would change it to "${S}". Construct ZeroHashSDK once per page.`):(R1=S,ov=!0),r&&(this.rootQuerySelector=r),Hb(m??"light"),window.addEventListener("message",Jj,!1),n&&this.setJWT({jwt:n,appIdentifier:"onboarding"}),o&&this.setJWT({jwt:o,appIdentifier:"crypto-withdrawals"}),i&&this.setJWT({jwt:i,appIdentifier:"fiat-deposits"}),s&&this.setJWT({jwt:s,appIdentifier:"fiat-withdrawals"}),a&&this.setJWT({jwt:a,appIdentifier:"crypto-buy"}),c&&this.setJWT({jwt:c,appIdentifier:"crypto-sell"}),u&&this.setJWT({jwt:u,appIdentifier:"fund"}),l&&this.setJWT({jwt:l,appIdentifier:"profile"}),f&&this.setJWT({jwt:f,appIdentifier:"crypto-account-link"}),p&&this.setJWT({jwt:p,appIdentifier:"crypto-account-link-payouts"}),d&&this.setJWT({jwt:d,appIdentifier:"payouts"}),b&&this.setJWT({jwt:b,appIdentifier:"pay"}),h&&this.setJWT({jwt:h,appIdentifier:"fiat-account-link"})}setJWT({jwt:t,appIdentifier:r}){Nr(r,de,{jwt:t})}setFilters({filters:t,appIdentifier:r}){Nr(r,vm,{filters:t})}setNavigate({appIdentifier:t,navigate:r}){Nr(t,Em,{navigate:r})}setTheme({theme:t}){Hb(t)}setUserOnboardingJWT(t){this.setJWT({jwt:t.userOnboardingJWT,appIdentifier:"onboarding"})}isOnboardingModalOpen(){return Pn.getState().onboarding.isAppActive}isModalOpen(t){return Pn.getState()[t].isAppActive}closeModal(t){Me(t)}openModal({jwt:t,appIdentifier:r,filters:n,navigate:o}){n&&this.setFilters({filters:n,appIdentifier:r}),o&&this.setNavigate({appIdentifier:r,navigate:o});let i=!1,s=!1;if(t){let c=k1(t);c&&Tk(c.iss)&&(i=!0),c?.payload?.use_new_sdk===!0&&(s=!0)}if(t&&this.setJWT({jwt:t,appIdentifier:r}),r==="fund"&&Nr(r,Sm,{useAuth:i}),LT(r,s),jb(r),this.initializedApps.get(r))return;let a=null;if(this.rootQuerySelector&&(a=document.querySelector(this.rootQuerySelector)),!this.initializedApps.get(r)){a=document.createElement("div");let c=cb(r);a.id=c,a.style.position="absolute",a.style.top="0",a.style.left="0",this.rootQuerySelector=`#${c}`,document.querySelector("body").appendChild(a)}if(a){let c=a.attachShadow({mode:"closed"}),u=new URL(r,Yp).href;nv.default.createRoot(c).render((0,Jp.jsx)(Xm,{store:Pn,children:(0,Jp.jsx)(tv,{appIdentifier:r,zeroHashAppURL:u,env:rv,useAuth:i})})),this.initializedApps.set(r,!0)}else{let c="failed to append ZeroHash root to the page: root not found";throw console.error(c),new Error(c)}}openOnboardingModal(t){if(t.userOnboardingJWT&&this.setUserOnboardingJWT({userOnboardingJWT:t.userOnboardingJWT}),jb("onboarding"),this.onboardingInitialized)return;let r=null;if(this.rootQuerySelector&&(r=document.querySelector(this.rootQuerySelector)),!r){r=document.createElement("div");let n=cb();r.id=n,r.style.position="absolute",r.style.top="0",r.style.left="0",this.rootQuerySelector=`#${n}`,document.querySelector("body").appendChild(r)}if(r){let n=r.attachShadow({mode:"closed"});nv.default.createRoot(n).render((0,Jp.jsx)(Xm,{store:Pn,children:(0,Jp.jsx)(tv,{appIdentifier:"onboarding",zeroHashAppURL:Yp,env:rv})})),this.onboardingInitialized=!0}else{let n="failed to append ZeroHash root to the page: root not found";throw console.error(n),new Error(n)}}closeOnboardingModal(){Me("onboarding")}};window&&(window.zerohash=O1);function Hwe(){R1=P1.prod,ov=!1}var Wwe=O1;export{kt as AppIdentifier,bm as IncomingMessageType,O1 as ZeroHashSDK,Hwe as _resetNewSdkOriginForTests,W as appIdentifierToActionPrefixMap,Wwe as default};
|
|
75
75
|
/*! Bundled license information:
|
|
76
76
|
|
|
77
77
|
react/cjs/react.production.min.js:
|