UNPKG

@aptos-labs/siwa

Version:
9 lines (7 loc) 8.65 kB
import{AccountAddress as V,AccountPublicKey as B}from"@aptos-labs/ts-sdk";import{sha3_256 as O}from"@noble/hashes/sha3";import{Aptos as $,AptosConfig as z,Network as D}from"@aptos-labs/ts-sdk";function h(e,t,i){if(e===t)return!0;let n=e.length;if(n!==t.length)return!1;for(let s=0;s<n;s++)if(!i?.includes(e[s])&&e[s]!==t[s])return!1;return!0}function S(e){let t="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",i="";for(let n=0;n<e.byteLength;n+=3){let s=0,a=0;for(let u=0;u<3&&n+u<e.byteLength;u++)s=s<<8|e[n+u],a+=8;for(let u=0;u<4;u++)a>=6?(i+=t[s>>a-6&63],a-=6):a>0&&(i+=t[s<<6-a&63],a=0)}return i}async function _(e,t){try{return await e()}catch{return t}}var c=new $(new z({network:D.MAINNET}));import{Hex as R}from"@aptos-labs/ts-sdk";var M=e=>typeof e=="string"?R.isValid(e).valid?e:new TextEncoder().encode(e):e;async function A(e,t={}){return e.publicKey.verifySignatureAsync({aptosConfig:t.aptos?.config??c.config,message:M(e.signingMessage),signature:e.signature})}function N(e){let t=`${e.domain} wants you to sign in with your Aptos account: `;t+=`${e.address}`,e.statement&&(t+=` ${e.statement}`);let i=[];if(e.uri&&i.push(`URI: ${e.uri}`),e.version&&i.push(`Version: ${e.version}`),e.nonce&&i.push(`Nonce: ${e.nonce}`),e.issuedAt&&i.push(`Issued At: ${e.issuedAt}`),e.expirationTime&&i.push(`Expiration Time: ${e.expirationTime}`),e.notBefore&&i.push(`Not Before: ${e.notBefore}`),e.requestId&&i.push(`Request ID: ${e.requestId}`),e.chainId&&i.push(`Chain ID: ${e.chainId}`),e.resources){i.push("Resources:");for(let n of e.resources)i.push(`- ${n}`)}return i.length&&(t+=` ${i.join(` `)}`),t}function U(e){let i=O("SIGN_IN_WITH_APTOS::");return new Uint8Array([...i,...new TextEncoder().encode(e)])}var H="(?<domain>[^\\n]+?) wants you to sign in with your Aptos account:\\n",q="(?<address>[^\\n]+)(?:\\n|$)",F="(?:\\n(?<statement>[\\S\\s]*?)(?:\\n|$))??",W="(?:\\nURI: (?<uri>[^\\n]+))?",C="(?:\\nVersion: (?<version>[^\\n]+))?",j="(?:\\nNonce: (?<nonce>[^\\n]+))?",L="(?:\\nIssued At: (?<issuedAt>[^\\n]+))?",G="(?:\\nExpiration Time: (?<expirationTime>[^\\n]+))?",Q="(?:\\nNot Before: (?<notBefore>[^\\n]+))?",X="(?:\\nRequest ID: (?<requestId>[^\\n]+))?",Z="(?:\\nChain ID: (?<chainId>[^\\n]+))?",J="(?:\\nResources:(?<resources>(?:\\n- [^\\n]+)*))?",Y=`${W}${C}${j}${L}${G}${Q}${X}${Z}${J}`,ee=new RegExp(`^${H}${q}${F}${Y}\\n*$`);function le(e){let t=ee.exec(e);if(!t)return{valid:!1,errors:["invalid_message"]};let i=t.groups;if(!i)return{valid:!1,errors:["invalid_message"]};let n=[];return(!i.domain||i.domain==="undefined")&&n.push("message_domain_missing"),(!i.address||i.address==="undefined")&&n.push("message_address_missing"),(!i.version||i.version==="undefined")&&n.push("message_version_missing"),(!i.chainId||i.chainId==="undefined")&&n.push("message_chain_id_missing"),n.length?{valid:!1,errors:n}:{valid:!0,data:{domain:i.domain,address:i.address,statement:i.statement,uri:i.uri,version:i.version,nonce:i.nonce,chainId:i.chainId,issuedAt:i.issuedAt,expirationTime:i.expirationTime,notBefore:i.notBefore,requestId:i.requestId,resources:i.resources?.split(` - `).slice(1)}}}async function pe(e,t={}){let{expected:i,input:n,publicKey:s}=e;if(!(s instanceof B))return{valid:!1,errors:["invalid_public_key"]};let a=n.address,u=await _(async()=>(await(t.aptos??c).getAccountInfo({accountAddress:a})).authentication_key,a),k=s.authKey().derivedAddress();if(!V.from(u,{maxMissingChars:63}).equals(k))return{valid:!1,errors:["invalid_auth_key"]};let r=[];i.domain&&i.domain!==n.domain&&r.push("message_domain_mismatch"),i.address&&i.address!==n.address&&r.push("message_address_mismatch"),i.statement!==n.statement&&r.push("message_statement_mismatch"),i.uri&&i.uri!==n.uri&&r.push("message_uri_mismatch"),i.version&&i.version!==n.version&&r.push("message_version_mismatch"),i.chainId&&i.chainId!==n.chainId&&r.push("message_chain_id_mismatch"),i.nonce!==n.nonce&&r.push("message_nonce_mismatch"),i.issuedAt!==n.issuedAt&&r.push("message_issued_at_mismatch"),i.expirationTime!==n.expirationTime&&r.push("message_expiration_time_mismatch"),i.notBefore!==n.notBefore&&r.push("message_not_before_mismatch"),i.requestId!==n.requestId&&r.push("message_request_id_mismatch"),i.resources?n.resources?h(i.resources,n.resources,t?.excludedResources)||r.push("message_resources_mismatch"):r.push("message_resources_missing"):n.resources&&r.push("message_resources_unexpected");let I=new Date;return i.expirationTime&&I.getTime()>=new Date(i.expirationTime).getTime()&&r.push("message_expired"),i.notBefore&&I.getTime()<new Date(i.notBefore).getTime()&&r.push("message_not_yet_valid"),r.length?{valid:!1,errors:r}:{valid:!0}}async function ge(e,t={}){let i=N(e.input),n=U(i);return await A({publicKey:e.publicKey,signature:e.signature,signingMessage:n},t)?{valid:!0}:{valid:!1,errors:["invalid_signature"]}}import{AnyPublicKey as g,AnySignature as x,Deserializer as b,Ed25519PublicKey as m,Ed25519Signature as p,Hex as v,MultiEd25519PublicKey as f,MultiEd25519Signature as w,MultiKey as y,MultiKeySignature as E,SigningScheme as o}from"@aptos-labs/ts-sdk";var l=async()=>{try{return await import("@aptos-labs/derived-wallet-solana")}catch{return null}},d=async()=>{try{return await import("@aptos-labs/derived-wallet-ethereum")}catch{return null}};var K=e=>e==="ed25519"||e==="multi_ed25519"||e==="single_key"||e==="multi_key"||e==="solana_derived"||e==="ethereum_derived";async function Se(e){if(typeof e=="object"){if(m.isInstance(e))return"ed25519";if(g.isInstance(e))return"single_key";if(y.isInstance(e))return"multi_key";if(e instanceof f)return"multi_ed25519";if((await l())?.SolanaDerivedPublicKey.isInstance(e))return"solana_derived";if((await d())?.EIP1193DerivedPublicKey.isInstance(e))return"ethereum_derived";throw new Error(`Unknown public key type for instance: ${e}`)}switch(e){case o.Ed25519:return"ed25519";case o.MultiEd25519:return"multi_ed25519";case o.SingleKey:return"single_key";case o.MultiKey:return"multi_key";default:throw new Error(`Unknown public key type for signing scheme: ${e}`)}}async function T(e,t){let i=new b(v.fromHexInput(t).toUint8Array());if(typeof e!="string")switch(e){case o.Ed25519:return m.deserialize(i);case o.MultiEd25519:return f.deserialize(i);case o.SingleKey:return g.deserialize(i);case o.MultiKey:return y.deserialize(i);default:throw new Error(`Unknown public key type for signing scheme: ${e}`)}switch(e){case"ed25519":return m.deserialize(i);case"multi_ed25519":return f.deserialize(i);case"single_key":return g.deserialize(i);case"multi_key":return y.deserialize(i);case"solana_derived":{let n=await l();if(!n)throw new Error("Solana derived public key is not supported");return n.SolanaDerivedPublicKey.deserialize(i)}case"ethereum_derived":{let n=await d();if(!n)throw new Error("Ethereum derived public key is not supported");return n.EIP1193DerivedPublicKey.deserialize(i)}default:throw new Error(`Unknown public key type: ${e}`)}}async function P(e,t){let i=new b(v.fromHexInput(t).toUint8Array());if(typeof e!="string")switch(e){case o.Ed25519:return p.deserialize(i);case o.MultiEd25519:return w.deserialize(i);case o.SingleKey:return x.deserialize(i);case o.MultiKey:return E.deserialize(i);default:throw new Error(`Unknown signature type for signing scheme: ${e}`)}switch(e){case"ed25519":return p.deserialize(i);case"multi_ed25519":return w.deserialize(i);case"single_key":return x.deserialize(i);case"multi_key":return E.deserialize(i);case"solana_derived":return p.deserialize(i);case"ethereum_derived":{let n=await d();if(!n)throw new Error("Ethereum derived signature is not supported");return n.EIP1193PersonalSignature.deserialize(i)}default:throw new Error(`Unknown signature type: ${e}`)}}function _e(){let e=new Uint8Array(12);return crypto.getRandomValues(e),S(e)}var ie="3",we=e=>({version:ie,type:e.type,signature:e.signature.bcsToHex().toString(),input:e.input,publicKey:e.account.publicKey.bcsToHex().toString()}),Ee=async e=>{let{version:t}=e;if(t==="3"){if(!K(e.type))throw new Error(`Unexpected public key scheme: ${e.type}`);return{version:"3",type:e.type,signature:await P(e.type,e.signature),input:e.input,publicKey:await T(e.type,e.publicKey)}}throw new Error(`Unexpected serialization version: ${t}`)};export{ie as CURRENT_SERIALIZATION_VERSION,N as createSignInMessage,U as createSignInSigningMessage,Ee as deserializeSignInOutput,T as deserializeSignInPublicKey,P as deserializeSignInSignature,_e as generateNonce,Se as getSignInPublicKeyScheme,K as isValidPublicKeyScheme,le as parseSignInMessage,we as serializeSignInOutput,pe as verifySignInMessage,ge as verifySignInSignature}; //# sourceMappingURL=index.mjs.map