transmission/client.ts

export * from './shared';
import TransmissionBase from './base';

// client transmission interface, this just redirects
// all transmission requests to the puddle server.

export interface TransmissionSerialised {
  sessionId: string
  requestTag?: number
}

export default class TransmissionClient extends TransmissionBase {
  constructor() {
    super('/transmission')
  }

  /* eslint-disable-next-line @typescript-eslint/no-explicit-any */
  fetch(url: string, body: any) {
    return window.fetch(url, body);
  }

  /**
   * Convert this transmission instance to a serialisable object
   * that can be passed to fromSerialise to reconstruct you're
   * current transmission session.
   */
  serialise = (): TransmissionSerialised => {
    return {
      sessionId: this.sessionId,
      requestTag: this.requestTag,
    }
  }

  /**
   * Construct a new transmission instance from a serialised
   * property struct.
   */
  static fromSerialised(o: TransmissionSerialised) {
    const t = new TransmissionClient();
    t.sessionId = o.sessionId
    t.requestTag = o.requestTag
    return t
  }
}