fix: update for main logic
This commit is contained in:
55
src/index.ts
55
src/index.ts
@@ -1,18 +1,18 @@
|
||||
import "dotenv/config";
|
||||
import type { Server } from "node:http";
|
||||
import { loadConfig } from "./config.js";
|
||||
import { PostgresClient } from "./db/PostgresClient.js";
|
||||
import { EthersEthereumGateway } from "./ethereum/EthersEthereumGateway.js";
|
||||
import { createApp } from "./http/app.js";
|
||||
import { createLogger } from "./logger.js";
|
||||
import { AmqpClient } from "./queue/AmqpClient.js";
|
||||
import { VaultClient } from "./secrets/VaultClient.js";
|
||||
import { TransferOrchestrator } from "./services/TransferOrchestrator.js";
|
||||
import 'dotenv/config';
|
||||
import type {Server} from 'node:http';
|
||||
import {loadConfig,resolveEthereumConfig} from './config.js';
|
||||
import {PostgresClient} from './db/PostgresClient.js';
|
||||
import {EthersEthereumGateway} from './ethereum/EthersEthereumGateway.js';
|
||||
import {createApp} from './http/app.js';
|
||||
import {createLogger} from './logger.js';
|
||||
import {AmqpClient} from './queue/AmqpClient.js';
|
||||
import {VaultClient} from './secrets/VaultClient.js';
|
||||
import {TransferOrchestrator} from './services/TransferOrchestrator.js';
|
||||
|
||||
async function main(): Promise<void> {
|
||||
const config = loadConfig();
|
||||
const logger = createLogger(config.logLevel);
|
||||
logger.info({ event: "bootstrap.start" }, "starting usdt-transfer service");
|
||||
logger.info({ event: 'bootstrap.start' }, 'starting usdt-transfer service');
|
||||
|
||||
const vault = new VaultClient({
|
||||
addr: config.vaultAddr,
|
||||
@@ -21,16 +21,17 @@ async function main(): Promise<void> {
|
||||
secretId: config.vaultSecretId
|
||||
});
|
||||
const secrets = await vault.bootstrap();
|
||||
logger.info({ event: "bootstrap.vault_loaded" }, "vault secrets loaded");
|
||||
logger.info({ event: 'bootstrap.vault_loaded' }, 'vault secrets loaded');
|
||||
const ethereumConfig = resolveEthereumConfig(config, secrets.ethereum);
|
||||
|
||||
const db = new PostgresClient(secrets.database);
|
||||
await db.ping();
|
||||
logger.info({ event: "bootstrap.pg_ready" }, "postgres pool ready");
|
||||
logger.info({ event: 'bootstrap.pg_ready' }, 'postgres pool ready');
|
||||
|
||||
const ethereum = new EthersEthereumGateway({
|
||||
rpcUrl: config.ethRpcUrl,
|
||||
privateKey: config.hotWalletPrivateKey,
|
||||
usdtContractAddress: config.usdtContractAddress
|
||||
rpcUrl: ethereumConfig.ethRpcUrl,
|
||||
privateKey: ethereumConfig.hotWalletPrivateKey,
|
||||
usdtContractAddress: ethereumConfig.usdtContractAddress
|
||||
});
|
||||
|
||||
let triggerShutdown: (reason: string) => void = () => {};
|
||||
@@ -38,7 +39,7 @@ async function main(): Promise<void> {
|
||||
const amqp = new AmqpClient({
|
||||
secret: secrets.rabbitmq,
|
||||
logger,
|
||||
onConnectionLost: () => triggerShutdown("amqp_connection_lost")
|
||||
onConnectionLost: () => triggerShutdown('amqp_connection_lost')
|
||||
});
|
||||
await amqp.connect();
|
||||
|
||||
@@ -51,11 +52,11 @@ async function main(): Promise<void> {
|
||||
|
||||
await amqp.startConsumer((message, log) => orchestrator.handle(message, log));
|
||||
|
||||
const app = createApp({ ethereum, logger });
|
||||
const app = createApp({ ethereum, db, amqp, logger });
|
||||
const server: Server = await new Promise((resolve) => {
|
||||
const s = app.listen(config.port, () => resolve(s));
|
||||
});
|
||||
logger.info({ event: "bootstrap.http_listening", port: config.port }, "http listening");
|
||||
logger.info({ event: 'bootstrap.http_listening', port: config.port }, 'http listening');
|
||||
|
||||
let shuttingDown = false;
|
||||
triggerShutdown = (reason: string) => {
|
||||
@@ -63,29 +64,27 @@ async function main(): Promise<void> {
|
||||
return;
|
||||
}
|
||||
shuttingDown = true;
|
||||
logger.warn({ event: "shutdown.start", reason }, "shutting down");
|
||||
logger.warn({ event: 'shutdown.start', reason }, 'shutting down');
|
||||
|
||||
void (async () => {
|
||||
try {
|
||||
await new Promise<void>((resolve) => server.close(() => resolve()));
|
||||
await amqp.close();
|
||||
await db.close();
|
||||
logger.info({ event: "shutdown.done" }, "shutdown complete");
|
||||
process.exit(reason === "amqp_connection_lost" ? 1 : 0);
|
||||
logger.info({ event: 'shutdown.done' }, 'shutdown complete');
|
||||
process.exit(reason === 'amqp_connection_lost' ? 1 : 0);
|
||||
} catch (error) {
|
||||
logger.error({ event: "shutdown.error", err: error }, "shutdown error");
|
||||
logger.error({ event: 'shutdown.error', err: error }, 'shutdown error');
|
||||
process.exit(1);
|
||||
}
|
||||
})();
|
||||
};
|
||||
|
||||
process.on("SIGINT", () => triggerShutdown("SIGINT"));
|
||||
process.on("SIGTERM", () => triggerShutdown("SIGTERM"));
|
||||
process.on('SIGINT', () => triggerShutdown('SIGINT'));
|
||||
process.on('SIGTERM', () => triggerShutdown('SIGTERM'));
|
||||
}
|
||||
|
||||
main().catch((error) => {
|
||||
// Logger may not be ready yet; fall back to stderr.
|
||||
// eslint-disable-next-line no-console
|
||||
console.error("fatal bootstrap error:", error);
|
||||
console.error('fatal bootstrap error:', error);
|
||||
process.exit(1);
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user