UNPKG

@sprucelabs/mercury-client

Version:

The simple way to interact with the Spruce Experience Platform

90 lines (89 loc) 3.27 kB
"use strict"; 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;