class Web3Wallet {
  
  public abstract init(params: { core: CoreClient }): Promise<void>;
  
  
  public abstract pair(params: { uri: string }): Promise<void>;
  
   
  public abstract approveSession(params: {
    id: number;
    namespaces: Map<string, SessionNamespace>;
    relayProtocol?: string;
  }): Promise<Session>;
  
  public abstract rejectSession(params: {
    proposerPublicKey: string;
    reason: Reason;
  }): Promise<void>;
  
  
  public abstract updateSession(params: {
    topic: string;
    namespaces: Map<string, SessionNamespace>;
  }): Promise<void>;
  
  public abstract extendSession(params: {
    topic: string;
  }): Promise<void>;
  
  public abstract respondSessionRequest(params: {
    topic: string;
    response: JsonRpcResponse;
  }): Promise<void>;
  
  
  public abstract respondAuthRequest(params: RespondParams, iss: string): Promise<boolean>;
  
  
  public abstract emitSessionEvent(params: {
    topic: string;
    event: SessionEvent;
    chainId: string;
  }): Promise<void>;
  
 
  public abstract disconnectSession(params: {
    topic: string;
    reason: Reason;
  }): Promise<void>;
  
  
  public abstract getActiveSessions(): Promise<Record<string, Session>>;
  
  
  public abstract formatMessage(payload: PayloadParams, iss: string): Promise<string>;
  
  
  public abstract getPendingSessionProposals(): Promise<Record<number, SessionProposal>>;
  
  
  public abstract getPendingSessionRequests(): Promise<Record<number, SessionRequest>>;
  
  
  public abstract getPendingAuthRequests(): Promise<Record<number, PendingRequest>>;
  
  
  public abstract registerDeviceToken(token: string, enableEncrypted?: boolean = false): Promise<void>;
  
  
  public abstract on("session_proposal", (sessionProposal: SessionProposal, verifyContext: VerifyContext) => {}): void;
  
  public abstract on("session_request", (sessionRequest: SessionRequest, verifyContext: VerifyContext) => {}): void;
  
  public abstract on("session_delete", (sessionDelete: { id: number, topic: string }) => {}): void;
  
  public abstract on("auth_request", (id: number, pairingTopic: String, payload: PayloadParams, verifyContext: VerifyContext) => {}): void;
}