@arifwidianto/rpc-agent
Version:
RPC Agent for both client and server, extends more methods easily
121 lines • 4.52 kB
JavaScript
;
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 __exportStar = (this && this.__exportStar) || function(m, exports) {
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.AgentClient = exports.AgentService = void 0;
const logger_1 = require("./utils/logger");
const rpc_service_1 = require("./services/rpc.service");
__exportStar(require("./services/rpc.service"), exports);
__exportStar(require("./interfaces"), exports);
class AgentService {
rpcService;
isShuttingDown = false;
extensionPath;
constructor(extensionPath = undefined, tcpPort, udpPort) {
this.extensionPath = extensionPath;
const _tcpPort = Number(process.env.PORT_TCP) || tcpPort || 9101;
const _udpPort = Number(process.env.PORT_UDP) || udpPort || 9102;
logger_1.logger.info("Starting RPC Agent Service", { tcpPort: _tcpPort, udpPort: _udpPort });
this.rpcService = new rpc_service_1.RPCService(this.extensionPath, _tcpPort, _udpPort);
this.setupSignalHandlers();
}
setupSignalHandlers() {
process.on("SIGTERM", () => this.shutdown());
process.on("SIGINT", () => this.shutdown());
logger_1.logger.info("Signal handlers initialized");
}
async start() {
try {
const { tcp, udp } = await this.rpcService.initialize();
logger_1.logger.info("Agent service initialized successfully", {
tcp,
udp,
});
return { tcp, udp };
}
catch (error) {
logger_1.logger.error("Failed to initialize RPC service", {
error: error.message,
stack: error instanceof Error ? error.stack : undefined,
});
return {
tcp: false,
udp: false,
};
}
}
async shutdown() {
if (this.isShuttingDown) {
return;
}
this.isShuttingDown = true;
logger_1.logger.info("Shutting down RPC Agent Service");
try {
await this.rpcService.shutdown(3000);
logger_1.logger.info("RPC Agent Service shutdown complete");
process.exit(0);
}
catch (error) {
logger_1.logger.error("Error during shutdown", {
error: error.message,
stack: error instanceof Error ? error.stack : undefined,
});
process.exit(1);
}
}
}
exports.AgentService = AgentService;
const client_node_1 = require("./client/library/client.node");
__exportStar(require("./client/library/client.node"), exports);
__exportStar(require("./client/library/interfaces"), exports);
class AgentClient {
client;
constructor(config, debug = false) {
this.client = new client_node_1.RpcClient(config, debug);
}
async init() {
await this.client.init();
}
send(method, params) {
return this.client.send(method, params);
}
close() {
this.client.close();
}
}
exports.AgentClient = AgentClient;
if (require.main === module) {
async function listen(extensionsPath = undefined) {
try {
const service = new AgentService(extensionsPath, Number(process.env.PORT_TCP || "9101") || 9101, Number(process.env.PORT_UDP || "9102") || 9102);
await service.start();
}
catch (error) {
logger_1.logger.error("Failed to start RPC Agent Service", {
error: error.message,
stack: error instanceof Error ? error.stack : undefined,
});
process.exit(1);
}
}
listen().catch((error) => {
logger_1.logger.error("Unhandled error in main", {
error: error instanceof Error ? error.message : String(error),
stack: error instanceof Error ? error.stack : undefined,
});
process.exit(1);
});
}
//# sourceMappingURL=index.js.map