UNPKG

@aptos-labs/siwa

Version:
10 lines (7 loc) 5.43 kB
import{AccountAddress as q,AccountPublicKey as W,Hex as F}from"@aptos-labs/ts-sdk";import{sha3_256 as C}from"@noble/hashes/sha3";import{AccountAddress as te,AccountPublicKey as ne}from"@aptos-labs/ts-sdk";import{sha3_256 as se}from"@noble/hashes/sha3";import{Aptos as w,AptosConfig as E,Network as K}from"@aptos-labs/ts-sdk";var s=new w(new E({network:K.MAINNET}));import{Hex as T}from"@aptos-labs/ts-sdk";var P=e=>typeof e=="string"?T.isValid(e).valid?e:new TextEncoder().encode(e):e;async function u(e,t={}){return e.publicKey.verifySignatureAsync({aptosConfig:t.aptos?.config??s.config,message:P(e.signingMessage),signature:e.signature})}function c(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}var k="(?<domain>[^\\n]+?) wants you to sign in with your Aptos account:\\n",$="(?<address>[^\\n]+)(?:\\n|$)",M="(?:\\n(?<statement>[\\S\\s]*?)(?:\\n|$))??",V="(?:\\nURI: (?<uri>[^\\n]+))?",z="(?:\\nVersion: (?<version>[^\\n]+))?",D="(?:\\nNonce: (?<nonce>[^\\n]+))?",R="(?:\\nIssued At: (?<issuedAt>[^\\n]+))?",B="(?:\\nExpiration Time: (?<expirationTime>[^\\n]+))?",O="(?:\\nNot Before: (?<notBefore>[^\\n]+))?",N="(?:\\nRequest ID: (?<requestId>[^\\n]+))?",U="(?:\\nChain ID: (?<chainId>[^\\n]+))?",H="(?:\\nResources:(?<resources>(?:\\n- [^\\n]+)*))?",L=`${V}${z}${D}${R}${B}${O}${N}${U}${H}`,ae=new RegExp(`^${k}${$}${M}${L}\\n*$`);var j=e=>{let t=c(e);return t+=` Hash: ${F.fromHexInput(C(t)).toString()}`,t},pe=async(e,t,i={})=>{let n=j(e);if(!t.message.includes(n))return{valid:!1,errors:["invalid_full_message"]};if(!(t.publicKey instanceof W))return{valid:!1,errors:["invalid_public_key"]};let v=t.publicKey.authKey().derivedAddress(),b=await(i.aptos??s).lookupOriginalAccountAddress({authenticationKey:v});return q.from(e.address,{maxMissingChars:63}).equals(b)?await u({publicKey:t.publicKey,signature:t.signature,signingMessage:t.message},{aptos:i.aptos})?{valid:!0,data:e}:{valid:!1,errors:["invalid_signature"]}:{valid:!1,errors:["invalid_auth_key"]}};import{AnyPublicKey as l,AnySignature as g,Deserializer as h,Ed25519PublicKey as p,Ed25519Signature as o,Hex as S,MultiEd25519PublicKey as m,MultiEd25519Signature as f,MultiKey as y,MultiKeySignature as I,SigningScheme as r}from"@aptos-labs/ts-sdk";var d=async()=>{try{return await import("@aptos-labs/derived-wallet-solana")}catch{return null}},a=async()=>{try{return await import("@aptos-labs/derived-wallet-ethereum")}catch{return null}};var _=e=>e==="ed25519"||e==="multi_ed25519"||e==="single_key"||e==="multi_key"||e==="solana_derived"||e==="ethereum_derived";async function A(e,t){let i=new h(S.fromHexInput(t).toUint8Array());if(typeof e!="string")switch(e){case r.Ed25519:return p.deserialize(i);case r.MultiEd25519:return m.deserialize(i);case r.SingleKey:return l.deserialize(i);case r.MultiKey:return y.deserialize(i);default:throw new Error(`Unknown public key type for signing scheme: ${e}`)}switch(e){case"ed25519":return p.deserialize(i);case"multi_ed25519":return m.deserialize(i);case"single_key":return l.deserialize(i);case"multi_key":return y.deserialize(i);case"solana_derived":{let n=await d();if(!n)throw new Error("Solana derived public key is not supported");return n.SolanaDerivedPublicKey.deserialize(i)}case"ethereum_derived":{let n=await a();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 x(e,t){let i=new h(S.fromHexInput(t).toUint8Array());if(typeof e!="string")switch(e){case r.Ed25519:return o.deserialize(i);case r.MultiEd25519:return f.deserialize(i);case r.SingleKey:return g.deserialize(i);case r.MultiKey:return I.deserialize(i);default:throw new Error(`Unknown signature type for signing scheme: ${e}`)}switch(e){case"ed25519":return o.deserialize(i);case"multi_ed25519":return f.deserialize(i);case"single_key":return g.deserialize(i);case"multi_key":return I.deserialize(i);case"solana_derived":return o.deserialize(i);case"ethereum_derived":{let n=await a();if(!n)throw new Error("Ethereum derived signature is not supported");return n.EIP1193PersonalSignature.deserialize(i)}default:throw new Error(`Unknown signature type: ${e}`)}}var G="2",_e=e=>({version:G,type:e.type,signature:e.signature.bcsToHex().toString(),message:e.message,publicKey:e.account.publicKey.bcsToHex().toString()}),Ae=async e=>{let{version:t}=e;if(t==="2"){if(!_(e.type))throw new Error(`Unexpected public key scheme: ${e.type}`);return{version:"2",type:e.type,signature:await x(e.type,e.signature),publicKey:await A(e.type,e.publicKey),message:e.message}}throw new Error(`Unexpected serialization version: ${t}`)};export{G as CURRENT_LEGACY_SERIALIZATION_VERSION,j as createLegacySignInMessage,Ae as deserializeLegacySignInOutput,_e as serializeLegacySignInOutput,pe as verifyLegacySignIn}; //# sourceMappingURL=index.mjs.map