#!/usr/bin/env node const chunks = []; for await (const chunk of process.stdin) chunks.push(chunk); const [appId, appSecret] = Buffer.concat(chunks).toString("utf8").split("\0"); if (!appId || !appSecret) throw new Error("Feishu App ID and App Secret are required on stdin"); const tokenResponse = await fetch("https://open.feishu.cn/open-apis/auth/v3/tenant_access_token/internal", { method: "POST", headers: { "content-type": "application/json; charset=utf-8" }, body: JSON.stringify({ app_id: appId, app_secret: appSecret }), }); if (!tokenResponse.ok) throw new Error(`Feishu token request failed: HTTP ${tokenResponse.status}`); const tokenPayload = await tokenResponse.json(); if (tokenPayload.code !== 0 || typeof tokenPayload.tenant_access_token !== "string") { throw new Error(`Feishu token request failed: ${JSON.stringify(tokenPayload)}`); } const botResponse = await fetch("https://open.feishu.cn/open-apis/bot/v3/info", { headers: { authorization: `Bearer ${tokenPayload.tenant_access_token}` }, }); if (!botResponse.ok) throw new Error(`Feishu bot info request failed: HTTP ${botResponse.status}`); const botPayload = await botResponse.json(); if (botPayload.code !== 0 || typeof botPayload.bot?.open_id !== "string" || !botPayload.bot.open_id) { throw new Error(`Feishu bot info request failed: ${JSON.stringify(botPayload)}`); } process.stdout.write(botPayload.bot.open_id);