UNPKG

realm-object-server

Version:

Realm Object Server

71 lines 2.94 kB
"use strict"; var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { return new (P || (P = Promise))(function (resolve, reject) { function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); } step((generator = generator.apply(thisArg, _arguments || [])).next()); }); }; Object.defineProperty(exports, "__esModule", { value: true }); const JSONStream = require("json-stream"); const events_1 = require("events"); const __1 = require(".."); class ResourceWatcher extends events_1.EventEmitter { constructor(config) { super(); this.api = config.api; this.qs = config.qs || {}; this.logger = config.logger; } start(resourceVersion) { const qs = Object.assign({}, this.qs, { watch: true, resourceVersion }); this.stream = this.api.getStream({ qs }); this.currentResourceVersion = resourceVersion; this.stream.on("end", (err) => { this.logger.info("Watch stream ended, restarting"); delete this.stream; delete this.jsonStream; this.start(this.currentResourceVersion); }); this.stream.on("error", (err) => __awaiter(this, void 0, void 0, function* () { this.logger.warn(`Watch stream error, restarting in 1s. ${err}`); delete this.stream; delete this.jsonStream; yield __1.delay(1000); this.start(this.currentResourceVersion); })); this.jsonStream = new JSONStream(); this.stream.pipe(this.jsonStream); this.jsonStream.on("data", (event) => __awaiter(this, void 0, void 0, function* () { if (event.type === "ERROR") { yield this.stop(); } else if (event.object) { this.currentResourceVersion = event.object.metadata.resourceVersion; } if (event.type) { this.emit(event.type.toLowerCase(), event.object); } else if (event.kind === "Status") { this.emit("status", event); } else { this.logger.warn("Watch stream event received with no type", event); } })); } stop() { return __awaiter(this, void 0, void 0, function* () { if (this.stream) { this.stream.removeAllListeners(); delete this.stream; } if (this.jsonStream) { delete this.jsonStream; } }); } } exports.ResourceWatcher = ResourceWatcher; //# sourceMappingURL=ResourceWatcher.js.map