mirror of
https://github.com/SrIzan10/wacals.git
synced 2026-06-05 16:57:02 +00:00
feat: add init system
This commit is contained in:
@@ -8,6 +8,7 @@ ENV NODE_ENV=production \
|
||||
RUN apt-get update && apt-get install -y --no-install-recommends \
|
||||
chromium \
|
||||
ca-certificates \
|
||||
dumb-init \
|
||||
fonts-liberation \
|
||||
&& rm -rf /var/lib/apt/lists/*
|
||||
|
||||
@@ -18,4 +19,5 @@ COPY . .
|
||||
|
||||
EXPOSE 3000
|
||||
|
||||
ENTRYPOINT ["/usr/bin/dumb-init", "--"]
|
||||
CMD ["bun", "run", "src/index.ts"]
|
||||
|
||||
39
src/index.ts
39
src/index.ts
@@ -9,7 +9,10 @@ import { getEventStartTime } from "./utils/getEventStartTime";
|
||||
import { rmSync, existsSync } from "node:fs";
|
||||
import { join } from "node:path";
|
||||
|
||||
const sessionPath = join(process.cwd(), ".wwebjs_auth", "session");
|
||||
const authDataPath = join(process.cwd(), ".wwebjs_auth");
|
||||
const sessionPath = join(authDataPath, "session");
|
||||
|
||||
// remove singleton lock files that might be left from a previous run to prevent auth issues
|
||||
for (const name of ["SingletonLock", "SingletonCookie", "SingletonSocket"]) {
|
||||
const fullPath = join(sessionPath, name);
|
||||
if (existsSync(fullPath)) {
|
||||
@@ -20,7 +23,7 @@ for (const name of ["SingletonLock", "SingletonCookie", "SingletonSocket"]) {
|
||||
|
||||
const events = new EventEmitter();
|
||||
const wa = new Client({
|
||||
authStrategy: new LocalAuth(),
|
||||
authStrategy: new LocalAuth({ dataPath: authDataPath }),
|
||||
puppeteer: {
|
||||
args:
|
||||
process.env.NODE_ENV === "production"
|
||||
@@ -29,6 +32,33 @@ const wa = new Client({
|
||||
},
|
||||
});
|
||||
|
||||
let isShuttingDown = false;
|
||||
|
||||
const shutdown = async (signal: NodeJS.Signals) => {
|
||||
if (isShuttingDown) {
|
||||
return;
|
||||
}
|
||||
|
||||
isShuttingDown = true;
|
||||
console.log(`[APP] received ${signal}, shutting down`);
|
||||
|
||||
try {
|
||||
await wa.destroy();
|
||||
} catch (error) {
|
||||
console.error("[WA] failed to destroy client", error);
|
||||
} finally {
|
||||
process.exit(0);
|
||||
}
|
||||
};
|
||||
|
||||
process.once("SIGINT", () => {
|
||||
void shutdown("SIGINT");
|
||||
});
|
||||
|
||||
process.once("SIGTERM", () => {
|
||||
void shutdown("SIGTERM");
|
||||
});
|
||||
|
||||
wa.once("ready", async () => {
|
||||
console.log("[WA] client ready!");
|
||||
});
|
||||
@@ -62,7 +92,10 @@ events.on("eventUpdate", async ({ changes, previousEvent, currentEvent }) => {
|
||||
await wa.sendMessage(process.env.CHAT_ID!, message);
|
||||
});
|
||||
|
||||
wa.initialize();
|
||||
wa.initialize().catch((error) => {
|
||||
console.error("[WA] failed to initialize client", error);
|
||||
process.exit(1);
|
||||
});
|
||||
|
||||
Bun.serve({
|
||||
port: 3000,
|
||||
|
||||
Reference in New Issue
Block a user