{"version":3,"file":"signalk-client-angular.mjs","sources":["../../../projects/signalk-client-angular/src/lib/uuid.ts","../../../projects/signalk-client-angular/src/lib/utils.ts","../../../projects/signalk-client-angular/src/lib/apps-api.ts","../../../projects/signalk-client-angular/src/lib/http-api.ts","../../../projects/signalk-client-angular/src/lib/stream-api.ts","../../../projects/signalk-client-angular/src/lib/signalk-client.ts","../../../projects/signalk-client-angular/src/lib/signalk-client.module.ts","../../../projects/signalk-client-angular/src/public-api.ts","../../../projects/signalk-client-angular/src/signalk-client-angular.ts"],"sourcesContent":["/*\n * UUID: A js library to generate and parse UUIDs, TimeUUIDs and generate\n * TimeUUID based on dates for range selections.\n * @see http://www.ietf.org/rfc/rfc4122.txt\n **/\nexport class UUID {\n  private limitUI04;\n  private limitUI06;\n  private limitUI08;\n  private limitUI12;\n  private limitUI14;\n  private limitUI16;\n  private limitUI32;\n  private limitUI40;\n  private limitUI48;\n\n  private version!: number;\n  private hex!: string;\n\n  constructor() {\n    this.limitUI04 = this.maxFromBits(4);\n    this.limitUI06 = this.maxFromBits(6);\n    this.limitUI08 = this.maxFromBits(8);\n    this.limitUI12 = this.maxFromBits(12);\n    this.limitUI14 = this.maxFromBits(14);\n    this.limitUI16 = this.maxFromBits(16);\n    this.limitUI32 = this.maxFromBits(32);\n    this.limitUI40 = this.maxFromBits(40);\n    this.limitUI48 = this.maxFromBits(48);\n\n    this.create();\n  }\n\n  toString() {\n    return this.hex;\n  }\n  toURN() {\n    return 'urn:uuid:' + this.hex;\n  }\n  toSignalK(): string {\n    return `urn:mrn:signalk:uuid:${this.hex}`;\n  }\n  toBytes() {\n    let parts = this.hex.split('-');\n    let ints = [];\n    let intPos = 0;\n    for (let i = 0; i < parts.length; i++) {\n      for (let j = 0; j < parts[i].length; j += 2) {\n        ints[intPos++] = parseInt(parts[i].substr(j, 2), 16);\n      }\n    }\n    return ints;\n  }\n\n  private maxFromBits(bits: number) {\n    return Math.pow(2, bits);\n  }\n\n  private getRandomInt(min: number, max: number) {\n    return Math.floor(Math.random() * (max - min + 1)) + min;\n  }\n\n  private randomUI04() {\n    return this.getRandomInt(0, this.limitUI04 - 1);\n  }\n  private randomUI06() {\n    return this.getRandomInt(0, this.limitUI06 - 1);\n  }\n  private randomUI08() {\n    return this.getRandomInt(0, this.limitUI08 - 1);\n  }\n  private randomUI12() {\n    return this.getRandomInt(0, this.limitUI12 - 1);\n  }\n  private randomUI14() {\n    return this.getRandomInt(0, this.limitUI14 - 1);\n  }\n  private randomUI16() {\n    return this.getRandomInt(0, this.limitUI16 - 1);\n  }\n  private randomUI32() {\n    return this.getRandomInt(0, this.limitUI32 - 1);\n  }\n  private randomUI40() {\n    return (\n      (0 | (Math.random() * (1 << 30))) +\n      (0 | (Math.random() * (1 << (40 - 30)))) * (1 << 30)\n    );\n  }\n  private randomUI48() {\n    return (\n      (0 | (Math.random() * (1 << 30))) +\n      (0 | (Math.random() * (1 << (48 - 30)))) * (1 << 30)\n    );\n  }\n\n  private create() {\n    this.fromParts(\n      this.randomUI32(),\n      this.randomUI16(),\n      0x4000 | this.randomUI12(),\n      0x80 | this.randomUI06(),\n      this.randomUI08(),\n      this.randomUI48()\n    );\n  }\n\n  private paddedString(\n    string: string,\n    length: number,\n    z: string | null = null\n  ) {\n    string = String(string);\n    z = !z ? '0' : z;\n    let i = length - string.length;\n    for (; i > 0; i >>>= 1, z += z) {\n      if (i & 1) {\n        string = z + string;\n      }\n    }\n    return string;\n  }\n\n  private fromParts(\n    timeLow: number,\n    timeMid: number,\n    timeHiAndVersion: number,\n    clockSeqHiAndReserved: number,\n    clockSeqLow: number,\n    node: number\n  ) {\n    this.version = (timeHiAndVersion >> 12) & 0xf;\n    this.hex =\n      this.paddedString(timeLow.toString(16), 8) +\n      '-' +\n      this.paddedString(timeMid.toString(16), 4) +\n      '-' +\n      this.paddedString(timeHiAndVersion.toString(16), 4) +\n      '-' +\n      this.paddedString(clockSeqHiAndReserved.toString(16), 2) +\n      this.paddedString(clockSeqLow.toString(16), 2) +\n      '-' +\n      this.paddedString(node.toString(16), 12);\n    return this;\n  }\n\n  /*\n    private getTimeFieldValues(time) {\n        let ts = time - Date.UTC(1582, 9, 15);\n        let hm = ((ts / 0x100000000) * 10000) & 0xFFFFFFF;\n        return { low: ((ts & 0xFFFFFFF) * 10000) % 0x100000000,\n                mid: hm & 0xFFFF, hi: hm >>> 16, timestamp: ts };\n    };\n\n    fromTime(time, last:boolean) {\n        last = (!last) ? false : last;\n        let tf = this.getTimeFieldValues(time);\n        let tl = tf.low;\n        let thav = (tf.hi & 0xFFF) | 0x1000;  // set version '0001'\n        if (last === false) {\n            return new UUID().fromParts(tl, tf.mid, thav, 0, 0, 0);\n        } else {\n            return new UUID().fromParts(tl, tf.mid, thav, 0x80 | this.limitUI06, this.limitUI08 - 1, this.limitUI48 - 1);\n        }\n    };\n\n    firstFromTime(time) { return this.fromTime(time, false) }\n    lastFromTime(time) { return this.fromTime(time, true) }\n    \n    \n    equals(uuid) {\n        if (!(uuid instanceof UUID)) { return false }\n        if (this.hex !== uuid.hex) { return false }\n        return true;\n    };\n\n    fromURN(strId) {\n        let r;\n        let p = /^(?:urn:uuid:|\\{)?([0-9a-f]{8})-([0-9a-f]{4})-([0-9a-f]{4})-([0-9a-f]{2})([0-9a-f]{2})-([0-9a-f]{12})(?:\\})?$/i;\n        if ((r = p.exec(strId))) {\n            return this.fromParts(\n                parseInt(r[1], 16), parseInt(r[2], 16),\n                parseInt(r[3], 16), parseInt(r[4], 16),\n                parseInt(r[5], 16), parseInt(r[6], 16)\n            );\n        }\n        return null;\n    }\n\n    fromBytes(ints) {\n        if (ints.length < 5) { return null }\n        let str = '';\n        let pos = 0;\n        let parts = [4, 2, 2, 2, 6];\n        for (let i = 0; i < parts.length; i++) {\n            for (let j = 0; j < parts[i]; j++) {\n            let octet = ints[pos++].toString(16);\n            if (octet.length == 1) {\n                octet = '0' + octet;\n            }\n            str += octet;\n            }\n            if (parts[i] !== 6) {\n            str += '-';\n            }\n        }\n        return this.fromURN(str);\n    };\n\n    fromBinary(binary) {\n        let ints = [];\n        for (let i = 0; i < binary.length; i++) {\n            ints[i] = binary.charCodeAt(i);\n            if (ints[i] > 255 || ints[i] < 0) {\n            throw new Error('Unexpected byte in binary data.');\n            }\n        }\n        return this.fromBytes(ints);\n    };\n    */\n}\n","import { UUID } from './uuid';\n\n// ** Path utilities\nexport class Path {\n  // ** transform dot notation to slash\n  static dotToSlash(path: string): string {\n    let p = path.split('?');\n    if (p[0].indexOf('.') != -1) {\n      p[0] = p[0].split('.').join('/');\n    }\n    return p.join('?');\n  }\n\n  // ** parse context to valid Signal K path\n  static contextToPath(context: string): string {\n    let res = context == 'self' ? 'vessels.self' : context;\n    return res.split('.').join('/');\n  }\n}\n\n// ** Message templates **\nexport class Message {\n  // ** return UPDATES message object\n  static updates() {\n    // array values= { values: [ {path: xx, value: xx } ] }\n    return {\n      context: null,\n      updates: []\n    };\n  }\n  // ** return SUBSCRIBE message object\n  static subscribe() {\n    /* array values= {\n            \"path\": \"path.to.key\",\n            \"period\": 1000,\n            \"format\": \"delta\",\n            \"policy\": \"ideal\",\n            \"minPeriod\": 200\n            } */\n    return {\n      context: null,\n      subscribe: []\n    };\n  }\n  // ** return UNSUBSCRIBE message object\n  static unsubscribe() {\n    // array values= { \"path\": \"path.to.key\" }\n    return {\n      context: null,\n      unsubscribe: []\n    };\n  }\n  // ** return REQUEST message object\n  static request() {\n    return {\n      requestId: new UUID().toString()\n    };\n  }\n}\n\n// ** Alarm message **\nexport class Alarm {\n  private _state: AlarmState;\n  private _method: Array<AlarmMethod> = [];\n  private _message: string = '';\n\n  constructor(\n    message: string,\n    state?: AlarmState,\n    visual?: boolean,\n    sound?: boolean\n  ) {\n    this._message = typeof message !== 'undefined' ? message : '';\n    this._state = typeof state !== 'undefined' ? state : AlarmState.alarm;\n    if (visual) {\n      this._method.push(AlarmMethod.visual);\n    }\n    if (sound) {\n      this._method.push(AlarmMethod.sound);\n    }\n  }\n\n  get value() {\n    return {\n      message: this._message,\n      state: this._state,\n      method: this._method\n    };\n  }\n}\n\nexport enum AlarmState {\n  normal = 'normal',\n  alert = 'alert',\n  warn = 'warn',\n  alarm = 'alarm',\n  emergency = 'emergency'\n}\n\nexport enum AlarmMethod {\n  visual = 'visual',\n  sound = 'sound'\n}\n\nexport enum AlarmType {\n  mob = 'notifications.mob',\n  fire = 'notifications.fire',\n  sinking = 'notifications.sinking',\n  flooding = 'notifications.flooding',\n  collision = 'notifications.collision',\n  grounding = 'notifications.grounding',\n  listing = 'notifications.listing',\n  adrift = 'notifications.adrift',\n  piracy = 'notifications.piracy',\n  abandon = 'notifications.abandon'\n}\n","/** Signal K server Apps\n * ************************************/\nimport { Injectable } from '@angular/core';\nimport { HttpClient } from '@angular/common/http';\n\n@Injectable({ providedIn: 'root' })\nexport class SignalKApps {\n  // **************** ATTRIBUTES ***************************\n\n  // ** apps api endpoint path\n  public endpoint: string = '';\n\n  // *******************************************************\n\n  constructor(private http: HttpClient) {}\n\n  ngOnDestroy() {}\n\n  // ** return List of installed apps\n  list() {\n    let ep =\n      this.endpoint.indexOf('webapps') == -1\n        ? `${this.endpoint}list`\n        : this.endpoint;\n    return this.http.get(ep);\n  }\n}\n","import { Injectable } from '@angular/core';\nimport { HttpClient, HttpHeaders } from '@angular/common/http';\nimport { Path, Alarm, AlarmType } from './utils';\n\n@Injectable({ providedIn: 'root' })\nexport class SignalKHttp {\n  private _token: string = '';\n  private _observe: string = 'body';\n\n  // **************** ATTRIBUTES ***************************\n  public server: any;\n  public endpoint: string = '';\n  public version: number = 1;\n\n  // ** set auth token value **\n  set authToken(val: string) {\n    this._token = val;\n  }\n\n  set observeResponse(value: boolean) {\n    this._observe = value ? 'response' : 'body';\n  }\n\n  // *******************************************************\n\n  constructor(private http: HttpClient) {}\n\n  // ** get the contents of the Signal K tree pointed to by self. returns: Observable\n  getSelf() {\n    return this.get(`vessels/self`);\n  }\n\n  //** get ID of vessel self via http. returns: Observable\n  getSelfId() {\n    return this.get(`self`);\n  }\n\n  // ** return observable response for meta object at the specified context and path\n  getMeta(context: string, path: string) {\n    return this.get(\n      `${Path.contextToPath(context)}/${path}/meta`\n    );\n  }\n\n  //** get API path value via http. returns: Observable\n\n  get(path: string): any;\n  get(version: number, path: string): any;\n  get(p1: any, p2?: any): any {\n    if (!this.endpoint) {\n      return;\n    }\n    let ep: string;\n    let path: string;\n    if (typeof p1 === 'number') {\n      ep = this.endpoint.replace(new RegExp('/v[0-9]+/'), `/v${p1}/`);\n      path =p2;\n    } else {\n      ep = this.endpoint;\n      path = p1;\n    }\n    if (path[0] === '/') {\n      path = path.slice(1);\n    }\n    const url = `${ep}${path}`;\n    if (this._token) {\n      let headers = new HttpHeaders({ Authorization: `JWT ${this._token}` });\n      return this.http.get(url, { headers: headers });\n    } else {\n      return this.http.get(url, { withCredentials: true });\n    }\n  }\n\n  // ** patch for v2 & above PUT handling of resourcesApi / courseApi\n  private parseApiPut(version: number, value: any): any {\n    if (version > 1) {\n      return value;\n    } else {\n      return { value: value };\n    }\n  }\n\n  //** send value to API path via http PUT. returns: Observable\n  put(path: string, value: any): any;\n  put(version: number, path: string, value: any): any;\n  put(p1: any, p2: string, p3?: any): any {\n    if (!this.endpoint) {\n      return;\n    }\n    let ep: string;\n    let path: string;\n    let value: any;\n    let msg: any;\n    if (typeof p1 === 'number') {\n      ep = this.endpoint.replace(new RegExp('/v[0-9]+/'), `/v${p1}/`);\n      path = p2;\n      value = p3;\n      msg = this.parseApiPut(p1, value);\n    } else {\n      ep = this.endpoint;\n      path = p1;\n      value = p2;\n      msg = this.parseApiPut(this.version, value);\n    }\n    if (path[0] == '/') {\n      path = path.slice(1);\n    }\n\n    const url = `${ep}${path}`;\n    if (this._token) {\n      let headers = new HttpHeaders({ Authorization: `JWT ${this._token}` });\n      return this.http.put(url, msg, {\n        headers: headers,\n        observe: this._observe as any\n      });\n    } else {\n      return this.http.put(url, msg, {\n        withCredentials: true,\n        observe: this._observe as any\n      });\n    }\n  }\n\n  //** send value to API path via http PUT. returns: Observable\n  putWithContext(context: string, path: string, value: any): any;\n  putWithContext(\n    version: number,\n    context: string,\n    path: string,\n    value: any\n  ): any;\n  putWithContext(p1: any, p2: any, p3?: any, p4?: any): any {\n    if (!this.endpoint) {\n      return;\n    }\n    let ep: string;\n    let path: string;\n    let context: string;\n    let value: any;\n    let msg: any;\n    if (typeof p1 === 'number') {\n      ep = this.endpoint.replace(new RegExp('/v[0-9]+/'), `/v${p1}/`);\n      context = p2 ? `${Path.contextToPath(p2)}/` : '';\n      path = p3;\n      value = p4;\n      msg = this.parseApiPut(p1, value);\n    } else {\n      ep = this.endpoint;\n      context = p1 ? `${Path.contextToPath(p1)}/` : '';\n      path = p2;\n      value = p3;\n      msg = this.parseApiPut(this.version, value);\n    }\n    if (path[0] === '/') {\n      path = path.slice(1);\n    }\n\n    const url = ep + context + path;\n    if (this._token) {\n      let headers = new HttpHeaders({ Authorization: `JWT ${this._token}` });\n      return this.http.put(url, msg, {\n        headers: headers,\n        observe: this._observe as any\n      });\n    } else {\n      return this.http.put(url, msg, {\n        withCredentials: true,\n        observe: this._observe as any\n      });\n    }\n  }\n\n  //** send value to API path via http POST. returns: Observable\n  post(path: string, value: any): any;\n  post(version: number, path: string, value: any): any;\n  post(p1: any, p2: string, p3?: any): any {\n    if (!this.endpoint) {\n      return;\n    }\n    let ep: string;\n    let path: string;\n    let value: any;\n    if (typeof p1 === 'number') {\n      ep = this.endpoint.replace(new RegExp('/v[0-9]+/'), `/v${p1}/`);\n      path = p2;\n      value = p3;\n    } else {\n      ep = this.endpoint;\n      path = p1;\n      value = p2;\n    }\n    if (path[0] == '/') {\n      path = path.slice(1);\n    }\n    const url = `${ep}${path}`;\n    if (this._token) {\n      let headers = new HttpHeaders({ Authorization: `JWT ${this._token}` });\n      return this.http.post(url, value, {\n        headers: headers,\n        observe: this._observe as any\n      });\n    } else {\n      return this.http.post(url, value, {\n        withCredentials: true,\n        observe: this._observe as any\n      });\n    }\n  }\n\n  //** delete value from API path via http DELETE. returns: Observable\n  delete(path: string): any;\n  delete(version: number, path: string): any;\n  delete(p1: any, p2?: any): any {\n    if (!this.endpoint) {\n      return;\n    }\n    let ep: string;\n    let path: string;\n    if (typeof p1 === 'number') {\n      ep = this.endpoint.replace(new RegExp('/v[0-9]+/'), `/v${p1}/`);\n      path = p2;\n    } else {\n      ep = this.endpoint;\n      path = p1;\n    }\n    if (path[0] == '/') {\n      path = path.slice(1);\n    }\n    const url = `${ep}${path}`;\n    if (this._token) {\n      let headers = new HttpHeaders({ Authorization: `JWT ${this._token}` });\n      return this.http.delete(url, {\n        headers: headers,\n        observe: this._observe as any\n      });\n    } else {\n      return this.http.delete(url, {\n        withCredentials: true,\n        observe: this._observe as any\n      });\n    }\n  }\n\n  // ** raise alarm for path (name), returns: Observable\n  raiseAlarm(context: string, name: string, alarm: Alarm): any;\n  raiseAlarm(context: string, type: AlarmType, alarm: Alarm): any;\n  raiseAlarm(context: string = '*', alarmId: any, alarm: Alarm): any {\n    let path: string;\n    if (typeof alarmId === 'string') {\n      path =\n        alarmId.indexOf('notifications.') == -1\n          ? `notifications.${alarmId}`\n          : alarmId;\n    } else {\n      path = alarmId;\n    }\n    return this.putWithContext(context, path, alarm.value);\n  }\n\n  // ** raise alarm for path (name), returns: Observable\n  clearAlarm(context: string = '*', name: string): any {\n    let path =\n      name.indexOf('notifications.') == -1 ? `notifications.${name}` : name;\n    return this.putWithContext(context, path, null);\n  }\n}\n","import { Injectable } from '@angular/core';\nimport { Subject, Observable } from 'rxjs';\nimport { Message, Alarm, AlarmType } from './utils';\n\n@Injectable({ providedIn: 'root' })\nexport class SignalKStream {\n  private _connect: Subject<any>;\n  private _close: Subject<any>;\n  private _error: Subject<any>;\n  private _message: Subject<any>;\n\n  private ws: any;\n  private _filter: string = ''; // ** id of vessel to filter delta messages\n  private _wsTimeout = 20000; // ** websocket connection timeout\n  private _token: string = '';\n  private _playbackMode: boolean = false;\n\n  // **************** ATTRIBUTES ***************************\n\n  public onConnect: Observable<any>;\n  public onClose: Observable<any>;\n  public onError: Observable<any>;\n  public onMessage: Observable<any>;\n\n  public version: number = 1;\n  public endpoint: string = '';\n  public selfId: string = '';\n  public _source: any = null;\n\n  // ** set source label for use in messages\n  set source(val: string) {\n    if (!this._source) {\n      this._source = {};\n    }\n    this._source['label'] = val;\n  }\n\n  // ** set auth token value **\n  set authToken(val: string) {\n    this._token = val;\n  }\n  // ** get / set websocket connection timeout 3000<=timeout<=60000 **\n  get connectionTimeout(): number {\n    return this._wsTimeout;\n  }\n  set connectionTimeout(val: number) {\n    this._wsTimeout = val < 3000 ? 3000 : val > 60000 ? 60000 : val;\n  }\n  // ** is WS Stream connected?\n  get isOpen(): boolean {\n    return this.ws && this.ws.readyState != 1 && this.ws.readyState != 3\n      ? true\n      : false;\n  }\n  // ** get / set filter to select delta messages just for supplied vessel id\n  get filter(): string {\n    return this._filter;\n  }\n  // ** set filter= null to remove message filtering\n  set filter(id: string) {\n    if (id && id.indexOf('self') != -1) {\n      // ** self\n      this._filter = this.selfId ? this.selfId : '';\n    } else {\n      this._filter = id;\n    }\n  }\n  // ** returns true if Playback Hello message\n  get playbackMode(): boolean {\n    return this._playbackMode;\n  }\n\n  // ******************************************************\n\n  constructor() {\n    this._connect = new Subject<any>();\n    this.onConnect = this._connect.asObservable();\n    this._close = new Subject<any>();\n    this.onClose = this._close.asObservable();\n    this._error = new Subject<any>();\n    this.onError = this._error.asObservable();\n    this._message = new Subject<any>();\n    this.onMessage = this._message.asObservable();\n  }\n\n  // ** Close WebSocket connection\n  close() {\n    if (this.ws) {\n      this.ws.close();\n      this.ws = null;\n    }\n  }\n\n  // ** Open a WebSocket at provided url\n  open(url: string, subscribe?: string, token?: string) {\n    url = url ? url : this.endpoint;\n    if (!url) {\n      return;\n    }\n    let q = url.indexOf('?') == -1 ? '?' : '&';\n    if (subscribe) {\n      url += `${q}subscribe=${subscribe}`;\n    }\n    if (this._token || token) {\n      url += `${subscribe ? '&' : '?'}token=${this._token || token}`;\n    }\n\n    this.close();\n    this.ws = new WebSocket(url);\n    // ** start connection watchdog **\n    setTimeout(() => {\n      if (this.ws && this.ws.readyState != 1 && this.ws.readyState != 3) {\n        console.warn(\n          `Connection watchdog expired (${this._wsTimeout / 1000} sec): ${\n            this.ws.readyState\n          }... aborting connection...`\n        );\n        this.close();\n      }\n    }, this._wsTimeout);\n\n    this.ws.onopen = (e: any) => {\n      this._connect.next(e);\n    };\n    this.ws.onclose = (e: any) => {\n      this._close.next(e);\n    };\n    this.ws.onerror = (e: any) => {\n      this._error.next(e);\n    };\n    this.ws.onmessage = (e: any) => {\n      this.parseOnMessage(e);\n    };\n  }\n\n  // ** parse received message\n  private parseOnMessage(e: any) {\n    let data: any;\n    if (typeof e.data === 'string') {\n      try {\n        data = JSON.parse(e.data);\n      } catch (e) {\n        return;\n      }\n    }\n    if (this.isHello(data)) {\n      this.selfId = data.self;\n      this._playbackMode = typeof data.startTime != 'undefined' ? true : false;\n      this._message.next(data);\n    } else if (this.isResponse(data)) {\n      if (typeof data.login !== 'undefined') {\n        if (typeof data.login.token !== 'undefined') {\n          this._token = data.login.token;\n        }\n      }\n      this._message.next(data);\n    } else if (this._filter && this.isDelta(data)) {\n      if (data.context == this._filter) {\n        this._message.next(data);\n      }\n    } else {\n      this._message.next(data);\n    }\n  }\n\n  // ** send request via Delta stream\n  sendRequest(value: any): string {\n    if (typeof value !== 'object') {\n      return '';\n    }\n    let msg: any = Message.request();\n    if (typeof value.login === 'undefined' && this._token) {\n      msg['token'] = this._token;\n    }\n    let keys = Object.keys(value);\n    keys.forEach((k) => {\n      msg[k] = value[k];\n    });\n    this.send(msg);\n    return msg.requestId;\n  }\n\n  // ** send put request via Delta stream\n  put(context: string, path: string, value: any): string {\n    let msg = {\n      context: context == 'self' ? 'vessels.self' : context,\n      put: { path: path, value: value }\n    };\n    return this.sendRequest(msg);\n  }\n\n  // ** get auth token for supplied user details **\n  login(username: string, password: string) {\n    let msg = {\n      login: { username: username, password: password }\n    };\n    return this.sendRequest(msg);\n  }\n\n  // ** send data to Signal K stream\n  send(data: any) {\n    if (this.ws) {\n      if (typeof data === 'object') {\n        data = JSON.stringify(data);\n      }\n      this.ws.send(data);\n    }\n  }\n\n  // ** send value(s) via delta stream update **\n  sendUpdate(context: string, path: Array<any>): void;\n  sendUpdate(context: string, path: string, value: any): void;\n  sendUpdate(\n    context: string = 'self',\n    path: string | Array<any>,\n    value?: any\n  ): void {\n    let val: any = Message.updates();\n    if (this._token) {\n      val['token'] = this._token;\n    }\n    val.context = context == 'self' ? 'vessels.self' : context;\n    if (this._token) {\n      val['token'] = this._token;\n    }\n\n    let uValues = [];\n    if (typeof path === 'string') {\n      uValues.push({ path: path, value: value });\n    }\n    if (typeof path === 'object' && Array.isArray(path)) {\n      uValues = path;\n    }\n    let u: any = {\n      timestamp: new Date().toISOString(),\n      values: uValues\n    };\n    if (this._source) {\n      u['source'] = this._source;\n    }\n    val.updates.push(u);\n    this.send(val);\n  }\n\n  // ** Subscribe to Delta stream messages options: {..}**\n  subscribe(context: string, path: Array<any>): void;\n  subscribe(context: string, path: string, options?: any): void;\n  subscribe(\n    context: string = '*',\n    path: string | Array<any> = '*',\n    options?: any\n  ): void {\n    let val: any = Message.subscribe();\n    if (this._token) {\n      val['token'] = this._token;\n    }\n    val.context = context == 'self' ? 'vessels.self' : context;\n    if (this._token) {\n      val['token'] = this._token;\n    }\n\n    if (typeof path === 'object' && Array.isArray(path)) {\n      val.subscribe = path;\n    }\n    if (typeof path === 'string') {\n      let sValue: any = {};\n      sValue['path'] = path;\n      if (options && typeof options === 'object') {\n        if (options['period']) {\n          sValue['period'] = options['period'];\n        }\n        if (options['minPeriod']) {\n          sValue['minPeriod'] = options['period'];\n        }\n        if (\n          options['format'] &&\n          (options['format'] == 'delta' || options['format'] == 'full')\n        ) {\n          sValue['format'] = options['format'];\n        }\n        if (\n          options['policy'] &&\n          (options['policy'] == 'instant' ||\n            options['policy'] == 'ideal' ||\n            options['policy'] == 'fixed')\n        ) {\n          sValue['policy'] = options['policy'];\n        }\n      }\n      val.subscribe.push(sValue);\n    }\n    this.send(val);\n  }\n\n  // ** Unsubscribe from Delta stream messages **\n  unsubscribe(context: string = '*', path: any = '*') {\n    let val: any = Message.unsubscribe();\n    if (this._token) {\n      val['token'] = this._token;\n    }\n    val.context = context == 'self' ? 'vessels.self' : context;\n    if (this._token) {\n      val['token'] = this._token;\n    }\n\n    if (typeof path === 'object' && Array.isArray(path)) {\n      val.unsubscribe = path;\n    }\n    if (typeof path === 'string') {\n      val.unsubscribe.push({ path: path });\n    }\n    this.send(val);\n  }\n\n  // ** raise alarm for path\n  raiseAlarm(context: string, name: string, alarm: Alarm): void;\n  raiseAlarm(context: string, type: AlarmType, alarm: Alarm): void;\n  raiseAlarm(context: string = '*', alarmId: any, alarm: Alarm): void {\n    let path: string;\n    if (typeof alarmId === 'string') {\n      path =\n        alarmId.indexOf('notifications.') == -1\n          ? `notifications.${alarmId}`\n          : alarmId;\n    } else {\n      path = alarmId;\n    }\n    this.put(context, path, alarm.value);\n  }\n\n  // ** raise alarm for path\n  clearAlarm(context: string = '*', name: string) {\n    let path =\n      name.indexOf('notifications.') == -1 ? `notifications.${name}` : name;\n    this.put(context, path, null);\n  }\n\n  // *************** MESSAGE PARSING ******************************\n  // ** returns true if message context is 'self'\n  isSelf(msg: any): boolean {\n    return msg.context == this.selfId;\n  }\n  // ** returns true if message is a Delta message\n  isDelta(msg: any): boolean {\n    return typeof msg.context != 'undefined';\n  }\n  // ** returns true if message is a Hello message\n  isHello(msg: any): boolean {\n    return typeof msg.version != 'undefined' && typeof msg.self != 'undefined';\n  }\n  // ** returns true if message is a request Response message\n  isResponse(msg: any): boolean {\n    return typeof msg.requestId != 'undefined';\n  }\n}\n","import { Injectable, isDevMode } from '@angular/core';\nimport { HttpClient, HttpHeaders } from '@angular/common/http';\nimport { Subject, Observable } from 'rxjs';\n\nimport { SignalKHttp } from './http-api';\nimport { SignalKStream } from './stream-api';\nimport { SignalKApps } from './apps-api';\nimport { Path, Message } from './utils';\nimport { UUID } from './uuid';\n\ninterface Server_Info {\n  endpoints: { [key: string]: any };\n  info: { [key: string]: any };\n  apiVersions: Array<any>;\n}\n\ninterface Fallback_Info {\n  server: { [key: string]: any };\n  endpoints: { [key: string]: any };\n}\n\ninterface JSON_Patch {\n  op: 'add' | 'replace' | 'remove' | 'copy' | 'move' | 'test';\n  path: string;\n  value: any;\n}\n\nexport enum APPDATA_CONTEXT {\n  USER = 'user',\n  GLOBAL = 'global'\n}\n\n@Injectable({ providedIn: 'root' })\nexport class SignalKClient {\n  private hostname: string = 'localhost';\n  private port: number = 3000;\n  private protocol: string = '';\n\n  private _version: string = 'v1'; // ** default Signal K api version\n  private _token: string = ''; // token for when security is enabled on the server\n\n  private debug(val: any) {\n    if (isDevMode()) {\n      console.log(val);\n    }\n  }\n\n  // ** endpoints to fallback to if hello response is not received.\n  private fallbackEndpoints: Fallback_Info = {\n    endpoints: { v1: {} },\n    server: { id: 'fallback' }\n  };\n\n  // **************** ATTRIBUTES ***************************\n\n  // ** server information block **\n  public server: Server_Info = {\n    endpoints: {},\n    info: {},\n    apiVersions: []\n  };\n\n  // ** endpoints fallback to host address when no hello response\n  public fallback: boolean = false;\n\n  // ** endpoints are set to host address regardless of contents of hello response\n  public proxied: boolean = false;\n\n  // ** get / set Signal K preferred api version to use **\n  get version(): number {\n    return parseInt(this._version.slice(1));\n  }\n  set version(val: number) {\n    let v: string = 'v' + val;\n    if (this.server.apiVersions.length == 0) {\n      this._version = v;\n      this.debug(`Signal K api version set to: ${v}`);\n    } else {\n      this._version =\n        this.server.apiVersions.indexOf(v) != -1 ? v : this._version;\n      this.debug(\n        `Signal K api version set request: ${v}, result: ${this._version}`\n      );\n    }\n    this.api.version = parseInt(v.slice(1));\n    this.stream.version = parseInt(v.slice(1));\n  }\n  // ** set auth token value **\n  set authToken(val: string) {\n    this._token = val;\n    this.api.authToken = val;\n    this.stream.authToken = val;\n  }\n  // ** Message Object\n  get message() {\n    return Message;\n  }\n\n  // ** generate and return a UUID object\n  get uuid(): string {\n    return new UUID().toString();\n  }\n\n  // ** generate and return a v1 UUID object\n  get signalkUuid(): string {\n    return `urn:mrn:signalk:uuid:${new UUID().toString()}`;\n  }\n\n  // *******************************************************\n  constructor(\n    private http: HttpClient,\n    public apps: SignalKApps,\n    public api: SignalKHttp,\n    public stream: SignalKStream\n  ) {\n    this.init();\n  }\n\n  ngOnDestroy() {\n    this.stream.close();\n  }\n\n  // ** initialise protocol, hostname, port values\n  private init(\n    hostname: string = this.hostname,\n    port: number = 80,\n    useSSL: boolean = false\n  ) {\n    this.hostname = hostname ? hostname : this.hostname;\n    if (useSSL) {\n      this.protocol = 'https';\n      this.port = port || 443;\n    } else {\n      this.protocol = 'http';\n      this.port = port || 80;\n    }\n    let httpUrl = `${this.protocol}://${this.hostname}:${this.port}`;\n    let wsUrl = `${useSSL ? 'wss' : 'ws'}://${this.hostname}:${this.port}`;\n    this.fallbackEndpoints.endpoints.v1[\n      'signalk-http'\n    ] = `${httpUrl}/signalk/v1/api/`;\n    this.fallbackEndpoints.endpoints.v1[\n      'signalk-ws'\n    ] = `${wsUrl}/signalk/v1/stream`;\n  }\n\n  // **************** CONNECTION AND DISCOVERY  ********************\n\n  // ** Signal K server endpoint discovery request (/signalk).\n  hello(\n    hostname: string = this.hostname,\n    port: number = 3000,\n    useSSL: boolean = false\n  ) {\n    this.init(hostname, port, useSSL);\n    return this.get('/signalk');\n  }\n\n  // ** connect to server (endpoint discovery) and DO NOT open Stream\n  connect(\n    hostname: string = this.hostname,\n    port: number = 3000,\n    useSSL: boolean = false\n  ): Observable<any> {\n    let sub: Subject<any> = new Subject();\n    this.debug('Contacting Signal K server.........');\n    this.hello(hostname, port, useSSL).subscribe(\n      // ** discover endpoints **\n      (response) => {\n        this.getLoginStatus().subscribe((r) => {});\n        if (this.stream) {\n          this.stream.close();\n        }\n        this.processHello(response);\n        this.api.endpoint = this.resolveHttpEndpoint();\n        this.stream.endpoint = this.resolveStreamEndpoint();\n        sub.next(true);\n      },\n      (error) => {\n        if (this.fallback) {\n          // fallback if no hello response\n          if (this.stream) {\n            this.stream.close();\n          }\n          this.processHello(null);\n          this.api.endpoint = this.resolveHttpEndpoint();\n          this.stream.endpoint = this.resolveStreamEndpoint();\n          sub.next(true);\n        } else {\n          this.disconnectedFromServer();\n          sub.error(error);\n        }\n      }\n    );\n    return sub.asObservable();\n  }\n\n  // ** disconnect from server\n  disconnect() {\n    this.stream.close();\n  }\n\n  // ** Connect + open Delta Stream (endpoint discovery)\n  connectStream(\n    hostname: string = this.hostname,\n    port: number = 3000,\n    useSSL: boolean = false,\n    subscribe: string = ''\n  ): Observable<any> {\n    let sub: Subject<any> = new Subject();\n    this.connect(hostname, port, useSSL).subscribe(\n      () => {\n        // ** connect to stream api at preferred version else fall back to default version\n        let url = this.resolveStreamEndpoint();\n        if (!url) {\n          sub.error(new Error('Server has no advertised Stream endpoints!'));\n          return;\n        }\n        this.stream.open(url, subscribe);\n        sub.next(true);\n      },\n      (e) => {\n        sub.error(e);\n      }\n    );\n    return sub.asObservable();\n  }\n\n  // ** connect to playback stream (endpoint discovery)\n  connectPlayback(\n    hostname: string = this.hostname,\n    port: number = 3000,\n    useSSL: boolean = false,\n    options: any\n  ): Observable<any> {\n    let sub: Subject<any> = new Subject();\n    this.connect(hostname, port, useSSL).subscribe(\n      () => {\n        // ** connect to playback api at preferred version else fall back to default version\n        this.openPlayback('', options, this._token);\n        sub.next(true);\n      },\n      (e) => {\n        sub.error(e);\n      }\n    );\n    return sub.asObservable();\n  }\n\n  // ** connect to delta stream with (NO endpoint discovery)\n  openStream(url: string = this.hostname, subscribe?: string, token?: string) {\n    this.debug('openStream.........');\n    if (!url) {\n      // connect to stream api at discovered endpoint\n      url = this.resolveStreamEndpoint();\n      if (!url) {\n        return new Error('Server has no advertised Stream endpoints!');\n      }\n    }\n    this.stream.open(url, subscribe, token);\n    return true;\n  }\n\n  // ** connect to playback stream (NO endpoint discovery)\n  openPlayback(url: string = this.hostname, options?: any, token?: string) {\n    this.debug('openPlayback.........');\n    if (!url) {\n      // connect to stream api at discovered endpoint\n      url = this.resolveStreamEndpoint();\n      if (!url) {\n        return new Error('Server has no advertised Stream endpoints!');\n      }\n      url = url.replace('stream', 'playback');\n    }\n    let pb = '';\n    let subscribe: string = '';\n    if (options && typeof options === 'object') {\n      pb += options.startTime\n        ? '?startTime=' +\n          options.startTime.slice(0, options.startTime.indexOf('.')) +\n          'Z'\n        : '';\n      pb += options.playbackRate ? `&playbackRate=${options.playbackRate}` : '';\n      subscribe = options.subscribe ? options.subscribe : null;\n    }\n    this.stream.open(url + pb, subscribe, token);\n    return true;\n  }\n\n  // ** process Hello response\n  private processHello(response: any) {\n    if (this.proxied) {\n      this.server.endpoints = this.fallbackEndpoints.endpoints;\n    } else {\n      this.server.endpoints =\n        response && response['endpoints']\n          ? response['endpoints']\n          : this.fallbackEndpoints.endpoints;\n    }\n    this.server.info =\n      response && response['server']\n        ? response['server']\n        : this.fallbackEndpoints.server;\n    this.server.apiVersions = this.server.endpoints\n      ? Object.keys(this.server.endpoints)\n      : [];\n    this.debug(this.server.endpoints);\n    this.api.server = this.server.info;\n    this.apps.endpoint = this.resolveAppsEndpoint();\n  }\n\n  // ** return signalk apps api url\n  private resolveAppsEndpoint(): string {\n    let url: string = this.resolveHttpEndpoint().replace('api', 'apps');\n    return url;\n  }\n\n  // ** return preferred WS stream url\n  public resolveStreamEndpoint(): string {\n    if (\n      this.server.endpoints[this._version] &&\n      this.server.endpoints[this._version]['signalk-ws']\n    ) {\n      this.debug(`Connecting endpoint version: ${this._version}`);\n      return `${this.server.endpoints[this._version]['signalk-ws']}`;\n    } else if (\n      this.server.endpoints['v1'] &&\n      this.server.endpoints['v1']['signalk-ws']\n    ) {\n      this.debug(`Connection falling back to: v1`);\n      return `${this.server.endpoints['v1']['signalk-ws']}`;\n    } else {\n      return '';\n    }\n  }\n\n  // ** return signalk-http endpoint url\n  private resolveHttpEndpoint(): string {\n    let url: string = '';\n    if (this.server.endpoints[this._version]) {\n      // ** connection made\n      // ** connect to http endpoint at prescribed version else fall back to default version\n      if (this.server.endpoints[this._version]['signalk-http']) {\n        url = `${this.server.endpoints[this._version]['signalk-http']}`;\n      } else {\n        url = `${this.server.endpoints['v1']['signalk-http']}`;\n      }\n    } else {\n      let msg =\n        'No current connection http endpoint service! Use connect() to establish a connection.';\n      this.debug(msg);\n    }\n    return url;\n  }\n\n  // ** cleanup on server disconnection\n  private disconnectedFromServer() {\n    this.server.endpoints = {};\n    this.server.info = {};\n    this.server.apiVersions = [];\n  }\n\n  //** return observable response from http path\n  get(path: string) {\n    if (path && path.length > 0 && path[0] == '/') {\n      path = path.slice(1);\n    }\n    let url = `${this.protocol}://${this.hostname}:${\n      this.port\n    }/${path}`;\n    this.debug(`get ${url}`);\n    if (this._token) {\n      let headers = new HttpHeaders({ Authorization: `JWT ${this._token}` });\n      return this.http.get(url, { headers: headers });\n    } else {\n      return this.http.get(url, { withCredentials: true });\n    }\n  }\n\n  //** return observable response for put to http path\n  put(path: string, value: any) {\n    let url = `${this.protocol}://${this.hostname}:${\n      this.port\n    }/${path}`;\n    this.debug(`put ${url}`);\n    if (this._token) {\n      let headers = new HttpHeaders({ Authorization: `JWT ${this._token}` });\n      return this.http.put(url, value, { headers: headers });\n    } else {\n      return this.http.put(url, value, { withCredentials: true });\n    }\n  }\n\n  //** return observable response for post to http path\n  post(path: string, value: any) {\n    if (path && path.length > 0 && path[0] == '/') {\n      path = path.slice(1);\n    }\n    let url = `${this.protocol}://${this.hostname}:${\n      this.port\n    }/${path}`;\n    this.debug(`post ${url}`);\n    if (this._token) {\n      let headers = new HttpHeaders({ Authorization: `JWT ${this._token}` });\n      return this.http.post(url, value, { headers: headers });\n    } else {\n      return this.http.post(url, value, { withCredentials: true });\n    }\n  }\n\n  // ** get auth token for supplied user details **\n  login(username: string, password: string) {\n    let headers = new HttpHeaders().set('Content-Type', `application/json`);\n    return this.http.post(\n      `${this.protocol}://${this.hostname}:${this.port}/signalk/${this._version}/auth/login`,\n      { username: username, password: password },\n      { headers }\n    );\n  }\n\n  // ** logout from server **\n  logout(): Observable<boolean> {\n    let sub: Subject<boolean> = new Subject();\n    let url = `${this.protocol}://${this.hostname}:${this.port}/signalk/${this._version}/auth/logout`;\n    if (this._token) {\n      let headers = new HttpHeaders({ Authorization: `JWT ${this._token}` });\n      this.http\n        .put(url, null, { headers: headers, responseType: 'text' })\n        .subscribe(\n          () => {\n            sub.next(true);\n          },\n          () => {\n            sub.next(false);\n          }\n        );\n    } else {\n      this.http\n        .put(url, null, { responseType: 'text', withCredentials: true })\n        .subscribe(\n          () => {\n            sub.next(true);\n          },\n          () => {\n            sub.next(false);\n          }\n        );\n    }\n    return sub.asObservable();\n  }\n\n  // ** is a user authenticated to the server **\n  isLoggedIn(): Observable<boolean> {\n    let sub: Subject<boolean> = new Subject();\n    this.getLoginStatus().subscribe(\n      (r) => {\n        sub.next(r.status == 'loggedIn' ? true : false);\n      },\n      () => {\n        sub.next(false);\n      }\n    );\n    return sub.asObservable();\n  }\n  // ** fetch login status from server **\n  getLoginStatus(): Observable<any> {\n    let url = `/skServer/loginStatus`;\n    if (this.server && this.server.info.id == 'signalk-server-node') {\n      let ver = this.server.info['version'].split('.');\n      url =\n        ver[0] == '1' && ver[1] < 36 //use legacy link for older versions\n          ? `/loginstatus`\n          : url;\n    }\n    return this.get(url);\n  }\n\n  //** get data via the snapshot http api path for supplied time\n  snapshot(context: string, time: string) {\n    if (!time) {\n      return;\n    }\n    time = time.slice(0, time.indexOf('.')) + 'Z';\n    let url = this.resolveHttpEndpoint();\n    if (!url) {\n      return;\n    }\n    url = `${url.replace('api', 'snapshot')}${Path.contextToPath(\n      context\n    )}?time=${time}`;\n    if (this._token) {\n      let headers = new HttpHeaders({ Authorization: `JWT ${this._token}` });\n      return this.http.get(url, { headers: headers });\n    } else {\n      return this.http.get(url, { withCredentials: true });\n    }\n  }\n\n  /*******************************\n   *  applicationData api methods\n   * context: 'user' or 'global'\n   * appId: application id string\n   *******************************/\n  private _appId: string = '';\n  private _appVersion: string = '';\n\n  private resolveAppDataEndpoint(\n    context: APPDATA_CONTEXT,\n    appId: string\n  ): string {\n    if (!context || !appId) {\n      return '';\n    }\n    let url = this.resolveHttpEndpoint().replace('api', 'applicationData');\n    return `${url}${context}/${appId}/`;\n  }\n\n  setAppId(value: string) {\n    this._appId = value;\n  }\n  setAppVersion(value: string) {\n    this._appVersion = value;\n  }\n\n  // ** get list of available versions of data stored **\n  appDataVersions(\n    context: APPDATA_CONTEXT = APPDATA_CONTEXT.USER,\n    appId: string = this._appId\n  ) {\n    let url = this.resolveAppDataEndpoint(context, appId);\n    if (this._token) {\n      let headers = new HttpHeaders({ Authorization: `JWT ${this._token}` });\n      return this.http.get(url, { headers: headers });\n    } else {\n      return this.http.get(url, { withCredentials: true });\n    }\n  }\n  // ** get list of available keys for a stored path **\n  appDataKeys(\n    path: string = '',\n    context: APPDATA_CONTEXT = APPDATA_CONTEXT.USER,\n    appId: string = this._appId,\n    version: string = this._appVersion\n  ) {\n    path = path.length != 0 && path[0] == '/' ? path.slice(1) : path;\n    let url = this.resolveAppDataEndpoint(context, appId);\n    url += `${version}/${path}?keys=true`;\n    if (this._token) {\n      let headers = new HttpHeaders({ Authorization: `JWT ${this._token}` });\n      return this.http.get(url, { headers: headers });\n    } else {\n      return this.http.get(url, { withCredentials: true });\n    }\n  }\n\n  // ** get stored value at provided path **\n  appDataGet(\n    path: string = '',\n    context: APPDATA_CONTEXT = APPDATA_CONTEXT.USER,\n    appId: string = this._appId,\n    version: string = this._appVersion\n  ) {\n    path = path.length != 0 && path[0] == '/' ? path.slice(1) : path;\n    let url = this.resolveAppDataEndpoint(context, appId);\n    url += `${version}/${path}`;\n    if (this._token) {\n      let headers = new HttpHeaders({ Authorization: `JWT ${this._token}` });\n      return this.http.get(url, { headers: headers });\n    } else {\n      return this.http.get(url, { withCredentials: true });\n    }\n  }\n\n  // ** set stored value at provided path **\n  appDataSet(\n    path: string,\n    value: any,\n    context: APPDATA_CONTEXT = APPDATA_CONTEXT.USER,\n    appId: string = this._appId,\n    version: string = this._appVersion\n  ) {\n    if (!path) {\n      return;\n    }\n    if (path[0] == '/') {\n      path = path.slice(1);\n    }\n    let ep = this.resolveAppDataEndpoint(context, appId);\n    if (!ep) {\n      return;\n    }\n    let url = `${ep}${version}/${path}`;\n    if (this._token) {\n      let headers = new HttpHeaders({ Authorization: `JWT ${this._token}` });\n      return this.http.post(url, value, { headers: headers });\n    } else {\n      return this.http.post(url, value, { withCredentials: true });\n    }\n  }\n\n  // ** update / patch stored values using Array of JSON patch objects **\n  appDataPatch(\n    value: Array<JSON_Patch>,\n    context: APPDATA_CONTEXT = APPDATA_CONTEXT.USER,\n    appId: string = this._appId,\n    version: string = this._appVersion\n  ) {\n    let ep = this.resolveAppDataEndpoint(context, appId);\n    if (!ep || !version) {\n      return;\n    }\n    let url = `${ep}${version}`;\n    if (this._token) {\n      let headers = new HttpHeaders({ Authorization: `JWT ${this._token}` });\n      return this.http.post(url, value, { headers: headers });\n    } else {\n      return this.http.post(url, value, { withCredentials: true });\n    }\n  }\n}\n","/*****************************\n * SignalKClient Module:\n *****************************/\n\nimport { NgModule } from '@angular/core';\nimport { provideHttpClient, withInterceptorsFromDi } from '@angular/common/http';\n\n@NgModule({ declarations: [],\n    exports: [], imports: [], providers: [provideHttpClient(withInterceptorsFromDi())] })\nexport class SignalKClientModule {}\n\nexport * from './signalk-client';\nexport * from './utils';\nexport * from './stream-api';\nexport * from './http-api';\nexport * from './apps-api';\n","/*\n * Public API Surface of signalk-client-angular\n */\n\nexport * from './lib/signalk-client.module';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i2.SignalKApps","i3.SignalKHttp","i4.SignalKStream"],"mappings":"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"}