@reown/appkit-siwx
Version:
The chain agnostic tool to enable authentication for AppKit applications.
68 lines • 2.46 kB
JavaScript
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