UNPKG

@supabase/auth-js

Version:
66 lines 3.29 kB
"use strict"; // types and functions copied over from viem so this library doesn't depend on it Object.defineProperty(exports, "__esModule", { value: true }); exports.getAddress = getAddress; exports.fromHex = fromHex; exports.toHex = toHex; exports.createSiweMessage = createSiweMessage; function getAddress(address) { if (!/^0x[a-fA-F0-9]{40}$/.test(address)) { throw new Error(`@supabase/auth-js: Address "${address}" is invalid.`); } return address.toLowerCase(); } function fromHex(hex) { return parseInt(hex, 16); } function toHex(value) { const bytes = new TextEncoder().encode(value); const hex = Array.from(bytes, (byte) => byte.toString(16).padStart(2, '0')).join(''); return ('0x' + hex); } /** * Creates EIP-4361 formatted message. */ function createSiweMessage(parameters) { var _a; const { chainId, domain, expirationTime, issuedAt = new Date(), nonce, notBefore, requestId, resources, scheme, uri, version, } = parameters; // Validate fields { if (!Number.isInteger(chainId)) throw new Error(`@supabase/auth-js: Invalid SIWE message field "chainId". Chain ID must be a EIP-155 chain ID. Provided value: ${chainId}`); if (!domain) throw new Error(`@supabase/auth-js: Invalid SIWE message field "domain". Domain must be provided.`); if (nonce && nonce.length < 8) throw new Error(`@supabase/auth-js: Invalid SIWE message field "nonce". Nonce must be at least 8 characters. Provided value: ${nonce}`); if (!uri) throw new Error(`@supabase/auth-js: Invalid SIWE message field "uri". URI must be provided.`); if (version !== '1') throw new Error(`@supabase/auth-js: Invalid SIWE message field "version". Version must be '1'. Provided value: ${version}`); if ((_a = parameters.statement) === null || _a === void 0 ? void 0 : _a.includes('\n')) throw new Error(`@supabase/auth-js: Invalid SIWE message field "statement". Statement must not include '\\n'. Provided value: ${parameters.statement}`); } // Construct message const address = getAddress(parameters.address); const origin = scheme ? `${scheme}://${domain}` : domain; const statement = parameters.statement ? `${parameters.statement}\n` : ''; const prefix = `${origin} wants you to sign in with your Ethereum account:\n${address}\n\n${statement}`; let suffix = `URI: ${uri}\nVersion: ${version}\nChain ID: ${chainId}${nonce ? `\nNonce: ${nonce}` : ''}\nIssued At: ${issuedAt.toISOString()}`; if (expirationTime) suffix += `\nExpiration Time: ${expirationTime.toISOString()}`; if (notBefore) suffix += `\nNot Before: ${notBefore.toISOString()}`; if (requestId) suffix += `\nRequest ID: ${requestId}`; if (resources) { let content = '\nResources:'; for (const resource of resources) { if (!resource || typeof resource !== 'string') throw new Error(`@supabase/auth-js: Invalid SIWE message field "resources". Every resource must be a valid string. Provided value: ${resource}`); content += `\n- ${resource}`; } suffix += content; } return `${prefix}\n${suffix}`; } //# sourceMappingURL=ethereum.js.map