UNPKG

@tableau/taco-toolkit

Version:
206 lines 16.7 kB
"use strict"; var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } 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) : adopt(result.value).then(fulfilled, rejected); } step((generator = generator.apply(thisArg, _arguments || [])).next()); }); }; var __generator = (this && this.__generator) || function (thisArg, body) { var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g; return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g; function verb(n) { return function (v) { return step([n, v]); }; } function step(op) { if (f) throw new TypeError("Generator is already executing."); while (g && (g = 0, op[0] && (_ = 0)), _) try { if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t; if (y = 0, t) op = [op[0] & 2, t.value]; switch (op[0]) { case 0: case 1: t = op; break; case 4: _.label++; return { value: op[1], done: false }; case 5: _.label++; y = op[1]; op = [0]; continue; case 7: op = _.ops.pop(); _.trys.pop(); continue; default: if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; } if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; } if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; } if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; } if (t[2]) _.ops.pop(); _.trys.pop(); continue; } op = body.call(thisArg, _); } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; } if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true }; } }; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); var node_events_1 = __importDefault(require("node:events")); var node_path_1 = __importDefault(require("node:path")); var node_fs_1 = __importDefault(require("node:fs")); var eps_logger_1 = require("../../logging/eps-logger"); var eps_process_types_1 = require("../../types/eps-process-types"); var eps_api_1 = __importDefault(require("../api/eps-api")); var grpc_server_1 = require("../api/grpc/server/grpc-server"); var process_manager_1 = require("../components/process-manager"); var browser_watcher_1 = require("../services/browser-watcher"); var app_global_1 = __importDefault(require("./app-global")); var app_init_1 = require("./app-utils/app-init"); var port_file_1 = require("./app-utils/port-file"); var EpsApp = /** @class */ (function () { function EpsApp(options) { this.options = options; } EpsApp.prototype.startServices = function () { var _a; return __awaiter(this, void 0, void 0, function () { var enablements, epsApiPort, _b, apiOptions, browserWatcherPort, staticServerOptions, extractorLaunchedEvent, epsApi, portFileInfo, grpcServerPort, grpcServer; return __generator(this, function (_c) { switch (_c.label) { case 0: eps_logger_1.Logger.debug({ 'Eps App Options': this.options }); enablements = (0, app_init_1.getServiceEnablements)(this.options); if (!((_a = this.options.mainApiPort) !== null && _a !== void 0)) return [3 /*break*/, 1]; _b = _a; return [3 /*break*/, 3]; case 1: return [4 /*yield*/, app_global_1.default.portManager.reserveUnusedPort()]; case 2: _b = (_c.sent()); _c.label = 3; case 3: epsApiPort = _b; apiOptions = { epsApiPort: epsApiPort, callerId: this.options.callerId, callerType: this.options.callerType, epsInstanceId: this.options.epsInstanceId, networkOptions: this.options.networkOption, i18n: this.options.i18n, }; if (!enablements.browserWatcher) return [3 /*break*/, 6]; return [4 /*yield*/, app_global_1.default.portManager.reserveUnusedPort()]; case 4: browserWatcherPort = _c.sent(); return [4 /*yield*/, new browser_watcher_1.BrowserWatcher().start(browserWatcherPort)]; case 5: _c.sent(); apiOptions.browserWatcherPort = browserWatcherPort; _c.label = 6; case 6: if (!enablements.staticServer) return [3 /*break*/, 8]; return [4 /*yield*/, this.startStaticServerProcess()]; case 7: staticServerOptions = _c.sent(); apiOptions.staticServerOptions = staticServerOptions; _c.label = 8; case 8: extractorLaunchedEvent = new node_events_1.default(); epsApi = new eps_api_1.default(extractorLaunchedEvent, apiOptions); return [4 /*yield*/, epsApi.start()]; case 9: _c.sent(); portFileInfo = { epsApiPort: epsApiPort, epsInstanceId: this.options.epsInstanceId, }; if (apiOptions.staticServerOptions) { portFileInfo.staticServerOptions = apiOptions.staticServerOptions; } if (!enablements.grpcServer) return [3 /*break*/, 12]; return [4 /*yield*/, (0, app_init_1.getGrpcPort)(this.options)]; case 10: grpcServerPort = _c.sent(); portFileInfo.grpcServerPort = grpcServerPort; grpcServer = new grpc_server_1.GrpcServer(extractorLaunchedEvent, apiOptions); return [4 /*yield*/, grpcServer.start(grpcServerPort)]; case 11: _c.sent(); _c.label = 12; case 12: //This is hardcoded tactically for a shipblocker, will be replaced by proper taco initialization later if (this.options.featureFlags.EPSStaticTacoUnpack) { this.extractTacos('s3'); this.extractTacos('google_analytics_4'); } return [4 /*yield*/, (0, port_file_1.writePortFile)(this.options.portFilePath, portFileInfo)]; case 13: _c.sent(); return [2 /*return*/]; } }); }); }; EpsApp.prototype.startStaticServerProcess = function () { return __awaiter(this, void 0, void 0, function () { var staticServerOptions, staticServerAppPath, child, timeoutId; return __generator(this, function (_a) { switch (_a.label) { case 0: return [4 /*yield*/, (0, app_init_1.getStaticServerOptions)(this.options)]; case 1: staticServerOptions = _a.sent(); staticServerAppPath = node_path_1.default.resolve(__dirname, '../../static-server/static-server-app.js'); child = app_global_1.default.processManager.fork(eps_process_types_1.EPSProcessName.EPSStaticServer, process_manager_1.ProcessType.sibling, staticServerAppPath, [ this.options.epsInstanceId, this.options.connectorAppDir, staticServerOptions.staticServerPort.toString(), staticServerOptions.staticServerId, ]); timeoutId = setTimeout(function () { throw new Error('Static server failed to start within 30 seconds.'); }, 30000); return [4 /*yield*/, new Promise(function (resolve, reject) { child.on('message', function (message) { if (message.status === 'success') { clearTimeout(timeoutId); resolve(); } else { // note: this will be a deserialized plain object from an Error object reject(message.error); } }); child.on('error', function (error) { reject(error); }); })]; case 2: _a.sent(); return [2 /*return*/, staticServerOptions]; } }); }); }; EpsApp.prototype.extractTacos = function (connectorName) { var _this = this; var dir = '/opt/tableau/connectors'; node_fs_1.default.readdir(dir, function (err, files) { if (err) { console.error("Error reading directory ".concat(dir, ": ").concat(err)); return; } files.forEach(function (file) { return __awaiter(_this, void 0, void 0, function () { var tacoPath; return __generator(this, function (_a) { switch (_a.label) { case 0: if (!file.startsWith(connectorName)) return [3 /*break*/, 2]; tacoPath = node_path_1.default.resolve(dir, file); eps_logger_1.Logger.info('extractTacos path: ' + tacoPath); return [4 /*yield*/, app_global_1.default.tacoInitializer.ensureTacoInitialized('static', connectorName, tacoPath)]; case 1: _a.sent(); _a.label = 2; case 2: return [2 /*return*/]; } }); }); }); }); }; return EpsApp; }()); exports.default = EpsApp; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXBzLWFwcC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9lcHMvbWFpbi9jb3JlL2Vwcy1hcHAudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSw0REFBc0M7QUFDdEMsd0RBQTRCO0FBQzVCLG9EQUF3QjtBQUV4Qix1REFBaUQ7QUFJakQsbUVBQThEO0FBRTlELDJEQUFtQztBQUNuQyw4REFBMkQ7QUFDM0QsaUVBQTJEO0FBQzNELCtEQUE0RDtBQUM1RCw0REFBb0M7QUFDcEMsaURBQWlHO0FBQ2pHLG1EQUFtRTtBQUVuRTtJQUNFLGdCQUFvQixPQUFzQjtRQUF0QixZQUFPLEdBQVAsT0FBTyxDQUFlO0lBQUcsQ0FBQztJQUV4Qyw4QkFBYSxHQUFuQjs7Ozs7Ozt3QkFDRSxtQkFBTSxDQUFDLEtBQUssQ0FBQyxFQUFFLGlCQUFpQixFQUFFLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFBO3dCQUUzQyxXQUFXLEdBQUcsSUFBQSxnQ0FBcUIsRUFBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUE7b0NBRXBDLElBQUksQ0FBQyxPQUFPLENBQUMsV0FBVzs7OzRCQUFLLHFCQUFNLG9CQUFTLENBQUMsV0FBVyxDQUFDLGlCQUFpQixFQUFFLEVBQUE7O3dCQUFoRCxLQUFBLENBQUMsU0FBK0MsQ0FBQyxDQUFBOzs7d0JBQTFGLFVBQVUsS0FBZ0Y7d0JBRTFGLFVBQVUsR0FBa0I7NEJBQ2hDLFVBQVUsWUFBQTs0QkFDVixRQUFRLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFROzRCQUMvQixVQUFVLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxVQUFVOzRCQUNuQyxhQUFhLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxhQUFhOzRCQUN6QyxjQUFjLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxhQUFhOzRCQUMxQyxJQUFJLEVBQUUsSUFB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