@soulbind/sdk
Version:
Soulbind SDK
2 lines (1 loc) • 5.14 kB
JavaScript
import{ConnectExtension as e}from"@magic-ext/connect";import t from"isomorphic-unfetch";import{Magic as s}from"magic-sdk";import i from"crypto-es";import{ethers as r}from"ethers";function n(){return n=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var s=arguments[t];for(var i in s)Object.prototype.hasOwnProperty.call(s,i)&&(e[i]=s[i])}return e},n.apply(this,arguments)}var a,o,d,c;!function(e){e[e.IssuerOnly=0]="IssuerOnly",e[e.OwnerOnly=1]="OwnerOnly",e[e.Both=2]="Both",e[e.Neither=3]="Neither"}(a||(a={})),function(e){e[e.issued=0]="issued",e[e.claimed=1]="claimed",e[e.emailed=2]="emailed",e[e.burned=3]="burned"}(o||(o={})),function(e){e.entityExists="Entity already exists",e.entityDoesntExist="Entity does NOT exists",e.invalidRequest="Invalid request",e.unauthorized="Unauthorized"}(d||(d={})),function(e){e.delete="DELETE",e.get="GET",e.patch="PATCH",e.post="POST"}(c||(c={}));class u{constructor(e){this.apiKey=void 0,this.baseUrl=void 0,this.apiKey=e.apiKey,this.baseUrl=e.baseUrl||(e.testnet?"https://api-testnet.soulbind.app/api":"https://api.soulbind.app/api")}async request(e,s){const i=`${this.baseUrl}${e}`,r=n({},s,{headers:{"Content-Type":"application/json","soulbind-api-key":this.apiKey}});return t(i,r).then(e=>{if(e.ok)return e.json();throw new Error(e.statusText)})}async startupMagic(){const i=`${this.baseUrl}/v1/contract/network`,r=n({},{method:c.get},{headers:{"Content-Type":"application/json","soulbind-api-key":this.apiKey}});return t(i,r).then(async function(t){if(t.ok){const i=await t.json();return new s(i.success.magicKey,{extensions:[new e],network:i.success.network})}throw new Error(t.statusText)})}}const h="/v1/contract";class m extends u{getAccountTokens(){return this.request(`${h}/tenant/tokens`,{method:c.get})}getAccountTokensFiltered(e,t,s,i){return this.request(`${h}/created-tokens/${e}/${t}?message=${encodeURIComponent(s)}${i?"&tenantId="+i:""}`,{method:c.get})}getCreatedToken(e,t){return this.request(`${h}/created-token/${e}`,{method:c.post,body:t?JSON.stringify({tokenId:t}):null})}getCreatedTokenAsAdmin(e,t,s,i){return this.request(`${h}/created-token/${e}`,{method:c.post,body:JSON.stringify({address:t,signature:s,message:i})})}getTokens(e,t){let s;return t&&(s=Object.fromEntries(Object.entries(t).map(([e,t])=>t&&("organization"===e||"canClaim"===e?[e,!0]:[])))),this.request(`${h}/tokens/${e}${s?"?"+new URLSearchParams(s).toString():""}`,{method:c.get})}validateClaimAuthAddress(e,t){return this.request(`${h}/issued/${e}/${t}`,{method:c.get})}validateClaimAuthCode(e,t){return this.request(`${h}/issued-code/${e}/${t}`,{method:c.get})}validateClaimedToken(e,t,s){return this.request(`${h}/claimed/${e}/${t}${s?"?bound="+s:""}`,{method:c.get})}async addToIssued(e,t,s){return this.request(`${h}/add-issued-to`,{method:c.patch,body:JSON.stringify({eventId:e,addresses:t.addresses,codeCount:t.codeCount,signature:s.signature,message:s.message})})}async bind(e,t,s,i,r){return this.request(`${h}/bind`,{method:c.patch,body:JSON.stringify({address:s,eventId:e,tokenId:t,signature:i,message:r})})}async burn(e,t,s,i,r){return this.request(`${h}/burn`,{method:c.patch,body:JSON.stringify({address:s,eventId:e,tokenId:t,signature:i,message:r})})}async claim(e,t,s,i,r){const n={signature:s,id:e,address:t,message:i};return r&&(n.uniqueCode=r),this.request(`${h}/claim`,{method:c.patch,body:JSON.stringify(n)})}async drop(e,t,s){return this.request(`${h}/drop`,{method:c.patch,body:JSON.stringify({eventId:e,dropTo:t,signature:s.signature,message:s.message})})}async increaseTokenLimit(e,t,s){return this.request(`${h}/increase-token-limit`,{method:c.patch,body:JSON.stringify({eventId:e,limitIncrease:t,signature:s.signature,message:s.message})})}async update(e){return this.request(`${h}/update`,{method:c.patch,body:JSON.stringify(e)})}getSignatureMessage(e){const t=i.SHA256(i.lib.WordArray.random(16)).toString(i.enc.Base64),s=`Signing confirms that you own this address:\n${e}\n~~Security~~\nTimestamp: ${Date.now()}\nNonce: ${r.utils.keccak256(r.utils.toUtf8Bytes(t))}`;return`${s}\nHash: ${r.utils.keccak256(r.utils.toUtf8Bytes(s))}`}}class g extends u{}var l;l=g,[m,class extends m{constructor(...e){super(...e),this.emailWalletAddress=void 0,this.emailProvider=void 0,this.emailSigner=void 0,this.magic=void 0}async emailConnect(){return this.magic||(this.magic=await this.startupMagic()),this.emailProvider=new r.providers.Web3Provider(this.magic.rpcProvider),this.emailSigner=this.emailProvider.getSigner(),this.emailWalletAddress=await this.emailSigner.getAddress(),this.emailWalletAddress}async emailDisconnect(){return this.magic||(this.magic=await this.startupMagic()),this.emailWalletAddress=void 0,await this.magic.connect.disconnect()}async getEmailSignature(e){if(this.emailSigner)return await this.emailSigner.signMessage(e)}getEmailWalletAddress(){return this.emailWalletAddress}}].forEach(e=>{Object.getOwnPropertyNames(e.prototype).forEach(t=>{Object.defineProperty(l.prototype,t,Object.getOwnPropertyDescriptor(e.prototype,t))})});export{a as BurnAuth,o as ClaimStatus,d as ErrorCode,c as RequestMethod,g as default};