abstract class PairingClient {
  
  
  public abstract init(params: { metadata: Metadata}): Promise<void>;
  
  public abstract pair(params: { uri: string }): Promise<Sequence>;
  
  public abstract create(): Promise<{ uri: string }>;
  
  public abstract activate(params: { topic: string }): Promise<void>;
  
  public abstract register(params: { methods: string[], type: ProtocolType }): Promise<void>;
  
  public abstract updateExpiry(params: { topic: string, expiry: number }): Promise<void>;
  
  public abstract updateMetadata(params: { topic: string, metadata: Metadata }): Promise<void>;
  
  public abstract getPairings(): Promise<Array<Pairing>>;
  
  public abstract ping(params: { topic: string; }): Promise<void>;
  
  public abstract disconnect(params: { topic: string }): Promise<void>;
  
  
  public abstract onRequest(${registered_request}, (topic: string, request: Request) => {}): void;