'use strict'; const cluster = require('./'); const utils = require('./utils'); const Base = require('sdk-base'); const is = require('is-type-of'); class APIClientBase extends Base { constructor(options) { options = options || {}; super(options); const wrapper = (options.cluster || cluster)( this.DataClient, this.clusterOptions ); for (const from in this.delegates) { const to = this.delegates[from]; wrapper.delegate(from, to); } this._client = wrapper.create(options); utils.delegateEvents(this._client, this); if (!options.initMethod) { this._client.ready(err => { this.ready(err ? err : true); }); } } get isClusterClientLeader() { return this._client.isClusterClientLeader; } close() { if (is.function(this._client.close)) { return this._client.close(); } return cluster.close(this._client); } get DataClient() { /* istanbul ignore next */ throw new Error('[APIClient] DataClient is required'); } /** * the cluster options * * @property {Object} APIClientBase#clusterOptions */ get clusterOptions() { /* istanbul ignore next */ return {}; } /** * the delegates map * * @example * --------------------------- * delegates => { * subscribe: 'subscribe', * foo: 'invoke', * } * * @property {Object} APIClientBase#delegates */ get delegates() { /* istanbul ignore next */ return {}; } } module.exports = APIClientBase;