64 lines
2.5 KiB
JavaScript
64 lines
2.5 KiB
JavaScript
"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();
|