UNPKG

@reown/appkit-siwx

Version:

The chain agnostic tool to enable authentication for AppKit applications.

68 lines 2.46 kB
import { NetworkUtil } from '@reown/appkit-common'; import { ChainController } from '@reown/appkit-controllers'; import { SIWXMessenger } from '../core/SIWXMessenger.js'; /** * Follow Informal Message template from EIP-4361 * @see https://eips.ethereum.org/EIPS/eip-4361#informal-message-template * * @example * ``` * ${scheme}:// ${domain} wants you to sign in with your Ethereum account: * ${address} * * ${statement} * * URI: ${uri} * Version: ${version} * Chain ID: ${chain-id} * Nonce: ${nonce} * Issued At: ${issued-at} * Expiration Time: ${expiration-time} * Not Before: ${not-before} * Request ID: ${request-id} * Resources: * - ${resources[0]} * - ${resources[1]} * ... * - ${resources[n]} * ``` */ export class InformalMessenger extends SIWXMessenger { constructor({ clearChainIdNamespace, ...params }) { super(params); this.version = '1'; this.clearChainIdNamespace = clearChainIdNamespace || false; } /** * Get the blockchain name for a given chain ID * @param chainId The chain ID to get the blockchain name for * @returns The blockchain name */ getNetworkName(chainId) { const requestedNetworks = ChainController.getAllRequestedCaipNetworks(); return NetworkUtil.getNetworkNameByCaipNetworkId(requestedNetworks, chainId); } stringify(params) { const chainId = this.clearChainIdNamespace ? params.chainId.split(':')[1] : params.chainId; const networkName = this.getNetworkName(params.chainId); return [ `${params.domain} wants you to sign in with your ${networkName} account:`, params.accountAddress, params.statement ? `\n${params.statement}\n` : '', `URI: ${params.uri}`, `Version: ${params.version}`, `Chain ID: ${chainId}`, `Nonce: ${params.nonce}`, params.issuedAt && `Issued At: ${params.issuedAt}`, params.expirationTime && `Expiration Time: ${params.expirationTime}`, params.notBefore && `Not Before: ${params.notBefore}`, params.requestId && `Request ID: ${params.requestId}`, params.resources?.length && params.resources.reduce((acc, resource) => `${acc}\n- ${resource}`, 'Resources:') ] .filter(line => typeof line === 'string') .join('\n') .trim(); } } //# sourceMappingURL=InformalMessenger.js.map