var __create = Object.create;
var __defProp = Object.defineProperty;
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
var __getOwnPropNames = Object.getOwnPropertyNames;
var __getProtoOf = Object.getPrototypeOf;
var __hasOwnProp = Object.prototype.hasOwnProperty;
var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
var __export = (target, all) => {
for (var name in all)
__defProp(target, name, { get: all[name], enumerable: true });
};
var __copyProps = (to, from, except, desc) => {
if (from && typeof from === "object" || typeof from === "function") {
for (let key of __getOwnPropNames(from))
if (!__hasOwnProp.call(to, key) && key !== except)
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
}
return to;
};
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
// If the importer is in node compatibility mode or this is not an ESM
// file that has been converted to a CommonJS file using a Babel-
// compatible transform (i.e. "__esModule" has not been set), then set
// "default" to the CommonJS "module.exports" for node compatibility.
isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
mod
));
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
// src/index.ts
var src_exports = {};
__export(src_exports, {
Feishu: () => types_exports,
FeishuBot: () => LarkBot,
Lark: () => types_exports,
LarkBot: () => LarkBot,
default: () => src_default
});
module.exports = __toCommonJS(src_exports);
// src/bot.ts
var import_core5 = require("@satorijs/core");
// src/http.ts
var import_node_stream = require("node:stream");
var import_core2 = require("@satorijs/core");
// src/utils.ts
var import_crypto = __toESM(require("crypto"), 1);
var import_core = require("@satorijs/core");
function adaptSender(sender, session) {
let userId;
if ("sender_id" in sender) {
userId = sender.sender_id.open_id;
} else {
userId = sender.id;
}
session.userId = userId;
return session;
}
__name(adaptSender, "adaptSender");
async function adaptMessage(bot, data, session, details = true) {
const json = JSON.parse(data.message.content);
const assetEndpoint = (0, import_core.trimSlash)(bot.config.selfUrl ?? bot.ctx.server.config.selfUrl) + bot.config.path + "/assets";
const content = [];
switch (data.message.message_type) {
case "text": {
const text = json.text;
if (!data.message.mentions?.length) {
content.push(text);
break;
}
text.split(" ").forEach((word) => {
if (word.startsWith("@")) {
const mention = data.message.mentions.find((mention2) => mention2.key === word);
content.push(import_core.h.at(mention.id.open_id, { name: mention.name }));
} else {
content.push(word);
}
});
break;
}
case "image":
content.push(import_core.h.image(`${assetEndpoint}/image/${data.message.message_id}/${json.image_key}?self_id=${bot.selfId}`));
break;
case "audio":
content.push(import_core.h.audio(`${assetEndpoint}/file/${data.message.message_id}/${json.file_key}?self_id=${bot.selfId}`));
break;
case "media":
content.push(import_core.h.video(`${assetEndpoint}/file/${data.message.message_id}/${json.file_key}?self_id=${bot.selfId}`, json.image_key));
break;
case "file":
content.push(import_core.h.file(`${assetEndpoint}/file/${data.message.message_id}/${json.file_key}?self_id=${bot.selfId}`));
break;
}
session.timestamp = +data.message.create_time;
session.messageId = data.message.message_id;
session.channelId = data.message.chat_id;
session.guildId = data.message.chat_id;
session.content = content.map((c) => c.toString()).join(" ");
if (data.message.parent_id && details) {
session.quote = await bot.getMessage(session.channelId, data.message.parent_id, false);
}
return session;
}
__name(adaptMessage, "adaptMessage");
async function adaptSession(bot, body) {
const session = bot.session();
session.setInternal("lark", body);
switch (body.type) {
case "im.message.receive_v1":
session.type = "message";
session.subtype = body.event.message.chat_type;
if (session.subtype === "p2p") session.subtype = "private";
session.isDirect = session.subtype === "private";
adaptSender(body.event.sender, session);
await adaptMessage(bot, body.event, session);
break;
case "application.bot.menu_v6":
if (body.event.event_key.startsWith("command:")) {
session.type = "interaction/command";
session.content = body.event.event_key.slice(8);
session.channelId = body.event.operator.operator_id.open_id;
session.userId = body.event.operator.operator_id.open_id;
session.isDirect = true;
}
break;
case "card.action.trigger":
if (body.event.action.value?._satori_type === "command") {
session.type = "interaction/command";
let content = body.event.action.value.content;
const args = [], options = /* @__PURE__ */ Object.create(null);
for (const [key, value] of Object.entries(body.event.action.form_value ?? {})) {
if (+key * 0 === 0) {
args[+key] = value;
} else {
options[key] = value;
}
}
for (let i = 0; i < args.length; ++i) {
if (i in args) {
content += ` ${args[i]}`;
} else {
content += ` ''`;
}
}
for (const [key, value] of Object.entries(options)) {
content += ` --${key} ${value}`;
}
if (body.event.action.input_value) {
content += ` ${body.event.action.input_value}`;
}
session.content = content;
session.messageId = body.event.context.open_message_id;
session.channelId = body.event.context.open_chat_id;
session.guildId = body.event.context.open_chat_id;
session.userId = body.event.operator.open_id;
const chat = await bot.internal.getImChat(session.channelId);
session.isDirect = chat.chat_mode === "p2p";
}
break;
}
return session;
}
__name(adaptSession, "adaptSession");
async function decodeMessage(bot, body, details = true) {
const json = JSON.parse(body.body.content);
const assetEndpoint = (0, import_core.trimSlash)(bot.config.selfUrl ?? bot.ctx.server.config.selfUrl) + bot.config.path + "/assets";
const content = [];
switch (body.msg_type) {
case "text": {
const text = json.text;
if (!body.mentions?.length) {
content.push(import_core.h.text(text));
break;
}
text.split(" ").forEach((word) => {
if (word.startsWith("@")) {
const mention = body.mentions.find((mention2) => mention2.key === word);
content.push(import_core.h.at(mention.id, { name: mention.name }));
} else {
content.push(import_core.h.text(word));
}
});
break;
}
case "image":
content.push(import_core.h.image(`${assetEndpoint}/image/${body.message_id}/${json.image_key}?self_id=${bot.selfId}`));
break;
case "audio":
content.push(import_core.h.audio(`${assetEndpoint}/file/${body.message_id}/${json.file_key}?self_id=${bot.selfId}`));
break;
case "media":
content.push(import_core.h.video(`${assetEndpoint}/file/${body.message_id}/${json.file_key}?self_id=${bot.selfId}`, json.image_key));
break;
case "file":
content.push(import_core.h.file(`${assetEndpoint}/file/${body.message_id}/${json.file_key}?self_id=${bot.selfId}`));
break;
}
return {
timestamp: +body.update_time,
createdAt: +body.create_time,
updatedAt: +body.update_time,
id: body.message_id,
messageId: body.message_id,
user: {
id: body.sender.id
},
channel: {
id: body.chat_id,
type: import_core.Universal.Channel.Type.TEXT
},
content: content.map((c) => c.toString()).join(" "),
elements: content,
quote: body.upper_message_id && details ? await bot.getMessage(body.chat_id, body.upper_message_id, false) : void 0
};
}
__name(decodeMessage, "decodeMessage");
function extractIdType(id) {
if (id.startsWith("ou")) return "open_id";
if (id.startsWith("on")) return "union_id";
if (id.startsWith("oc")) return "chat_id";
if (id.includes("@")) return "email";
return "user_id";
}
__name(extractIdType, "extractIdType");
function decodeChannel(channelId, guild) {
return {
id: channelId,
type: import_core.Universal.Channel.Type.TEXT,
name: guild.name,
parentId: channelId
};
}
__name(decodeChannel, "decodeChannel");
function decodeGuild(guild) {
return {
id: guild.chat_id,
name: guild.name,
avatar: guild.avatar
};
}
__name(decodeGuild, "decodeGuild");
function decodeUser(user) {
return {
id: user.open_id,
avatar: user.avatar?.avatar_origin,
isBot: false,
name: user.name
};
}
__name(decodeUser, "decodeUser");
var Cipher = class {
static {
__name(this, "Cipher");
}
encryptKey;
key;
constructor(key) {
this.encryptKey = key;
const hash = import_crypto.default.createHash("sha256");
hash.update(key);
this.key = hash.digest();
}
decrypt(encrypt) {
const encryptBuffer = Buffer.from(encrypt, "base64");
const decipher = import_crypto.default.createDecipheriv("aes-256-cbc", this.key, encryptBuffer.slice(0, 16));
let decrypted = decipher.update(encryptBuffer.slice(16).toString("hex"), "hex", "utf8");
decrypted += decipher.final("utf8");
return decrypted;
}
calculateSignature(timestamp, nonce, body) {
const content = timestamp + nonce + this.encryptKey + body;
const sign = import_crypto.default.createHash("sha256").update(content).digest("hex");
return sign;
}
};
// src/http.ts
var HttpServer = class extends import_core2.Adapter {
static {
__name(this, "HttpServer");
}
static inject = ["server"];
logger;
ciphers = {};
constructor(ctx, bot) {
super(ctx);
this.logger = ctx.logger("lark");
}
fork(ctx, bot) {
super.fork(ctx, bot);
this._refreshCipher();
return bot.initialize();
}
async connect(bot) {
const { path } = bot.config;
bot.ctx.server.post(path, (ctx) => {
this._refreshCipher();
const signature = ctx.get("X-Lark-Signature");
const enabledSignatureVerify = this.bots.filter((bot2) => bot2.config.verifySignature);
if (signature && enabledSignatureVerify.length) {
const result = enabledSignatureVerify.some((bot2) => {
const timestamp = ctx.get("X-Lark-Request-Timestamp");
const nonce = ctx.get("X-Lark-Request-Nonce");
const body2 = ctx.request.body[Symbol.for("unparsedBody")];
const actualSignature = this.ciphers[bot2.config.appId]?.calculateSignature(timestamp, nonce, body2);
if (actualSignature === signature) return true;
else return false;
});
if (!result) return ctx.status = 403;
}
const body = this._tryDecryptBody(ctx.request.body);
if (body?.type === "url_verification" && body?.challenge && typeof body.challenge === "string") {
ctx.response.body = { challenge: body.challenge };
return;
}
const enabledVerifyTokenVerify = this.bots.filter((bot2) => bot2.config.verifyToken && bot2.config.verificationToken);
if (enabledVerifyTokenVerify.length) {
const token = ctx.request.body?.token;
if (token) {
const result = enabledVerifyTokenVerify.some((bot2) => {
if (token === bot2.config.verificationToken) return true;
else return false;
});
if (!result) return ctx.status = 403;
}
}
bot.logger.debug("received decryped event: %o", body);
this.dispatchSession(body);
ctx.body = {};
return ctx.status = 200;
});
bot.ctx.server.get(path + "/assets/:type/:message_id/:key", async (ctx) => {
const type = ctx.params.type === "image" ? "image" : "file";
const key = ctx.params.key;
const messageId = ctx.params.message_id;
const selfId = ctx.request.query.self_id;
const bot2 = this.bots.find((bot3) => bot3.selfId === selfId);
if (!bot2) return ctx.status = 404;
const resp = await bot2.http(`/im/v1/messages/${messageId}/resources/${key}`, {
method: "GET",
params: { type },
responseType: "stream"
});
ctx.set("content-type", resp.headers.get("content-type"));
ctx.status = 200;
ctx.response.body = import_node_stream.Readable.fromWeb(resp.data);
});
}
async dispatchSession(body) {
const { header } = body;
if (!header) return;
const { app_id, event_type } = header;
body.type = event_type;
const bot = this.bots.find((bot2) => bot2.appId === app_id);
const session = await adaptSession(bot, body);
bot.dispatch(session);
}
_tryDecryptBody(body) {
this._refreshCipher();
const ciphers = Object.values(this.ciphers);
if (ciphers.length && typeof body.encrypt === "string") {
for (const cipher of ciphers) {
try {
return JSON.parse(cipher.decrypt(body.encrypt));
} catch {
}
}
this.logger.warn("failed to decrypt message: %o", body);
}
if (typeof body.encrypt === "string" && !ciphers.length) {
this.logger.warn("encryptKey is not set, but received encrypted message: %o", body);
}
return body;
}
_refreshCipher() {
const ciphers = Object.keys(this.ciphers);
const bots = this.bots.map((bot) => bot.config.appId);
if (bots.length === ciphers.length && bots.every((bot) => ciphers.includes(bot))) return;
this.ciphers = {};
for (const bot of this.bots) {
this.ciphers[bot.config.appId] = new Cipher(bot.config.encryptKey);
}
}
};
((HttpServer2) => {
HttpServer2.createConfig = /* @__PURE__ */ __name((path) => import_core2.Schema.object({
path: import_core2.Schema.string().role("url").description("要连接的服务器地址。").default(path),
selfUrl: import_core2.Schema.string().role("link").description("服务器暴露在公网的地址。缺省时将使用全局配置。"),
verifyToken: import_core2.Schema.boolean().description("是否验证令牌。"),
verifySignature: import_core2.Schema.boolean().description("是否验证签名。")
}).description("服务端设置"), "createConfig");
})(HttpServer || (HttpServer = {}));
// src/message.ts
var import_core3 = require("@satorijs/core");
var LarkMessageEncoder = class extends import_core3.MessageEncoder {
static {
__name(this, "LarkMessageEncoder");
}
quote;
textContent = "";
richContent = [];
card;
noteElements;
actionElements = [];
async post(data) {
try {
let resp;
if (this.quote?.id) {
resp = await this.bot.internal.replyImMessage(this.quote.id, {
...data,
reply_in_thread: this.quote.replyInThread
});
} else {
data.receive_id = this.channelId;
resp = await this.bot.internal.createImMessage(data, {
receive_id_type: extractIdType(this.channelId)
});
}
const session = this.bot.session();
session.messageId = resp.message_id;
session.timestamp = Number(resp.create_time) * 1e3;
session.userId = resp.sender.id;
session.channelId = this.channelId;
session.guildId = this.guildId;
session.app.emit(session, "send", session);
this.results.push(session.event.message);
} catch (e) {
if (this.bot.http.isError(e)) {
if (e.response?.data?.code) {
const generalErrorMsg = `Check error code at https://open.larksuite.com/document/server-docs/getting-started/server-error-codes`;
e.message += ` (Lark error code ${e.response.data.code}: ${e.response.data.msg ?? generalErrorMsg})`;
}
}
this.errors.push(e);
}
}
flushText(button = false) {
if ((this.textContent || !button) && this.actionElements.length) {
this.card.elements.push({ tag: "action", actions: this.actionElements, layout: "flow" });
this.actionElements = [];
}
if (this.textContent) {
this.richContent.push([{ tag: "md", text: this.textContent }]);
if (this.noteElements) {
this.noteElements.push({ tag: "plain_text", content: this.textContent });
} else if (this.card) {
this.card.elements.push({ tag: "markdown", content: this.textContent });
}
this.textContent = "";
}
}
async flush() {
this.flushText();
if (!this.card && !this.richContent.length) return;
if (this.card) {
this.bot.logger.debug("card", JSON.stringify(this.card.elements));
await this.post({
msg_type: "interactive",
content: JSON.stringify({
elements: this.card.elements
})
});
} else {
await this.post({
msg_type: "post",
content: JSON.stringify({
zh_cn: {
content: this.richContent
}
})
});
}
this.quote = void 0;
this.textContent = "";
this.richContent = [];
this.card = void 0;
}
async createImage(url) {
const { filename, type, data } = await this.bot.assetsQuester.file(url);
const { image_key } = await this.bot.internal.createImImage({
image_type: "message",
image: new File([data], filename, { type })
});
return image_key;
}
async sendFile(_type, attrs) {
const url = attrs.src || attrs.url;
const { filename, type, data } = await this.bot.assetsQuester.file(url);
let file_type;
if (_type === "audio") {
file_type = "opus";
} else if (_type === "video") {
file_type = "mp4";
} else {
const ext = filename.split(".").pop();
if (["doc", "xls", "ppt", "pdf"].includes(ext)) {
file_type = ext;
} else {
file_type = "stream";
}
}
const form = {
file_type,
file: new File([data], filename, { type }),
file_name: filename
};
if (attrs.duration) {
form.duration = attrs.duration;
}
const { file_key } = await this.bot.internal.createImFile(form);
await this.post({
msg_type: _type === "video" ? "media" : _type,
content: JSON.stringify({ file_key })
});
}
createBehavior(attrs) {
const behaviors = [];
if (attrs.type === "link") {
behaviors.push({
type: "open_url",
default_url: attrs.href
});
} else if (attrs.type === "input") {
behaviors.push({
type: "callback",
value: {
_satori_type: "command",
content: attrs.text
}
});
} else if (attrs.type === "action") {
}
return behaviors.length ? behaviors : void 0;
}
async visit(element) {
const { type, attrs, children } = element;
if (type === "text") {
this.textContent += attrs.content;
} else if (type === "at") {
if (attrs.type === "all") {
this.textContent += `${attrs.name ?? "所有人"}`;
} else {
this.textContent += `${attrs.name}`;
}
} else if (type === "a") {
await this.render(children);
if (attrs.href) this.textContent += ` (${attrs.href})`;
} else if (type === "p") {
if (!this.textContent.endsWith("\n")) this.textContent += "\n";
await this.render(children);
if (!this.textContent.endsWith("\n")) this.textContent += "\n";
} else if (type === "br") {
this.textContent += "\n";
} else if (type === "sharp") {
} else if (type === "quote") {
await this.flush();
this.quote = attrs;
} else if (type === "img" || type === "image") {
const image_key = await this.createImage(attrs.src || attrs.url);
this.textContent += `![${attrs.alt ?? "图片"}](${image_key})`;
this.flushText();
this.richContent.push([{ tag: "img", image_key }]);
} else if (["video", "audio", "file"].includes(type)) {
await this.flush();
await this.sendFile(type, attrs);
} else if (type === "figure" || type === "message") {
await this.flush();
await this.render(children, true);
} else if (type === "hr") {
this.flushText();
this.richContent.push([{ tag: "hr" }]);
this.card?.elements.push({ tag: "hr" });
} else if (type === "form") {
this.flushText();
const length = this.card?.elements.length;
await this.render(children);
if (this.card?.elements.length > length) {
const elements = this.card?.elements.slice(length);
this.card.elements.push({
tag: "form",
name: attrs.name || "Form",
elements
});
}
} else if (type === "input") {
this.flushText();
this.card?.elements.push({
tag: "action",
actions: [{
tag: "input",
name: attrs.name,
width: attrs.width,
label: attrs.label && {
tag: "plain_text",
content: attrs.label
},
placeholder: attrs.placeholder && {
tag: "plain_text",
content: attrs.placeholder
},
behaviors: this.createBehavior(attrs)
}]
});
} else if (type === "button") {
this.card ??= { elements: [] };
this.flushText(true);
await this.render(children);
this.actionElements.push({
tag: "button",
text: {
tag: "plain_text",
content: this.textContent
},
disabled: attrs.disabled,
behaviors: this.createBehavior(attrs),
type: attrs["lark:type"],
size: attrs["lark:size"],
width: attrs["lark:width"],
icon: attrs["lark:icon"] && {
tag: "standard_icon",
token: attrs["lark:icon"]
},
hover_tips: attrs["lark:hover-tips"] && {
tag: "plain_text",
content: attrs["lark:hover-tips"]
},
disabled_tips: attrs["lark:disabled-tips"] && {
tag: "plain_text",
content: attrs["lark:disabled-tips"]
}
});
this.textContent = "";
} else if (type === "button-group") {
this.flushText();
await this.render(children);
this.flushText();
} else if (type.startsWith("lark:") || type.startsWith("feishu:")) {
const tag = type.slice(type.split(":", 1)[0].length + 1);
if (tag === "share-chat") {
await this.flush();
await this.post({
msg_type: "share_chat",
content: JSON.stringify({ chat_id: attrs.chatId })
});
} else if (tag === "share-user") {
await this.flush();
await this.post({
msg_type: "share_user",
content: JSON.stringify({ user_id: attrs.userId })
});
} else if (tag === "system") {
await this.flush();
await this.render(children);
await this.post({
msg_type: "system",
content: JSON.stringify({
type: "divider",
params: { divider_text: { text: this.textContent } },
options: { need_rollup: attrs.needRollup }
})
});
this.textContent = "";
} else if (tag === "card") {
await this.flush();
this.card = {
elements: [],
header: attrs.title && {
template: attrs.color,
ud_icon: attrs.icon && {
tag: "standard_icon",
token: attrs.icon
},
title: {
tag: "plain_text",
content: attrs.title
},
subtitle: attrs.subtitle && {
tag: "plain_text",
content: attrs.subtitle
}
}
};
await this.render(children, true);
} else if (tag === "div") {
this.flushText();
await this.render(children);
this.card?.elements.push({
tag: "markdown",
text_align: attrs.align,
text_size: attrs.size,
content: this.textContent
});
this.textContent = "";
} else if (tag === "note") {
this.flushText();
this.noteElements = [];
await this.render(children);
this.flushText();
this.card?.elements.push({
tag: "note",
elements: this.noteElements
});
this.noteElements = void 0;
} else if (tag === "icon") {
this.flushText();
this.noteElements?.push({
tag: "standard_icon",
token: attrs.token
});
}
} else {
await this.render(children);
}
}
};
// src/types/index.ts
var types_exports = {};
__export(types_exports, {
Internal: () => Internal
});
// src/types/internal.ts
var import_core4 = require("@satorijs/core");
var Internal = class _Internal {
constructor(bot) {
this.bot = bot;
}
static {
__name(this, "Internal");
}
_assertResponse(response) {
if (!response.data.code) return;
this.bot.logger.debug("response: %o", response.data);
const error = new import_core4.HTTP.Error(`request failed`);
error.response = response;
throw error;
}
_buildData(arg, options) {
if (options.multipart) {
const form = new FormData();
for (const [key, value] of Object.entries(arg)) {
if (value instanceof File) {
form.append(key, value, value.name);
} else {
form.append(key, value);
}
}
return form;
} else {
return arg;
}
}
static define(routes, options = {}) {
for (const path in routes) {
for (const key in routes[path]) {
const method = key;
for (const name of (0, import_core4.makeArray)(routes[path][method])) {
_Internal.prototype[name] = async function(...args) {
const raw = args.join(", ");
const url = path.replace(/\{([^}]+)\}/g, () => {
if (!args.length) throw new Error(`too few arguments for ${path}, received ${raw}`);
return args.shift();
});
const config = {};
if (args.length === 1) {
if (method === "GET" || method === "DELETE") {
config.params = args[0];
} else {
config.data = this._buildData(args[0], options);
}
} else if (args.length === 2 && method !== "GET" && method !== "DELETE") {
config.data = this._buildData(args[0], options);
config.params = args[1];
} else if (args.length > 1) {
throw new Error(`too many arguments for ${path}, received ${raw}`);
}
const response = await this.bot.http(method, url, config);
this._assertResponse(response);
return options.noExtractData ? response.data : response.data.data;
};
}
}
}
}
};
// src/types/api.ts
Internal.define({
"/auth/v3/tenant_access_token/internal": {
POST: "tenantAccessTokenInternalAuth"
},
"/auth/v3/app_access_token/internal": {
POST: "appAccessTokenInternalAuth"
},
"/auth/v3/app_access_token": {
POST: "appAccessTokenAuth"
},
"/auth/v3/tenant_access_token": {
POST: "tenantAccessTokenAuth"
},
"/auth/v3/app_ticket/resend": {
POST: "appTicketResendAuth"
}
}, { noExtractData: true });
Internal.define({
"/event/v1/outbound_ip": {
GET: "listEventOutboundIp"
},
"/authen/v1/oidc/access_token": {
POST: "createAuthenOidcAccessToken"
},
"/authen/v1/oidc/refresh_access_token": {
POST: "createAuthenOidcRefreshAccessToken"
},
"/authen/v1/user_info": {
GET: "getAuthenUserInfo"
},
"/passport/v1/sessions/query": {
POST: "queryPassportSession"
},
"/contact/v3/scopes": {
GET: "listContactScope"
},
"/contact/v3/users": {
POST: "createContactUser",
GET: "listContactUser"
},
"/contact/v3/users/{user_id}": {
DELETE: "deleteContactUser",
PATCH: "patchContactUser",
GET: "getContactUser",
PUT: "updateContactUser"
},
"/contact/v3/users/{user_id}/resurrect": {
POST: "resurrectContactUser"
},
"/contact/v3/users/batch": {
GET: "batchContactUser"
},
"/contact/v3/users/find_by_department": {
GET: "findByDepartmentContactUser"
},
"/contact/v3/users/batch_get_id": {
POST: "batchGetIdContactUser"
},
"/contact/v3/users/{user_id}/update_user_id": {
PATCH: "updateUserIdContactUser"
},
"/contact/v3/group": {
POST: "createContactGroup"
},
"/contact/v3/group/{group_id}": {
DELETE: "deleteContactGroup",
PATCH: "patchContactGroup",
GET: "getContactGroup"
},
"/contact/v3/group/simplelist": {
GET: "simplelistContactGroup"
},
"/contact/v3/group/member_belong": {
GET: "memberBelongContactGroup"
},
"/contact/v3/custom_attrs": {
GET: "listContactCustomAttr"
},
"/contact/v3/employee_type_enums": {
POST: "createContactEmployeeTypeEnum",
GET: "listContactEmployeeTypeEnum"
},
"/contact/v3/employee_type_enums/{enum_id}": {
DELETE: "deleteContactEmployeeTypeEnum",
PUT: "updateContactEmployeeTypeEnum"
},
"/contact/v3/departments": {
POST: "createContactDepartment",
GET: "listContactDepartment"
},
"/contact/v3/departments/{department_id}": {
DELETE: "deleteContactDepartment",
PATCH: "patchContactDepartment",
PUT: "updateContactDepartment",
GET: "getContactDepartment"
},
"/contact/v3/departments/unbind_department_chat": {
POST: "unbindDepartmentChatContactDepartment"
},
"/contact/v3/departments/batch": {
GET: "batchContactDepartment"
},
"/contact/v3/departments/{department_id}/children": {
GET: "childrenContactDepartment"
},
"/contact/v3/departments/parent": {
GET: "parentContactDepartment"
},
"/contact/v3/departments/search": {
POST: "searchContactDepartment"
},
"/contact/v3/departments/{department_id}/update_department_id": {
PATCH: "updateDepartmentIdContactDepartment"
},
"/contact/v3/unit": {
POST: "createContactUnit",
GET: "listContactUnit"
},
"/contact/v3/unit/{unit_id}": {
DELETE: "deleteContactUnit",
PATCH: "patchContactUnit",
GET: "getContactUnit"
},
"/contact/v3/unit/bind_department": {
POST: "bindDepartmentContactUnit"
},
"/contact/v3/unit/unbind_department": {
POST: "unbindDepartmentContactUnit"
},
"/contact/v3/unit/list_department": {
GET: "listDepartmentContactUnit"
},
"/contact/v3/group/{group_id}/member/add": {
POST: "addContactGroupMember"
},
"/contact/v3/group/{group_id}/member/batch_add": {
POST: "batchAddContactGroupMember"
},
"/contact/v3/group/{group_id}/member/remove": {
POST: "removeContactGroupMember"
},
"/contact/v3/group/{group_id}/member/batch_remove": {
POST: "batchRemoveContactGroupMember"
},
"/contact/v3/group/{group_id}/member/simplelist": {
GET: "simplelistContactGroupMember"
},
"/contact/v3/functional_roles": {
POST: "createContactFunctionalRole"
},
"/contact/v3/functional_roles/{role_id}": {
DELETE: "deleteContactFunctionalRole",
PUT: "updateContactFunctionalRole"
},
"/contact/v3/functional_roles/{role_id}/members/batch_create": {
POST: "batchCreateContactFunctionalRoleMember"
},
"/contact/v3/functional_roles/{role_id}/members/batch_delete": {
PATCH: "batchDeleteContactFunctionalRoleMember"
},
"/contact/v3/functional_roles/{role_id}/members/scopes": {
PATCH: "scopesContactFunctionalRoleMember"
},
"/contact/v3/functional_roles/{role_id}/members/{member_id}": {
GET: "getContactFunctionalRoleMember"
},
"/contact/v3/functional_roles/{role_id}/members": {
GET: "listContactFunctionalRoleMember"
},
"/contact/v3/job_levels": {
POST: "createContactJobLevel",
GET: "listContactJobLevel"
},
"/contact/v3/job_levels/{job_level_id}": {
DELETE: "deleteContactJobLevel",
PUT: "updateContactJobLevel",
GET: "getContactJobLevel"
},
"/contact/v3/job_families": {
POST: "createContactJobFamily",
GET: "listContactJobFamily"
},
"/contact/v3/job_families/{job_family_id}": {
DELETE: "deleteContactJobFamily",
PUT: "updateContactJobFamily",
GET: "getContactJobFamily"
},
"/contact/v3/job_titles/{job_title_id}": {
GET: "getContactJobTitle"
},
"/contact/v3/job_titles": {
GET: "listContactJobTitle"
},
"/contact/v3/work_cities/{work_city_id}": {
GET: "getContactWorkCity"
},
"/contact/v3/work_cities": {
GET: "listContactWorkCity"
},
"/im/v1/messages": {
POST: "createImMessage",
GET: "listImMessage"
},
"/im/v1/messages/{message_id}/reply": {
POST: "replyImMessage"
},
"/im/v1/messages/{message_id}": {
PUT: "updateImMessage",
DELETE: "deleteImMessage",
GET: "getImMessage",
PATCH: "patchImMessage"
},
"/im/v1/messages/{message_id}/forward": {
POST: "forwardImMessage"
},
"/im/v1/messages/merge_forward": {
POST: "mergeForwardImMessage"
},
"/im/v1/threads/{thread_id}/forward": {
POST: "forwardImThread"
},
"/im/v1/messages/{message_id}/read_users": {
GET: "readUsersImMessage"
},
"/im/v1/messages/{message_id}/resources/{file_key}": {
GET: "getImMessageResource"
},
"/im/v1/messages/{message_id}/urgent_app": {
PATCH: "urgentAppImMessage"
},
"/im/v1/messages/{message_id}/urgent_sms": {
PATCH: "urgentSmsImMessage"
},
"/im/v1/messages/{message_id}/urgent_phone": {
PATCH: "urgentPhoneImMessage"
},
"/im/v1/batch_messages/{batch_message_id}": {
DELETE: "deleteImBatchMessage"
},
"/im/v1/batch_messages/{batch_message_id}/read_user": {
GET: "readUserImBatchMessage"
},
"/im/v1/batch_messages/{batch_message_id}/get_progress": {
GET: "getProgressImBatchMessage"
},
"/im/v1/images/{image_key}": {
GET: "getImImage"
},
"/im/v1/files/{file_key}": {
GET: "getImFile"
},
"/im/v1/messages/{message_id}/reactions": {
POST: "createImMessageReaction",
GET: "listImMessageReaction"
},
"/im/v1/messages/{message_id}/reactions/{reaction_id}": {
DELETE: "deleteImMessageReaction"
},
"/im/v1/pins": {
POST: "createImPin",
GET: "listImPin"
},
"/im/v1/pins/{message_id}": {
DELETE: "deleteImPin"
},
"/im/v1/chats": {
POST: "createImChat",
GET: "listImChat"
},
"/im/v1/chats/{chat_id}": {
DELETE: "deleteImChat",
PUT: "updateImChat",
GET: "getImChat"
},
"/im/v1/chats/{chat_id}/moderation": {
PUT: "updateImChatModeration",
GET: "getImChatModeration"
},
"/im/v1/chats/{chat_id}/top_notice/put_top_notice": {
POST: "putTopNoticeImChatTopNotice"
},
"/im/v1/chats/{chat_id}/top_notice/delete_top_notice": {
POST: "deleteTopNoticeImChatTopNotice"
},
"/im/v1/chats/search": {
GET: "searchImChat"
},
"/im/v1/chats/{chat_id}/link": {
POST: "linkImChat"
},
"/im/v1/chats/{chat_id}/managers/add_managers": {
POST: "addManagersImChatManagers"
},
"/im/v1/chats/{chat_id}/managers/delete_managers": {
POST: "deleteManagersImChatManagers"
},
"/im/v1/chats/{chat_id}/members": {
POST: "createImChatMembers",
DELETE: "deleteImChatMembers",
GET: "getImChatMembers"
},
"/im/v1/chats/{chat_id}/members/me_join": {
PATCH: "meJoinImChatMembers"
},
"/im/v1/chats/{chat_id}/members/is_in_chat": {
GET: "isInChatImChatMembers"
},
"/im/v1/chats/{chat_id}/announcement": {
PATCH: "patchImChatAnnouncement",
GET: "getImChatAnnouncement"
},
"/im/v1/chats/{chat_id}/chat_tabs": {
POST: "createImChatTab"
},
"/im/v1/chats/{chat_id}/chat_tabs/delete_tabs": {
DELETE: "deleteTabsImChatTab"
},
"/im/v1/chats/{chat_id}/chat_tabs/update_tabs": {
POST: "updateTabsImChatTab"
},
"/im/v1/chats/{chat_id}/chat_tabs/sort_tabs": {
POST: "sortTabsImChatTab"
},
"/im/v1/chats/{chat_id}/chat_tabs/list_tabs": {
GET: "listTabsImChatTab"
},
"/im/v1/chats/{chat_id}/menu_tree": {
POST: "createImChatMenuTree",
DELETE: "deleteImChatMenuTree",
GET: "getImChatMenuTree"
},
"/im/v1/chats/{chat_id}/menu_items/{menu_item_id}": {
PATCH: "patchImChatMenuItem"
},
"/im/v1/chats/{chat_id}/menu_tree/sort": {
POST: "sortImChatMenuTree"
},
"/drive/v1/files": {
GET: "listDrivev1File"
},
"/drive/v1/files/create_folder": {
POST: "createFolderDrivev1File"
},
"/drive/v1/metas/batch_query": {
POST: "batchQueryDrivev1Meta"
},
"/drive/v1/files/{file_token}/statistics": {
GET: "getDrivev1FileStatistics"
},
"/drive/v1/files/{file_token}/copy": {
POST: "copyDrivev1File"
},
"/drive/v1/files/{file_token}/move": {
POST: "moveDrivev1File"
},
"/drive/v1/files/{file_token}": {
DELETE: "deleteDrivev1File"
},
"/drive/v1/files/create_shortcut": {
POST: "createShortcutDrivev1File"
},
"/drive/v1/files/task_check": {
GET: "taskCheckDrivev1File"
},
"/drive/v1/medias/{file_token}/download": {
GET: "downloadDrivev1Media"
},
"/drive/v1/medias/batch_get_tmp_download_url": {
GET: "batchGetTmpDownloadUrlDrivev1Media"
},
"/drive/v1/medias/upload_prepare": {
POST: "uploadPrepareDrivev1Media"
},
"/drive/v1/medias/upload_finish": {
POST: "uploadFinishDrivev1Media"
},
"/drive/v1/files/{file_token}/subscribe": {
POST: "subscribeDrivev1File"
},
"/drive/v1/files/{file_token}/delete_subscribe": {
DELETE: "deleteSubscribeDrivev1File"
},
"/drive/v1/files/{file_token}/get_subscribe": {
GET: "getSubscribeDrivev1File"
},
"/drive/v1/files/upload_prepare": {
POST: "uploadPrepareDrivev1File"
},
"/drive/v1/files/upload_finish": {
POST: "uploadFinishDrivev1File"
},
"/drive/v1/files/{file_token}/download": {
GET: "downloadDrivev1File"
},
"/drive/v1/import_tasks": {
POST: "createDrivev1ImportTask"
},
"/drive/v1/import_tasks/{ticket}": {
GET: "getDrivev1ImportTask"
},
"/drive/v1/export_tasks": {
POST: "createDrivev1ExportTask"
},
"/drive/v1/export_tasks/{ticket}": {
GET: "getDrivev1ExportTask"
},
"/drive/v1/export_tasks/file/{file_token}/download": {
GET: "downloadDrivev1ExportTask"
},
"/drive/v1/files/{file_token}/view_records": {
GET: "listDrivev1FileViewRecord"
},
"/drive/v1/files/{file_token}/versions": {
POST: "createDrivev1FileVersion",
GET: "listDrivev1FileVersion"
},
"/drive/v1/files/{file_token}/versions/{version_id}": {
DELETE: "deleteDrivev1FileVersion",
GET: "getDrivev1FileVersion"
},
"/drive/v1/permissions/{token}/members/transfer_owner": {
POST: "transferOwnerDrivev1PermissionMember"
},
"/drive/v1/permissions/{token}/members/auth": {
GET: "authDrivev1PermissionMember"
},
"/drive/v1/permissions/{token}/members": {
GET: "listDrivev1PermissionMember",
POST: "createDrivev1PermissionMember"
},
"/drive/v1/permissions/{token}/members/{member_id}": {
PUT: "updateDrivev1PermissionMember",
DELETE: "deleteDrivev1PermissionMember"
},
"/drive/v1/permissions/{token}/public/password": {
POST: "createDrivev1PermissionPublicPassword",
PUT: "updateDrivev1PermissionPublicPassword",
DELETE: "deleteDrivev1PermissionPublicPassword"
},
"/drive/v1/permissions/{token}/public": {
GET: "getDrivev1PermissionPublic",
PATCH: "patchDrivev1PermissionPublic"
},
"/drive/v2/permissions/{token}/public": {
GET: "getDrivev2PermissionPublic",
PATCH: "patchDrivev2PermissionPublic"
},
"/drive/v1/files/{file_token}/comments": {
GET: "listDrivev1FileComment",
POST: "createDrivev1FileComment"
},
"/drive/v1/files/{file_token}/comments/batch_query": {
POST: "batchQueryDrivev1FileComment"
},
"/drive/v1/files/{file_token}/comments/{comment_id}": {
PATCH: "patchDrivev1FileComment",
GET: "getDrivev1FileComment"
},
"/drive/v1/files/{file_token}/comments/{comment_id}/replies": {
GET: "listDrivev1FileCommentReply"
},
"/drive/v1/files/{file_token}/comments/{comment_id}/replies/{reply_id}": {
PUT: "updateDrivev1FileCommentReply",
DELETE: "deleteDrivev1FileCommentReply"
},
"/docx/v1/documents/{document_id}": {
GET: "getDocxDocument"
},
"/docx/v1/documents/{document_id}/raw_content": {
GET: "rawContentDocxDocument"
},
"/docx/v1/documents/{document_id}/blocks": {
GET: "listDocxDocumentBlock"
},
"/docx/v1/documents": {
POST: "createDocxDocument"
},
"/docx/v1/documents/{document_id}/blocks/{block_id}": {
GET: "getDocxDocumentBlock",
PATCH: "patchDocxDocumentBlock"
},
"/docx/v1/documents/{document_id}/blocks/{block_id}/children": {
GET: "getDocxDocumentBlockChildren",
POST: "createDocxDocumentBlockChildren"
},
"/docx/v1/documents/{document_id}/blocks/batch_update": {
PATCH: "batchUpdateDocxDocumentBlock"
},
"/docx/v1/documents/{document_id}/blocks/{block_id}/children/batch_delete": {
DELETE: "batchDeleteDocxDocumentBlockChildren"
},
"/board/v1/whiteboards/{whiteboard_id}/nodes": {
GET: "listBoardWhiteboardNode"
},
"/sheets/v3/spreadsheets/{spreadsheet_token}": {
PATCH: "patchSheetsSpreadsheet",
GET: "getSheetsSpreadsheet"
},
"/sheets/v3/spreadsheets": {
POST: "createSheetsSpreadsheet"
},
"/sheets/v3/spreadsheets/{spreadsheet_token}/sheets/{sheet_id}": {
GET: "getSheetsSpreadsheetSheet"
},
"/sheets/v3/spreadsheets/{spreadsheet_token}/sheets/query": {
GET: "querySheetsSpreadsheetSheet"
},
"/sheets/v3/spreadsheets/{spreadsheet_token}/sheets/{sheet_id}/move_dimension": {
POST: "moveDimensionSheetsSpreadsheetSheet"
},
"/sheets/v3/spreadsheets/{spreadsheet_token}/sheets/{sheet_id}/find": {
POST: "findSheetsSpreadsheetSheet"
},
"/sheets/v3/spreadsheets/{spreadsheet_token}/sheets/{sheet_id}/replace": {
POST: "replaceSheetsSpreadsheetSheet"
},
"/sheets/v3/spreadsheets/{spreadsheet_token}/sheets/{sheet_id}/filter": {
GET: "getSheetsSpreadsheetSheetFilter",
POST: "createSheetsSpreadsheetSheetFilter",
PUT: "updateSheetsSpreadsheetSheetFilter",
DELETE: "deleteSheetsSpreadsheetSheetFilter"
},
"/sheets/v3/spreadsheets/{spreadsheet_token}/sheets/{sheet_id}/filter_views/{filter_view_id}": {
GET: "getSheetsSpreadsheetSheetFilterView",
PATCH: "patchSheetsSpreadsheetSheetFilterView",
DELETE: "deleteSheetsSpreadsheetSheetFilterView"
},
"/sheets/v3/spreadsheets/{spreadsheet_token}/sheets/{sheet_id}/filter_views/query": {
GET: "querySheetsSpreadsheetSheetFilterView"
},
"/sheets/v3/spreadsheets/{spreadsheet_token}/sheets/{sheet_id}/filter_views": {
POST: "createSheetsSpreadsheetSheetFilterView"
},
"/sheets/v3/spreadsheets/{spreadsheet_token}/sheets/{sheet_id}/filter_views/{filter_view_id}/conditions/{condition_id}": {
GET: "getSheetsSpreadsheetSheetFilterViewCondition",
PUT: "updateSheetsSpreadsheetSheetFilterViewCondition",
DELETE: "deleteSheetsSpreadsheetSheetFilterViewCondition"
},
"/sheets/v3/spreadsheets/{spreadsheet_token}/sheets/{sheet_id}/filter_views/{filter_view_id}/conditions/query": {
GET: "querySheetsSpreadsheetSheetFilterViewCondition"
},
"/sheets/v3/spreadsheets/{spreadsheet_token}/sheets/{sheet_id}/filter_views/{filter_view_id}/conditions": {
POST: "createSheetsSpreadsheetSheetFilterViewCondition"
},
"/sheets/v3/spreadsheets/{spreadsheet_token}/sheets/{sheet_id}/float_images/{float_image_id}": {
GET: "getSheetsSpreadsheetSheetFloatImage",
PATCH: "patchSheetsSpreadsheetSheetFloatImage",
DELETE: "deleteSheetsSpreadsheetSheetFloatImage"
},
"/sheets/v3/spreadsheets/{spreadsheet_token}/sheets/{sheet_id}/float_images/query": {
GET: "querySheetsSpreadsheetSheetFloatImage"
},
"/sheets/v3/spreadsheets/{spreadsheet_token}/sheets/{sheet_id}/float_images": {
POST: "createSheetsSpreadsheetSheetFloatImage"
},
"/bitable/v1/apps/{app_token}/copy": {
POST: "copyBitableApp"
},
"/bitable/v1/apps": {
POST: "createBitableApp"
},
"/bitable/v1/apps/{app_token}": {
GET: "getBitableApp",
PUT: "updateBitableApp"
},
"/bitable/v1/apps/{app_token}/tables": {
POST: "createBitableAppTable",
GET: "listBitableAppTable"
},
"/bitable/v1/apps/{app_token}/tables/batch_create": {
POST: "batchCreateBitableAppTable"
},
"/bitable/v1/apps/{app_token}/tables/{table_id}": {
DELETE: "deleteBitableAppTable",
PATCH: "patchBitableAppTable"
},
"/bitable/v1/apps/{app_token}/tables/batch_delete": {
POST: "batchDeleteBitableAppTable"
},
"/bitable/v1/apps/{app_token}/dashboards/{block_id}/copy": {
POST: "copyBitableAppDashboard"
},
"/bitable/v1/apps/{app_token}/dashboards": {
GET: "listBitableAppDashboard"
},
"/bitable/v1/apps/{app_token}/tables/{table_id}/views/{view_id}": {
PATCH: "patchBitableAppTableView",
GET: "getBitableAppTableView",
DELETE: "deleteBitableAppTableView"
},
"/bitable/v1/apps/{app_token}/tables/{table_id}/views": {
GET: "listBitableAppTableView",
POST: "createBitableAppTableView"
},
"/bitable/v1/apps/{app_token}/tables/{table_id}/forms/{form_id}": {
PATCH: "patchBitableAppTableForm",
GET: "getBitableAppTableForm"
},
"/bitable/v1/apps/{app_token}/tables/{table_id}/forms/{form_id}/fields/{field_id}": {
PATCH: "patchBitableAppTableFormField"
},
"/bitable/v1/apps/{app_token}/tables/{table_id}/forms/{form_id}/fields": {
GET: "listBitableAppTableFormField"
},
"/bitable/v1/apps/{app_token}/tables/{table_id}/records/{record_id}": {
GET: "getBitableAppTableRecord",
PUT: "updateBitableAppTableRecord",
DELETE: "deleteBitableAppTableRecord"
},
"/bitable/v1/apps/{app_token}/tables/{table_id}/records/search": {
POST: "searchBitableAppTableRecord"
},
"/bitable/v1/apps/{app_token}/tables/{table_id}/records": {
POST: "createBitableAppTableRecord",
GET: "listBitableAppTableRecord"
},
"/bitable/v1/apps/{app_token}/tables/{table_id}/records/batch_create": {
POST: "batchCreateBitableAppTableRecord"
},
"/bitable/v1/apps/{app_token}/tables/{table_id}/records/batch_update": {
POST: "batchUpdateBitableAppTableRecord"
},
"/bitable/v1/apps/{app_token}/tables/{table_id}/records/batch_delete": {
POST: "batchDeleteBitableAppTableRecord"
},
"/bitable/v1/apps/{app_token}/tables/{table_id}/fields": {
GET: "listBitableAppTableField",
POST: "createBitableAppTableField"
},
"/bitable/v1/apps/{app_token}/tables/{table_id}/fields/{field_id}": {
PUT: "updateBitableAppTableField",
DELETE: "deleteBitableAppTableField"
},
"/bitable/v1/apps/{app_token}/roles": {
GET: "listBitableAppRole",
POST: "createBitableAppRole"
},
"/bitable/v1/apps/{app_token}/roles/{role_id}": {
DELETE: "deleteBitableAppRole",
PUT: "updateBitableAppRole"
},
"/bitable/v1/apps/{app_token}/roles/{role_id}/members/batch_delete": {
POST: "batchDeleteBitableAppRoleMember"
},
"/bitable/v1/apps/{app_token}/roles/{role_id}/members/batch_create": {
POST: "batchCreateBitableAppRoleMember"
},
"/bitable/v1/apps/{app_token}/roles/{role_id}/members": {
GET: "listBitableAppRoleMember",
POST: "createBitableAppRoleMember"
},
"/bitable/v1/apps/{app_token}/roles/{role_id}/members/{member_id}": {
DELETE: "deleteBitableAppRoleMember"
},
"/wiki/v2/spaces": {
GET: "listWikiSpace",
POST: "createWikiSpace"
},
"/wiki/v2/spaces/{space_id}": {
GET: "getWikiSpace"
},
"/wiki/v2/spaces/{space_id}/members": {
POST: "createWikiSpaceMember"
},
"/wiki/v2/spaces/{space_id}/members/{member_id}": {
DELETE: "deleteWikiSpaceMember"
},
"/wiki/v2/spaces/{space_id}/setting": {
PUT: "updateWikiSpaceSetting"
},
"/wiki/v2/spaces/{space_id}/nodes": {
POST: "createWikiSpaceNode",
GET: "listWikiSpaceNode"
},
"/wiki/v2/spaces/get_node": {
GET: "getNodeWikiSpace"
},
"/wiki/v2/spaces/{space_id}/nodes/{node_token}/move": {
POST: "moveWikiSpaceNode"
},
"/wiki/v2/spaces/{space_id}/nodes/{node_token}/update_title": {
POST: "updateTitleWikiSpaceNode"
},
"/wiki/v2/spaces/{space_id}/nodes/{node_token}/copy": {
POST: "copyWikiSpaceNode"
},
"/wiki/v2/spaces/{space_id}/nodes/move_docs_to_wiki": {
POST: "moveDocsToWikiWikiSpaceNode"
},
"/wiki/v2/tasks/{task_id}": {
GET: "getWikiTask"
},
"/wiki/v1/nodes/search": {
POST: "searchWikiNode"
},
"/drive/v1/files/{file_token}/subscriptions/{subscription_id}": {
GET: "getDrivev1FileSubscription",
PATCH: "patchDrivev1FileSubscription"
},
"/drive/v1/files/{file_token}/subscriptions": {
POST: "createDrivev1FileSubscription"
},
"/calendar/v4/calendars": {
POST: "createCalendar",
GET: "listCalendar"
},
"/calendar/v4/calendars/{calendar_id}": {
DELETE: "deleteCalendar",
GET: "getCalendar",
PATCH: "patchCalendar"
},
"/calendar/v4/calendars/primary": {
POST: "primaryCalendar"
},
"/calendar/v4/freebusy/list": {
POST: "listCalendarFreebusy"
},
"/calendar/v4/calendars/search": {
POST: "searchCalendar"
},
"/calendar/v4/calendars/{calendar_id}/subscribe": {
POST: "subscribeCalendar"
},
"/calendar/v4/calendars/{calendar_id}/unsubscribe": {
POST: "unsubscribeCalendar"
},
"/calendar/v4/calendars/subscription": {
POST: "subscriptionCalendar"
},
"/calendar/v4/calendars/unsubscription": {
POST: "unsubscriptionCalendar"
},
"/calendar/v4/calendars/{calendar_id}/acls": {
POST: "createCalendarCalendarAcl",
GET: "listCalendarCalendarAcl"
},
"/calendar/v4/calendars/{calendar_id}/acls/{acl_id}": {
DELETE: "deleteCalendarCalendarAcl"
},
"/calendar/v4/calendars/{calendar_id}/acls/subscription": {
POST: "subscriptionCalendarCalendarAcl"
},
"/calendar/v4/calendars/{calendar_id}/acls/unsubscription": {
POST: "unsubscriptionCalendarCalendarAcl"
},
"/calendar/v4/calendars/{calendar_id}/events": {
POST: "createCalendarCalendarEvent",
GET: "listCalendarCalendarEvent"
},
"/calendar/v4/calendars/{calendar_id}/events/{event_id}": {
DELETE: "deleteCalendarCalendarEvent",
PATCH: "patchCalendarCalendarEvent",
GET: "getCalendarCalendarEvent"
},
"/calendar/v4/calendars/{calendar_id}/events/search": {
POST: "searchCalendarCalendarEvent"
},
"/calendar/v4/calendars/{calendar_id}/events/subscription": {
POST: "subscriptionCalendarCalendarEvent"
},
"/calendar/v4/calendars/{calendar_id}/events/unsubscription": {
POST: "unsubscriptionCalendarCalendarEvent"
},
"/calendar/v4/calendars/{calendar_id}/events/{event_id}/reply": {
POST: "replyCalendarCalendarEvent"
},
"/calendar/v4/calendars/{calendar_id}/events/{event_id}/instances": {
GET: "instancesCalendarCalendarEvent"
},
"/calendar/v4/calendars/{calendar_id}/events/instance_view": {
GET: "instanceViewCalendarCalendarEvent"
},
"/calendar/v4/calendars/{calendar_id}/events/{event_id}/meeting_chat": {
POST: "createCalendarCalendarEventMeetingChat",
DELETE: "deleteCalendarCalendarEventMeetingChat"
},
"/calendar/v4/timeoff_events": {
POST: "createCalendarTimeoffEvent"
},
"/calendar/v4/timeoff_events/{timeoff_event_id}": {
DELETE: "deleteCalendarTimeoffEvent"
},
"/calendar/v4/calendars/{calendar_id}/events/{event_id}/attendees": {
POST: "createCalendarCalendarEventAttendee",
GET: "listCalendarCalendarEventAttendee"
},
"/calendar/v4/calendars/{calendar_id}/events/{event_id}/attendees/batch_delete": {
POST: "batchDeleteCalendarCalendarEventAttendee"
},
"/calendar/v4/calendars/{calendar_id}/events/{event_id}/attendees/{attendee_id}/chat_members": {
GET: "listCalendarCalendarEventAttendeeChatMember"
},
"/calendar/v4/settings/generate_caldav_conf": {
POST: "generateCaldavConfCalendarSetting"
},
"/calendar/v4/exchange_bindings": {
POST: "createCalendarExchangeBinding"
},
"/calendar/v4/exchange_bindings/{exchange_binding_id}": {
DELETE: "deleteCalendarExchangeBinding",
GET: "getCalendarExchangeBinding"
},
"/vc/v1/reserves/apply": {
POST: "applyVcReserve"
},
"/vc/v1/reserves/{reserve_id}": {
DELETE: "deleteVcReserve",
PUT: "updateVcReserve",
GET: "getVcReserve"
},
"/vc/v1/reserves/{reserve_id}/get_active_meeting": {
GET: "getActiveMeetingVcReserve"
},
"/vc/v1/meetings/{meeting_id}/invite": {
PATCH: "inviteVcMeeting"
},
"/vc/v1/meetings/{meeting_id}/kickout": {
POST: "kickoutVcMeeting"
},
"/vc/v1/meetings/{meeting_id}/set_host": {
PATCH: "setHostVcMeeting"
},
"/vc/v1/meetings/{meeting_id}/end": {
PATCH: "endVcMeeting"
},
"/vc/v1/meetings/{meeting_id}": {
GET: "getVcMeeting"
},
"/vc/v1/meetings/list_by_no": {
GET: "listByNoVcMeeting"
},
"/vc/v1/meetings/{meeting_id}/recording/start": {
PATCH: "startVcMeetingRecording"
},
"/vc/v1/meetings/{meeting_id}/recording/stop": {
PATCH: "stopVcMeetingRecording"
},
"/vc/v1/meetings/{meeting_id}/recording": {
GET: "getVcMeetingRecording"
},
"/vc/v1/meetings/{meeting_id}/recording/set_permission": {
PATCH: "setPermissionVcMeetingRecording"
},
"/vc/v1/reports/get_daily": {
GET: "getDailyVcReport"
},
"/vc/v1/reports/get_top_user": {
GET: "getTopUserVcReport"
},
"/vc/v1/exports/meeting_list": {
POST: "meetingListVcExport"
},
"/vc/v1/exports/participant_list": {
POST: "participantListVcExport"
},
"/vc/v1/exports/participant_quality_list": {
POST: "participantQualityListVcExport"
},
"/vc/v1/exports/resource_reservation_list": {
POST: "resourceReservationListVcExport"
},
"/vc/v1/exports/{task_id}": {
GET: "getVcExport"
},
"/vc/v1/exports/download": {
GET: "downloadVcExport"
},
"/vc/v1/room_levels": {
POST: "createVcRoomLevel",
GET: "listVcRoomLevel"
},
"/vc/v1/room_levels/del": {
POST: "delVcRoomLevel"
},
"/vc/v1/room_levels/{room_level_id}": {
PATCH: "patchVcRoomLevel",
GET: "getVcRoomLevel"
},
"/vc/v1/room_levels/mget": {
POST: "mgetVcRoomLevel"
},
"/vc/v1/room_levels/search": {
GET: "searchVcRoomLevel"
},
"/vc/v1/rooms": {
POST: "createVcRoom",
GET: "listVcRoom"
},
"/vc/v1/rooms/{room_id}": {
DELETE: "deleteVcRoom",
PATCH: "patchVcRoom",
GET: "getVcRoom"
},
"/vc/v1/rooms/mget": {
POST: "mgetVcRoom"
},
"/vc/v1/rooms/search": {
POST: "searchVcRoom"
},
"/vc/v1/scope_config": {
GET: "getVcScopeConfig",
POST: "createVcScopeConfig"
},
"/vc/v1/reserve_configs/reserve_scope": {
GET: "reserveScopeVcReserveConfig"
},
"/vc/v1/reserve_configs/{reserve_config_id}": {
PATCH: "patchVcReserveConfig"
},
"/vc/v1/reserve_configs/{reserve_config_id}/form": {
GET: "getVcReserveConfigForm",
PATCH: "patchVcReserveConfigForm"
},
"/vc/v1/reserve_configs/{reserve_config_id}/admin": {
GET: "getVcReserveConfigAdmin",
PATCH: "patchVcReserveConfigAdmin"
},
"/vc/v1/reserve_configs/{reserve_config_id}/disable_inform": {
GET: "getVcReserveConfigDisableInform",
PATCH: "patchVcReserveConfigDisableInform"
},
"/vc/v1/meeting_list": {
GET: "getVcMeetingList"
},
"/vc/v1/participant_list": {
GET: "getVcParticipantList"
},
"/vc/v1/participant_quality_list": {
GET: "getVcParticipantQualityList"
},
"/vc/v1/resource_reservation_list": {
GET: "getVcResourceReservationList"
},
"/vc/v1/alerts": {
GET: "listVcAlert"
},
"/attendance/v1/shifts": {
POST: "createAttendanceShift",
GET: "listAttendanceShift"
},
"/attendance/v1/shifts/{shift_id}": {
DELETE: "deleteAttendanceShift",
GET: "getAttendanceShift"
},
"/attendance/v1/shifts/query": {
POST: "queryAttendanceShift"
},
"/attendance/v1/groups": {
POST: "createAttendanceGroup",
GET: "listAttendanceGroup"
},
"/attendance/v1/groups/{group_id}": {
DELETE: "deleteAttendanceGroup",
GET: "getAttendanceGroup"
},
"/attendance/v1/groups/search": {
POST: "searchAttendanceGroup"
},
"/attendance/v1/user_daily_shifts/batch_create": {
POST: "batchCreateAttendanceUserDailyShift"
},
"/attendance/v1/user_daily_shifts/query": {
POST: "queryAttendanceUserDailyShift"
},
"/attendance/v1/user_stats_views/{user_stats_view_id}": {
PUT: "updateAttendanceUserStatsView"
},
"/attendance/v1/user_stats_fields/query": {
POST: "queryAttendanceUserStatsField"
},
"/attendance/v1/user_stats_views/query": {
POST: "queryAttendanceUserStatsView"
},
"/attendance/v1/user_stats_datas/query": {
POST: "queryAttendanceUserStatsData"
},
"/attendance/v1/user_approvals/query": {
POST: "queryAttendanceUserApproval"
},
"/attendance/v1/user_approvals": {
POST: "createAttendanceUserApproval"
},
"/attendance/v1/approval_infos/process": {
POST: "processAttendanceApprovalInfo"
},
"/attendance/v1/user_task_remedys": {
POST: "createAttendanceUserTaskRemedy"
},
"/attendance/v1/user_task_remedys/query_user_allowed_remedys": {
POST: "queryUserAllowedRemedysAttendanceUserTaskRemedy"
},
"/attendance/v1/user_task_remedys/query": {
POST: "queryAttendanceUserTaskRemedy"
},
"/attendance/v1/user_flows/batch_create": {
POST: "batchCreateAttendanceUserFlow"
},
"/attendance/v1/user_flows/{user_flow_id}": {
GET: "getAttendanceUserFlow"
},
"/attendance/v1/user_flows/query": {
POST: "queryAttendanceUserFlow"
},
"/attendance/v1/user_tasks/query": {
POST: "queryAttendanceUserTask"
},
"/attendance/v1/user_settings/modify": {
POST: "modifyAttendanceUserSetting"
},
"/attendance/v1/user_settings/query": {
GET: "queryAttendanceUserSetting"
},
"/attendance/v1/files/{file_id}/download": {
GET: "downloadAttendanceFile"
},
"/attendance/v1/leave_employ_expire_records/{leave_id}": {
GET: "getAttendanceLeaveEmployExpireRecord"
},
"/attendance/v1/leave_accrual_record/{leave_id}": {
PATCH: "patchAttendanceLeaveAccrualRecord"
},
"/approval/v4/approvals": {
POST: "createApproval"
},
"/approval/v4/approvals/{approval_code}": {
GET: "getApproval"
},
"/approval/v4/instances": {
POST: "createApprovalInstance",
GET: "listApprovalInstance"
},
"/approval/v4/instances/cancel": {
POST: "cancelApprovalInstance"
},
"/approval/v4/instances/cc": {
POST: "ccApprovalInstance"
},
"/approval/v4/instances/preview": {
POST: "previewApprovalInstance"
},
"/approval/v4/instances/{instance_id}": {
GET: "getApprovalInstance"
},
"/approval/v4/tasks/approve": {
POST: "approveApprovalTask"
},
"/approval/v4/tasks/reject": {
POST: "rejectApprovalTask"
},
"/approval/v4/tasks/transfer": {
POST: "transferApprovalTask"
},
"/approval/v4/instances/specified_rollback": {
POST: "specifiedRollbackApprovalInstance"
},
"/approval/v4/instances/add_sign": {
POST: "addSignApprovalInstance"
},
"/approval/v4/tasks/resubmit": {
POST: "resubmitApprovalTask"
},
"/approval/v4/instances/{instance_id}/comments": {
POST: "createApprovalInstanceComment",
GET: "listApprovalInstanceComment"
},
"/approval/v4/instances/{instance_id}/comments/{comment_id}": {
DELETE: "deleteApprovalInstanceComment"
},
"/approval/v4/instances/{instance_id}/comments/remove": {
POST: "removeApprovalInstanceComment"
},
"/approval/v4/external_approvals": {
POST: "createApprovalExternalApproval"
},
"/approval/v4/external_approvals/{approval_code}": {
GET: "getApprovalExternalApproval"
},
"/approval/v4/external_instances": {
POST: "createApprovalExternalInstance"
},
"/approval/v4/external_instances/check": {
POST: "checkApprovalExternalInstance"
},
"/approval/v4/external_tasks": {
GET: "listApprovalExternalTask"
},
"/approval/v4/instances/query": {
POST: "queryApprovalInstance"
},
"/approval/v4/instances/search_cc": {
POST: "searchCcApprovalInstance"
},
"/approval/v4/tasks/search": {
POST: "searchApprovalTask"
},
"/approval/v4/tasks/query": {
GET: "queryApprovalTask"
},
"/approval/v4/approvals/{approval_code}/subscribe": {
POST: "subscribeApproval"
},
"/approval/v4/approvals/{approval_code}/unsubscribe": {
POST: "unsubscribeApproval"
},
"/helpdesk/v1/agents/{agent_id}": {
PATCH: "patchHelpdeskAgent"
},
"/helpdesk/v1/agent_emails": {
GET: "agentEmailHelpdeskAgent"
},
"/helpdesk/v1/agent_schedules": {
POST: "createHelpdeskAgentSchedule",
GET: "listHelpdeskAgentSchedule"
},
"/helpdesk/v1/agents/{agent_id}/schedules": {
DELETE: "deleteHelpdeskAgentSchedules",
PATCH: "patchHelpdeskAgentSchedules",
GET: "getHelpdeskAgentSchedules"
},
"/helpdesk/v1/agent_skills": {
POST: "createHelpdeskAgentSkill",
GET: "listHelpdeskAgentSkill"
},
"/helpdesk/v1/agent_skills/{agent_skill_id}": {
DELETE: "deleteHelpdeskAgentSkill",
PATCH: "patchHelpdeskAgentSkill",
GET: "getHelpdeskAgentSkill"
},
"/helpdesk/v1/agent_skill_rules": {
GET: "listHelpdeskAgentSkillRule"
},
"/helpdesk/v1/start_service": {
POST: "startServiceHelpdeskTicket"
},
"/helpdesk/v1/tickets/{ticket_id}": {
GET: "getHelpdeskTicket",
PUT: "updateHelpdeskTicket"
},
"/helpdesk/v1/tickets": {
GET: "listHelpdeskTicket"
},
"/helpdesk/v1/ticket_images": {
GET: "ticketImageHelpdeskTicket"
},
"/helpdesk/v1/tickets/{ticket_id}/answer_user_query": {
POST: "answerUserQueryHelpdeskTicket"
},
"/helpdesk/v1/customized_fields": {
GET: "customizedFieldsHelpdeskTicket"
},
"/helpdesk/v1/tickets/{ticket_id}/messages": {
POST: "createHelpdeskTicketMessage",
GET: "listHelpdeskTicketMessage"
},
"/helpdesk/v1/message": {
POST: "createHelpdeskBotMessage"
},
"/helpdesk/v1/ticket_customized_fields": {
POST: "createHelpdeskTicketCustomizedField",
GET: "listHelpdeskTicketCustomizedField"
},
"/helpdesk/v1/ticket_customized_fields/{ticket_customized_field_id}": {
DELETE: "deleteHelpdeskTicketCustomizedField",
PATCH: "patchHelpdeskTicketCustomizedField",
GET: "getHelpdeskTicketCustomizedField"
},
"/helpdesk/v1/faqs": {
POST: "createHelpdeskFaq",
GET: "listHelpdeskFaq"
},
"/helpdesk/v1/faqs/{id}": {
DELETE: "deleteHelpdeskFaq",
PATCH: "patchHelpdeskFaq",
GET: "getHelpdeskFaq"
},
"/helpdesk/v1/faqs/{id}/image/{image_key}": {
GET: "faqImageHelpdeskFaq"
},
"/helpdesk/v1/faqs/search": {
GET: "searchHelpdeskFaq"
},
"/helpdesk/v1/categories": {
POST: "createHelpdeskCategory",
GET: "listHelpdeskCategory"
},
"/helpdesk/v1/categories/{id}": {
GET: "getHelpdeskCategory",
PATCH: "patchHelpdeskCategory",
DELETE: "deleteHelpdeskCategory"
},
"/helpdesk/v1/notifications": {
POST: "createHelpdeskNotification"
},
"/helpdesk/v1/notifications/{notification_id}": {
PATCH: "patchHelpdeskNotification",
GET: "getHelpdeskNotification"
},
"/helpdesk/v1/notifications/{notification_id}/preview": {
POST: "previewHelpdeskNotification"
},
"/helpdesk/v1/notifications/{notification_id}/submit_approve": {
POST: "submitApproveHelpdeskNotification"
},
"/helpdesk/v1/notifications/{notification_id}/cancel_approve": {
POST: "cancelApproveHelpdeskNotification"
},
"/helpdesk/v1/notifications/{notification_id}/execute_send": {
POST: "executeSendHelpdeskNotification"
},
"/helpdesk/v1/notifications/{notification_id}/cancel_send": {
POST: "cancelSendHelpdeskNotification"
},
"/helpdesk/v1/events/subscribe": {
POST: "subscribeHelpdeskEvent"
},
"/helpdesk/v1/events/unsubscribe": {
POST: "unsubscribeHelpdeskEvent"
},
"/task/v1/tasks": {
POST: "createTaskv1",
GET: "listTaskv1"
},
"/task/v1/tasks/{task_id}": {
DELETE: "deleteTaskv1",
PATCH: "patchTaskv1",
GET: "getTaskv1"
},
"/task/v1/tasks/{task_id}/complete": {
POST: "completeTaskv1"
},
"/task/v1/tasks/{task_id}/uncomplete": {
POST: "uncompleteTaskv1"
},
"/task/v1/tasks/{task_id}/reminders": {
POST: "createTaskv1TaskReminder",
GET: "listTaskv1TaskReminder"
},
"/task/v1/tasks/{task_id}/reminders/{reminder_id}": {
DELETE: "deleteTaskv1TaskReminder"
},
"/task/v1/tasks/{task_id}/comments": {
POST: "createTaskv1TaskComment",
GET: "listTaskv1TaskComment"
},
"/task/v1/tasks/{task_id}/comments/{comment_id}": {
DELETE: "deleteTaskv1TaskComment",
PUT: "updateTaskv1TaskComment",
GET: "getTaskv1TaskComment"
},
"/task/v1/tasks/{task_id}/followers": {
POST: "createTaskv1TaskFollower",
GET: "listTaskv1TaskFollower"
},
"/task/v1/tasks/{task_id}/followers/{follower_id}": {
DELETE: "deleteTaskv1TaskFollower"
},
"/task/v1/tasks/{task_id}/batch_delete_follower": {
POST: "batchDeleteFollowerTaskv1"
},
"/task/v1/tasks/{task_id}/collaborators": {
POST: "createTaskv1TaskCollaborator",
GET: "listTaskv1TaskCollaborator"
},
"/task/v1/tasks/{task_id}/collaborators/{collaborator_id}": {
DELETE: "deleteTaskv1TaskCollaborator"
},
"/task/v1/tasks/{task_id}/batch_delete_collaborator": {
POST: "batchDeleteCollaboratorTaskv1"
},
"/task/v2/tasks": {
POST: "createTaskv2",
GET: "listTaskv2"
},
"/task/v2/tasks/{task_guid}": {
GET: "getTaskv2",
PATCH: "patchTaskv2",
DELETE: "deleteTaskv2"
},
"/task/v2/tasks/{task_guid}/add_members": {
POST: "addMembersTaskv2"
},
"/task/v2/tasks/{task_guid}/remove_members": {
POST: "removeMembersTaskv2"
},
"/task/v2/tasks/{task_guid}/tasklists": {
GET: "tasklistsTaskv2"
},
"/task/v2/tasks/{task_guid}/add_tasklist": {
POST: "addTasklistTaskv2"
},
"/task/v2/tasks/{task_guid}/remove_tasklist": {
POST: "removeTasklistTaskv2"
},
"/task/v2/tasks/{task_guid}/add_reminders": {
POST: "addRemindersTaskv2"
},
"/task/v2/tasks/{task_guid}/remove_reminders": {
POST: "removeRemindersTaskv2"
},
"/task/v2/tasks/{task_guid}/add_dependencies": {
POST: "addDependenciesTaskv2"
},
"/task/v2/tasks/{task_guid}/remove_dependencies": {
POST: "removeDependenciesTaskv2"
},
"/task/v2/tasks/{task_guid}/subtasks": {
POST: "createTaskv2TaskSubtask",
GET: "listTaskv2TaskSubtask"
},
"/task/v2/tasklists": {
POST: "createTaskv2Tasklist",
GET: "listTaskv2Tasklist"
},
"/task/v2/tasklists/{tasklist_guid}": {
GET: "getTaskv2Tasklist",
PATCH: "patchTaskv2Tasklist",
DELETE: "deleteTaskv2Tasklist"
},
"/task/v2/tasklists/{tasklist_guid}/add_members": {
POST: "addMembersTaskv2Tasklist"
},
"/task/v2/tasklists/{tasklist_guid}/remove_members": {
POST: "removeMembersTaskv2Tasklist"
},
"/task/v2/tasklists/{tasklist_guid}/tasks": {
GET: "tasksTaskv2Tasklist"
},
"/task/v2/tasklists/{tasklist_guid}/activity_subscriptions": {
POST: "createTaskv2TasklistActivitySubscription",
GET: "listTaskv2TasklistActivitySubscription"
},
"/task/v2/tasklists/{tasklist_guid}/activity_subscriptions/{activity_subscription_guid}": {
GET: "getTaskv2TasklistActivitySubscription",
PATCH: "patchTaskv2TasklistActivitySubscription",
DELETE: "deleteTaskv2TasklistActivitySubscription"
},
"/task/v2/comments": {
POST: "createTaskv2Comment",
GET: "listTaskv2Comment"
},
"/task/v2/comments/{comment_id}": {
GET: "getTaskv2Comment",
PATCH: "patchTaskv2Comment",
DELETE: "deleteTaskv2Comment"
},
"/task/v2/attachments": {
GET: "listTaskv2Attachment"
},
"/task/v2/attachments/{attachment_guid}": {
GET: "getTaskv2Attachment",
DELETE: "deleteTaskv2Attachment"
},
"/task/v2/sections": {
POST: "createTaskv2Section",
GET: "listTaskv2Section"
},
"/task/v2/sections/{section_guid}": {
GET: "getTaskv2Section",
PATCH: "patchTaskv2Section",
DELETE: "deleteTaskv2Section"
},
"/task/v2/sections/{section_guid}/tasks": {
GET: "tasksTaskv2Section"
},
"/task/v2/custom_fields": {
POST: "createTaskv2CustomField",
GET: "listTaskv2CustomField"
},
"/task/v2/custom_fields/{custom_field_guid}": {
GET: "getTaskv2CustomField",
PATCH: "patchTaskv2CustomField"
},
"/task/v2/custom_fields/{custom_field_guid}/add": {
POST: "addTaskv2CustomField"
},
"/task/v2/custom_fields/{custom_field_guid}/remove": {
POST: "removeTaskv2CustomField"
},
"/task/v2/custom_fields/{custom_field_guid}/options": {
POST: "createTaskv2CustomFieldOption"
},
"/task/v2/custom_fields/{custom_field_guid}/options/{option_guid}": {
PATCH: "patchTaskv2CustomFieldOption"
},
"/mail/v1/mailgroups": {
POST: "createMailMailgroup",
GET: "listMailMailgroup"
},
"/mail/v1/mailgroups/{mailgroup_id}": {
DELETE: "deleteMailMailgroup",
PATCH: "patchMailMailgroup",
PUT: "updateMailMailgroup",
GET: "getMailMailgroup"
},
"/mail/v1/mailgroups/{mailgroup_id}/managers/batch_create": {
POST: "batchCreateMailMailgroupManager"
},
"/mail/v1/mailgroups/{mailgroup_id}/managers/batch_delete": {
POST: "batchDeleteMailMailgroupManager"
},
"/mail/v1/mailgroups/{mailgroup_id}/managers": {
GET: "listMailMailgroupManager"
},
"/mail/v1/mailgroups/{mailgroup_id}/members": {
POST: "createMailMailgroupMember",
GET: "listMailMailgroupMember"
},
"/mail/v1/mailgroups/{mailgroup_id}/members/{member_id}": {
DELETE: "deleteMailMailgroupMember",
GET: "getMailMailgroupMember"
},
"/mail/v1/mailgroups/{mailgroup_id}/members/batch_create": {
POST: "batchCreateMailMailgroupMember"
},
"/mail/v1/mailgroups/{mailgroup_id}/members/batch_delete": {
DELETE: "batchDeleteMailMailgroupMember"
},
"/mail/v1/mailgroups/{mailgroup_id}/aliases": {
POST: "createMailMailgroupAlias",
GET: "listMailMailgroupAlias"
},
"/mail/v1/mailgroups/{mailgroup_id}/aliases/{alias_id}": {
DELETE: "deleteMailMailgroupAlias"
},
"/mail/v1/mailgroups/{mailgroup_id}/permission_members": {
POST: "createMailMailgroupPermissionMember",
GET: "listMailMailgroupPermissionMember"
},
"/mail/v1/mailgroups/{mailgroup_id}/permission_members/{permission_member_id}": {
DELETE: "deleteMailMailgroupPermissionMember",
GET: "getMailMailgroupPermissionMember"
},
"/mail/v1/mailgroups/{mailgroup_id}/permission_members/batch_create": {
POST: "batchCreateMailMailgroupPermissionMember"
},
"/mail/v1/mailgroups/{mailgroup_id}/permission_members/batch_delete": {
DELETE: "batchDeleteMailMailgroupPermissionMember"
},
"/mail/v1/public_mailboxes": {
POST: "createMailPublicMailbox",
GET: "listMailPublicMailbox"
},
"/mail/v1/public_mailboxes/{public_mailbox_id}": {
PATCH: "patchMailPublicMailbox",
PUT: "updateMailPublicMailbox",
GET: "getMailPublicMailbox",
DELETE: "deleteMailPublicMailbox"
},
"/mail/v1/public_mailboxes/{public_mailbox_id}/members": {
POST: "createMailPublicMailboxMember",
GET: "listMailPublicMailboxMember"
},
"/mail/v1/public_mailboxes/{public_mailbox_id}/members/{member_id}": {
DELETE: "deleteMailPublicMailboxMember",
GET: "getMailPublicMailboxMember"
},
"/mail/v1/public_mailboxes/{public_mailbox_id}/members/clear": {
POST: "clearMailPublicMailboxMember"
},
"/mail/v1/public_mailboxes/{public_mailbox_id}/members/batch_create": {
POST: "batchCreateMailPublicMailboxMember"
},
"/mail/v1/public_mailboxes/{public_mailbox_id}/members/batch_delete": {
DELETE: "batchDeleteMailPublicMailboxMember"
},
"/mail/v1/public_mailboxes/{public_mailbox_id}/aliases": {
POST: "createMailPublicMailboxAlias",
GET: "listMailPublicMailboxAlias"
},
"/mail/v1/public_mailboxes/{public_mailbox_id}/aliases/{alias_id}": {
DELETE: "deleteMailPublicMailboxAlias"
},
"/mail/v1/user_mailboxes/{user_mailbox_id}": {
DELETE: "deleteMailUserMailbox"
},
"/mail/v1/user_mailboxes/{user_mailbox_id}/aliases": {
POST: "createMailUserMailboxAlias",
GET: "listMailUserMailboxAlias"
},
"/mail/v1/user_mailboxes/{user_mailbox_id}/aliases/{alias_id}": {
DELETE: "deleteMailUserMailboxAlias"
},
"/mail/v1/users/query": {
POST: "queryMailUser"
},
"/application/v6/applications/{app_id}": {
GET: "getApplication",
PATCH: "patchApplication"
},
"/application/v6/applications/{app_id}/app_versions/{version_id}": {
GET: "getApplicationApplicationAppVersion",
PATCH: "patchApplicationApplicationAppVersion"
},
"/application/v6/applications/{app_id}/app_versions": {
GET: "listApplicationApplicationAppVersion"
},
"/application/v6/applications/{app_id}/app_versions/{version_id}/contacts_range_suggest": {
GET: "contactsRangeSuggestApplicationApplicationAppVersion"
},
"/application/v6/applications/underauditlist": {
GET: "underauditlistApplication"
},
"/application/v6/applications/{app_id}/contacts_range_configuration": {
GET: "contactsRangeConfigurationApplication"
},
"/application/v6/applications/{app_id}/contacts_range": {
PATCH: "patchApplicationApplicationContactsRange"
},
"/application/v6/applications/{app_id}/visibility/check_white_black_list": {
POST: "checkWhiteBlackListApplicationApplicationVisibility"
},
"/application/v6/applications/{app_id}/visibility": {
PATCH: "patchApplicationApplicationVisibility"
},
"/application/v6/applications/{app_id}/management": {
PUT: "updateApplicationApplicationManagement"
},
"/application/v6/applications/{app_id}/app_usage/department_overview": {
POST: "departmentOverviewApplicationApplicationAppUsage"
},
"/application/v6/applications/{app_id}/app_usage/overview": {
POST: "overviewApplicationApplicationAppUsage"
},
"/application/v6/applications/{app_id}/feedbacks/{feedback_id}": {
PATCH: "patchApplicationApplicationFeedback"
},
"/application/v6/applications/{app_id}/feedbacks": {
GET: "listApplicationApplicationFeedback"
},
"/application/v6/app_badge/set": {
POST: "setApplicationAppBadge"
},
"/tenant/v2/tenant/assign_info_list/query": {
GET: "queryTenantTenantProductAssignInfo"
},
"/tenant/v2/tenant/query": {
GET: "queryTenant"
},
"/verification/v1/verification": {
GET: "getVerification"
},
"/personal_settings/v1/system_statuses": {
POST: "createPersonalSettingsSystemStatus",
GET: "listPersonalSettingsSystemStatus"
},
"/personal_settings/v1/system_statuses/{system_status_id}": {
DELETE: "deletePersonalSettingsSystemStatus",
PATCH: "patchPersonalSettingsSystemStatus"
},
"/personal_settings/v1/system_statuses/{system_status_id}/batch_open": {
POST: "batchOpenPersonalSettingsSystemStatus"
},
"/personal_settings/v1/system_statuses/{system_status_id}/batch_close": {
POST: "batchClosePersonalSettingsSystemStatus"
},
"/search/v2/message": {
POST: "createSearchMessage"
},
"/search/v2/app": {
POST: "createSearchApp"
},
"/search/v2/data_sources": {
POST: "createSearchDataSource",
GET: "listSearchDataSource"
},
"/search/v2/data_sources/{data_source_id}": {
DELETE: "deleteSearchDataSource",
PATCH: "patchSearchDataSource",
GET: "getSearchDataSource"
},
"/search/v2/data_sources/{data_source_id}/items": {
POST: "createSearchDataSourceItem"
},
"/search/v2/data_sources/{data_source_id}/items/{item_id}": {
DELETE: "deleteSearchDataSourceItem",
GET: "getSearchDataSourceItem"
},
"/search/v2/schemas": {
POST: "createSearchSchema"
},
"/search/v2/schemas/{schema_id}": {
DELETE: "deleteSearchSchema",
PATCH: "patchSearchSchema",
GET: "getSearchSchema"
},
"/optical_char_recognition/v1/image/basic_recognize": {
POST: "basicRecognizeOpticalCharRecognitionImage"
},
"/speech_to_text/v1/speech/file_recognize": {
POST: "fileRecognizeSpeechToTextSpeech"
},
"/speech_to_text/v1/speech/stream_recognize": {
POST: "streamRecognizeSpeechToTextSpeech"
},
"/translation/v1/text/detect": {
POST: "detectTranslationText"
},
"/translation/v1/text/translate": {
POST: "translateTranslationText"
},
"/apaas/v1/approval_tasks/{approval_task_id}/agree": {
POST: "agreeApaasApprovalTask"
},
"/apaas/v1/approval_tasks/{approval_task_id}/reject": {
POST: "rejectApaasApprovalTask"
},
"/apaas/v1/approval_tasks/{approval_task_id}/transfer": {
POST: "transferApaasApprovalTask"
},
"/apaas/v1/approval_tasks/{approval_task_id}/add_assignee": {
POST: "addAssigneeApaasApprovalTask"
},
"/admin/v1/password/reset": {
POST: "resetAdminPassword"
},
"/admin/v1/admin_dept_stats": {
GET: "listAdminAdminDeptStat"
},
"/admin/v1/admin_user_stats": {
GET: "listAdminAdminUserStat"
},
"/admin/v1/badges": {
POST: "createAdminBadge",
GET: "listAdminBadge"
},
"/admin/v1/badges/{badge_id}": {
PUT: "updateAdminBadge",
GET: "getAdminBadge"
},
"/admin/v1/badges/{badge_id}/grants": {
POST: "createAdminBadgeGrant",
GET: "listAdminBadgeGrant"
},
"/admin/v1/badges/{badge_id}/grants/{grant_id}": {
DELETE: "deleteAdminBadgeGrant",
PUT: "updateAdminBadgeGrant",
GET: "getAdminBadgeGrant"
},
"/ehr/v1/employees": {
GET: "listEhrEmployee"
},
"/ehr/v1/attachments/{token}": {
GET: "getEhrAttachment"
},
"/corehr/v2/basic_info/nationalities/search": {
POST: "searchCorehrBasicInfoNationality"
},
"/corehr/v2/basic_info/banks/search": {
POST: "searchCorehrBasicInfoBank"
},
"/corehr/v2/basic_info/bank_branchs/search": {
POST: "searchCorehrBasicInfoBankBranch"
},
"/corehr/v1/custom_fields/get_by_param": {
GET: "getByParamCorehrCustomField"
},
"/corehr/v1/custom_fields/query": {
GET: "queryCorehrCustomField"
},
"/corehr/v1/custom_fields/list_object_api_name": {
GET: "listObjectApiNameCorehrCustomField"
},
"/corehr/v2/basic_info/country_regions/search": {
POST: "searchCorehrBasicInfoCountryRegion"
},
"/corehr/v2/basic_info/country_region_subdivisions/search": {
POST: "searchCorehrBasicInfoCountryRegionSubdivision"
},
"/corehr/v2/basic_info/cities/search": {
POST: "searchCorehrBasicInfoCity"
},
"/corehr/v2/basic_info/districts/search": {
POST: "searchCorehrBasicInfoDistrict"
},
"/corehr/v1/employee_types": {
POST: "createCorehrEmployeeType",
GET: "listCorehrEmployeeType"
},
"/corehr/v1/employee_types/{employee_type_id}": {
DELETE: "deleteCorehrEmployeeType",
PATCH: "patchCorehrEmployeeType",
GET: "getCorehrEmployeeType"
},
"/corehr/v1/national_id_types": {
POST: "createCorehrNationalIdType",
GET: "listCorehrNationalIdType"
},
"/corehr/v1/national_id_types/{national_id_type_id}": {
DELETE: "deleteCorehrNationalIdType",
PATCH: "patchCorehrNationalIdType",
GET: "getCorehrNationalIdType"
},
"/corehr/v1/working_hours_types": {
POST: "createCorehrWorkingHoursType",
GET: "listCorehrWorkingHoursType"
},
"/corehr/v1/working_hours_types/{working_hours_type_id}": {
DELETE: "deleteCorehrWorkingHoursType",
PATCH: "patchCorehrWorkingHoursType",
GET: "getCorehrWorkingHoursType"
},
"/corehr/v2/basic_info/currencies/search": {
POST: "searchCorehrBasicInfoCurrency"
},
"/corehr/v2/employees/batch_get": {
POST: "batchGetCorehrEmployee"
},
"/corehr/v2/employees/search": {
POST: "searchCorehrEmployee"
},
"/corehr/v1/employments": {
POST: "createCorehrEmployment"
},
"/corehr/v1/employments/{employment_id}": {
PATCH: "patchCorehrEmployment",
DELETE: "deleteCorehrEmployment"
},
"/corehr/v2/persons": {
POST: "createCorehrPerson"
},
"/corehr/v2/persons/{person_id}": {
PATCH: "patchCorehrPerson"
},
"/corehr/v1/persons/{person_id}": {
DELETE: "deleteCorehrPerson",
GET: "getCorehrPerson"
},
"/corehr/v1/files/{id}": {
GET: "getCorehrFile"
},
"/corehr/v1/job_datas": {
POST: "createCorehrJobData",
GET: "listCorehrJobData"
},
"/corehr/v1/job_datas/{job_data_id}": {
DELETE: "deleteCorehrJobData",
PATCH: "patchCorehrJobData",
GET: "getCorehrJobData"
},
"/corehr/v2/employees/job_datas/query": {
POST: "queryCorehrEmployeesJobData"
},
"/corehr/v2/employees/job_datas/batch_get": {
POST: "batchGetCorehrEmployeesJobData"
},
"/corehr/v2/departments/parents": {
POST: "parentsCorehrDepartment"
},
"/corehr/v2/departments/search": {
POST: "searchCorehrDepartment"
},
"/corehr/v1/departments": {
POST: "createCorehrDepartment",
GET: "listCorehrDepartment"
},
"/corehr/v1/departments/{department_id}": {
PATCH: "patchCorehrDepartment",
DELETE: "deleteCorehrDepartment",
GET: "getCorehrDepartment"
},
"/corehr/v2/departments/batch_get": {
POST: "batchGetCorehrDepartment"
},
"/corehr/v2/locations/batch_get": {
POST: "batchGetCorehrLocation"
},
"/corehr/v1/locations": {
POST: "createCorehrLocation",
GET: "listCorehrLocation"
},
"/corehr/v1/locations/{location_id}": {
DELETE: "deleteCorehrLocation",
GET: "getCorehrLocation"
},
"/corehr/v1/companies/{company_id}": {
GET: "getCorehrCompany",
PATCH: "patchCorehrCompany",
DELETE: "deleteCorehrCompany"
},
"/corehr/v1/companies": {
GET: "listCorehrCompany",
POST: "createCorehrCompany"
},
"/corehr/v2/companies/batch_get": {
POST: "batchGetCorehrCompany"
},
"/corehr/v2/cost_centers": {
POST: "createCorehrCostCenter"
},
"/corehr/v2/cost_centers/{cost_center_id}": {
PATCH: "patchCorehrCostCenter",
DELETE: "deleteCorehrCostCenter"
},
"/corehr/v2/cost_centers/search": {
POST: "searchCorehrCostCenter"
},
"/corehr/v2/cost_centers/{cost_center_id}/versions": {
POST: "createCorehrCostCenterVersion"
},
"/corehr/v2/cost_centers/{cost_center_id}/versions/{version_id}": {
PATCH: "patchCorehrCostCenterVersion",
DELETE: "deleteCorehrCostCenterVersion"
},
"/corehr/v2/job_levels/batch_get": {
POST: "batchGetCorehrJobLevel"
},
"/corehr/v1/job_levels": {
POST: "createCorehrJobLevel",
GET: "listCorehrJobLevel"
},
"/corehr/v1/job_levels/{job_level_id}": {
DELETE: "deleteCorehrJobLevel",
PATCH: "patchCorehrJobLevel",
GET: "getCorehrJobLevel"
},
"/corehr/v2/job_families/batch_get": {
POST: "batchGetCorehrJobFamily"
},
"/corehr/v1/job_families": {
POST: "createCorehrJobFamily",
GET: "listCorehrJobFamily"
},
"/corehr/v1/job_families/{job_family_id}": {
DELETE: "deleteCorehrJobFamily",
PATCH: "patchCorehrJobFamily",
GET: "getCorehrJobFamily"
},
"/corehr/v1/jobs": {
POST: "createCorehrJob",
GET: "listCorehrJob"
},
"/corehr/v1/jobs/{job_id}": {
DELETE: "deleteCorehrJob",
PATCH: "patchCorehrJob",
GET: "getCorehrJob"
},
"/corehr/v2/jobs/{job_id}": {
GET: "getCorehrJob"
},
"/corehr/v2/jobs": {
GET: "listCorehrJob"
},
"/corehr/v2/pre_hires": {
POST: "createCorehrPreHire"
},
"/corehr/v1/pre_hires/{pre_hire_id}": {
PATCH: "patchCorehrPreHire",
DELETE: "deleteCorehrPreHire",
GET: "getCorehrPreHire"
},
"/corehr/v1/pre_hires": {
GET: "listCorehrPreHire"
},
"/corehr/v2/contracts/search": {
POST: "searchCorehrContract"
},
"/corehr/v1/contracts": {
POST: "createCorehrContract",
GET: "listCorehrContract"
},
"/corehr/v1/contracts/{contract_id}": {
DELETE: "deleteCorehrContract",
PATCH: "patchCorehrContract",
GET: "getCorehrContract"
},
"/corehr/v2/probation/search": {
POST: "searchCorehrProbation"
},
"/corehr/v2/probation/enable_disable_assessment": {
POST: "enableDisableAssessmentCorehrProbation"
},
"/corehr/v2/probation/assessments": {
POST: "createCorehrProbationAssessment"
},
"/corehr/v2/probation/assessments/{assessment_id}": {
PATCH: "patchCorehrProbationAssessment",
DELETE: "deleteCorehrProbationAssessment"
},
"/corehr/v1/transfer_reasons/query": {
GET: "queryCorehrTransferReason"
},
"/corehr/v1/transfer_types/query": {
GET: "queryCorehrTransferType"
},
"/corehr/v1/job_changes": {
POST: "createCorehrJobChange"
},
"/corehr/v2/job_changes/search": {
POST: "searchCorehrJobChange"
},
"/corehr/v1/offboardings/query": {
POST: "queryCorehrOffboarding"
},
"/corehr/v1/offboardings/submit": {
POST: "submitCorehrOffboarding"
},
"/corehr/v1/offboardings/search": {
POST: "searchCorehrOffboarding"
},
"/corehr/v1/leave_granting_records": {
POST: "createCorehrLeaveGrantingRecord"
},
"/corehr/v1/leave_granting_records/{leave_granting_record_id}": {
DELETE: "deleteCorehrLeaveGrantingRecord"
},
"/corehr/v1/leaves/leave_types": {
GET: "leaveTypesCorehrLeave"
},
"/corehr/v1/leaves/leave_balances": {
GET: "leaveBalancesCorehrLeave"
},
"/corehr/v1/leaves/leave_request_history": {
GET: "leaveRequestHistoryCorehrLeave"
},
"/corehr/v2/employees/bps/batch_get": {
POST: "batchGetCorehrEmployeesBp"
},
"/corehr/v2/bps/get_by_department": {
POST: "getByDepartmentCorehrBp"
},
"/corehr/v2/bps": {
GET: "listCorehrBp"
},
"/corehr/v1/security_groups/query": {
POST: "queryCorehrSecurityGroup"
},
"/corehr/v1/assigned_users/search": {
POST: "searchCorehrAssignedUser"
},
"/corehr/v1/security_groups": {
GET: "listCorehrSecurityGroup"
},
"/corehr/v2/processes": {
GET: "listCorehrProcess"
},
"/corehr/v2/processes/{process_id}": {
GET: "getCorehrProcess"
},
"/corehr/v1/processes/{process_id}/form_variable_data": {
GET: "getCorehrProcessFormVariableData"
},
"/corehr/v1/compensation_standards/match": {
GET: "matchCorehrCompensationStandard"
},
"/hire/v1/jobs/combined_create": {
POST: "combinedCreateHireJob"
},
"/hire/v1/jobs/{job_id}": {
GET: "getHireJob"
},
"/hire/v1/jobs/{job_id}/config": {
GET: "configHireJob"
},
"/hire/v1/jobs": {
GET: "listHireJob"
},
"/hire/v1/jobs/{job_id}/combined_update": {
POST: "combinedUpdateHireJob"
},
"/hire/v1/jobs/{job_id}/update_config": {
POST: "updateConfigHireJob"
},
"/hire/v1/job_types": {
GET: "listHireJobType"
},
"/hire/v1/jobs/{job_id}/recruiter": {
GET: "recruiterHireJob"
},
"/hire/v1/job_requirements": {
POST: "createHireJobRequirement",
GET: "listHireJobRequirement"
},
"/hire/v1/job_requirements/search": {
POST: "listByIdHireJobRequirement"
},
"/hire/v1/job_requirements/{job_requirement_id}": {
PUT: "updateHireJobRequirement",
DELETE: "deleteHireJobRequirement"
},
"/hire/v1/job_requirement_schemas": {
GET: "listHireJobRequirementSchema"
},
"/hire/v1/job_processes": {
GET: "listHireJobProcess"
},
"/hire/v1/registration_schemas": {
GET: "listHireRegistrationSchema"
},
"/hire/v1/referral_websites/job_posts": {
GET: "listHireReferralWebsiteJobPost"
},
"/hire/v1/referral_websites/job_posts/{job_post_id}": {
GET: "getHireReferralWebsiteJobPost"
},
"/hire/v1/referrals/get_by_application": {
GET: "getByApplicationHireReferral"
},
"/hire/v1/external_applications": {
POST: "createHireExternalApplication"
},
"/hire/v1/external_applications/{external_application_id}": {
PUT: "updateHireExternalApplication",
DELETE: "deleteHireExternalApplication"
},
"/hire/v1/external_interviews": {
POST: "createHireExternalInterview"
},
"/hire/v1/external_interview_assessments": {
POST: "createHireExternalInterviewAssessment"
},
"/hire/v1/external_background_checks": {
POST: "createHireExternalBackgroundCheck"
},
"/hire/v1/talents/add_to_folder": {
POST: "addToFolderHireTalent"
},
"/hire/v1/talent_folders": {
GET: "listHireTalentFolder"
},
"/hire/v1/talents/batch_get_id": {
POST: "batchGetIdHireTalent"
},
"/hire/v1/talents": {
GET: "listHireTalent"
},
"/hire/v1/talent_objects/query": {
GET: "queryHireTalentObject"
},
"/hire/v1/talents/{talent_id}": {
GET: "getHireTalent"
},
"/hire/v1/applications": {
POST: "createHireApplication",
GET: "listHireApplication"
},
"/hire/v1/applications/{application_id}/terminate": {
POST: "terminateHireApplication"
},
"/hire/v1/applications/{application_id}": {
GET: "getHireApplication"
},
"/hire/v1/evaluations": {
GET: "listHireEvaluation"
},
"/hire/v1/questionnaires": {
GET: "listHireQuestionnaire"
},
"/hire/v1/interviews": {
GET: "listHireInterview"
},
"/hire/v1/offers": {
POST: "createHireOffer",
GET: "listHireOffer"
},
"/hire/v1/offers/{offer_id}": {
PUT: "updateHireOffer",
GET: "getHireOffer"
},
"/hire/v1/applications/{application_id}/offer": {
GET: "offerHireApplication"
},
"/hire/v1/offers/{offer_id}/offer_status": {
PATCH: "offerStatusHireOffer"
},
"/hire/v1/offers/{offer_id}/intern_offer_status": {
POST: "internOfferStatusHireOffer"
},
"/hire/v1/ehr_import_tasks/{ehr_import_task_id}": {
PATCH: "patchHireEhrImportTask"
},
"/hire/v1/applications/{application_id}/transfer_onboard": {
POST: "transferOnboardHireApplication"
},
"/hire/v1/employees/{employee_id}": {
PATCH: "patchHireEmployee",
GET: "getHireEmployee"
},
"/hire/v1/employees/get_by_application": {
GET: "getByApplicationHireEmployee"
},
"/hire/v1/notes": {
POST: "createHireNote",
GET: "listHireNote"
},
"/hire/v1/notes/{note_id}": {
PATCH: "patchHireNote",
GET: "getHireNote"
},
"/hire/v1/resume_sources": {
GET: "listHireResumeSource"
},
"/hire/v1/eco_account_custom_fields": {
POST: "createHireEcoAccountCustomField"
},
"/hire/v1/eco_account_custom_fields/batch_update": {
PATCH: "batchUpdateHireEcoAccountCustomField"
},
"/hire/v1/eco_account_custom_fields/batch_delete": {
POST: "batchDeleteHireEcoAccountCustomField"
},
"/hire/v1/eco_background_check_custom_fields": {
POST: "createHireEcoBackgroundCheckCustomField"
},
"/hire/v1/eco_background_check_custom_fields/batch_update": {
PATCH: "batchUpdateHireEcoBackgroundCheckCustomField"
},
"/hire/v1/eco_background_check_custom_fields/batch_delete": {
POST: "batchDeleteHireEcoBackgroundCheckCustomField"
},
"/hire/v1/eco_background_check_packages": {
POST: "createHireEcoBackgroundCheckPackage"
},
"/hire/v1/eco_background_check_packages/batch_update": {
PATCH: "batchUpdateHireEcoBackgroundCheckPackage"
},
"/hire/v1/eco_background_check_packages/batch_delete": {
POST: "batchDeleteHireEcoBackgroundCheckPackage"
},
"/hire/v1/eco_background_checks/update_progress": {
POST: "updateProgressHireEcoBackgroundCheck"
},
"/hire/v1/eco_background_checks/update_result": {
POST: "updateResultHireEcoBackgroundCheck"
},
"/hire/v1/eco_background_checks/cancel": {
POST: "cancelHireEcoBackgroundCheck"
},
"/hire/v1/eco_exam_papers": {
POST: "createHireEcoExamPaper"
},
"/hire/v1/eco_exam_papers/batch_update": {
PATCH: "batchUpdateHireEcoExamPaper"
},
"/hire/v1/eco_exam_papers/batch_delete": {
POST: "batchDeleteHireEcoExamPaper"
},
"/hire/v1/eco_exams/{exam_id}/login_info": {
POST: "loginInfoHireEcoExam"
},
"/hire/v1/eco_exams/{exam_id}/update_result": {
POST: "updateResultHireEcoExam"
},
"/hire/v1/referral_account": {
POST: "createHireReferralAccount"
},
"/hire/v1/referral_account/{referral_account_id}/deactivate": {
POST: "deactivateHireReferralAccount"
},
"/hire/v1/referral_account/{referral_account_id}/withdraw": {
POST: "withdrawHireReferralAccount"
},
"/hire/v1/referral_account/reconciliation": {
POST: "reconciliationHireReferralAccount"
},
"/hire/v1/attachments/{attachment_id}": {
GET: "getHireAttachment"
},
"/hire/v1/attachments/{attachment_id}/preview": {
GET: "previewHireAttachment"
},
"/okr/v1/periods": {
POST: "createOkrPeriod",
GET: "listOkrPeriod"
},
"/okr/v1/periods/{period_id}": {
PATCH: "patchOkrPeriod"
},
"/okr/v1/period_rules": {
GET: "listOkrPeriodRule"
},
"/okr/v1/users/{user_id}/okrs": {
GET: "listOkrUserOkr"
},
"/okr/v1/okrs/batch_get": {
GET: "batchGetOkr"
},
"/okr/v1/progress_records": {
POST: "createOkrProgressRecord"
},
"/okr/v1/progress_records/{progress_id}": {
DELETE: "deleteOkrProgressRecord",
PUT: "updateOkrProgressRecord",
GET: "getOkrProgressRecord"
},
"/human_authentication/v1/identities": {
POST: "createHumanAuthenticationIdentity"
},
"/acs/v1/visitors/{visitor_id}": {
DELETE: "deleteAcsVisitor"
},
"/acs/v1/visitors": {
POST: "createAcsVisitor"
},
"/acs/v1/rule_external/device_bind": {
POST: "deviceBindAcsRuleExternal"
},
"/acs/v1/rule_external": {
GET: "getAcsRuleExternal",
DELETE: "deleteAcsRuleExternal",
POST: "createAcsRuleExternal"
},
"/acs/v1/users/{user_id}": {
PATCH: "patchAcsUser",
GET: "getAcsUser"
},
"/acs/v1/users": {
GET: "listAcsUser"
},
"/acs/v1/users/{user_id}/face": {
PUT: "updateAcsUserFace",
GET: "getAcsUserFace"
},
"/acs/v1/devices": {
GET: "listAcsDevice"
},
"/acs/v1/access_records": {
GET: "listAcsAccessRecord"
},
"/acs/v1/access_records/{access_record_id}/access_photo": {
GET: "getAcsAccessRecordAccessPhoto"
},
"/performance/v1/semesters": {
GET: "listPerformanceSemester"
},
"/performance/v1/stage_tasks/find_by_user_list": {
POST: "findByUserListPerformanceStageTask"
},
"/performance/v1/stage_tasks/find_by_page": {
POST: "findByPagePerformanceStageTask"
},
"/performance/v1/review_datas/query": {
POST: "queryPerformanceReviewData"
},
"/lingo/v1/drafts": {
POST: "createLingoDraft"
},
"/lingo/v1/drafts/{draft_id}": {
PUT: "updateLingoDraft"
},
"/lingo/v1/entities": {
POST: "createLingoEntity",
GET: "listLingoEntity"
},
"/lingo/v1/entities/{entity_id}": {
PUT: "updateLingoEntity",
DELETE: "deleteLingoEntity",
GET: "getLingoEntity"
},
"/lingo/v1/entities/match": {
POST: "matchLingoEntity"
},
"/lingo/v1/entities/search": {
POST: "searchLingoEntity"
},
"/lingo/v1/entities/highlight": {
POST: "highlightLingoEntity"
},
"/lingo/v1/classifications": {
GET: "listLingoClassification"
},
"/lingo/v1/repos": {
GET: "listLingoRepo"
},
"/lingo/v1/files/{file_token}/download": {
GET: "downloadLingoFile"
},
"/security_and_compliance/v1/openapi_logs/list_data": {
POST: "listDataSecurityAndComplianceOpenapiLog"
},
"/admin/v1/audit_infos": {
GET: "listAdminAuditInfo"
},
"/minutes/v1/minutes/{minute_token}/statistics": {
GET: "getMinutesMinuteStatistics"
},
"/minutes/v1/minutes/{minute_token}": {
GET: "getMinutesMinute"
},
"/workplace/v1/workplace_access_data/search": {
POST: "searchWorkplaceWorkplaceAccessData"
},
"/workplace/v1/custom_workplace_access_data/search": {
POST: "searchWorkplaceCustomWorkplaceAccessData"
},
"/workplace/v1/workplace_block_access_data/search": {
POST: "searchWorkplaceWorkplaceBlockAccessData"
},
"/application/v5/applications/favourite": {
GET: "favouriteApplication"
},
"/application/v5/applications/recommend": {
GET: "recommendApplication"
},
"/application/v6/app_recommend_rules": {
GET: "listApplicationAppRecommendRule"
},
"/mdm/v1/user_auth_data_relations/bind": {
POST: "bindMdmUserAuthDataRelation"
},
"/mdm/v1/user_auth_data_relations/unbind": {
POST: "unbindMdmUserAuthDataRelation"
},
"/report/v1/rules/query": {
GET: "queryReportRule"
},
"/report/v1/rules/{rule_id}/views/remove": {
POST: "removeReportRuleView"
},
"/report/v1/tasks/query": {
POST: "queryReportTask"
},
"/authen/v1/access_token": {
POST: "createAuthenAccessToken"
},
"/authen/v1/refresh_access_token": {
POST: "createAuthenRefreshAccessToken"
},
"/baike/v1/drafts": {
POST: "createBaikeDraft"
},
"/baike/v1/drafts/{draft_id}": {
PUT: "updateBaikeDraft"
},
"/baike/v1/entities": {
POST: "createBaikeEntity",
GET: "listBaikeEntity"
},
"/baike/v1/entities/{entity_id}": {
PUT: "updateBaikeEntity",
GET: "getBaikeEntity"
},
"/baike/v1/entities/match": {
POST: "matchBaikeEntity"
},
"/baike/v1/entities/search": {
POST: "searchBaikeEntity"
},
"/baike/v1/entities/highlight": {
POST: "highlightBaikeEntity"
},
"/baike/v1/entities/extract": {
POST: "extractBaikeEntity"
},
"/baike/v1/classifications": {
GET: "listBaikeClassification"
},
"/baike/v1/files/{file_token}/download": {
GET: "downloadBaikeFile"
},
"/hire/v1/applications/{application_id}/interviews": {
GET: "listHireApplicationInterview"
},
"/hire/v1/jobs/{job_id}/managers/{manager_id}": {
GET: "getHireJobManager"
},
"/hire/v1/offer_schemas/{offer_schema_id}": {
GET: "getHireOfferSchema"
},
"/corehr/v1/subregions": {
GET: "listCorehrSubregion"
},
"/corehr/v1/subregions/{subregion_id}": {
GET: "getCorehrSubregion"
},
"/corehr/v1/subdivisions": {
GET: "listCorehrSubdivision"
},
"/corehr/v1/subdivisions/{subdivision_id}": {
GET: "getCorehrSubdivision"
},
"/corehr/v1/country_regions": {
GET: "listCorehrCountryRegion"
},
"/corehr/v1/country_regions/{country_region_id}": {
GET: "getCorehrCountryRegion"
},
"/corehr/v1/currencies": {
GET: "listCorehrCurrency"
},
"/corehr/v1/currencies/{currency_id}": {
GET: "getCorehrCurrency"
},
"/vc/v1/room_configs/set_checkboard_access_code": {
POST: "setCheckboardAccessCodeVcRoomConfig"
},
"/vc/v1/room_configs/set_room_access_code": {
POST: "setRoomAccessCodeVcRoomConfig"
},
"/vc/v1/room_configs/query": {
GET: "queryVcRoomConfig"
},
"/vc/v1/room_configs/set": {
POST: "setVcRoomConfig"
}
});
Internal.define({
"/im/v1/images": {
POST: "createImImage"
},
"/im/v1/files": {
POST: "createImFile"
},
"/drive/v1/medias/upload_all": {
POST: "uploadAllDrivev1Media"
},
"/drive/v1/medias/upload_part": {
POST: "uploadPartDrivev1Media"
},
"/drive/v1/files/upload_all": {
POST: "uploadAllDrivev1File"
},
"/drive/v1/files/upload_part": {
POST: "uploadPartDrivev1File"
},
"/attendance/v1/files/upload": {
POST: "uploadAttendanceFile"
},
"/task/v2/attachments/upload": {
POST: "uploadTaskv2Attachment"
},
"/document_ai/v1/resume/parse": {
POST: "parseDocumentAiResume"
},
"/document_ai/v1/vehicle_invoice/recognize": {
POST: "recognizeDocumentAiVehicleInvoice"
},
"/document_ai/v1/health_certificate/recognize": {
POST: "recognizeDocumentAiHealthCertificate"
},
"/document_ai/v1/hkm_mainland_travel_permit/recognize": {
POST: "recognizeDocumentAiHkmMainlandTravelPermit"
},
"/document_ai/v1/tw_mainland_travel_permit/recognize": {
POST: "recognizeDocumentAiTwMainlandTravelPermit"
},
"/document_ai/v1/chinese_passport/recognize": {
POST: "recognizeDocumentAiChinesePassport"
},
"/document_ai/v1/bank_card/recognize": {
POST: "recognizeDocumentAiBankCard"
},
"/document_ai/v1/vehicle_license/recognize": {
POST: "recognizeDocumentAiVehicleLicense"
},
"/document_ai/v1/train_invoice/recognize": {
POST: "recognizeDocumentAiTrainInvoice"
},
"/document_ai/v1/taxi_invoice/recognize": {
POST: "recognizeDocumentAiTaxiInvoice"
},
"/document_ai/v1/id_card/recognize": {
POST: "recognizeDocumentAiIdCard"
},
"/document_ai/v1/food_produce_license/recognize": {
POST: "recognizeDocumentAiFoodProduceLicense"
},
"/document_ai/v1/food_manage_license/recognize": {
POST: "recognizeDocumentAiFoodManageLicense"
},
"/document_ai/v1/driving_license/recognize": {
POST: "recognizeDocumentAiDrivingLicense"
},
"/document_ai/v1/vat_invoice/recognize": {
POST: "recognizeDocumentAiVatInvoice"
},
"/document_ai/v1/business_license/recognize": {
POST: "recognizeDocumentAiBusinessLicense"
},
"/document_ai/v1/contract/field_extraction": {
POST: "fieldExtractionDocumentAiContract"
},
"/document_ai/v1/business_card/recognize": {
POST: "recognizeDocumentAiBusinessCard"
},
"/admin/v1/badge_images": {
POST: "createAdminBadgeImage"
},
"/corehr/v1/persons/upload": {
POST: "uploadCorehrPerson"
},
"/okr/v1/images/upload": {
POST: "uploadOkrImage"
},
"/lingo/v1/files/upload": {
POST: "uploadLingoFile"
},
"/baike/v1/files/upload": {
POST: "uploadBaikeFile"
}
}, { multipart: true });
// src/bot.ts
var LarkBot = class extends import_core5.Bot {
static {
__name(this, "LarkBot");
}
static inject = ["server", "http"];
static MessageEncoder = LarkMessageEncoder;
_token;
_refresher;
http;
assetsQuester;
internal;
constructor(ctx, config) {
super(ctx, config, "lark");
if (!config.selfUrl && !ctx.server.config.selfUrl) {
this.logger.warn("selfUrl is not set, some features may not work");
}
this.http = ctx.http.extend({
endpoint: config.endpoint
});
this.assetsQuester = ctx.http;
this.internal = new Internal(this);
ctx.plugin(HttpServer, this);
}
get appId() {
return this.config.appId;
}
async initialize() {
await this.refreshToken();
const { bot } = await this.http.get("/bot/v3/info");
this.selfId = bot.open_id;
this.user.avatar = bot.avatar_url;
this.user.name = bot.app_name;
this.online();
}
async refreshToken() {
const { tenant_access_token: token } = await this.internal.tenantAccessTokenInternalAuth({
app_id: this.config.appId,
app_secret: this.config.appSecret
});
this.logger.debug("refreshed token %s", token);
this.token = token;
if (this._refresher) clearTimeout(this._refresher);
this._refresher = setTimeout(() => this.refreshToken(), 3600 * 1e3);
this.online();
}
get token() {
return this._token;
}
set token(v) {
this._token = v;
this.http.config.headers.Authorization = `Bearer ${v}`;
}
async editMessage(channelId, messageId, content) {
await this.internal.updateImMessage(messageId, {
content: import_core5.h.normalize(content).join(""),
msg_type: "text"
});
}
async deleteMessage(channelId, messageId) {
await this.internal.deleteImMessage(messageId);
}
async getMessage(channelId, messageId, recursive = true) {
const data = await this.internal.getImMessage(messageId);
const message = await decodeMessage(this, data.items[0], recursive);
const im = await this.internal.getImChat(channelId);
message.channel.type = im.chat_mode === "p2p" ? import_core5.Universal.Channel.Type.DIRECT : import_core5.Universal.Channel.Type.TEXT;
return message;
}
async getMessageList(channelId, before) {
const messages = await this.internal.listImMessage({ container_id_type: "chat", container_id: channelId, page_token: before });
const data = await Promise.all(messages.items.reverse().map((data2) => decodeMessage(this, data2)));
return { data, next: data[0]?.id };
}
async getUser(userId, guildId) {
const data = await this.internal.getContactUser(userId);
return decodeUser(data.user);
}
async getChannel(channelId) {
const chat = await this.internal.getImChat(channelId);
return decodeChannel(channelId, chat);
}
async getChannelList(guildId) {
return { data: [await this.getChannel(guildId)] };
}
async getGuild(guildId) {
const chat = await this.internal.getImChat(guildId);
return decodeGuild(chat);
}
async getGuildList(after) {
const chats = await this.internal.listImChat({ page_token: after });
return { data: chats.items.map(decodeGuild), next: chats.page_token };
}
async getGuildMemberList(guildId, after) {
const members = await this.internal.getImChatMembers(guildId, { page_token: after });
const data = members.items.map((v) => ({ user: { id: v.member_id, name: v.name }, name: v.name }));
return { data, next: members.page_token };
}
};
((LarkBot2) => {
LarkBot2.Config = import_core5.Schema.intersect([
import_core5.Schema.object({
platform: import_core5.Schema.union(["feishu", "lark"]).required().description("平台名称。"),
appId: import_core5.Schema.string().required().description("机器人的应用 ID。"),
appSecret: import_core5.Schema.string().role("secret").required().description("机器人的应用密钥。"),
encryptKey: import_core5.Schema.string().role("secret").description("机器人的 Encrypt Key。"),
verificationToken: import_core5.Schema.string().description("事件推送的验证令牌。")
}),
import_core5.Schema.union([
import_core5.Schema.intersect([
import_core5.Schema.object({
platform: import_core5.Schema.const("feishu").required()
}),
import_core5.HTTP.createConfig("https://open.feishu.cn/open-apis/"),
HttpServer.createConfig("/feishu")
]),
import_core5.Schema.intersect([
import_core5.Schema.object({
platform: import_core5.Schema.const("lark").required()
}),
import_core5.HTTP.createConfig("https://open.larksuite.com/open-apis/"),
HttpServer.createConfig("/lark")
])
])
]);
})(LarkBot || (LarkBot = {}));
// src/index.ts
var src_default = LarkBot;
// Annotate the CommonJS export names for ESM import in node:
0 && (module.exports = {
Feishu,
FeishuBot,
Lark,
LarkBot
});
//# sourceMappingURL=index.cjs.map