@linenext/dapp-portal-sdk
Version:
Dapp Portal SDK
1 lines • 67.3 kB
JavaScript
import{OKXConnectError as e,OKXUniversalConnectUI as t,THEME as n}from"@okxconnect/ui";import{EventEmitter as i}from"eventemitter3";import s from"axios";import{v4 as a}from"uuid";import{liff as o}from"@line/liff";import{jwtDecode as r}from"jwt-decode";import{createAppKitWalletButton as c}from"@reown/appkit-wallet-button";import{createAppKit as l}from"@reown/appkit";import{kairos as d,kaia as h}from"viem/chains";class p extends Error{constructor(e){super(e.message),this.name="RpcException",this.code=e.code,this.data=e.data,Object.setPrototypeOf(this,p.prototype)}}var u;!function(e){e.invalidRequest="-32600",e.methodNotFound="-32601",e.invalidParams="-32602",e.internal="-32603",e.parse="-32700"}(u||(u={}));const m={"-32600":{standard:"JSON RPC 2.0",message:"The JSON sent is not a valid Request object."},"-32601":{standard:"JSON RPC 2.0",message:"The method does not exist / is not available."},"-32602":{standard:"JSON RPC 2.0",message:"Invalid method parameter(s)."},"-32603":{standard:"JSON RPC 2.0",message:"Internal JSON-RPC error."},"-32700":{standard:"JSON RPC 2.0",message:"Invalid JSON was received by the server. An error occurred on the server while parsing the JSON text."}},y=-32001;class w extends Error{constructor(e,t,n){const i=Number.parseInt(e);if(isNaN(i))throw new Error('"code" must be an integer.');super(t??m[u.invalidRequest].message),this.code=i,n&&(this.data=n),Object.setPrototypeOf(this,w.prototype)}}class g extends w{constructor(e,t){super(u.internal,e,t)}}function T(t){return t instanceof e&&300===t.code&&t.message.includes("user rejects error")?{code:y,message:"User canceled"}:"string"==typeof t?{code:Number.parseInt(u.internal),message:t}:t instanceof w||t instanceof p?{code:t.code,message:t.message,data:t.data}:{code:Number.parseInt(u.internal),message:m[u.internal].message}}function f(e){return"object"==typeof e&&null!==e&&"number"==typeof e.code&&"string"==typeof e.message}function P(){const e=globalThis.klaytn;if(!e)throw new g("Extension is not installed");return e}function M(e,t){return"klay_signTransaction"!==e?t:function(e){const t=e;return{raw:t.rawTransaction}}(t)}function v(e){return/Line/.test(e)}function I(e){return/iPad|iPhone|iPod/.test(e)}function b(e){return/iPhone|iPad|iPod|Android|webOS|BlackBerry|IEMobile|Opera Mini|Mobile/.test(e)}const j="walletType",N="selectedWalletAddress",C="deviceId",S="providerType";class k{constructor(e){this.chainId=e}clear(){this.removeItem(j),this.removeItem(N)}setWalletType(e){this.setItem(j,e)}getWalletType(){return this.getItem(j)}setProviderType(e){this.setItem(S,e)}getProviderType(){return this.getItem(S)}setSelectedWallet(e){this.setItem(N,e)}getConnectedWallet(){return this.getItem(N)}getDeviceId(){return this.getItem(C)}setDeviceId(e){this.setItem(C,e)}getKeyWithPrefix(e){return`sdk.dappportal.io:${this.chainId}:${e}`}setItem(e,t){localStorage.setItem(this.getKeyWithPrefix(e),t)}getItem(e){return localStorage.getItem(this.getKeyWithPrefix(e))}removeItem(e){localStorage.removeItem(this.getKeyWithPrefix(e))}}function x(e){return e.replace(/^klay_/,"kaia_")}function _(e){return e.replace(/^(klay_|kaia_)/,"eth_")}class W{constructor(e,t){this.eventBus=e,this.config=t,this.setExtensionEventProxy()}async request(e){const{method:t,params:n}=e;if("kaia_connectAndSign"===t)return await this.requestConnectAndSign(n);const i="kaia_signLegacy"===(s=t)?"klay_sign":s.replace(/^kaia_/,"klay_");var s;const a=n?this.appendTxTypeParam(i,n):n,o=a?this.convertToLegacyParam(i,a):a;return await this.requestWithConverter({method:i,params:o})}async requestConnectAndSign(e){if(!Array.isArray(e)||1!==e.length)throw new p({code:-32602,message:"Invalid params"});const t=e[0],n=(await this.requestWithConverter({method:"eth_requestAccounts",params:[]}))[0];return[n,await this.requestWithConverter({method:"personal_sign",params:[t,n]})]}async switchChain(e){const t=P(),n=t.networkVersion.toString().toLowerCase(),i=this.config.chainId.toString().toLowerCase();if(n===i)return;const s=`0x${parseInt(i,10).toString(16)}`,a=this.awaitNetworkChange(t,i);await t.request({method:"wallet_switchKlaytnChain",params:[{chainId:s}]}),await a}async disconnect(){}async awaitNetworkChange(e,t){return new Promise(((e,n)=>{const i=s=>{"loading"!==s&&(s.toString().toLowerCase()===t.toString().toLowerCase()&&(this.eventBus.removeListener("chainChanged",i),e(null)),this.eventBus.removeListener("chainChanged",i),n("Invalid chain id"))};this.eventBus.on("chainChanged",i)}))}async requestWithConverter(e){try{const t=await P().request(e);return M(e.method,t)}catch(t){throw function(e){if(!f(e))return e;const t=e.code,n=e.message;return-32603===t&&n.includes("User denied")?new p({code:y,message:n}):-32603===t&&n.includes('Invalid "from" address')?new p({code:-32004,message:n}):new p({code:e.code,message:e.message})}(t)}}setExtensionEventProxy(){const e=P();e.removeAllListeners(),e.on("accountsChanged",(e=>{this.eventBus.emit("accountsChanged",e)})),e.on("networkChanged",(e=>{this.eventBus.emit("chainChanged",e)})),e.on("disconnected",(()=>{this.eventBus.emit("disconnect")}))}appendTxTypeParam(e,t){return-1===this.config.methodsShouldAttachTxTypeParamsWhenRequestToExtension.indexOf(e)?t:Array.isArray(t)&&t.every((e=>"object"==typeof e))?t.map((e=>this.appendTxTypeToObj(e))):t}convertToLegacyParam(e,t){return-1===this.config.methodsShouldConvertInputFieldToDataFieldWhenRequestToExtension.indexOf(e)?t:Array.isArray(t)&&t.every((e=>"object"==typeof e))?t.map((e=>this.convertInputFieldToDataField(e))):t}appendTxTypeToObj(e){const t=e;return"typeInt"in t?{...t,type:t.typeInt}:e}convertInputFieldToDataField(e){const t=e;let n;if("typeInt"in t&&(n=t.typeInt),!n)return e;if(-1===this.config.txTypesShouldConvertInputFieldToDataFieldWhenRequestToExtension.indexOf(n))return e;if(!("input"in t))return e;const{input:i,...s}=t;return{...s,data:t.input}}}class X{constructor(e){this.chainRpcUrl=e.chainNodeRpcEndpoint}async requestRpc(e){const t={id:0,jsonrpc:"2.0",...e},n=await fetch(this.chainRpcUrl,{method:"POST",body:JSON.stringify(t),headers:{"Content-Type":"application/json"}}),{result:i,error:s}=await n.json();if(s)throw s;return i}}function L(){const e=document.getElementById("iframeDiv");e?.remove()}const z="VISIT",Z="reownVerified",G="bitgetExtensionInstalled";function E(){return void 0!==globalThis.bitkeep}function D(){const e=globalThis.bitkeep;if(!e)throw new g("Extension is not installed");const t=e.ethereum;if(!t)throw new g("Extension is not installed");return t}class K{constructor(e){this.resolveProviderType=()=>{},this.rejectProviderType=()=>{},this.walletSelectUIUrl=e.sdkUIUrls.miniDappConnectWebV3,this.sdkLocalStorage=new k(e.chainId),this.connectPageOptions=e.connectPageOptions}setupListeners(){const e=e=>{const t=this.iframe;if(!t)return;if(e.source!==t.contentWindow)return;const n=e.data;if(!n||"object"!=typeof n)return;const i=n.event;if(i)switch(i){case"Loaded":break;case"ProviderTypeSelected":const e=n.providerType;this.onProviderTypeSelected(e);break;case"Canceled":this.cancel()}};window.addEventListener("message",e),this.eventListener=e}clearListeners(){const e=this.eventListener;e&&(window.removeEventListener("message",e),this.eventListener=void 0)}onProviderTypeSelected(e){this.resolveProviderType&&this.resolveProviderType(e)}reset(){this.resolveProviderType=void 0,this.rejectProviderType=void 0,L(),this.clearListeners()}async selectType(e,t){const n=new Promise(((e,t)=>{this.resolveProviderType=e,this.rejectProviderType=t}));this.setupListeners();const i=this.sdkLocalStorage.getProviderType(),s=new URL(this.walletSelectUIUrl);s.searchParams.append("dappName",e),i&&s.searchParams.append("providerType",i),s.searchParams.set(Z,t?"true":"false"),s.searchParams.set(G,E()?"true":"false"),this.connectPageOptions&&Object.entries(this.connectPageOptions).forEach((([e,t])=>{s.searchParams.set(e,t)})),this.iframe=function(e,t,n){const i=document.createElement("div");i.style.display="flex",i.style.justifyContent="center",i.style.alignItems="center",i.style.position="fixed",i.style.top="0",i.style.left="0",i.style.width="100%",i.style.height="100%",i.style.backgroundColor="rgba(0, 0, 0, 0.35)",i.style.zIndex="9999999",i.id="iframeDiv";const s=document.createElement("iframe");s.src=e,s.width=t,s.height=n,s.style.border="none",s.style.zIndex="99999999";const a=i.appendChild(s);return document.body.appendChild(i),a}(s.toString(),"100%","100%");const a=await n;return this.reset(),a}cancel(){this.rejectProviderType&&this.rejectProviderType(new p({code:y,message:"User canceled"})),this.reset()}}var R,U;!function(e){e.Google="GOOGLE",e.Line="LINE",e.Naver="NAVER",e.Kakao="KAKAO",e.Apple="APPLE",e.Wechat="WECHAT",e.Kaia="KAIA",e.OKX="OKX",e.BITGET="BITGET"}(R||(R={})),function(e){e.Web="Web",e.Liff="Liff",e.Extension="Extension",e.Mobile="Mobile",e.OKX="OKX",e.BITGET="BITGET"}(U||(U={}));const Y=e=>-1!==["kaia_accounts","klay_accounts","eth_accounts"].indexOf(e);class O{constructor(e,t){this.communicator=t,this.sdkLocalStorage=new k(e.chainId)}async request(e,t){const n=this.sdkLocalStorage.getConnectedWallet(),{method:i}=e;if(!n){if("kaia_requestAccounts"===i||"klay_requestAccounts"===i||"eth_requestAccounts"===i){const n=await this.communicator.postRequestAndWaitForResponse({method:x(e.method),params:e.params},t),i=n[0];return i&&this.sdkLocalStorage.setSelectedWallet(i),n}if("kaia_connectAndSign"===i){const[n,s]=await this.communicator.postRequestAndWaitForResponse({method:i,params:e.params},t);return n&&this.sdkLocalStorage.setSelectedWallet(n),[n,s]}if(Y(i))return[];throw new p({code:-32006,data:null,message:"Wallet is not connected"})}return"kaia_requestAccounts"===i||"klay_requestAccounts"===i||"eth_requestAccounts"===i||"kaia_accounts"===i||"klay_accounts"===i||"eth_accounts"===i?[n]:await this.communicator.postRequestAndWaitForResponse({method:x(e.method),params:e.params},t)}async switchChain(e){}async disconnect(){}}class V extends Error{constructor(e){super(e),this.name="LongPollingTimeoutException",Object.setPrototypeOf(this,V.prototype)}}class A{constructor(e){this.request=async(e,t)=>{const n=`${this.baseUrl}/api/v1/request-session/request/${t}`;try{await s.post(n,e,{headers:{"x-client-id":this.clientId,"Content-Type":"application/json"},timeout:this.relaySessionTimeout})}catch(i){throw i}},this.waitForResponse=async e=>{let t=1;for(;t<this.maxRetryCount;)try{return await this.fetchWithTimeout(e)}catch(n){if(n instanceof p)throw n;t++}throw new Error("Fail to wait for response")},this.fetchWithTimeout=async e=>{const t=`${this.baseUrl}/api/v2/request-session/response/${e}/wait`;try{const e=await s.get(t,{headers:{"x-client-id":this.clientId,"Content-Type":"application/json"},timeout:this.relaySessionTimeout});if(202===e.status&&2012===e.data.code)throw new V;return e.data}catch(n){throw s.isAxiosError(n)&&403===n.status&&2011===n.response?.data?.code?new p({code:y,data:null,message:"User closed popup"}):n}},this.clientId=e.clientId,this.baseUrl=e.relayServerConfig.baseUrl,this.relaySessionTimeout=e.relayServerConfig.relaySessionTimeout,this.maxRetryCount=e.relayServerConfig.maxRetryCount}}class J{constructor(e){this.config=e,this.relayRequestClient=new A(e)}handleRpcResponse(e){if(function(e){return void 0!==e.error}(e))throw new p(e.error);return e.result}createRequestKey(){return a()}}function F(e,t){switch(e.liffTypeByRequestMethod[t]??e.defaultLiffType){case"compact":return e.baseUrl.compact;case"tall":return e.baseUrl.tall;case"full":return e.baseUrl.full;default:return e.baseUrl[e.defaultLiffType]}}class H extends J{constructor(e){super(e),this.postRequestAndWaitForResponse=async e=>{const t=this.createRequestKey();await this.relayRequestClient.request(e,t),await this.openWallet(t,e.method);const n=await this.waitForResponse(t);return this.handleRpcResponse(n)},this.waitForResponse=async e=>{let t=1,n=!1,i=0;const s=()=>{o.subWindow.off("close",s),n=!0};for(o.subWindow.on("close",s);t<this.config.relayServerConfig.maxRetryCount;)try{if(n){if(!(i<=0))throw new p({code:y,message:"User canceled"});i++}return await this.relayRequestClient.fetchWithTimeout(e)}catch(a){if(a instanceof p)throw a;t++}throw new Error("Fail to wait for response")},this.openWallet=async(e,t)=>{const n=F(this.config.liffWalletConfig,t)+`/r/${e}?chainId=${this.config.chainId}`;await o.subWindow.open({url:n})}}}var B;!function(e){e.POPUP_BLOCKED="POPUP_BLOCKED",e.PAYMENT_HISTORY_SIGN="PAYMENT_HISTORY_SIGN",e.PAYMENT_HISTORY_OPEN="PAYMENT_HISTORY_OPEN"}(B||(B={}));const q={ko:{payment_reqeust_verification_title:"본인 인증",payment_reqeust_verification_desc:"거래내역을 확인하려면 본인 인증이 필요합니다. 아래 버튼을 눌러 서명을 진행해주세요.",payment_reqeust_verification_cancel:"취소",payment_reqeust_verification_submit:"진행하기"},en:{payment_reqeust_verification_title:"Identity verification",payment_reqeust_verification_desc:"Identity verification is required to view your transaction history. Click the button below to sign.",payment_reqeust_verification_cancel:"Cancel",payment_reqeust_verification_submit:"Proceed"},ja:{payment_reqeust_verification_title:"本人認証",payment_reqeust_verification_desc:"取引履歴を確認するには本人認証が必要です。以下のボタンを押して署名を行ってください。",payment_reqeust_verification_cancel:"キャンセル",payment_reqeust_verification_submit:"次に進む"},zh:{payment_reqeust_verification_title:"本人驗證",payment_reqeust_verification_desc:"若要查看交易記錄,需進行本人驗證。請點擊下方按鍵進行簽名。",payment_reqeust_verification_cancel:"取消",payment_reqeust_verification_submit:"進行"},th:{payment_reqeust_verification_title:"ยืนยันตัวตน",payment_reqeust_verification_desc:"จำเป็นต้องยืนยันตัวตนเพื่อดูประวัติธุรกรรมของคุณ คลิกปุ่มด้านล่างเพื่อลงลายมือชื่อ",payment_reqeust_verification_cancel:"ยกเลิก",payment_reqeust_verification_submit:"ดำเนินการ"}},Q={ko:{payment_complete_verification_title:"인증 완료",payment_complete_verification_desc:"본인 인증이 완료되었습니다. 아래 버튼을 눌러 거래내역을 확인하세요.",payment_complete_verification_cancel:"취소",payment_complete_verification_submit:"진행하기"},en:{payment_complete_verification_title:"Verification complete",payment_complete_verification_desc:"Identity verification complete. Click the button below to view your transaction history.",payment_complete_verification_cancel:"Cancel",payment_complete_verification_submit:"Proceed"},ja:{payment_complete_verification_title:"認証完了",payment_complete_verification_desc:"本人認証が完了しました。以下のボタンを押して取引履歴をご確認ください。",payment_complete_verification_cancel:"キャンセル",payment_complete_verification_submit:"次に進む"},zh:{payment_complete_verification_title:"驗證完成",payment_complete_verification_desc:"已完成本人驗證。請點擊下方按鍵查看交易記錄。",payment_complete_verification_cancel:"取消",payment_complete_verification_submit:"進行"},th:{payment_complete_verification_title:"ยืนยันสำเร็จ",payment_complete_verification_desc:"ยืนยันตัวตนสำเร็จ คลิกที่ปุ่มด้านล่างเพื่อดูประวัติธุรกรรมของคุณ",payment_complete_verification_cancel:"ยกเลิก",payment_complete_verification_submit:"ดำเนินการ"}},$={ko:{wallet_block_popup_title:"팝업 차단",wallet_block_popup_desc:"팝업이 차단되었습니다. 계속 진행하시겠습니까?",wallet_block_popup_cancel:"취소",wallet_block_popup_submit:"진행하기"},en:{wallet_block_popup_title:"Block pop-ups",wallet_block_popup_desc:"Pop-ups have been blocked. Do you want to continue?",wallet_block_popup_cancel:"Cancel",wallet_block_popup_submit:"Proceed"},ja:{wallet_block_popup_title:"ポップアップブロック",wallet_block_popup_desc:"ポップアップがブロックされました。続行しますか?",wallet_block_popup_cancel:"キャンセル",wallet_block_popup_submit:"次に進む"},zh:{wallet_block_popup_title:"封鎖彈出視窗",wallet_block_popup_desc:"已封鎖彈出視窗。要繼續進行嗎?",wallet_block_popup_cancel:"取消",wallet_block_popup_submit:"進行"},th:{wallet_block_popup_title:"บล็อกป็อบอัป",wallet_block_popup_desc:"ป็อบอัปถูกบล็อกแล้ว ต้องการดำเนินการต่อหรือไม่?",wallet_block_popup_cancel:"ยกเลิก",wallet_block_popup_submit:"ดำเนินการ"}};class ee{constructor(){this.resolvePromise=()=>{},this.rejectPromise=()=>{}}setupListeners(){const e=e=>{const t=this.iframe;if(!t)return;if(e.source!==t.contentWindow)return;const n=e.data;if(!n||"object"!=typeof n)return;const i=n.event;if(i)switch(i){case"Clicked":this.resolvePromise&&this.resolvePromise();break;case"Canceled":this.rejectPromise&&(this.rejectPromise(new Error("User canceled")),this.reset())}};window.addEventListener("message",e),this.eventListener=e}clearListeners(){const e=this.eventListener;e&&(window.removeEventListener("message",e),this.eventListener=void 0)}reset(){this.resolvePromise=void 0,this.rejectPromise=void 0,L(),this.clearListeners()}async awaitUserClick(e){const t=new Promise(((e,t)=>{this.resolvePromise=e,this.rejectPromise=t}));this.setupListeners(),this.iframe=function(e,t,n){const i=document.createElement("div");i.style.display="flex",i.style.justifyContent="center",i.style.alignItems="center",i.style.position="fixed",i.style.top="0",i.style.left="0",i.style.width="100vw",i.style.height="100vh",i.style.backgroundColor="rgba(0, 0, 0, 0.35)",i.style.zIndex="9999999",i.id="iframeDiv";const s=document.createElement("iframe");s.srcdoc=e,s.width=t,s.height=n,s.style.border="none",s.style.zIndex="99999999";const a=i.appendChild(s);return document.body.appendChild(i),a}((e=>{const t=e===B.POPUP_BLOCKED?$:e===B.PAYMENT_HISTORY_SIGN?q:Q,n=e===B.PAYMENT_HISTORY_SIGN?"payment_reqeust_verification_title":e===B.PAYMENT_HISTORY_OPEN?"payment_complete_verification_title":"wallet_block_popup_title",i=e===B.PAYMENT_HISTORY_SIGN?"payment_reqeust_verification_desc":e===B.PAYMENT_HISTORY_OPEN?"payment_complete_verification_desc":"wallet_block_popup_desc",s=e===B.PAYMENT_HISTORY_SIGN?"payment_reqeust_verification_submit":e===B.PAYMENT_HISTORY_OPEN?"payment_complete_verification_submit":"wallet_block_popup_submit",a=e===B.PAYMENT_HISTORY_SIGN?"payment_reqeust_verification_cancel":e===B.PAYMENT_HISTORY_OPEN?"payment_complete_verification_cancel":"wallet_block_popup_cancel";return`\n <!DOCTYPE html>\n <html lang="en">\n <head>\n <meta charset="UTF-8">\n <style>\n .popupContainer {\n background-color: white;\n display: flex;\n flex-direction: column;\n border-radius: 20px;\n padding: 30px 24px;\n align-items: center;\n }\n .title {\n font-size: 18px;\n font-weight: 700;\n text-align: center;\n }\n .desc {\n margin-top: 12px;\n font-size: 16px;\n font-weight: 400;\n text-align: center;\n }\n .btnContainer {\n display: flex;\n flex-direction: column;\n width: 100%;\n }\n .okBtn {\n background-color: #000000;\n color: #ffffff;\n font-size: 16px;\n font-weight: 700;\n padding: 15px 24px;\n cursor: pointer;\n border-radius: 100px;\n margin-top: 24px;\n border: none;\n width: 100%;\n }\n .cancelBtn {\n background-color: #FFFFFF;\n color: #7B7F81;\n font-size: 15px;\n font-weight: 700;\n cursor: pointer;\n border: none;\n margin-top: 15px;\n }\n </style>\n </head>\n <body>\n <script>\n const browserLang = window.navigator.language.slice(0, 2);\n const xlt = ${JSON.stringify(t)};\n const translations = xlt[browserLang] || xlt['en'];\n console.log(translations);\n \n window.onload = function() {\n document.getElementById('dappportalsdk_popup_title').innerHTML = translations.${n};\n document.getElementById('dappportalsdk_popup_desc').innerHTML = translations.${i};\n document.getElementById('dappportalsdk_popup_cancel').textContent = translations.${a};\n document.getElementById('dappportalsdk_popup_proceed').textContent = translations.${s};\n \n document.getElementById('dappportalsdk_popup_cancel').addEventListener('click', function() {\n window.parent.postMessage({event: 'Canceled'}, '*');\n });\n document.getElementById('dappportalsdk_popup_proceed').addEventListener('click', function() {\n window.parent.postMessage({event: 'Clicked'}, '*');\n });\n }\n <\/script>\n <div class="popupContainer">\n <div id="dappportalsdk_popup_title" class="title"></div>\n <div id="dappportalsdk_popup_desc" class="desc"></div>\n <div class="btnContainer">\n <button id="dappportalsdk_popup_proceed" class="okBtn"></button>\n <button id="dappportalsdk_popup_cancel" class="cancelBtn"></button>\n </div>\n </div>\n </body>\n </html>\n `})(e),"300px","400px"),await t.catch((e=>{throw{code:"-32001",message:"User canceled popup"}})),this.reset(),window.focus()}}class te extends J{constructor(e){super(e),this.postRequestAndWaitForResponse=async(e,t)=>{const n=this.createRequestKey();await this.openWallet(n,e.method,this.isMethodNeedProviderTypeSync(e.method)?t:null);try{await this.postRequestWithProviderType(e,n)}catch(a){throw this.closeWallet(),a}const i=await this.relayRequestClient.waitForResponse(n);this.closeWallet();const s=this.handleRpcResponse(i);return this.handleResponseWithProviderType(e,s)},this.postRequestWithProviderType=async(e,t)=>{const{method:n,params:i}=e;return this.isMethodNeedProviderTypeSync(n)?await this.relayRequestClient.request({method:"internal_rpcCalls",params:[{method:n,params:i},{method:"internal_getSnsType",params:[]}]},t):await this.relayRequestClient.request(e,t)},this.handleResponseWithProviderType=async(e,t)=>{const{method:n,params:i}=e;if(this.isMethodNeedProviderTypeSync(n)){const e=t,n=e[0],i=e[1];return this.sdkLocalStorage.setProviderType(i),n}return t},this.isMethodNeedProviderTypeSync=e=>"kaia_requestAccounts"===e||"klay_requestAccounts"===e||"eth_requestAccounts"===e||"kaia_connectAndSign"===e,this.clickEventListener=new ee,this.sdkLocalStorage=new k(e.chainId)}async openWallet(e,t,n){const i=navigator.userAgent,s=new URLSearchParams;s.set("chainId",this.config.chainId),n&&s.set("snsType",n);const a=this.getRequestBaseUrl(t)+`/r/${e}?${s.toString()}`;if(v(i)&&I(i))return void(window.location.href=a);if(window.kaiaPopUpWindow&&!window.kaiaPopUpWindow.closed)return window.kaiaPopUpWindow.focus(),void(window.kaiaPopUpWindow.location.href=a);const o=this.config.webWalletConfig.popupSize;window.kaiaPopUpWindow=window.open(a,"webWallet",`width=${o.width},height=${o.height}`),window.kaiaPopUpWindow||(await this.clickEventListener.awaitUserClick(B.POPUP_BLOCKED),window.kaiaPopUpWindow=window.open(a,"webWallet",`width=${o.width},height=${o.height}`))}closeWallet(){window.kaiaPopUpWindow&&window.kaiaPopUpWindow.close(),window.kaiaPopUpWindow=null}getRequestBaseUrl(e){return v(navigator.userAgent)?F(this.config.liffWalletConfig,e):this.config.webWalletConfig.baseUrl}}class ne extends J{constructor(e){super(e)}async postRequestAndWaitForResponse(e){const t=this.createRequestKey();await this.relayRequestClient.request(e,t),this.openWallet(t);const n=await this.relayRequestClient.waitForResponse(t);return this.handleRpcResponse(n)}openWallet(e){const t=`${this.config.sdkUIUrls.mobileWalletBridge}${e}?chainId=${this.config.chainId}`,n=`/browser?url=${encodeURIComponent(t)}`;I(navigator.userAgent)?this.openIosWallet(n):this.openAndroidWallet(n)}openAndroidWallet(e){const t=this.config.kaiaWalletMobileConfig;window.location.href=`intent://wallet${e}#Intent;scheme=kaiawallet;package=${t.androidPackageName};end`}openIosWallet(e){const t=this.config.kaiaWalletMobileConfig;window.location.href=`${t.urlScheme}://wallet${e}`}}class ie{constructor(e,t){this.review=e,this.totalCalculationTime=t}}function se(e,t,n){var i=function(e){return atob(e)}(e),s=i.indexOf("\n",10)+1,a=i.substring(s)+"",o=new Blob([a],{type:"application/javascript"});return URL.createObjectURL(o)}function ae(e,t,n){var i;return function(t){return i=i||se(e),new Worker(i,t)}}var oe=ae("Lyogcm9sbHVwLXBsdWdpbi13ZWItd29ya2VyLWxvYWRlciAqLwohZnVuY3Rpb24oKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gdCh0KXtjb25zdCByPW5ldyBBcnJheUJ1ZmZlcig4KTtyZXR1cm4gbmV3IERhdGFWaWV3KHIpLnNldEJpZ1VpbnQ2NCgwLHQpLG5ldyBVaW50OEFycmF5KHIpfWZ1bmN0aW9uIHIodCxyKXtpZih0Lmxlbmd0aCE9PXIubGVuZ3RoKXJldHVybiExO2ZvcihsZXQgaT0wO2k8dC5sZW5ndGg7aSsrKWlmKHRbaV0hPT1yW2ldKXJldHVybiExO3JldHVybiEwfWZ1bmN0aW9uIGkodCl7Y29uc3Qgcj1hdG9iKHQpLGk9ci5sZW5ndGgsZT1uZXcgVWludDhBcnJheShpKTtmb3IobGV0IGg9MDtoPGk7aCsrKWVbaF09ci5jaGFyQ29kZUF0KGgpO3JldHVybiBlfXNlbGYub25tZXNzYWdlPWFzeW5jIGZ1bmN0aW9uKGUpe2NvbnN0e2NoYWxsZW5nZXM6aH09ZS5kYXRhLHM9QmlnSW50KDB4MTAwMDAwMDAwMDAwMDAwMDApLG49W10sbz1EYXRlLm5vdygpO2Zvcihjb25zdCBmIG9mIGgpe2lmKCFmLnNhbHR8fCFmLnRhcmdldCl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgY2hhbGxlbmdlIHN0cnVjdHVyZSIpO2NvbnN0IGU9aShmLnNhbHQpLGg9aShmLnRhcmdldCk7Zm9yKGxldCBpPUJpZ0ludCgwKTtpPHM7aSsrKXtjb25zdCBzPW5ldyBVaW50OEFycmF5KFsuLi5lLC4uLnQoaSldKTtpZihyKHNoYTI1Ni5jcmVhdGUoKS51cGRhdGUocykuYXJyYXkoKSxoKSl7bi5wdXNoKHtpbmRleDpmLl9pbmRleCxhbnN3ZXI6aX0pO2JyZWFrfX19Y29uc3QgYT1EYXRlLm5vdygpLW87c2VsZi5wb3N0TWVzc2FnZSh7cmVzdWx0czpuLHRvdGFsRXhlY3V0aW9uVGltZTphfSl9LGZ1bmN0aW9uKCl7dmFyIHQ9ImlucHV0IGlzIGludmFsaWQgdHlwZSIscj0ib2JqZWN0Ij09dHlwZW9mIHdpbmRvdyxpPXI/d2luZG93Ont9O2kuSlNfU0hBMjU2X05PX1dJTkRPVyYmKHI9ITEpO3ZhciBlPSFyJiYib2JqZWN0Ij09dHlwZW9mIHNlbGYsaD0haS5KU19TSEEyNTZfTk9fTk9ERV9KUyYmIm9iamVjdCI9PXR5cGVvZiBwcm9jZXNzJiZwcm9jZXNzLnZlcnNpb25zJiZwcm9jZXNzLnZlcnNpb25zLm5vZGU7aD9pPWdsb2JhbDplJiYoaT1zZWxmKTt2YXIgcz0haS5KU19TSEEyNTZfTk9fQ09NTU9OX0pTJiYib2JqZWN0Ij09dHlwZW9mIG1vZHVsZSYmbW9kdWxlLmV4cG9ydHMsbj0iZnVuY3Rpb24iPT10eXBlb2YgZGVmaW5lJiZkZWZpbmUuYW1kLG89IWkuSlNfU0hBMjU2X05PX0FSUkFZX0JVRkZFUiYmInVuZGVmaW5lZCIhPXR5cGVvZiBBcnJheUJ1ZmZlcixhPSIwMTIzNDU2Nzg5YWJjZGVmIi5zcGxpdCgiIiksZj1bLTIxNDc0ODM2NDgsODM4ODYwOCwzMjc2OCwxMjhdLHU9WzI0LDE2LDgsMF0sYz1bMTExNjM1MjQwOCwxODk5NDQ3NDQxLDMwNDkzMjM0NzEsMzkyMTAwOTU3Myw5NjE5ODcxNjMsMTUwODk3MDk5MywyNDUzNjM1NzQ4LDI4NzA3NjMyMjEsMzYyNDM4MTA4MCwzMTA1OTg0MDEsNjA3MjI1Mjc4LDE0MjY4ODE5ODcsMTkyNTA3ODM4OCwyMTYyMDc4MjA2LDI2MTQ4ODgxMDMsMzI0ODIyMjU4MCwzODM1MzkwNDAxLDQwMjIyMjQ3NzQsMjY0MzQ3MDc4LDYwNDgwNzYyOCw3NzAyNTU5ODMsMTI0OTE1MDEyMiwxNTU1MDgxNjkyLDE5OTYwNjQ5ODYsMjU1NDIyMDg4MiwyODIxODM0MzQ5LDI5NTI5OTY4MDgsMzIxMDMxMzY3MSwzMzM2NTcxODkxLDM1ODQ1Mjg3MTEsMTEzOTI2OTkzLDMzODI0MTg5NSw2NjYzMDcyMDUsNzczNTI5OTEyLDEyOTQ3NTczNzIsMTM5NjE4MjI5MSwxNjk1MTgzNzAwLDE5ODY2NjEwNTEsMjE3NzAyNjM1MCwyNDU2OTU2MDM3LDI3MzA0ODU5MjEsMjgyMDMwMjQxMSwzMjU5NzMwODAwLDMzNDU3NjQ3NzEsMzUxNjA2NTgxNywzNjAwMzUyODA0LDQwOTQ1NzE5MDksMjc1NDIzMzQ0LDQzMDIyNzczNCw1MDY5NDg2MTYsNjU5MDYwNTU2LDg4Mzk5Nzg3Nyw5NTgxMzk1NzEsMTMyMjgyMjIxOCwxNTM3MDAyMDYzLDE3NDc4NzM3NzksMTk1NTU2MjIyMiwyMDI0MTA0ODE1LDIyMjc3MzA0NTIsMjM2MTg1MjQyNCwyNDI4NDM2NDc0LDI3NTY3MzQxODcsMzIwNDAzMTQ3OSwzMzI5MzI1Mjk4XSx5PVsiaGV4IiwiYXJyYXkiLCJkaWdlc3QiLCJhcnJheUJ1ZmZlciJdLGw9W107IWkuSlNfU0hBMjU2X05PX05PREVfSlMmJkFycmF5LmlzQXJyYXl8fChBcnJheS5pc0FycmF5PWZ1bmN0aW9uKHQpe3JldHVybiJbb2JqZWN0IEFycmF5XSI9PT1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodCl9KSwhb3x8IWkuSlNfU0hBMjU2X05PX0FSUkFZX0JVRkZFUl9JU19WSUVXJiZBcnJheUJ1ZmZlci5pc1ZpZXd8fChBcnJheUJ1ZmZlci5pc1ZpZXc9ZnVuY3Rpb24odCl7cmV0dXJuIm9iamVjdCI9PXR5cGVvZiB0JiZ0LmJ1ZmZlciYmdC5idWZmZXIuY29uc3RydWN0b3I9PT1BcnJheUJ1ZmZlcn0pO3ZhciBwPWZ1bmN0aW9uKHQscil7cmV0dXJuIGZ1bmN0aW9uKGkpe3JldHVybiBuZXcgZyhyLCEwKS51cGRhdGUoaSlbdF0oKX19LGQ9ZnVuY3Rpb24odCl7dmFyIHI9cCgiaGV4Iix0KTtoJiYocj13KHIsdCkpLHIuY3JlYXRlPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBnKHQpfSxyLnVwZGF0ZT1mdW5jdGlvbih0KXtyZXR1cm4gci5jcmVhdGUoKS51cGRhdGUodCl9O2Zvcih2YXIgaT0wO2k8eS5sZW5ndGg7KytpKXt2YXIgZT15W2ldO3JbZV09cChlLHQpfXJldHVybiByfSx3PWZ1bmN0aW9uKHIsZSl7dmFyIGgscz1yZXF1aXJlKCJjcnlwdG8iKSxuPXJlcXVpcmUoImJ1ZmZlciIpLkJ1ZmZlcixvPWU/InNoYTIyNCI6InNoYTI1NiI7aD1uLmZyb20mJiFpLkpTX1NIQTI1Nl9OT19CVUZGRVJfRlJPTT9uLmZyb206ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBuKHQpfTtyZXR1cm4gZnVuY3Rpb24oaSl7aWYoInN0cmluZyI9PXR5cGVvZiBpKXJldHVybiBzLmNyZWF0ZUhhc2gobykudXBkYXRlKGksInV0ZjgiKS5kaWdlc3QoImhleCIpO2lmKG51bGw9PWkpdGhyb3cgbmV3IEVycm9yKHQpO3JldHVybiBpLmNvbnN0cnVjdG9yPT09QXJyYXlCdWZmZXImJihpPW5ldyBVaW50OEFycmF5KGkpKSxBcnJheS5pc0FycmF5KGkpfHxBcnJheUJ1ZmZlci5pc1ZpZXcoaSl8fGkuY29uc3RydWN0b3I9PT1uP3MuY3JlYXRlSGFzaChvKS51cGRhdGUoaChpKSkuZGlnZXN0KCJoZXgiKTpyKGkpfX0sQT1mdW5jdGlvbih0LHIpe3JldHVybiBmdW5jdGlvbihpLGUpe3JldHVybiBuZXcgXyhpLHIsITApLnVwZGF0ZShlKVt0XSgpfX0sYj1mdW5jdGlvbih0KXt2YXIgcj1BKCJoZXgiLHQpO3IuY3JlYXRlPWZ1bmN0aW9uKHIpe3JldHVybiBuZXcgXyhyLHQpfSxyLnVwZGF0ZT1mdW5jdGlvbih0LGkpe3JldHVybiByLmNyZWF0ZSh0KS51cGRhdGUoaSl9O2Zvcih2YXIgaT0wO2k8eS5sZW5ndGg7KytpKXt2YXIgZT15W2ldO3JbZV09QShlLHQpfXJldHVybiByfTtmdW5jdGlvbiBnKHQscil7cj8obFswXT1sWzE2XT1sWzFdPWxbMl09bFszXT1sWzRdPWxbNV09bFs2XT1sWzddPWxbOF09bFs5XT1sWzEwXT1sWzExXT1sWzEyXT1sWzEzXT1sWzE0XT1sWzE1XT0wLHRoaXMuYmxvY2tzPWwpOnRoaXMuYmxvY2tzPVswLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDBdLHQ/KHRoaXMuaDA9MzIzODM3MTAzMix0aGlzLmgxPTkxNDE1MDY2Myx0aGlzLmgyPTgxMjcwMjk5OSx0aGlzLmgzPTQxNDQ5MTI2OTcsdGhpcy5oND00MjkwNzc1ODU3LHRoaXMuaDU9MTc1MDYwMzAyNSx0aGlzLmg2PTE2OTQwNzY4MzksdGhpcy5oNz0zMjA0MDc1NDI4KToodGhpcy5oMD0xNzc5MDMzNzAzLHRoaXMuaDE9MzE0NDEzNDI3Nyx0aGlzLmgyPTEwMTM5MDQyNDIsdGhpcy5oMz0yNzczNDgwNzYyLHRoaXMuaDQ9MTM1OTg5MzExOSx0aGlzLmg1PTI2MDA4MjI5MjQsdGhpcy5oNj01Mjg3MzQ2MzUsdGhpcy5oNz0xNTQxNDU5MjI1KSx0aGlzLmJsb2NrPXRoaXMuc3RhcnQ9dGhpcy5ieXRlcz10aGlzLmhCeXRlcz0wLHRoaXMuZmluYWxpemVkPXRoaXMuaGFzaGVkPSExLHRoaXMuZmlyc3Q9ITAsdGhpcy5pczIyND10fWZ1bmN0aW9uIF8ocixpLGUpe3ZhciBoLHM9dHlwZW9mIHI7aWYoInN0cmluZyI9PT1zKXt2YXIgbixhPVtdLGY9ci5sZW5ndGgsdT0wO2ZvcihoPTA7aDxmOysraCkobj1yLmNoYXJDb2RlQXQoaCkpPDEyOD9hW3UrK109bjpuPDIwNDg/KGFbdSsrXT0xOTJ8bj4+PjYsYVt1KytdPTEyOHw2MyZuKTpuPDU1Mjk2fHxuPj01NzM0ND8oYVt1KytdPTIyNHxuPj4+MTIsYVt1KytdPTEyOHxuPj4+NiY2MyxhW3UrK109MTI4fDYzJm4pOihuPTY1NTM2KygoMTAyMyZuKTw8MTB8MTAyMyZyLmNoYXJDb2RlQXQoKytoKSksYVt1KytdPTI0MHxuPj4+MTgsYVt1KytdPTEyOHxuPj4+MTImNjMsYVt1KytdPTEyOHxuPj4+NiY2MyxhW3UrK109MTI4fDYzJm4pO3I9YX1lbHNle2lmKCJvYmplY3QiIT09cyl0aHJvdyBuZXcgRXJyb3IodCk7aWYobnVsbD09PXIpdGhyb3cgbmV3IEVycm9yKHQpO2lmKG8mJnIuY29uc3RydWN0b3I9PT1BcnJheUJ1ZmZlcilyPW5ldyBVaW50OEFycmF5KHIpO2Vsc2UgaWYoIShBcnJheS5pc0FycmF5KHIpfHxvJiZBcnJheUJ1ZmZlci5pc1ZpZXcocikpKXRocm93IG5ldyBFcnJvcih0KX1yLmxlbmd0aD42NCYmKHI9bmV3IGcoaSwhMCkudXBkYXRlKHIpLmFycmF5KCkpO3ZhciBjPVtdLHk9W107Zm9yKGg9MDtoPDY0OysraCl7dmFyIGw9cltoXXx8MDtjW2hdPTkyXmwseVtoXT01NF5sfWcuY2FsbCh0aGlzLGksZSksdGhpcy51cGRhdGUoeSksdGhpcy5vS2V5UGFkPWMsdGhpcy5pbm5lcj0hMCx0aGlzLnNoYXJlZE1lbW9yeT1lfWcucHJvdG90eXBlLnVwZGF0ZT1mdW5jdGlvbihyKXtpZighdGhpcy5maW5hbGl6ZWQpe3ZhciBpLGU9dHlwZW9mIHI7aWYoInN0cmluZyIhPT1lKXtpZigib2JqZWN0IiE9PWUpdGhyb3cgbmV3IEVycm9yKHQpO2lmKG51bGw9PT1yKXRocm93IG5ldyBFcnJvcih0KTtpZihvJiZyLmNvbnN0cnVjdG9yPT09QXJyYXlCdWZmZXIpcj1uZXcgVWludDhBcnJheShyKTtlbHNlIGlmKCEoQXJyYXkuaXNBcnJheShyKXx8byYmQXJyYXlCdWZmZXIuaXNWaWV3KHIpKSl0aHJvdyBuZXcgRXJyb3IodCk7aT0hMH1mb3IodmFyIGgscyxuPTAsYT1yLmxlbmd0aCxmPXRoaXMuYmxvY2tzO248YTspe2lmKHRoaXMuaGFzaGVkJiYodGhpcy5oYXNoZWQ9ITEsZlswXT10aGlzLmJsb2NrLHRoaXMuYmxvY2s9ZlsxNl09ZlsxXT1mWzJdPWZbM109Zls0XT1mWzVdPWZbNl09Zls3XT1mWzhdPWZbOV09ZlsxMF09ZlsxMV09ZlsxMl09ZlsxM109ZlsxNF09ZlsxNV09MCksaSlmb3Iocz10aGlzLnN0YXJ0O248YSYmczw2NDsrK24pZltzPj4+Ml18PXJbbl08PHVbMyZzKytdO2Vsc2UgZm9yKHM9dGhpcy5zdGFydDtuPGEmJnM8NjQ7KytuKShoPXIuY2hhckNvZGVBdChuKSk8MTI4P2Zbcz4+PjJdfD1oPDx1WzMmcysrXTpoPDIwNDg/KGZbcz4+PjJdfD0oMTkyfGg+Pj42KTw8dVszJnMrK10sZltzPj4+Ml18PSgxMjh8NjMmaCk8PHVbMyZzKytdKTpoPDU1Mjk2fHxoPj01NzM0ND8oZltzPj4+Ml18PSgyMjR8aD4+PjEyKTw8dVszJnMrK10sZltzPj4+Ml18PSgxMjh8aD4+PjYmNjMpPDx1WzMmcysrXSxmW3M+Pj4yXXw9KDEyOHw2MyZoKTw8dVszJnMrK10pOihoPTY1NTM2KygoMTAyMyZoKTw8MTB8MTAyMyZyLmNoYXJDb2RlQXQoKytuKSksZltzPj4+Ml18PSgyNDB8aD4+PjE4KTw8dVszJnMrK10sZltzPj4+Ml18PSgxMjh8aD4+PjEyJjYzKTw8dVszJnMrK10sZltzPj4+Ml18PSgxMjh8aD4+PjYmNjMpPDx1WzMmcysrXSxmW3M+Pj4yXXw9KDEyOHw2MyZoKTw8dVszJnMrK10pO3RoaXMubGFzdEJ5dGVJbmRleD1zLHRoaXMuYnl0ZXMrPXMtdGhpcy5zdGFydCxzPj02ND8odGhpcy5ibG9jaz1mWzE2XSx0aGlzLnN0YXJ0PXMtNjQsdGhpcy5oYXNoKCksdGhpcy5oYXNoZWQ9ITApOnRoaXMuc3RhcnQ9c31yZXR1cm4gdGhpcy5ieXRlcz40Mjk0OTY3Mjk1JiYodGhpcy5oQnl0ZXMrPXRoaXMuYnl0ZXMvNDI5NDk2NzI5NnwwLHRoaXMuYnl0ZXM9dGhpcy5ieXRlcyU0Mjk0OTY3Mjk2KSx0aGlzfX0sZy5wcm90b3R5cGUuZmluYWxpemU9ZnVuY3Rpb24oKXtpZighdGhpcy5maW5hbGl6ZWQpe3RoaXMuZmluYWxpemVkPSEwO3ZhciB0PXRoaXMuYmxvY2tzLHI9dGhpcy5sYXN0Qnl0ZUluZGV4O3RbMTZdPXRoaXMuYmxvY2ssdFtyPj4+Ml18PWZbMyZyXSx0aGlzLmJsb2NrPXRbMTZdLHI+PTU2JiYodGhpcy5oYXNoZWR8fHRoaXMuaGFzaCgpLHRbMF09dGhpcy5ibG9jayx0WzE2XT10WzFdPXRbMl09dFszXT10WzRdPXRbNV09dFs2XT10WzddPXRbOF09dFs5XT10WzEwXT10WzExXT10WzEyXT10WzEzXT10WzE0XT10WzE1XT0wKSx0WzE0XT10aGlzLmhCeXRlczw8M3x0aGlzLmJ5dGVzPj4+MjksdFsxNV09dGhpcy5ieXRlczw8Myx0aGlzLmhhc2goKX19LGcucHJvdG90eXBlLmhhc2g9ZnVuY3Rpb24oKXt2YXIgdCxyLGksZSxoLHMsbixvLGEsZj10aGlzLmgwLHU9dGhpcy5oMSx5PXRoaXMuaDIsbD10aGlzLmgzLHA9dGhpcy5oNCxkPXRoaXMuaDUsdz10aGlzLmg2LEE9dGhpcy5oNyxiPXRoaXMuYmxvY2tzO2Zvcih0PTE2O3Q8NjQ7Kyt0KXI9KChoPWJbdC0xNV0pPj4+N3xoPDwyNSleKGg+Pj4xOHxoPDwxNCleaD4+PjMsaT0oKGg9Ylt0LTJdKT4+PjE3fGg8PDE1KV4oaD4+PjE5fGg8PDEzKV5oPj4+MTAsYlt0XT1iW3QtMTZdK3IrYlt0LTddK2l8MDtmb3IoYT11JnksdD0wO3Q8NjQ7dCs9NCl0aGlzLmZpcnN0Pyh0aGlzLmlzMjI0PyhzPTMwMDAzMixBPShoPWJbMF0tMTQxMzI1NzgxOSktMTUwMDU0NTk5fDAsbD1oKzI0MTc3MDc3fDApOihzPTcwNDc1MTEwOSxBPShoPWJbMF0tMjEwMjQ0MjQ4KS0xNTIxNDg2NTM0fDAsbD1oKzE0MzY5NDU2NXwwKSx0aGlzLmZpcnN0PSExKToocj0oZj4+PjJ8Zjw8MzApXihmPj4+MTN8Zjw8MTkpXihmPj4+MjJ8Zjw8MTApLGU9KHM9ZiZ1KV5mJnleYSxBPWwrKGg9QSsoaT0ocD4+PjZ8cDw8MjYpXihwPj4+MTF8cDw8MjEpXihwPj4+MjV8cDw8NykpKyhwJmRefnAmdykrY1t0XStiW3RdKXwwLGw9aCsocitlKXwwKSxyPShsPj4+MnxsPDwzMCleKGw+Pj4xM3xsPDwxOSleKGw+Pj4yMnxsPDwxMCksZT0obj1sJmYpXmwmdV5zLHc9eSsoaD13KyhpPShBPj4+NnxBPDwyNileKEE+Pj4xMXxBPDwyMSleKEE+Pj4yNXxBPDw3KSkrKEEmcF5+QSZkKStjW3QrMV0rYlt0KzFdKXwwLHI9KCh5PWgrKHIrZSl8MCk+Pj4yfHk8PDMwKV4oeT4+PjEzfHk8PDE5KV4oeT4+PjIyfHk8PDEwKSxlPShvPXkmbCleeSZmXm4sZD11KyhoPWQrKGk9KHc+Pj42fHc8PDI2KV4odz4+PjExfHc8PDIxKV4odz4+PjI1fHc8PDcpKSsodyZBXn53JnApK2NbdCsyXStiW3QrMl0pfDAscj0oKHU9aCsocitlKXwwKT4+PjJ8dTw8MzApXih1Pj4+MTN8dTw8MTkpXih1Pj4+MjJ8dTw8MTApLGU9KGE9dSZ5KV51JmxebyxwPWYrKGg9cCsoaT0oZD4+PjZ8ZDw8MjYpXihkPj4+MTF8ZDw8MjEpXihkPj4+MjV8ZDw8NykpKyhkJndefmQmQSkrY1t0KzNdK2JbdCszXSl8MCxmPWgrKHIrZSl8MCx0aGlzLmNocm9tZUJ1Z1dvcmtBcm91bmQ9ITA7dGhpcy5oMD10aGlzLmgwK2Z8MCx0aGlzLmgxPXRoaXMuaDErdXwwLHRoaXMuaDI9dGhpcy5oMit5fDAsdGhpcy5oMz10aGlzLmgzK2x8MCx0aGlzLmg0PXRoaXMuaDQrcHwwLHRoaXMuaDU9dGhpcy5oNStkfDAsdGhpcy5oNj10aGlzLmg2K3d8MCx0aGlzLmg3PXRoaXMuaDcrQXwwfSxnLnByb3RvdHlwZS5oZXg9ZnVuY3Rpb24oKXt0aGlzLmZpbmFsaXplKCk7dmFyIHQ9dGhpcy5oMCxyPXRoaXMuaDEsaT10aGlzLmgyLGU9dGhpcy5oMyxoPXRoaXMuaDQscz10aGlzLmg1LG49dGhpcy5oNixvPXRoaXMuaDcsZj1hW3Q+Pj4yOCYxNV0rYVt0Pj4+MjQmMTVdK2FbdD4+PjIwJjE1XSthW3Q+Pj4xNiYxNV0rYVt0Pj4+MTImMTVdK2FbdD4+PjgmMTVdK2FbdD4+PjQmMTVdK2FbMTUmdF0rYVtyPj4+MjgmMTVdK2Fbcj4+PjI0JjE1XSthW3I+Pj4yMCYxNV0rYVtyPj4+MTYmMTVdK2Fbcj4+PjEyJjE1XSthW3I+Pj44JjE1XSthW3I+Pj40JjE1XSthWzE1JnJdK2FbaT4+PjI4JjE1XSthW2k+Pj4yNCYxNV0rYVtpPj4+MjAmMTVdK2FbaT4+PjE2JjE1XSthW2k+Pj4xMiYxNV0rYVtpPj4+OCYxNV0rYVtpPj4+NCYxNV0rYVsxNSZpXSthW2U+Pj4yOCYxNV0rYVtlPj4+MjQmMTVdK2FbZT4+PjIwJjE1XSthW2U+Pj4xNiYxNV0rYVtlPj4+MTImMTVdK2FbZT4+PjgmMTVdK2FbZT4+PjQmMTVdK2FbMTUmZV0rYVtoPj4+MjgmMTVdK2FbaD4+PjI0JjE1XSthW2g+Pj4yMCYxNV0rYVtoPj4+MTYmMTVdK2FbaD4+PjEyJjE1XSthW2g+Pj44JjE1XSthW2g+Pj40JjE1XSthWzE1JmhdK2Fbcz4+PjI4JjE1XSthW3M+Pj4yNCYxNV0rYVtzPj4+MjAmMTVdK2Fbcz4+PjE2JjE1XSthW3M+Pj4xMiYxNV0rYVtzPj4+OCYxNV0rYVtzPj4+NCYxNV0rYVsxNSZzXSthW24+Pj4yOCYxNV0rYVtuPj4+MjQmMTVdK2Fbbj4+PjIwJjE1XSthW24+Pj4xNiYxNV0rYVtuPj4+MTImMTVdK2Fbbj4+PjgmMTVdK2Fbbj4+PjQmMTVdK2FbMTUmbl07cmV0dXJuIHRoaXMuaXMyMjR8fChmKz1hW28+Pj4yOCYxNV0rYVtvPj4+MjQmMTVdK2Fbbz4+PjIwJjE1XSthW28+Pj4xNiYxNV0rYVtvPj4+MTImMTVdK2Fbbz4+PjgmMTVdK2Fbbz4+PjQmMTVdK2FbMTUmb10pLGZ9LGcucHJvdG90eXBlLnRvU3RyaW5nPWcucHJvdG90eXBlLmhleCxnLnByb3RvdHlwZS5kaWdlc3Q9ZnVuY3Rpb24oKXt0aGlzLmZpbmFsaXplKCk7dmFyIHQ9dGhpcy5oMCxyPXRoaXMuaDEsaT10aGlzLmgyLGU9dGhpcy5oMyxoPXRoaXMuaDQscz10aGlzLmg1LG49dGhpcy5oNixvPXRoaXMuaDcsYT1bdD4+PjI0JjI1NSx0Pj4+MTYmMjU1LHQ+Pj44JjI1NSwyNTUmdCxyPj4+MjQmMjU1LHI+Pj4xNiYyNTUscj4+PjgmMjU1LDI1NSZyLGk+Pj4yNCYyNTUsaT4+PjE2JjI1NSxpPj4+OCYyNTUsMjU1JmksZT4+PjI0JjI1NSxlPj4+MTYmMjU1LGU+Pj44JjI1NSwyNTUmZSxoPj4+MjQmMjU1LGg+Pj4xNiYyNTUsaD4+PjgmMjU1LDI1NSZoLHM+Pj4yNCYyNTUscz4+PjE2JjI1NSxzPj4+OCYyNTUsMjU1JnMsbj4+PjI0JjI1NSxuPj4+MTYmMjU1LG4+Pj44JjI1NSwyNTUmbl07cmV0dXJuIHRoaXMuaXMyMjR8fGEucHVzaChvPj4+MjQmMjU1LG8+Pj4xNiYyNTUsbz4+PjgmMjU1LDI1NSZvKSxhfSxnLnByb3RvdHlwZS5hcnJheT1nLnByb3RvdHlwZS5kaWdlc3QsZy5wcm90b3R5cGUuYXJyYXlCdWZmZXI9ZnVuY3Rpb24oKXt0aGlzLmZpbmFsaXplKCk7dmFyIHQ9bmV3IEFycmF5QnVmZmVyKHRoaXMuaXMyMjQ/Mjg6MzIpLHI9bmV3IERhdGFWaWV3KHQpO3JldHVybiByLnNldFVpbnQzMigwLHRoaXMuaDApLHIuc2V0VWludDMyKDQsdGhpcy5oMSksci5zZXRVaW50MzIoOCx0aGlzLmgyKSxyLnNldFVpbnQzMigxMix0aGlzLmgzKSxyLnNldFVpbnQzMigxNix0aGlzLmg0KSxyLnNldFVpbnQzMigyMCx0aGlzLmg1KSxyLnNldFVpbnQzMigyNCx0aGlzLmg2KSx0aGlzLmlzMjI0fHxyLnNldFVpbnQzMigyOCx0aGlzLmg3KSx0fSxfLnByb3RvdHlwZT1uZXcgZyxfLnByb3RvdHlwZS5maW5hbGl6ZT1mdW5jdGlvbigpe2lmKGcucHJvdG90eXBlLmZpbmFsaXplLmNhbGwodGhpcyksdGhpcy5pbm5lcil7dGhpcy5pbm5lcj0hMTt2YXIgdD10aGlzLmFycmF5KCk7Zy5jYWxsKHRoaXMsdGhpcy5pczIyNCx0aGlzLnNoYXJlZE1lbW9yeSksdGhpcy51cGRhdGUodGhpcy5vS2V5UGFkKSx0aGlzLnVwZGF0ZSh0KSxnLnByb3RvdHlwZS5maW5hbGl6ZS5jYWxsKHRoaXMpfX07dmFyIHY9ZCgpO3Yuc2hhMjU2PXYsdi5zaGEyMjQ9ZCghMCksdi5zaGEyNTYuaG1hYz1iKCksdi5zaGEyMjQuaG1hYz1iKCEwKSxzP21vZHVsZS5leHBvcnRzPXY6KGkuc2hhMjU2PXYuc2hhMjU2LGkuc2hhMjI0PXYuc2hhMjI0LG4mJmRlZmluZSgoZnVuY3Rpb24oKXtyZXR1cm4gdn0pKSl9KCl9KCk7Ci8vIyBzb3VyY2VNYXBwaW5nVVJMPUJ1cmVhdWNyYWN5V29ya2VyLmpzLm1hcAoK");const re="dp_tracking_id";class ce{constructor(){}getTrackingId(){return this.getItem(re)}setTrackingId(e){this.setItem(re,e,3650)}setItem(e,t,n){let i="";if(n){const e=new Date;e.setTime(e.getTime()+24*n*60*60*1e3),i="; expires="+e.toUTCString()}document.cookie=e+"="+(t||"")+i+"; path=/"}getItem(e){const t=e+"=",n=document.cookie.split(";");for(let i=0;i<n.length;i++){let e=n[i];for(;" "===e.charAt(0);)e=e.substring(1,e.length);if(0===e.indexOf(t))return e.substring(t.length,e.length)}return null}removeItem(e){document.cookie=e+"=; Max-Age=-99999999; path=/"}}class le{constructor(e){this.baseUrl=e.baseUrl,this.clientId=e.clientId,this.sdkLocalStorage=e.sdkLocalStorage,this.sdkCookieStorage=e.sdkCookieStorage}static init(e){const t=new le({baseUrl:e.metricServerConfig.baseUrl,clientId:e.clientId,sdkLocalStorage:new k(e.chainId),sdkCookieStorage:new ce}),n=new URL(location.href),i=new URLSearchParams(n.search),s=i.get("dp_tracking_id");if(s){const e=t.sdkCookieStorage.getTrackingId();t.sdkCookieStorage.setTrackingId(s),e&&e!==s&&t.sendWalletActivity("TRACKING_ID_SYNC",{oldTrackingId:e})}if(!t.sdkCookieStorage.getTrackingId()){const e=function(){const e="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";let t="";for(let n=0;n<16;n++)t+=e[Math.floor(62*Math.random())];return t}();t.sdkCookieStorage.setTrackingId(e)}const a={};for(const o of e.metricServerConfig.utmParamKeys){const e=i.get(o);e&&(a[o]=e)}Object.keys(a).length>0&&t.sendWalletActivity("FROM_AD",{...a}),le.instance=t}static getInstance(){return le.instance}getTrackingId(){return this.sdkCookieStorage.getTrackingId()}sendWalletActivity(e,t={}){let n=this.sdkLocalStorage.getDeviceId();const i=this.sdkLocalStorage.getConnectedWallet(),s=this.sdkLocalStorage.getWalletType(),a={uuid:n,tracking_id:this.sdkCookieStorage.getTrackingId(),address:i,wallet_type:s,action:e,data:{sdkVersion:"1.3.5",clientId:this.clientId,url:window.location.href,...t}};navigator.sendBeacon(`${this.baseUrl}/api/v1/metric/wallet-activity`,new Blob([JSON.stringify(a)],{type:"application/json"}))}}le.instance=null;class de{constructor(e){this.sendSdkInitializeMetric=async e=>{const t=this.sdkLocalStorage.getWalletType(),n=await e.request({method:"kaia_accounts"});this.sendWalletMetric("SDK_INIT",n[0]??null,t),this.sendWalletMetric(z,n[0]??null,t)},this.sendWalletMetric=async(e,t,n)=>{let i=this.sdkLocalStorage.getDeviceId(),s=le.getInstance()?.getTrackingId()??null;const a=`${this.baseUrl}/api/v2/metric/wallet-activity`,o={uuid:i,tracking_id:s,address:t,wallet_type:n,action:e,data:{sdkVersion:"1.3.5",clientId:this.clientId}},r=await this.getReviewAndSolve(a,o);if(!r)return;const c={uuid:i,tracking_id:s,address:t,wallet_type:n,action:e,data:{sdkVersion:"1.3.5",clientId:this.clientId,totalCalculationTime:r.totalCalculationTime},review:r.review};await fetch(a,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(c)}).catch((e=>{}))},this.getReviewAndSolve=async(e,t)=>{let n;try{await s.post(e,t)}catch(i){if(!s.isAxiosError(i)||303!==i.status)return;n=i.response}if(n)try{return await async function(e,t){const n=await s.get(e,{params:{review:t}});e=n.data.url;const i=n.data.ticket,a=r(i)["com.linecorp.bureaucracy"].challenges;if(!Array.isArray(a)||0===a.length)throw new Error("Invalid JWT structure");const o=navigator.hardwareConcurrency,c=Math.ceil(a.length/o),l=a.map(((e,t)=>({...e,_index:t}))),d=[];for(let s=0;s<o;s++){const e=l.slice(s*c,(s+1)*c);if(0===e.length)continue;const t=new Promise(((t,n)=>{const i=new oe;i.onmessage=function(e){t(e.data),i.terminate()},i.onerror=function(e){n(e),i.terminate()},i.postMessage({challenges:e})}));d.push(t)}const h=await Promise.all(d),p=h.flatMap((e=>e.results));p.sort(((e,t)=>e.index-t.index));const u=p.map((e=>e.answer)),m=h.reduce(((e,t)=>e+t.totalExecutionTime),0);return t=(await s.post(e,{ticket:i,answers:u.map((e=>e.toString()))})).data.review,new ie(t,m)}(n?.data?.url,n?.data?.review)}catch(a){return}},this.baseUrl=e.metricServerConfig.baseUrl,this.clientId=e.clientId,this.sdkLocalStorage=new k(e.chainId)}}class he{constructor(e){this.resolveProviderType=()=>{},this.rejectProviderType=()=>{},this.walletSelectUIUrl=e.sdkUIUrls.miniDappConnectLiffV3,this.connectPageOptions=e.connectPageOptions}onProviderTypeSelected(e){this.resolveProviderType&&this.resolveProviderType(e)}async selectType(e,t){const n=new Promise(((e,t)=>{this.resolveProviderType=e,this.rejectProviderType=t})),i=new URL(this.walletSelectUIUrl);i.searchParams.append("dappName",e),this.connectPageOptions&&Object.entries(this.connectPageOptions).forEach((([e,t])=>{i.searchParams.set(e,t)})),i.searchParams.set(Z,t?"true":"false"),i.searchParams.set(G,E()?"true":"false"),await o.subWindow.open({url:i.toString()});const s=()=>{o.subWindow.off("close",s),this.cancel()},a=e=>{o.subWindow.off("submit",a),o.subWindow.off("close",s);const t=e.providerType;this.onProviderTypeSelected(t)};return o.subWindow.on("close",s),o.subWindow.on("submit",a),await n}cancel(){this.rejectProviderType&&this.rejectProviderType(new p({code:y,message:"User canceled"}))}}class pe{constructor(e){this.fetchClientInfo=async()=>{const e=`${this.baseUrl}/api/v1/client-info`;try{return(await s.get(e,{headers:{"x-client-id":this.clientId}})).data}catch(t){throw t}},this.clientId=e.clientId,this.baseUrl=e.relayServerConfig.baseUrl}}const ue=["en_US","ru_RU","zh_CN","zh","ar_AE","cs_CZ","de_DE","es_ES","es_LAT","fr_FR","id_ID","it_IT","nl_NL","pl_PL","pt_BR","pt_PT","ro_RO","tr_TR","uk_UA","vi_VN","zh_TW"],me=["kaia_signTransaction","klay_signTransaction"];class ye{constructor(e,t,n){this.eventBus=e,this.config=t,this.universalUi=n,this.setOkxEventProxy()}static async init(e,i){const s=new pe(i),a=ue.filter((e=>e.includes(window.navigator.language?.replace("-","_")))),r=a.length>0?a[0]:"en_US",c=await s.fetchClientInfo();let l;(v(navigator.userAgent)||o.isInClient())&&(l="https://line.me/R/run");const d=await t.init({dappMetaData:{icon:c.image_url,name:c.name},actionsConfiguration:{returnStrategy:l},language:r,uiPreferences:{theme:n.LIGHT}});return new ye(e,i,d)}async request(e){const{method:t,params:n}=e;if(Y(t))return this.universalUi.session?.namespaces?.eip155?.accounts?.map((e=>this.stripOkxAccountPrefix(e)))??[];if(-1!==this.config.kaiaOnlyMethods.indexOf(t))throw new p({code:Number(u.methodNotFound),message:"This method is not supported on OKX wallet."});if("kaia_connectAndSign"===t)return this.connectAndSign(n);this.universalUi.connected()||await this.universalUi.openModal({namespaces:{eip155:{chains:["eip155:8217"],defaultChain:"8217"}}});const i=me.includes(t)?t:_(t),s=n?this.convertToEthParam(i,n):n;return this.universalUi.request({method:i,params:s},"eip155:8217")}async connectAndSign(e){if(!Array.isArray(e)||1!==e.length)throw new p({code:-32602,message:"Invalid params"});const t=e[0];if(this.universalUi.connected()){const e=this.universalUi.getUniversalProvider();if(!e||!e.session)throw new p({code:-32603,message:"Internal JSON-RPC error"});const n=this.stripOkxAccountPrefix(e.session.namespaces.eip155.accounts[0]);return[n,await this.universalUi.request({method:"personal_sign",params:[t,n]},"eip155:8217")]}if(window.okxwallet){await this.universalUi.openModal({namespaces:{eip155:{chains:["eip155:8217"],defaultChain:"8217"}}});const e=this.universalUi.getUniversalProvider();if(!e||!e.session)throw new p({code:-32603,message:"Internal JSON-RPC error"});const n=this.stripOkxAccountPrefix(e.session.namespaces.eip155.accounts[0]);return[n,await this.universalUi.request({method:"personal_sign",params:[t,n]},"eip155:8217")]}const n=await this.universalUi.openModalAndSign({namespaces:{eip155:{chains:["eip155:8217"],defaultChain:"8217"}}},[{method:"personal_sign",chainId:"eip155:8217",params:[t]}]);try{const e=n.namespaces.eip155.accounts[0],t=this.stripOkxAccountPrefix(e),i=n.signResponse[0],s=i?.result;return[t,s]}catch(i){throw new p({code:-32603,message:"Internal JSON-RPC error"})}}async switchChain(e){}async disconnect(){try{await this.universalUi.disconnect()}catch(e){}}setOkxEventProxy(){this.universalUi.on("display_uri",(e=>{this.eventBus.emit("display_uri",e)})),this.universalUi.on("session_update",(e=>{this.eventBus.emit("session_update",e)})),this.universalUi.on("session_delete",(({topic:e})=>{this.eventBus.emit("disconnect")})),this.universalUi.on("connect",(()=>{this.eventBus.emit("connect",{chainId:"8217"})})),this.universalUi.on("accountChanged",(e=>{this.eventBus.emit("accountChanged",{chainId:"8217"})}))}convertToEthParam(e,t){if(-1!==["eth_signTypedData_v4"].indexOf(e)&&Array.isArray(t)&&2===t.length){const e=this.convertSignTypedDataV4Field(t[1]);return[t[0],e]}return-1===["eth_sendTransaction","eth_signTransaction"].indexOf(e)?t:Array.isArray(t)&&t.every((e=>"object"==typeof e))?t.map((e=>this.convertInputFieldToDataField(e))):t}convertSignTypedDataV4Field(e){try{return JSON.parse(e)}catch(t){return e}}convertInputFieldToDataField(e){const t=e;if(!("input"in t))return e;const{input:n,...i}=t;return{...i,data:t.input}}stripOkxAccountPrefix(e){return e.split(":")[2]}}class we{constructor(e,t){this.eventBus=e,this.config=t,this.setExtensionEventProxy()}async request(e){const{method:t,params:n}=e;if(-1!==this.config.kaiaOnlyMethods.indexOf(t))throw new p({code:Number(u.methodNotFound),message:"This method is not supported on Bitget wallet."});if("kaia_connectAndSign"===t)return await this.requestConnectAndSign(n);const i=n?this.convertToLegacyParam(t,n):n,s=_(t),a=await this.requestWithConverter({method:s,params:i});return this.convertLegacyResponse(s,a)}async requestConnectAndSign(e){if(!Array.isArray(e)||1!==e.length)throw new p({code:Number(u.invalidParams),message:"Invalid params"});const t=e[0],n=(await this.requestWithConverter({method:"eth_requestAccounts",params:[]}))[0];return[n,await this.requestWithConverter({method:"personal_sign",params:[t,n]})]}async requestWithConverter(e){try{const t=await D().request(e);return M(e.method,t)}catch(t){throw this.convertBitgetRpcError(t)}}async switchChain(e){const t=D(),n=`0x${parseInt(this.config.chainId,10).toString(16)}`;if(t.chainId.toString().toLowerCase()===n.toLowerCase())return;const i=this.awaitNetworkChange(t,n);await this.requestWithConverter({method:"wallet_switchEthereumChain",params:[{chainId:n}]}),await i}async awaitNetworkChange(e,t){return new Promise(((e,n)=>{const i=s=>{if("loading"===s)return;s.toString().toLowerCase()===t.toString().toLowerCase()?(this.eventBus.removeListener("chainChanged",i),e(null)):(this.eventBus.removeListener("chainChanged",i),n("Invalid chain id"))};this.eventBus.on("chainChanged",i)}))}async disconnect(){const e=D();await e.disconnect(),this.eventBus.removeAllListeners(),e.removeAllListeners()}setExtensionEventProxy(){const e=D();e.removeAllListeners(),e.on("accountsChanged",(e=>{this.eventBus.emit("accountsChanged",e)})),e.on("chainChanged",(e=>{this.eventBus.emit("chainChanged",e)}))}convertToLegacyParam(e,t){return-1===this.config.methodsShouldConvertInputFieldToDataFieldWhenRequestToExtension.indexOf(e)?t:Array.isArray(t)&&t.every((e=>"object"==typeof e))?t.map((e=>this.convertInputFieldToDataField(e))):t}convertInputFieldToDataField(e){const t=e;if(!("input"in t))return e;const{input:n,...i}=t;return{...i,data:t.input}}convertLegacyResponse(e,t){return"eth_signTransaction"!==e?t:this.convertSignTransactionResponse(t)}convertSignTransactionResponse(e){return{raw:e}}convertBitgetRpcError(e){if(!f(e))return e;const t=e.code,n=e.message;return-32603===t&&n.includes("user reject")||4001===t&&n.includes("User reject")?new p({code:y,message:n}):new p({code:Number.parseInt(u.internal),message:e.message})}}class ge{constructor(e){this.appKit=l({networks:[d,h],metadata:{name:e.name,icons:[e.image_url],description:"",url:""},projectId:e.reown_project_id}),this.walletButton=c()}static getInstance(e){return ge.instance||(ge.instance=new ge(e)),ge.instance}async awaitAppKitReady(){this.walletButton.isReady()||await new Promise((e=>{this.walletButton.subscribeIsReady((t=>{t&&e()}))}))}async connect(e){return await this.walletButton.connect(e)}getAddress(){return this.appKit.getAddress()}async request(e){const t=await this.appKit.getUniversalProvider();if(!t)throw new Error("Failed to initialize wallet connect - not found universalProvider");return await t.request(e)}async disconnect(){await this.appKit.disconnect()}}ge.instance=null;class Te{constructor(e,t,n,i){this.walletName=n,this.eventBus=e,this.config=t,this.walletConnectClient=ge.getInstance(i)}static async init(e,t,n){const i=new pe(t),s=await i.fetchClientInfo();if(!s.reown_project_id||""===s.reown_project_id)throw new Error("Dapp is not registered to reown dashboard.");const a=new Te(e,t,n,s);return await a.walletConnectClient.awaitAppKitReady(),a}async request(e){const{method:t,params:n}=e;if(-1!==this.config.kaiaOnlyMethods.indexOf(t))throw new p({code:Number(u.methodNotFound),message:"This method is not supported on Bitget wallet."});await this.walletConnectClient.awaitAppKitReady();const i=this.walletConnectClient.getAddr