/** * This interface represents the SIWX configuration plugin, which is used to create and manage SIWX messages and sessions. * You may use it to create a custom implementation following your needs, but watch close for the methods requirements. */export interface SIWXConfig { /** * This method will be called to create a new message to be signed by the user. * * Constraints: * - The message MUST be unique and contain all the necessary information to verify the user's identity. * - SIWXMessage.toString() method MUST be implemented to return the message string. * * @param input SIWXMessage.Input * @returns SIWXMessage */ createMessage: (input: SIWXMessage.Input) => Promise<SIWXMessage> /** * This method will be called to store a new single session. * * Constraints: * - This method MUST verify if the session is valid and store it in the storage successfully. * * @param session SIWXSession */ addSession: (session: SIWXSession) => Promise<void> /** * This method will be called to revoke all the sessions stored for a specific chain and address. * * Constraints: * - This method MUST delete all the sessions stored for the specific chain and address successfully. * * @param chainId CaipNetworkId * @param address string */ revokeSession: (chainId: CaipNetworkId, address: string) => Promise<void> /** * This method will be called to replace all the sessions in the storage with the new ones. * * Constraints: * - This method MUST verify all the sessions before storing them in the storage; * - This method MUST replace all the sessions in the storage with the new ones succesfully otherwise it MUST throw an error. * * @param sessions SIWXSession[] */ setSessions: (sessions: SIWXSession[]) => Promise<void> /** * This method will be called to get all the sessions stored for a specific chain and address. * * Constraints: * - This method MUST return only sessions that are verified and valid; * - This method MUST NOT return expired sessions. * * @param chainId CaipNetworkId * @param address string * @returns */ getSessions: (chainId: CaipNetworkId, address: string) => Promise<SIWXSession[]> /** * This method determines whether the wallet stays connected when the user denies the signature request. * * @returns {boolean} */ getRequired?: () => boolean /** * This method determines whether the session should be cleared when the user disconnects. * * @default true * @returns {boolean} */ signOutOnDisconnect?: boolean}/** * This interface represents a SIWX session, which is used to store the user's identity information. */export interface SIWXSession { data: SIWXMessage.Data message: string signature: string cacao?: Cacao}/** * This interface represents a SIWX message, which is used to create a message to be signed by the user. * This must contain the necessary information to verify the user's identity and how to generate the string message. */export interface SIWXMessage extends SIWXMessage.Data, SIWXMessage.Methods {}export namespace SIWXMessage { /** * This interface represents the SIWX message data, which is used to create a message to be signed by the user. */ export interface Data extends Input, Metadata, Identifier {} /** * This interface represents the SIWX message input. * Here must contain what is different for each user of the application. */ export interface Input { accountAddress: string chainId: CaipNetworkId notBefore?: Timestamp } /** * This interface represents the SIWX message metadata. * Here must contain the main data related to the app. */ export interface Metadata { domain: string uri: string version: string nonce: string statement?: string resources?: string[] } /** * This interface represents the SIWX message identifier. * Here must contain the request id and the timestamps. */ export interface Identifier { requestId?: string issuedAt?: Timestamp expirationTime?: Timestamp } /** * This interface represents the SIWX message methods. * Here must contain the method to generate the message string and any other method performed by the SIWX message. */ export interface Methods { toString: () => string } /** * The timestamp is a UTC string representing the time in ISO 8601 format. */ export type Timestamp = string}/** * The Cacao interface is a reference of CAIP-74 and represents a chain-agnostic Object Capability (OCAP). * https://chainagnostic.org/CAIPs/caip-74 */export interface Cacao { h: Cacao.Header p: Cacao.Payload s: { t: 'eip191' | 'eip1271' s: string m?: string }}export namespace Cacao { export interface Header { t: 'caip122' } export interface Payload { domain: string aud: string nonce: string iss: string version?: string iat?: string nbf?: string exp?: string statement?: string requestId?: string resources?: string[] type?: string }}