"use strict"; /* * アクセストークンだけを標準出力するヘルパー * JWT組み立て・トークン取得の実体は lib/lineworksAuth.js (backup.js と共通) * * 使い方: * node get-token.js * → アクセストークン文字列だけが標準出力される(それ以外は何も出力しない) * * 必要な環境変数は .env に必ず設定すること(コード内にデフォルト値は持たない): * LW_CLIENT_ID / LW_CLIENT_SECRET / LW_SERVICE_ACCOUNT / LW_SCOPE * LW_PRIVATE_KEY または LW_PRIVATE_KEY_FILE * いずれかが未設定の場合は何も実行せずエラー終了する。 */ const fs = require("fs"); require("./lib/env").loadEnv(); const { getAccessToken, resolvePrivateKeyFile } = require("./lib/lineworksAuth"); const LW_CLIENT_ID = process.env.LW_CLIENT_ID; const LW_CLIENT_SECRET = process.env.LW_CLIENT_SECRET; const LW_SERVICE_ACCOUNT = process.env.LW_SERVICE_ACCOUNT; const LW_SCOPE = process.env.LW_SCOPE; const PRIVATE_KEY_FILE = resolvePrivateKeyFile(); function checkRequiredEnv() { const missing = []; if (!LW_CLIENT_ID) missing.push("LW_CLIENT_ID"); if (!LW_CLIENT_SECRET) missing.push("LW_CLIENT_SECRET"); if (!LW_SERVICE_ACCOUNT) missing.push("LW_SERVICE_ACCOUNT"); if (!LW_SCOPE) missing.push("LW_SCOPE"); if (!process.env.LW_PRIVATE_KEY && !fs.existsSync(PRIVATE_KEY_FILE)) { missing.push(`LW_PRIVATE_KEY_FILE (${PRIVATE_KEY_FILE} が存在しません)`); } return missing; } async function main() { const missing = checkRequiredEnv(); if (missing.length > 0) { process.stderr.write(`.env に必要な環境変数が設定されていません: ${missing.join(", ")}\n`); process.exitCode = 1; return; } // デバッグ用: 実際に使われている値をstderrに出力(トークン取得の可否には影響しない) process.stderr.write(`[DEBUG] LW_CLIENT_ID=${LW_CLIENT_ID}\n`); process.stderr.write(`[DEBUG] LW_SERVICE_ACCOUNT=${LW_SERVICE_ACCOUNT}\n`); process.stderr.write(`[DEBUG] LW_PRIVATE_KEY_FILE=${PRIVATE_KEY_FILE}\n`); process.stderr.write(`[DEBUG] 秘密鍵ファイル存在=${fs.existsSync(PRIVATE_KEY_FILE)}\n`); process.stderr.write(`[DEBUG] LW_SCOPE=${LW_SCOPE}\n`); try { const token = await getAccessToken({ scope: LW_SCOPE }); process.stdout.write(token); } catch (err) { process.stderr.write(`アクセストークン取得失敗: ${err.message}\n`); process.exitCode = 1; } } main();