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