55 lines
1.7 KiB
TypeScript
55 lines
1.7 KiB
TypeScript
import { readFileSync } from "node:fs";
|
|
|
|
import type { ZaloConfig } from "./types.js";
|
|
import { DEFAULT_ACCOUNT_ID } from "./shared/account-ids.js";
|
|
|
|
export type ZaloTokenResolution = {
|
|
token: string;
|
|
source: "env" | "config" | "configFile" | "none";
|
|
};
|
|
|
|
export function resolveZaloToken(
|
|
config: ZaloConfig | undefined,
|
|
accountId?: string | null,
|
|
): ZaloTokenResolution {
|
|
const resolvedAccountId = accountId ?? DEFAULT_ACCOUNT_ID;
|
|
const isDefaultAccount = resolvedAccountId === DEFAULT_ACCOUNT_ID;
|
|
const baseConfig = config;
|
|
const accountConfig =
|
|
resolvedAccountId !== DEFAULT_ACCOUNT_ID
|
|
? (baseConfig?.accounts?.[resolvedAccountId] as ZaloConfig | undefined)
|
|
: undefined;
|
|
|
|
if (accountConfig) {
|
|
const token = accountConfig.botToken?.trim();
|
|
if (token) return { token, source: "config" };
|
|
const tokenFile = accountConfig.tokenFile?.trim();
|
|
if (tokenFile) {
|
|
try {
|
|
const fileToken = readFileSync(tokenFile, "utf8").trim();
|
|
if (fileToken) return { token: fileToken, source: "configFile" };
|
|
} catch {
|
|
// ignore read failures
|
|
}
|
|
}
|
|
}
|
|
|
|
if (isDefaultAccount) {
|
|
const token = baseConfig?.botToken?.trim();
|
|
if (token) return { token, source: "config" };
|
|
const tokenFile = baseConfig?.tokenFile?.trim();
|
|
if (tokenFile) {
|
|
try {
|
|
const fileToken = readFileSync(tokenFile, "utf8").trim();
|
|
if (fileToken) return { token: fileToken, source: "configFile" };
|
|
} catch {
|
|
// ignore read failures
|
|
}
|
|
}
|
|
const envToken = process.env.ZALO_BOT_TOKEN?.trim();
|
|
if (envToken) return { token: envToken, source: "env" };
|
|
}
|
|
|
|
return { token: "", source: "none" };
|
|
}
|