UNPKG

@bitte-ai/wallet

Version:

Bitte Wallet

3 lines 10.9 kB
'use strict';var walletUtils=require('@near-wallet-selector/wallet-utils'),nearApiJs=require('near-api-js'),index_js=require('near-api-js/lib/utils/index.js');var j="data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iOTUiIGhlaWdodD0iOTUiIHZpZXdCb3g9IjAgMCA5NSA5NSIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHBhdGggZmlsbC1ydWxlPSJldmVub2RkIiBjbGlwLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik0xLjc3NjE3IDU5LjE4MjZMNjIuNzIyNyA2My4zMTNDNjMuMTE4NSA2My40MzA5IDYzLjQ3ODggNjMuNjQ1NiA2My43NzA4IDYzLjkzNzdDNjQuMDYyOSA2NC4yMjk3IDY0LjI3NzUgNjQuNTg5OSA2NC4zOTU0IDY0Ljk4NThMNjguNTI1OSA3OC44NTU1QzY4LjY3ODcgNzkuMzY4NiA2OC45OTMyIDc5LjgxODYgNjkuNDIyNCA4MC4xMzg3QzY5Ljg1MTYgODAuNDU4NyA3MC4zNzI3IDgwLjYzMTYgNzAuOTA4MiA4MC42MzE2QzcxLjQ0MzYgODAuNjMxNiA3MS45NjQ3IDgwLjQ1ODcgNzIuMzkzOSA4MC4xMzg3QzcyLjgyMzEgNzkuODE4NiA3My4xMzc2IDc5LjM2ODYgNzMuMjkwNCA3OC44NTU1TDc3LjQyMDkgNjQuOTg1OEM3Ny41Mzg4IDY0LjU4OTkgNzcuNzUzNCA2NC4yMjk3IDc4LjA0NTUgNjMuOTM3N0M3OC4zMzc2IDYzLjY0NTYgNzguNjk3OCA2My40MzA5IDc5LjA5MzYgNjMuMzEzTDkyLjk2MzMgNTkuMTgyNkM5My40NzY0IDU5LjAyOTcgOTMuOTI2NSA1OC43MTUzIDk0LjI0NjYgNTguMjg2MUM5NC41NjY2IDU3Ljg1NjggOTQuNzM5NSA1Ny4zMzU3IDk0LjczOTUgNTYuODAwM0M5NC43Mzk1IDU2LjI2NDkgOTQuNTY2NiA1NS43NDM4IDk0LjI0NjYgNTUuMzE0NkM5My45MjY1IDU0Ljg4NTMgOTMuNDc2NCA1NC41NzA5IDkyLjk2MzMgNTQuNDE4MUw3OS4wOTM3IDUwLjI4NzZDNzguNjk3OCA1MC4xNjk3IDc4LjMzNzYgNDkuOTU1IDc4LjA0NTUgNDkuNjYzQzc3Ljc1MzUgNDkuMzcwOSA3Ny41Mzg4IDQ5LjAxMDcgNzcuNDIwOSA0OC42MTQ4TDczLjI5MDQgMzQuNzQ1MkM3My4xMzc2IDM0LjIzMiA3Mi44MjMyIDMzLjc4MTkgNzIuMzkzOSAzMy40NjE5QzcxLjk2NDcgMzMuMTQxOSA3MS40NDM2IDMyLjk2OSA3MC45MDgyIDMyLjk2OUM3MC4zNzI4IDMyLjk2OSA2OS44NTE3IDMzLjE0MTkgNjkuNDIyNCAzMy40NjE5QzY4Ljk5MzIgMzMuNzgxOSA2OC42Nzg4IDM0LjIzMiA2OC41MjYgMzQuNzQ1Mkw2NC4zOTU0IDQ4LjYxNDhDNjQuMjc3NiA0OS4wMTA3IDY0LjA2MjkgNDkuMzcwOSA2My43NzA4IDQ5LjY2M0M2My40Nzg4IDQ5Ljk1NSA2My4xMTg1IDUwLjE2OTcgNjIuNzIyNyA1MC4yODc2TDEuNzc2MTggNTQuNDE4MUMxLjI2MzA1IDU0LjU3MDkgMC44MTI5NTYgNTQuODg1MyAwLjQ5MjkyIDU1LjMxNDZDMC4xNzI4ODQgNTUuNzQzOCAyLjI0NzU1ZS0wNiA1Ni4yNjQ5IDAgNTYuODAwM0MtMi4yNDc1MWUtMDYgNTcuMzM1NyAwLjE3Mjg4NyA1Ny44NTY4IDAuNDkyOTIgNTguMjg2MUMwLjgxMjk1MyA1OC43MTUzIDEuMjYzMDMgNTkuMDI5NyAxLjc3NjE3IDU5LjE4MjZaIiBmaWxsPSJibGFjayIvPgo8cGF0aCBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGNsaXAtcnVsZT0iZXZlbm9kZCIgZD0iTTMyLjE2MzcgMjkuNDg2OEw0MC4zNTc4IDMxLjkyNzFDNDAuNTkxNyAzMS45OTY3IDQwLjgwNDUgMzIuMTIzNiA0MC45NzcgMzIuMjk2MUM0MS4xNDk2IDMyLjQ2ODcgNDEuMjc2NCAzMi42ODE1IDQxLjM0NjEgMzIuOTE1NEw0My43ODYzIDQxLjEwOTVDNDMuODc2NiA0MS40MTI2IDQ0LjA2MjQgNDEuNjc4NSA0NC4zMTYgNDEuODY3NkM0NC41Njk2IDQyLjA1NjcgNDQuODc3NCA0Mi4xNTg4IDQ1LjE5MzcgNDIuMTU4OEM0NS41MTAxIDQyLjE1ODggNDUuODE3OSA0Mi4wNTY3IDQ2LjA3MTUgNDEuODY3NkM0Ni4zMjUxIDQxLjY3ODUgNDYuNTEwOSA0MS40MTI2IDQ2LjYwMTEgNDEuMTA5NUw0OS4wNDE0IDMyLjkxNTRDNDkuMTExMSAzMi42ODE1IDQ5LjIzNzkgMzIuNDY4NyA0OS40MTA0IDMyLjI5NjFDNDkuNTgzIDMyLjEyMzYgNDkuNzk1OCAzMS45OTY3IDUwLjAyOTcgMzEuOTI3MUw1OC4yMjM4IDI5LjQ4NjhDNTguNTI2OSAyOS4zOTY2IDU4Ljc5MjggMjkuMjEwOCA1OC45ODE5IDI4Ljk1NzJDNTkuMTcxIDI4LjcwMzYgNTkuMjczMSAyOC4zOTU4IDU5LjI3MzEgMjguMDc5NEM1OS4yNzMxIDI3Ljc2MzEgNTkuMTcxIDI3LjQ1NTMgNTguOTgxOSAyNy4yMDE3QzU4Ljc5MjggMjYuOTQ4MSA1OC41MjY5IDI2Ljc2MjMgNTguMjIzOCAyNi42NzJMNTAuMDI5NiAyNC4yMzE3QzQ5Ljc5NTggMjQuMTYyMSA0OS41ODI5IDI0LjAzNTIgNDkuNDEwNCAyMy44NjI3QzQ5LjIzNzkgMjMuNjkwMiA0OS4xMTEgMjMuNDc3MyA0OS4wNDE0IDIzLjI0MzRMNDYuNjAxMSAxNS4wNDkzQzQ2LjUxMDggMTQuNzQ2MiA0Ni4zMjUgMTQuNDgwMyA0Ni4wNzE1IDE0LjI5MTJDNDUuODE3OSAxNC4xMDIxIDQ1LjUxIDE0IDQ1LjE5MzcgMTRDNDQuODc3NCAxNCA0NC41Njk1IDE0LjEwMjEgNDQuMzE1OSAxNC4yOTEyQzQ0LjA2MjMgMTQuNDgwMyA0My44NzY2IDE0Ljc0NjIgNDMuNzg2MyAxNS4wNDkzTDQxLjM0NiAyMy4yNDM0QzQxLjI3NjQgMjMuNDc3MyA0MS4xNDk1IDIzLjY5MDIgNDAuOTc3IDIzLjg2MjdDNDAuODA0NCAyNC4wMzUyIDQwLjU5MTYgMjQuMTYyMSA0MC4zNTc4IDI0LjIzMTdMMzIuMTYzNyAyNi42NzJDMzEuODYwNSAyNi43NjIyIDMxLjU5NDYgMjYuOTQ4IDMxLjQwNTUgMjcuMjAxNkMzMS4yMTY0IDI3LjQ1NTIgMzEuMTE0MyAyNy43NjMxIDMxLjExNDMgMjguMDc5NEMzMS4xMTQzIDI4LjM5NTggMzEuMjE2NCAyOC43MDM3IDMxLjQwNTUgMjguOTU3MkMzMS41OTQ2IDI5LjIxMDggMzEuODYwNSAyOS4zOTY2IDMyLjE2MzcgMjkuNDg2OFoiIGZpbGw9ImJsYWNrIi8+Cjwvc3ZnPgo=";var y=480,A=640,k=300,u=()=>({signedAccountId:localStorage.getItem("bitte:signedAccountId")||"",functionCallKey:JSON.parse(localStorage.getItem("bitte:functionCallKey")||"null")}),I=t=>{localStorage.setItem("bitte:signedAccountId",t.signedAccountId),localStorage.setItem("bitte:functionCallKey",JSON.stringify(t.functionCallKey));},E=(t,r)=>({walletUrl:t,network:r,provider:new nearApiJs.providers.JsonRpcProvider({url:r.nodeUrl})}),C=t=>t.signedAccountId,p=t=>{if(t.functionCallKey)return index_js.KeyPair.fromString(t.functionCallKey.privateKey).getPublicKey()},U=t=>!!t.signedAccountId,Q=()=>{let t={signedAccountId:"",functionCallKey:null};return I(t),t},d=(t,{contractId:r,methodNames:n})=>{let i=new URL(window.location.href),a=new URL(`${t.walletUrl}/login/`);a.searchParams.set("success_url",i.href),a.searchParams.set("failure_url",i.href);let s=null;if(r){a.searchParams.set("contract_id",r);let e=index_js.KeyPair.fromRandom("ed25519");a.searchParams.set("public_key",e.getPublicKey().toString()),s={privateKey:e.toString(),contractId:r,methods:n||[]};}n&&n.forEach(e=>{a.searchParams.append("methodNames",e);});let o=u();return o.functionCallKey=s,I(o),{url:a.toString(),newState:o}},f=async(t,r,{contractId:n,methodNames:i})=>{let{url:a,newState:s}=d(t,{contractId:n,methodNames:i});return D(t,a,async o=>{let e=o,{public_key:c,account_id:l}=e;if(l){let M={...s,signedAccountId:l};return I(M),[{accountId:l,publicKey:c||""}]}throw new Error("Invalid response data from wallet")})},x=async(t,{message:r,nonce:n,recipient:i,callbackUrl:a,state:s})=>{let o=a||window.location.href;if(!o)throw new Error("BitteWallet: CallbackUrl is missing");let e=new URL(t.walletUrl);return e.pathname="sign-message",e.searchParams.append("message",r),e.searchParams.append("nonce",n.toString("base64")),e.searchParams.append("recipient",i),e.searchParams.append("callbackUrl",o),s&&e.searchParams.append("state",s),D(t,e.toString(),c=>({accountId:c?.signedRequest?.accountId||"",publicKey:c?.signedRequest?.publicKey||"",signature:c?.signedRequest?.signature||""}))},h=(t,r,n)=>t.functionCallKey&&t.functionCallKey.contractId===r?n[0].type==="FunctionCall"&&n[0].params.deposit==="0"&&(t.functionCallKey.methods.length===0||t.functionCallKey.methods.includes(n[0].params.methodName)):false,W=async(t,r,{receiverId:n,actions:i})=>{let a=new nearApiJs.keyStores.InMemoryKeyStore,s=index_js.KeyPair.fromString(r.functionCallKey.privateKey);return await a.setKey(t.network.networkId,r.signedAccountId,s),(await(await nearApiJs.connect({...t.network,keyStore:a})).account(r.signedAccountId)).signAndSendTransaction({receiverId:n,actions:i.map(c=>walletUtils.createAction(c))})},Y=(t,r)=>{let n=new URL(`${t.walletUrl}/sign-transaction`),i=JSON.stringify(r,(s,o)=>typeof o=="bigint"?o.toString():o),a=encodeURIComponent(i);return n.searchParams.set("transactions_data",a),n.searchParams.set("callback_url",window.location.origin),n.toString()},z=async(t,r)=>{let n=Y(t,r),i=(await D(t,n,a=>a.transactionHashes))?.split("%2C");if(!i)throw new Error("No transaction hashes received");return Promise.all(i.map(a=>t.provider.txStatus(a,"unused")))},b=async(t,r,{receiverId:n,actions:i})=>{if(i.length===1&&h(r,n,i))try{return await W(t,r,{receiverId:n,actions:i})}catch(s){console.warn("Failed to sign using key pair, falling back to wallet",s);}return (await z(t,[{signerId:r.signedAccountId,receiverId:n,actions:i}]))[0]},P=async(t,r,n)=>z(t,n),K=(t,r,n,i,a)=>async o=>{let e=o.data,c=new URL(o.origin),l=new URL(t.walletUrl);if(c.origin!==l.origin){console.warn("Ignoring message from different origin",c.origin);return}switch(e.status){case "success":i?.close(),r(a(e));break;case "failure":i?.close(),n(new Error(e.errorMessage||"Transaction failed"));break;default:console.warn("Unhandled message status:",e.status);}},D=(t,r,n)=>{let i=window.innerWidth||screen.width,a=window.innerHeight||screen.height,s=(i-y)/2,o=(a-A)/2,e=window.open(r,"BitteWallet",`width=${y},height=${A},top=${o},left=${s}`);if(!e)throw new Error("Popup window blocked. Please allow popups for this site.");return new Promise((c,l)=>{let M=K(t,c,l,e,n);window.addEventListener("message",M);let g=setInterval(()=>{e.closed&&(window.removeEventListener("message",M),clearInterval(g),l(new Error("User closed the window")));},k);})},w=(t,r)=>{let n=E(t,r),i=localStorage.getItem("mintbase-wallet_wallet_auth_key");if(i){let{accountId:s}=JSON.parse(i)||{};localStorage.setItem("bitte:signedAccountId",s),localStorage.removeItem("mintbase-wallet_wallet_auth_key");}let a=u();return {getAccountId:()=>C(a),getPublicKey:()=>p(a),isSignedIn:()=>U(a),signOut:()=>(a=Q(),null),requestSignIn:async s=>{let o=await f(n,a,s);return a=u(),o},requestSignInUrl:s=>{let{url:o,newState:e}=d(n,s);return a=e,o},signMessage:s=>x(n,s),signAndSendTransaction:s=>b(n,a,s),signAndSendTransactions:s=>P(n,a,s)}};var T=(t,r)=>{if(r)return r;if(!t)return "https://wallet.bitte.ai";switch(t.networkId){case "mainnet":return "https://wallet.bitte.ai";case "testnet":return "https://testnet.wallet.bitte.ai";default:return "https://wallet.bitte.ai"}},v=async(t,r)=>({wallet:w(t.walletUrl,r)}),B=async({metadata:t,options:r,store:n,params:i,logger:a})=>{let s=await v(i,r.network),o=async()=>{let e=s.wallet.getAccountId(),c=s.wallet.getPublicKey();return [{accountId:e,publicKey:c?c.toString():""}]};return {async signIn({contractId:e,methodNames:c}){return s.wallet.isSignedIn()||await s.wallet.requestSignIn({contractId:e,methodNames:c}),o()},async signOut(){s.wallet.signOut();},async getAccounts(){return o()},async verifyOwner(){throw new Error(`Method not supported by ${t.name}`)},async signMessage({message:e,nonce:c,recipient:l,callbackUrl:M,state:g}){return a.log("sign message",{message:e}),await s.wallet.signMessage({message:e,nonce:c,recipient:l,callbackUrl:M,state:g})},async signAndSendTransaction({signerId:e,receiverId:c,actions:l}){a.log("signAndSendTransaction",{signerId:e,receiverId:c,actions:l});let{contract:M}=n.getState();if(!s.wallet.isSignedIn()||!M)throw new Error("Wallet not signed in");let g=s.wallet.getAccountId();if(e&&g!==e)throw new Error(`Signed in as ${g}, cannot sign for ${e}`);return s.wallet.signAndSendTransaction({receiverId:c||M.contractId,actions:l})},async signAndSendTransactions({transactions:e}){if(a.log("signAndSendTransactions",{transactions:e}),!s.wallet.isSignedIn())throw new Error("Wallet not signed in");return s.wallet.signAndSendTransactions(e)},buildImportAccountsUrl(){return `${i.walletUrl}/batch-import`}}};function Z({walletUrl:t,iconUrl:r=j,deprecated:n=false}={}){return async i=>({id:"bitte-wallet",type:"injected",metadata:{name:"Bitte Wallet",description:"NEAR wallet to store, buy, send and stake assets for DeFi.",iconUrl:r,deprecated:n,available:true,downloadUrl:T(i.options.network,t)},init:a=>B({...a,params:{walletUrl:T(i.options.network,t)}})})} exports.setupBitteWallet=Z;//# sourceMappingURL=index.js.map //# sourceMappingURL=index.js.map