forked from EduCraft/curriculum-project-hub
feat: automate managed silo provisioning
This commit is contained in:
Executable
+27
@@ -0,0 +1,27 @@
|
||||
#!/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);
|
||||
Reference in New Issue
Block a user