UNPKG

salsify-experiences-sdk

Version:

SDK to be used by commerce websites to implement product experiences.

71 lines 2.5 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); const request_1 = __importDefault(require("../request")); const timeout_1 = __importDefault(require("../timeout")); const stagingBaseUrl = 'https://retail-client-events-service-staging.internal.salsify.com'; const stagingEventsEndpoint = `${stagingBaseUrl}/events`; const prodBaseUrl = 'https://retail-client-events-service.internal.salsify.com'; const prodEventsEndpoint = `${prodBaseUrl}/events`; const MAX_QUEUE_SIZE = 1000; class LogTransport { #context; #settings; #eventsEndpoint; #queuedEvents = []; #timeout; constructor(context, settings) { this.#context = context; this.#settings = settings; this.#eventsEndpoint = this.#settings.staging ? stagingEventsEndpoint : prodEventsEndpoint; } log(code, properties, context) { const event = { code: 'sdk_' + code, properties, context, timestamp: Date.now() / 1000, }; this.#send([event]); } async #send(logs) { const allLogs = [...this.#queuedEvents.splice(0), ...logs]; if (!allLogs.length) return; const payload = { app: 'sxp_sdk', channel: this.#context.clientId, csid: this.#context.sessionId, pagesessionid: this.#context.pageSessionId, jsSource: this.#context.jsSource, timestamp: Date.now() / 1000, logs: allLogs, }; let response; try { response = await request_1.default.post(this.#eventsEndpoint, payload); } catch (e) { this.#enqueueAndStartTimeout(allLogs); return; } if (response.ok) { this.#timeout?.clear(); } else { this.#enqueueAndStartTimeout(allLogs); } } #enqueueAndStartTimeout(logs) { if (this.#queuedEvents.length >= MAX_QUEUE_SIZE) return; this.#queuedEvents.push(...logs.splice(0, MAX_QUEUE_SIZE - this.#queuedEvents.length)); if (!this.#timeout) this.#timeout = new timeout_1.default(); this.#timeout.start(() => this.#send(this.#queuedEvents.splice(0))); } } exports.default = LogTransport; //# sourceMappingURL=log-service-transport.js.map