UNPKG

@ultipa-graph/ultipa-node-sdk

Version:

NodeJS SDK for ultipa-server 4.0

178 lines 7.84 kB
"use strict"; var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { if (k2 === undefined) k2 = k; var desc = Object.getOwnPropertyDescriptor(m, k); if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { desc = { enumerable: true, get: function() { return m[k]; } }; } Object.defineProperty(o, k2, desc); }) : (function(o, m, k, k2) { if (k2 === undefined) k2 = k; o[k2] = m[k]; })); var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { Object.defineProperty(o, "default", { enumerable: true, value: v }); }) : function(o, v) { o["default"] = v; }); var __importStar = (this && this.__importStar) || function (mod) { if (mod && mod.__esModule) return mod; var result = {}; if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); __setModuleDefault(result, mod); return result; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.grpcNetworkManager = exports.UltipaClientAio = void 0; const ultipa_grpc_pb_1 = require("../proto/ultipa_grpc_pb"); const grpc_js_1 = require("@grpc/grpc-js"); const grpc = __importStar(require("@grpc/grpc-js")); const ultipa_pb_1 = require("../proto/ultipa_pb"); const testGrpc = false; class UltipaClientAio { constructor(address, credentials, options) { this.rpcsClient = new ultipa_grpc_pb_1.UltipaRpcsClient(address, credentials, options); this.controlsClient = new ultipa_grpc_pb_1.UltipaControlsClient(address, credentials, options); } close() { if (testGrpc) { console.log("********** close"); } this.rpcsClient.close(); this.controlsClient.close(); } isUnavailable() { let status = this.rpcsClient.getChannel().getConnectivityState(true); let status2 = this.controlsClient.getChannel().getConnectivityState(true); return status == grpc_js_1.connectivityState.SHUTDOWN || status2 == grpc_js_1.connectivityState.SHUTDOWN; } } exports.UltipaClientAio = UltipaClientAio; class GrpcNetworkManager { constructor() { this.testClose = false; this.clientCache = {}; this.timeIntervalMillionSeconds = 0; } keepConnectionAlive(timeIntervalSeconds) { this.clearTimeoutHandle(); // timeIntervalSeconds = timeIntervalSeconds || 5 this.timeIntervalMillionSeconds = timeIntervalSeconds * 1000; if (timeIntervalSeconds > 0) { this.timeoutHandle = setInterval(() => { if (this.log || testGrpc) { console.log("grpc alive", new Date()); } Object.keys(this.clientCache).forEach(key => { if (key) { try { let client = this.clientCache[key]; if (client) { if (this.testClose) { client.close(); this.testClose = false; } let req = new ultipa_pb_1.HelloUltipaRequest(); req.setName("alive"); let sayHellDel = (err, res) => { if (this.log) { console.log({ key, err_msg: err === null || err === void 0 ? void 0 : err.message, res_msg: res === null || res === void 0 ? void 0 : res.getStatus().getMsg() }); } if (err) { if (!testGrpc) { console.log("**********: ", err); } this.removeUltipaRpcsClientWithKey(key); } // if (err?.message.includes("14 UNAVAILABLE") // || err?.message.includes("1 CANCELLED") // || err?.message?.toLowerCase().includes("reset") // ) { // this.removeUltipaRpcsClientWithKey(key) // } }; client.rpcsClient.sayHello(req, sayHellDel); client.controlsClient.sayHello(req, sayHellDel); } } catch (error) { if (this.log) { console.log(error); } this.removeUltipaRpcsClientWithKey(key); } } }); }, this.timeIntervalMillionSeconds); } } removeConnectionAlive() { this.clearTimeoutHandle(); } clearTimeoutHandle() { if (this.timeoutHandle) { clearInterval(this.timeoutHandle); this.timeoutHandle = null; } } _cacheKey(host, crt) { let crtString = crt ? crt.toString() : ""; let cacheKey = host + crtString; return cacheKey; } removeUltipaRpcsClient(host, crt) { let key = this._cacheKey(host, crt); this.removeUltipaRpcsClientWithKey(key); } removeUltipaRpcsClientWithKey(key) { var _a; (_a = this.clientCache[key]) === null || _a === void 0 ? void 0 : _a.close(); this.clientCache[key] = null; } getUltipaRpcsClient(host, crt) { let cacheKey = this._cacheKey(host, crt); if (this.clientCache[cacheKey]) { try { if (this.clientCache[cacheKey].isUnavailable()) { this.removeUltipaRpcsClientWithKey(cacheKey); } } catch (err) { // maybe: UnhandledPromiseRejectionWarning: Error: Cannot call getConnectivityState on a closed Channel // console.log("GRPC Channel error: ", err); this.removeUltipaRpcsClientWithKey(cacheKey); } } if (!this.clientCache[cacheKey]) { let baseOpt = { "grpc.max_send_message_length": -1, "grpc.max_receive_message_length": -1, "grpc.keepalive_timeout_ms": 1500, }; if (!crt) { // http this.clientCache[cacheKey] = new UltipaClientAio(host, grpc.credentials.createInsecure(), baseOpt); } else { let crtString = crt.toString(); if (crtString == "https") { // https const ssl_cred = grpc.credentials.createSsl(); this.clientCache[cacheKey] = new UltipaClientAio(host, ssl_cred, baseOpt); } else { // ultipa自签证书 const ssl_cred = grpc.credentials.createSsl(crt); this.clientCache[cacheKey] = new UltipaClientAio(host, ssl_cred, Object.assign({ "grpc.ssl_target_name_override": "ultipa", "grpc.default_authority": "ultipa" }, baseOpt)); } } } return this.clientCache[cacheKey]; } } exports.grpcNetworkManager = new GrpcNetworkManager(); //# sourceMappingURL=network.manager.js.map