UNPKG

@randombits/use-siwe

Version:

React hook and API endpoints that provide Sign In With Ethereum support

2 lines 2.33 kB
var d=Object.defineProperty;var h=Object.getOwnPropertyDescriptor;var w=Object.getOwnPropertyNames;var I=Object.prototype.hasOwnProperty;var b=(e,s)=>{for(var t in s)d(e,t,{get:s[t],enumerable:!0})},v=(e,s,t,o)=>{if(s&&typeof s=="object"||typeof s=="function")for(let i of w(s))!I.call(e,i)&&i!==t&&d(e,i,{get:()=>s[i],enumerable:!(o=h(s,i))||o.enumerable});return e};var A=e=>v(d({},"__esModule",{value:!0}),e);var T={};b(T,{siweApi:()=>N});module.exports=A(T);var r=require("siwe"),g=require("zod-validation-error");var j=require("iron-session"),n=require("zod"),O=n.z.object({domain:n.z.string(),address:n.z.string(),statement:n.z.string().optional(),uri:n.z.string(),version:n.z.string(),chainId:n.z.number(),nonce:n.z.string(),issuedAt:n.z.string().optional(),expirationTime:n.z.string().optional(),notBefore:n.z.string().optional(),requestId:n.z.string().optional(),resources:n.z.array(n.z.string()).optional()}),p=n.z.object({message:O,signature:n.z.string()});var f=async(e,s)=>e.session.address?s.json({authenticated:!0,address:e.session.address}):(e.session.nonce||(e.session.nonce=(0,r.generateNonce)(),await e.session.save()),s.json({authenticated:!1,nonce:e.session.nonce})),m=async(e,s)=>{let{nonce:t}=e.session;if(!t)return s.status(400).send("Bad Request");let o=p.safeParse(e.body);if(!o.success){let x=(0,g.fromZodError)(o.error);return s.status(400).send(x.message)}let{message:i,signature:y}=o.data,{success:u,error:c,data:S}=await new r.SiweMessage(i).verify({signature:y,nonce:t});return!u&&c?s.status(400).send(c.type):u?(e.session.nonce=void 0,e.session.address=S.address,await e.session.save(),s.send("OK")):s.status(500).send("Unknown Error")},R=async(e,s)=>e.session.address?(e.session.nonce=(0,r.generateNonce)(),e.session.address=void 0,await e.session.save(),s.send("OK")):s.status(400).send("Bad Request"),a=(e,s)=>s.status(403).send("Method Not Allowed"),l=(e,s)=>s.status(404).send("Not Found");var N=()=>async(e,s)=>{let{route:t}=e.query;t instanceof Array&&(t=t[0]);let{method:o}=e;switch(t){case void 0:switch(o){case"GET":return f(e,s);default:return a(e,s)}case"signin":switch(o){case"POST":return m(e,s);default:return a(e,s)}case"signout":switch(o){case"POST":return R(e,s);default:return a(e,s)}default:return l(e,s)}};0&&(module.exports={siweApi}); //# sourceMappingURL=index.cjs.map