@sprucelabs/mercury-client
Version:
The simple way to interact with the Spruce Experience Platform
90 lines (89 loc) • 3.27 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
const schema_1 = require("@sprucelabs/schema");
const spruce_event_utils_1 = require("@sprucelabs/spruce-event-utils");
const constants_1 = require("../constants");
const SpruceError_1 = __importDefault(require("../errors/SpruceError"));
const MutableContractClient_1 = __importDefault(require("./MutableContractClient"));
class MercuryClientFactory {
static async Client(connectionOptions) {
const { host: hostOption, contracts, reconnectDelayMs, allowSelfSignedCrt, emitTimeoutMs = this.timeoutMs, shouldReconnect, maxEmitRetries, connectionRetries, } = connectionOptions || {};
const host = hostOption ?? constants_1.DEFAULT_HOST;
if (host.substr(0, 4) !== 'http') {
throw new SpruceError_1.default({ code: 'INVALID_PROTOCOL', uri: host });
}
if (contracts && !Array.isArray(contracts)) {
throw new schema_1.SchemaError({
code: 'INVALID_PARAMETERS',
parameters: ['contracts'],
});
}
const eventContract = !contracts && this.defaultContract
? this.defaultContract
: //@ts-ignore
spruce_event_utils_1.eventContractUtil.unifyContracts(contracts ?? []);
let Client = MutableContractClient_1.default;
if (this.isTestMode) {
//TODO, make this something fitxures sets to make the test client available
Client = require('../clients/MercuryTestClient').default;
}
const client = new (MercuryClientFactory.ClientClass ??
//@ts-ignore
Client)({
host,
reconnection: false,
reconnectDelayMs,
rejectUnauthorized: !allowSelfSignedCrt,
eventContract,
emitTimeoutMs,
shouldReconnect,
maxEmitRetries,
connectionRetries,
});
await client.connect();
this.totalClients++;
this.clients.push(client);
return client;
}
static isInTestMode() {
return this.isTestMode;
}
static setIsTestMode(isTestMode) {
this.isTestMode = isTestMode;
}
static setDefaultContract(contract) {
this.defaultContract = contract;
}
static hasDefaultContract() {
return !!this.defaultContract;
}
static clearDefaultContract() {
this.defaultContract = undefined;
}
static resetTestClient() {
const Client = require('../clients/MercuryTestClient').default;
Client.reset();
}
static setDefaultTimeoutMs(ms) {
this.timeoutMs = ms;
}
static getTotalClients() {
return this.totalClients;
}
static reset() {
this.totalClients = 0;
this.clients = [];
this.resetTestClient();
}
static getClients() {
return this.clients;
}
}
MercuryClientFactory.isTestMode = false;
MercuryClientFactory.timeoutMs = 30000;
MercuryClientFactory.totalClients = 0;
MercuryClientFactory.clients = [];
exports.default = MercuryClientFactory;