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