UNPKG

watchdog-grpc-sdk

Version:

JavaScript/Node.js SDK for Watchdog gRPC Service

124 lines 5.18 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.ProtobufTypes = exports.WatchdogClient = void 0; const grpc = __importStar(require("@grpc/grpc-js")); const watchdog_grpc_pb_1 = require("./generated/watchdog_grpc_pb"); const pb = __importStar(require("./generated/watchdog_pb")); exports.ProtobufTypes = pb; class WatchdogClient { constructor(options) { const { host, port, credentials = grpc.credentials.createInsecure(), timeout = 5000 } = options; const target = `${host}:${port}`; this.client = new watchdog_grpc_pb_1.WatchdogServiceClient(target, credentials); this.timeout = timeout; } /** * Generic method to call any gRPC service method dynamically */ callMethod(methodName, requestClass, requestData, responseFields) { return new Promise((resolve, reject) => { const request = new requestClass(); const metadata = new grpc.Metadata(); // Dynamically set request fields Object.entries(requestData).forEach(([key, value]) => { if (value !== undefined && value !== null) { const setterName = `set${key.charAt(0).toUpperCase() + key.slice(1)}`; if (typeof request[setterName] === 'function') { request[setterName](value); } } }); // Dynamically call the client method const clientMethod = this.client[methodName]; if (typeof clientMethod !== 'function') { reject(new Error(`Method ${methodName} not found on client`)); return; } clientMethod.call(this.client, request, metadata, { deadline: this.createDeadline() }, (error, response) => { if (error) { reject(new Error(`${methodName} failed: ${error.message}`)); return; } if (!response) { reject(new Error('No response received')); return; } // Dynamically extract response fields const result = {}; responseFields.forEach(field => { const getterName = `get${field.charAt(0).toUpperCase() + field.slice(1)}`; if (typeof response[getterName] === 'function') { result[field] = response[getterName](); } }); resolve(result); }); }); } getHealth() { return this.callMethod('getHealth', pb.HealthRequest, {}, ['status', 'message']); } registerService(service) { return this.callMethod('registerService', pb.RegisterServiceRequest, { name: service.name, endpoint: service.endpoint, type: service.type, }, ['serviceId', 'message']); } unregisterService(serviceId) { return this.callMethod('unregisterService', pb.UnregisterServiceRequest, { serviceId }, ['message']); } async listServices() { const result = await this.callMethod('listServices', pb.ListServicesRequest, {}, ['servicesList']); return result.servicesList; } updateService(update) { const requestData = { serviceId: update.serviceId, status: update.status, }; // Add optional fields if provided if (update.name) requestData.name = update.name; if (update.endpoint) requestData.endpoint = update.endpoint; if (update.type !== undefined) requestData.type = update.type; return this.callMethod('updateService', pb.UpdateServiceRequest, requestData, ['message']); } // Backward compatibility method for status-only updates updateServiceStatus(update) { return this.updateService(update); } close() { this.client.close(); } createDeadline() { return Date.now() + this.timeout; } } exports.WatchdogClient = WatchdogClient; //# sourceMappingURL=client.js.map