@openclaw/feishu 2026.5.30-beta.1 → 2026.5.31-beta.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +11 -0
- package/dist/{accounts-CXnY5H8g.js → accounts-Bpe6CjpS.js} +35 -3
- package/dist/api.js +16 -9
- package/dist/{channel-DccLoln2.js → channel-TXwK9jIG.js} +14 -12
- package/dist/channel-plugin-api.js +1 -1
- package/dist/{channel.runtime-CmCCekKl.js → channel.runtime-AAff9iBZ.js} +5 -5
- package/dist/{drive-USxqssMG.js → drive-BIrffRwc.js} +18 -6
- package/dist/{monitor-DSJJNRiU.js → monitor-Ccev4ogO.js} +3 -3
- package/dist/{monitor.account-V8T4ZdUw.js → monitor.account-DYaT0fVd.js} +17 -17
- package/dist/{monitor.state-V43tWIJ9.js → monitor.state-r4OLFBfg.js} +1 -1
- package/dist/{probe-DKDDBF_j.js → probe-BjKRV7em.js} +2 -4
- package/dist/{send-WRPbKn3K.js → send-Cze2qlca.js} +3 -3
- package/dist/{send-result-DSTSkRDM.js → send-result-D9rgEUlm.js} +1 -1
- package/dist/setup-api.js +1 -1
- package/node_modules/es-object-atoms/CHANGELOG.md +21 -14
- package/node_modules/es-object-atoms/isObject.d.ts +1 -1
- package/node_modules/es-object-atoms/package.json +6 -7
- package/node_modules/es-object-atoms/tsconfig.json +1 -0
- package/node_modules/hasown/CHANGELOG.md +7 -0
- package/node_modules/hasown/index.d.ts +0 -1
- package/node_modules/hasown/package.json +4 -5
- package/node_modules/typebox/build/type/script/mapping.d.mts +5 -2
- package/node_modules/typebox/build/type/script/mapping.mjs +15 -8
- package/node_modules/typebox/build/type/script/parser.d.mts +3 -1
- package/node_modules/typebox/build/type/script/parser.mjs +2 -1
- package/node_modules/typebox/package.json +29 -29
- package/npm-shrinkwrap.json +13 -13
- package/openclaw.plugin.json +124 -0
- package/package.json +6 -5
package/README.md
ADDED
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
# OpenClaw Feishu/Lark
|
|
2
|
+
|
|
3
|
+
Official OpenClaw channel plugin for Feishu and Lark workplace chats. Community maintained by @m1heng.
|
|
4
|
+
|
|
5
|
+
Install from OpenClaw:
|
|
6
|
+
|
|
7
|
+
```bash
|
|
8
|
+
openclaw plugin add @openclaw/feishu
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
Configure the Feishu/Lark app credentials in OpenClaw, then connect the plugin to the chats where agents should receive and send messages.
|
|
@@ -342,18 +342,50 @@ function resolveDefaultFeishuAccountSelection(cfg) {
|
|
|
342
342
|
function resolveDefaultFeishuAccountId(cfg) {
|
|
343
343
|
return resolveDefaultAccountId(cfg);
|
|
344
344
|
}
|
|
345
|
+
function resolveRawFeishuAccountConfig(accounts, accountId) {
|
|
346
|
+
if (!accounts || typeof accounts !== "object") return;
|
|
347
|
+
if (Object.hasOwn(accounts, accountId)) return accounts[accountId];
|
|
348
|
+
const normalized = accountId.toLowerCase();
|
|
349
|
+
const matchKey = Object.keys(accounts).find((key) => key.toLowerCase() === normalized);
|
|
350
|
+
return matchKey ? accounts[matchKey] : void 0;
|
|
351
|
+
}
|
|
345
352
|
/**
|
|
346
353
|
* Merge top-level config with account-specific config.
|
|
347
354
|
* Account-specific fields override top-level fields.
|
|
348
355
|
*/
|
|
349
356
|
function mergeFeishuAccountConfig(cfg, accountId) {
|
|
350
357
|
const feishuCfg = cfg.channels?.feishu;
|
|
351
|
-
|
|
358
|
+
const accounts = feishuCfg?.accounts;
|
|
359
|
+
const accountTools = resolveRawFeishuAccountConfig(accounts, accountId)?.tools;
|
|
360
|
+
const merged = resolveMergedAccountConfig({
|
|
352
361
|
channelConfig: feishuCfg,
|
|
353
|
-
accounts
|
|
362
|
+
accounts,
|
|
354
363
|
accountId,
|
|
355
|
-
omitKeys: ["defaultAccount"]
|
|
364
|
+
omitKeys: ["defaultAccount"],
|
|
365
|
+
nestedObjectKeys: ["tools"]
|
|
356
366
|
});
|
|
367
|
+
const topTools = feishuCfg?.tools;
|
|
368
|
+
if (merged.tools === void 0 && topTools !== void 0) return {
|
|
369
|
+
...merged,
|
|
370
|
+
tools: topTools
|
|
371
|
+
};
|
|
372
|
+
if (topTools?.bitable === false || topTools?.bitable === void 0 && topTools?.base === false) return {
|
|
373
|
+
...merged,
|
|
374
|
+
tools: {
|
|
375
|
+
...merged.tools,
|
|
376
|
+
bitable: false,
|
|
377
|
+
base: false
|
|
378
|
+
}
|
|
379
|
+
};
|
|
380
|
+
if (accountTools?.bitable === void 0 && accountTools?.base !== void 0) return {
|
|
381
|
+
...merged,
|
|
382
|
+
tools: {
|
|
383
|
+
...merged.tools,
|
|
384
|
+
bitable: accountTools.base,
|
|
385
|
+
base: accountTools.base
|
|
386
|
+
}
|
|
387
|
+
};
|
|
388
|
+
return merged;
|
|
357
389
|
}
|
|
358
390
|
function resolveFeishuCredentials(cfg, options) {
|
|
359
391
|
const mode = options?.mode ?? (options?.allowUnresolvedSecretRef ? "inspect" : "strict");
|
package/dist/api.js
CHANGED
|
@@ -1,8 +1,9 @@
|
|
|
1
|
-
import { r as listEnabledFeishuAccounts } from "./accounts-
|
|
2
|
-
import { a as setFeishuNamedAccountEnabled, i as feishuSetupAdapter, n as feishuSetupWizard, r as runFeishuLogin, t as feishuPlugin } from "./channel-
|
|
1
|
+
import { r as listEnabledFeishuAccounts } from "./accounts-Bpe6CjpS.js";
|
|
2
|
+
import { a as setFeishuNamedAccountEnabled, i as feishuSetupAdapter, n as feishuSetupWizard, r as runFeishuLogin, t as feishuPlugin } from "./channel-TXwK9jIG.js";
|
|
3
3
|
import { a as parseFeishuTargetId, i as parseFeishuDirectConversationId, n as buildFeishuModelOverrideParentCandidates, r as parseFeishuConversationId, t as buildFeishuConversationId } from "./conversation-id-DuL575sn.js";
|
|
4
4
|
import { t as getFeishuRuntime } from "./runtime-C5JxBWZp.js";
|
|
5
|
-
import {
|
|
5
|
+
import { r as createFeishuClient } from "./client-BhMNZBJD.js";
|
|
6
|
+
import { a as jsonToolResult, d as registerFeishuChatTools, f as createFeishuToolClient, h as resolveToolsConfig, m as resolveFeishuToolAccount, n as registerFeishuDriveTools, o as toolExecutionErrorResult, p as resolveAnyEnabledFeishuToolsConfig, s as unknownToolActionResult } from "./drive-BIrffRwc.js";
|
|
6
7
|
import { n as getFeishuThreadBindingManager, r as testing, t as createFeishuThreadBindingManager } from "./thread-bindings-C58Uq5Y1.js";
|
|
7
8
|
import { n as handleFeishuSubagentEnded, r as handleFeishuSubagentSpawning, t as handleFeishuSubagentDeliveryTarget } from "./subagent-hooks-Bw3Dg2mS.js";
|
|
8
9
|
import { normalizeLowercaseStringOrEmpty, normalizeOptionalString, readStringValue, uniqueStrings } from "openclaw/plugin-sdk/string-coerce-runtime";
|
|
@@ -2208,12 +2209,18 @@ const UpdateRecordSchema = Type.Object({
|
|
|
2208
2209
|
});
|
|
2209
2210
|
function registerFeishuBitableTools(api) {
|
|
2210
2211
|
if (!api.config) return;
|
|
2211
|
-
|
|
2212
|
-
|
|
2213
|
-
|
|
2214
|
-
|
|
2215
|
-
|
|
2216
|
-
|
|
2212
|
+
const accounts = listEnabledFeishuAccounts(api.config);
|
|
2213
|
+
if (accounts.length === 0) return;
|
|
2214
|
+
if (!resolveAnyEnabledFeishuToolsConfig(accounts).bitable) return;
|
|
2215
|
+
const getClient = (params, defaultAccountId) => {
|
|
2216
|
+
const account = resolveFeishuToolAccount({
|
|
2217
|
+
api,
|
|
2218
|
+
executeParams: params,
|
|
2219
|
+
defaultAccountId
|
|
2220
|
+
});
|
|
2221
|
+
if (!resolveToolsConfig(account.config.tools).bitable) throw new Error(`Feishu Bitable tools are disabled for account "${account.accountId}"`);
|
|
2222
|
+
return createFeishuClient(account);
|
|
2223
|
+
};
|
|
2217
2224
|
const registerBitableTool = (params) => {
|
|
2218
2225
|
api.registerTool((ctx) => ({
|
|
2219
2226
|
name: params.name,
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { a as resolveDefaultFeishuAccountId, f as isRecord$2, i as listFeishuAccountIds, n as inspectFeishuCredentials, o as resolveFeishuAccount, r as listEnabledFeishuAccounts, s as resolveFeishuRuntimeAccount } from "./accounts-
|
|
1
|
+
import { a as resolveDefaultFeishuAccountId, f as isRecord$2, i as listFeishuAccountIds, n as inspectFeishuCredentials, o as resolveFeishuAccount, r as listEnabledFeishuAccounts, s as resolveFeishuRuntimeAccount } from "./accounts-Bpe6CjpS.js";
|
|
2
2
|
import { n as looksLikeFeishuId, r as normalizeFeishuTarget, t as detectIdType } from "./targets-BUjQ1TcA.js";
|
|
3
|
-
import { n as createFeishuSendReceipt, s as createFeishuCardInteractionEnvelope } from "./send-result-
|
|
3
|
+
import { n as createFeishuSendReceipt, s as createFeishuCardInteractionEnvelope } from "./send-result-D9rgEUlm.js";
|
|
4
4
|
import { a as parseFeishuTargetId, i as parseFeishuDirectConversationId, n as buildFeishuModelOverrideParentCandidates, r as parseFeishuConversationId, t as buildFeishuConversationId } from "./conversation-id-DuL575sn.js";
|
|
5
5
|
import { t as messageActionTargetAliases } from "./security-audit-BIeA3W3Q.js";
|
|
6
6
|
import { n as collectRuntimeConfigAssignments, r as secretTargetRegistryEntries } from "./secret-contract-ChjJKAJ9.js";
|
|
@@ -150,7 +150,9 @@ const FeishuToolsConfigSchema = z.object({
|
|
|
150
150
|
wiki: z.boolean().optional(),
|
|
151
151
|
drive: z.boolean().optional(),
|
|
152
152
|
perm: z.boolean().optional(),
|
|
153
|
-
scopes: z.boolean().optional()
|
|
153
|
+
scopes: z.boolean().optional(),
|
|
154
|
+
bitable: z.boolean().optional(),
|
|
155
|
+
base: z.boolean().optional()
|
|
154
156
|
}).strict().optional();
|
|
155
157
|
/**
|
|
156
158
|
* Group session scope for routing Feishu group messages.
|
|
@@ -279,7 +281,7 @@ const FeishuConfigSchema = z.object({
|
|
|
279
281
|
const defaultAccount = value.defaultAccount?.trim();
|
|
280
282
|
if (defaultAccount && value.accounts && Object.keys(value.accounts).length > 0) {
|
|
281
283
|
const normalizedDefaultAccount = normalizeAccountId$1(defaultAccount);
|
|
282
|
-
if (!Object.
|
|
284
|
+
if (!Object.hasOwn(value.accounts, normalizedDefaultAccount)) ctx.addIssue({
|
|
283
285
|
code: z.ZodIssueCode.custom,
|
|
284
286
|
path: ["defaultAccount"],
|
|
285
287
|
message: `channels.feishu.defaultAccount="${defaultAccount}" does not match a configured account key`
|
|
@@ -419,7 +421,7 @@ function isPathWithinRoot(targetPath, rootPath) {
|
|
|
419
421
|
const resolvedTarget = path.resolve(targetPath);
|
|
420
422
|
const resolvedRoot = path.resolve(rootPath);
|
|
421
423
|
const relative = path.relative(resolvedRoot, resolvedTarget);
|
|
422
|
-
return
|
|
424
|
+
return relative !== "" && !relative.startsWith("..") && !path.isAbsolute(relative);
|
|
423
425
|
}
|
|
424
426
|
function formatDisplayPath(filePath) {
|
|
425
427
|
const home = os.homedir();
|
|
@@ -824,7 +826,7 @@ async function repairFeishuDoctorState(params) {
|
|
|
824
826
|
const keys = new Set(group.entries.map((entry) => entry.key));
|
|
825
827
|
const removedEntries = await updateSessionStore(storePath, (store) => {
|
|
826
828
|
const removed = [];
|
|
827
|
-
for (const key of keys) if (Object.
|
|
829
|
+
for (const key of keys) if (Object.hasOwn(store, key)) {
|
|
828
830
|
delete store[key];
|
|
829
831
|
const entry = group.entries.find((candidate) => candidate.key === key);
|
|
830
832
|
if (entry) removed.push(entry);
|
|
@@ -1070,7 +1072,7 @@ function hasExplicitFeishuGroupConfig(params) {
|
|
|
1070
1072
|
const groups = params.cfg?.groups ?? {};
|
|
1071
1073
|
const groupId = params.groupId?.trim();
|
|
1072
1074
|
if (!groupId) return false;
|
|
1073
|
-
if (Object.
|
|
1075
|
+
if (Object.hasOwn(groups, groupId) && groupId !== "*") return true;
|
|
1074
1076
|
const lowered = normalizeOptionalLowercaseString(groupId) ?? "";
|
|
1075
1077
|
return Object.keys(groups).some((key) => key !== "*" && normalizeOptionalLowercaseString(key) === lowered);
|
|
1076
1078
|
}
|
|
@@ -1307,8 +1309,8 @@ function isFeishuConfigured(cfg) {
|
|
|
1307
1309
|
const topLevelConfigured = isAppIdConfigured(feishuCfg?.appId) && hasConfiguredSecretInput$1(feishuCfg?.appSecret);
|
|
1308
1310
|
const accountConfigured = Object.values(feishuCfg?.accounts ?? {}).some((account) => {
|
|
1309
1311
|
if (!account || typeof account !== "object") return false;
|
|
1310
|
-
const hasOwnAppId = Object.
|
|
1311
|
-
const hasOwnAppSecret = Object.
|
|
1312
|
+
const hasOwnAppId = Object.hasOwn(account, "appId");
|
|
1313
|
+
const hasOwnAppSecret = Object.hasOwn(account, "appSecret");
|
|
1312
1314
|
const accountAppIdConfigured = hasOwnAppId ? isAppIdConfigured(account.appId) : isAppIdConfigured(feishuCfg?.appId);
|
|
1313
1315
|
const accountSecretConfigured = hasOwnAppSecret ? hasConfiguredSecretInput$1(account.appSecret) : hasConfiguredSecretInput$1(feishuCfg?.appSecret);
|
|
1314
1316
|
return accountAppIdConfigured && accountSecretConfigured;
|
|
@@ -1653,7 +1655,7 @@ const feishuSetupWizard = {
|
|
|
1653
1655
|
});
|
|
1654
1656
|
let probeResult = null;
|
|
1655
1657
|
if (configured && account.configured) try {
|
|
1656
|
-
const { probeFeishu } = await import("./probe-
|
|
1658
|
+
const { probeFeishu } = await import("./probe-BjKRV7em.js").then((n) => n.n);
|
|
1657
1659
|
probeResult = await probeFeishu(account);
|
|
1658
1660
|
} catch {}
|
|
1659
1661
|
if (!configured) return [formatFeishuStatusLine("needs-credentials")];
|
|
@@ -1729,7 +1731,7 @@ const meta = {
|
|
|
1729
1731
|
order: 70,
|
|
1730
1732
|
preferSessionLookupForAnnounceTarget: true
|
|
1731
1733
|
};
|
|
1732
|
-
const loadFeishuChannelRuntime = createLazyRuntimeNamedExport(() => import("./channel.runtime-
|
|
1734
|
+
const loadFeishuChannelRuntime = createLazyRuntimeNamedExport(() => import("./channel.runtime-AAff9iBZ.js"), "feishuChannelRuntime");
|
|
1733
1735
|
function toFeishuMessageSendResult(result, kind) {
|
|
1734
1736
|
const receipt = result.receipt ?? createFeishuSendReceipt({
|
|
1735
1737
|
messageId: result.messageId,
|
|
@@ -2545,7 +2547,7 @@ const feishuPlugin = createChatChannelPlugin({
|
|
|
2545
2547
|
})
|
|
2546
2548
|
}),
|
|
2547
2549
|
gateway: { startAccount: async (ctx) => {
|
|
2548
|
-
const { monitorFeishuProvider } = await import("./monitor-
|
|
2550
|
+
const { monitorFeishuProvider } = await import("./monitor-Ccev4ogO.js");
|
|
2549
2551
|
const account = resolveFeishuRuntimeAccount({
|
|
2550
2552
|
cfg: ctx.cfg,
|
|
2551
2553
|
accountId: ctx.accountId
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { t as feishuPlugin } from "./channel-
|
|
1
|
+
import { t as feishuPlugin } from "./channel-TXwK9jIG.js";
|
|
2
2
|
export { feishuPlugin };
|
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
import { o as resolveFeishuAccount, s as resolveFeishuRuntimeAccount, y as parseFeishuCommentTarget } from "./accounts-
|
|
2
|
-
import { h as listFeishuDirectoryPeers, m as listFeishuDirectoryGroups, o as buildFeishuPresentationCardElements } from "./channel-
|
|
1
|
+
import { o as resolveFeishuAccount, s as resolveFeishuRuntimeAccount, y as parseFeishuCommentTarget } from "./accounts-Bpe6CjpS.js";
|
|
2
|
+
import { h as listFeishuDirectoryPeers, m as listFeishuDirectoryGroups, o as buildFeishuPresentationCardElements } from "./channel-TXwK9jIG.js";
|
|
3
3
|
import { r as createFeishuClient } from "./client-BhMNZBJD.js";
|
|
4
|
-
import { c as getChatInfo, l as getChatMembers, r as cleanupAmbientCommentTypingReaction, t as deliverCommentThreadText, u as getFeishuMemberInfo } from "./drive-
|
|
4
|
+
import { c as getChatInfo, l as getChatMembers, r as cleanupAmbientCommentTypingReaction, t as deliverCommentThreadText, u as getFeishuMemberInfo } from "./drive-BIrffRwc.js";
|
|
5
5
|
import { chunkTextForOutbound } from "./runtime-api.js";
|
|
6
|
-
import { a as sendCardFeishu, c as sendStructuredCardFeishu, g as shouldSuppressFeishuTextForVoiceMedia, h as sendMediaFeishu, i as resolveFeishuCardTemplate, n as getMessageFeishu, o as sendMarkdownCardFeishu, s as sendMessageFeishu, t as editMessageFeishu } from "./send-
|
|
7
|
-
import { t as probeFeishu } from "./probe-
|
|
6
|
+
import { a as sendCardFeishu, c as sendStructuredCardFeishu, g as shouldSuppressFeishuTextForVoiceMedia, h as sendMediaFeishu, i as resolveFeishuCardTemplate, n as getMessageFeishu, o as sendMarkdownCardFeishu, s as sendMessageFeishu, t as editMessageFeishu } from "./send-Cze2qlca.js";
|
|
7
|
+
import { t as probeFeishu } from "./probe-BjKRV7em.js";
|
|
8
8
|
import { interactiveReplyToPresentation, normalizeInteractiveReply, normalizeMessagePresentation, renderMessagePresentationFallbackText, resolveInteractiveTextFallback } from "openclaw/plugin-sdk/interactive-runtime";
|
|
9
9
|
import { isRecord, normalizeLowercaseStringOrEmpty, normalizeStringEntries } from "openclaw/plugin-sdk/string-coerce-runtime";
|
|
10
10
|
import path from "node:path";
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { d as formatFeishuApiError, f as isRecord$1, h as readString, i as listFeishuAccountIds, l as encodeQuery, o as resolveFeishuAccount, r as listEnabledFeishuAccounts, s as resolveFeishuRuntimeAccount, u as extractReplyText, y as parseFeishuCommentTarget } from "./accounts-
|
|
1
|
+
import { d as formatFeishuApiError, f as isRecord$1, h as readString, i as listFeishuAccountIds, l as encodeQuery, o as resolveFeishuAccount, r as listEnabledFeishuAccounts, s as resolveFeishuRuntimeAccount, u as extractReplyText, y as parseFeishuCommentTarget } from "./accounts-Bpe6CjpS.js";
|
|
2
2
|
import { r as createFeishuClient } from "./client-BhMNZBJD.js";
|
|
3
3
|
import { normalizeOptionalString } from "openclaw/plugin-sdk/string-coerce-runtime";
|
|
4
4
|
import { optionalPositiveIntegerSchema } from "openclaw/plugin-sdk/channel-actions";
|
|
@@ -8,7 +8,7 @@ import { readPositiveIntegerParam } from "openclaw/plugin-sdk/param-readers";
|
|
|
8
8
|
//#region extensions/feishu/src/tools-config.ts
|
|
9
9
|
/**
|
|
10
10
|
* Default tool configuration.
|
|
11
|
-
* - doc, chat, wiki, drive, scopes: enabled by default
|
|
11
|
+
* - doc, chat, wiki, drive, scopes, bitable/base: enabled by default
|
|
12
12
|
* - perm: disabled by default (sensitive operation)
|
|
13
13
|
*/
|
|
14
14
|
const DEFAULT_TOOLS_CONFIG = {
|
|
@@ -17,15 +17,23 @@ const DEFAULT_TOOLS_CONFIG = {
|
|
|
17
17
|
wiki: true,
|
|
18
18
|
drive: true,
|
|
19
19
|
perm: false,
|
|
20
|
-
scopes: true
|
|
20
|
+
scopes: true,
|
|
21
|
+
bitable: true,
|
|
22
|
+
base: true
|
|
21
23
|
};
|
|
22
24
|
/**
|
|
23
25
|
* Resolve tools config with defaults.
|
|
26
|
+
*
|
|
27
|
+
* `base` is a backward-compatible alias for the Bitable tool family. When both
|
|
28
|
+
* keys are present, the explicit `bitable` value wins and `base` mirrors it.
|
|
24
29
|
*/
|
|
25
30
|
function resolveToolsConfig(cfg) {
|
|
31
|
+
const bitable = cfg?.bitable ?? cfg?.base ?? DEFAULT_TOOLS_CONFIG.bitable;
|
|
26
32
|
return {
|
|
27
33
|
...DEFAULT_TOOLS_CONFIG,
|
|
28
|
-
...cfg
|
|
34
|
+
...cfg,
|
|
35
|
+
bitable,
|
|
36
|
+
base: bitable
|
|
29
37
|
};
|
|
30
38
|
}
|
|
31
39
|
//#endregion
|
|
@@ -60,7 +68,9 @@ function resolveAnyEnabledFeishuToolsConfig(accounts) {
|
|
|
60
68
|
wiki: false,
|
|
61
69
|
drive: false,
|
|
62
70
|
perm: false,
|
|
63
|
-
scopes: false
|
|
71
|
+
scopes: false,
|
|
72
|
+
bitable: false,
|
|
73
|
+
base: false
|
|
64
74
|
};
|
|
65
75
|
for (const account of accounts) {
|
|
66
76
|
const cfg = resolveToolsConfig(account.config.tools);
|
|
@@ -70,6 +80,8 @@ function resolveAnyEnabledFeishuToolsConfig(accounts) {
|
|
|
70
80
|
merged.drive = merged.drive || cfg.drive;
|
|
71
81
|
merged.perm = merged.perm || cfg.perm;
|
|
72
82
|
merged.scopes = merged.scopes || cfg.scopes;
|
|
83
|
+
merged.bitable = merged.bitable || cfg.bitable;
|
|
84
|
+
merged.base = merged.base || cfg.base;
|
|
73
85
|
}
|
|
74
86
|
return merged;
|
|
75
87
|
}
|
|
@@ -892,4 +904,4 @@ function registerFeishuDriveTools(api) {
|
|
|
892
904
|
}, { name: "feishu_drive" });
|
|
893
905
|
}
|
|
894
906
|
//#endregion
|
|
895
|
-
export { jsonToolResult as a, getChatInfo as c, registerFeishuChatTools as d, createFeishuToolClient as f, createCommentTypingReactionLifecycle as i, getChatMembers as l, resolveFeishuToolAccount as m, registerFeishuDriveTools as n, toolExecutionErrorResult as o, resolveAnyEnabledFeishuToolsConfig as p, cleanupAmbientCommentTypingReaction as r, unknownToolActionResult as s, deliverCommentThreadText as t, getFeishuMemberInfo as u };
|
|
907
|
+
export { jsonToolResult as a, getChatInfo as c, registerFeishuChatTools as d, createFeishuToolClient as f, resolveToolsConfig as h, createCommentTypingReactionLifecycle as i, getChatMembers as l, resolveFeishuToolAccount as m, registerFeishuDriveTools as n, toolExecutionErrorResult as o, resolveAnyEnabledFeishuToolsConfig as p, cleanupAmbientCommentTypingReaction as r, unknownToolActionResult as s, deliverCommentThreadText as t, getFeishuMemberInfo as u };
|
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
import { r as listEnabledFeishuAccounts, s as resolveFeishuRuntimeAccount } from "./accounts-
|
|
2
|
-
import { l as fetchBotIdentityForMonitor } from "./monitor.state-
|
|
1
|
+
import { r as listEnabledFeishuAccounts, s as resolveFeishuRuntimeAccount } from "./accounts-Bpe6CjpS.js";
|
|
2
|
+
import { l as fetchBotIdentityForMonitor } from "./monitor.state-r4OLFBfg.js";
|
|
3
3
|
//#region extensions/feishu/src/monitor.ts
|
|
4
4
|
let monitorAccountRuntimePromise;
|
|
5
5
|
async function loadMonitorAccountRuntime() {
|
|
6
|
-
monitorAccountRuntimePromise ??= import("./monitor.account-
|
|
6
|
+
monitorAccountRuntimePromise ??= import("./monitor.account-DYaT0fVd.js");
|
|
7
7
|
return await monitorAccountRuntimePromise;
|
|
8
8
|
}
|
|
9
9
|
async function monitorFeishuProvider(opts = {}) {
|
|
@@ -1,20 +1,20 @@
|
|
|
1
|
-
import { _ as buildFeishuCommentTarget, f as isRecord$1, h as readString, l as encodeQuery, m as parseCommentContentElements, p as normalizeString, s as resolveFeishuRuntimeAccount, u as extractReplyText, v as normalizeCommentFileType } from "./accounts-
|
|
1
|
+
import { _ as buildFeishuCommentTarget, f as isRecord$1, h as readString, l as encodeQuery, m as parseCommentContentElements, p as normalizeString, s as resolveFeishuRuntimeAccount, u as extractReplyText, v as normalizeCommentFileType } from "./accounts-Bpe6CjpS.js";
|
|
2
2
|
import { i as resolveReceiveIdType } from "./targets-BUjQ1TcA.js";
|
|
3
|
-
import { c as normalizeFeishuAllowEntry, d as resolveFeishuGroupConversationIngressAccess, f as resolveFeishuGroupSenderActivationIngressAccess, l as resolveFeishuDmIngressAccess, p as resolveFeishuReplyPolicy, s as hasExplicitFeishuGroupConfig, u as resolveFeishuGroupConfig } from "./channel-
|
|
4
|
-
import { c as decodeFeishuCardAction, o as buildFeishuCardActionTextFallback, s as createFeishuCardInteractionEnvelope } from "./send-result-
|
|
3
|
+
import { c as normalizeFeishuAllowEntry, d as resolveFeishuGroupConversationIngressAccess, f as resolveFeishuGroupSenderActivationIngressAccess, l as resolveFeishuDmIngressAccess, p as resolveFeishuReplyPolicy, s as hasExplicitFeishuGroupConfig, u as resolveFeishuGroupConfig } from "./channel-TXwK9jIG.js";
|
|
4
|
+
import { c as decodeFeishuCardAction, o as buildFeishuCardActionTextFallback, s as createFeishuCardInteractionEnvelope } from "./send-result-D9rgEUlm.js";
|
|
5
5
|
import { t as buildFeishuConversationId } from "./conversation-id-DuL575sn.js";
|
|
6
6
|
import { t as getFeishuRuntime } from "./runtime-C5JxBWZp.js";
|
|
7
7
|
import { a as getFeishuUserAgent, i as createFeishuWSClient, n as createEventDispatcher, r as createFeishuClient } from "./client-BhMNZBJD.js";
|
|
8
|
-
import { c as getChatInfo, i as createCommentTypingReactionLifecycle, t as deliverCommentThreadText } from "./drive-
|
|
8
|
+
import { c as getChatInfo, i as createCommentTypingReactionLifecycle, t as deliverCommentThreadText } from "./drive-BIrffRwc.js";
|
|
9
9
|
import { t as createFeishuThreadBindingManager } from "./thread-bindings-C58Uq5Y1.js";
|
|
10
10
|
import { createReplyPrefixContext, evaluateSupplementalContextVisibility, loadSessionStore, normalizeAgentId as normalizeAgentId$2, resolveChannelContextVisibilityMode, resolveSessionStoreEntry } from "./runtime-api.js";
|
|
11
|
-
import { _ as normalizeFeishuExternalKey, a as sendCardFeishu, c as sendStructuredCardFeishu, d as isFeishuBroadcastMention, f as isMentionForwardRequest, g as shouldSuppressFeishuTextForVoiceMedia, h as sendMediaFeishu, i as resolveFeishuCardTemplate, l as parsePostContent, m as saveMessageResourceFeishu, n as getMessageFeishu, p as isFeishuGroupChatType, r as listFeishuThreadMessages, s as sendMessageFeishu, u as extractMentionTargets } from "./send-
|
|
12
|
-
import { i as waitForAbortableDelay, r as raceWithTimeoutAndAbort } from "./probe-
|
|
13
|
-
import { a as feishuWebhookRateLimiter, c as wsClients, i as botOpenIds, l as fetchBotIdentityForMonitor, n as FEISHU_WEBHOOK_MAX_BODY_BYTES, o as httpServers, r as botNames, s as recordWebhookStatus, t as FEISHU_WEBHOOK_BODY_TIMEOUT_MS } from "./monitor.state-
|
|
11
|
+
import { _ as normalizeFeishuExternalKey, a as sendCardFeishu, c as sendStructuredCardFeishu, d as isFeishuBroadcastMention, f as isMentionForwardRequest, g as shouldSuppressFeishuTextForVoiceMedia, h as sendMediaFeishu, i as resolveFeishuCardTemplate, l as parsePostContent, m as saveMessageResourceFeishu, n as getMessageFeishu, p as isFeishuGroupChatType, r as listFeishuThreadMessages, s as sendMessageFeishu, u as extractMentionTargets } from "./send-Cze2qlca.js";
|
|
12
|
+
import { i as waitForAbortableDelay, r as raceWithTimeoutAndAbort } from "./probe-BjKRV7em.js";
|
|
13
|
+
import { a as feishuWebhookRateLimiter, c as wsClients, i as botOpenIds, l as fetchBotIdentityForMonitor, n as FEISHU_WEBHOOK_MAX_BODY_BYTES, o as httpServers, r as botNames, s as recordWebhookStatus, t as FEISHU_WEBHOOK_BODY_TIMEOUT_MS } from "./monitor.state-r4OLFBfg.js";
|
|
14
14
|
import { createChannelMessageReplyPipeline, formatChannelProgressDraftLineForEntry, isChannelProgressDraftWorkToolName, resolveAgentOutboundIdentity } from "openclaw/plugin-sdk/channel-outbound";
|
|
15
15
|
import { createChannelPairingController, createChannelPairingController as createChannelPairingController$1 } from "openclaw/plugin-sdk/channel-pairing";
|
|
16
16
|
import { ensureConfiguredBindingRouteReady, resolveConfiguredBindingRoute, resolveRuntimeConversationBindingRoute } from "openclaw/plugin-sdk/conversation-runtime";
|
|
17
|
-
import { asDateTimestampMs, isFutureDateTimestampMs, parseStrictNonNegativeInteger, resolveDateTimestampMs, resolveExpiresAtMsFromDurationMs, resolveExpiresAtMsFromDurationSeconds } from "openclaw/plugin-sdk/number-runtime";
|
|
17
|
+
import { asDateTimestampMs, isFutureDateTimestampMs, parseStrictNonNegativeInteger, resolveDateTimestampMs, resolveExpiresAtMsFromDurationMs, resolveExpiresAtMsFromDurationSeconds, resolveTimerTimeoutMs } from "openclaw/plugin-sdk/number-runtime";
|
|
18
18
|
import { asBoolean, asNullableRecord, isRecord, normalizeLowercaseStringOrEmpty, normalizeOptionalLowercaseString, normalizeOptionalString, readStringValue, uniqueStrings } from "openclaw/plugin-sdk/string-coerce-runtime";
|
|
19
19
|
import { stripReasoningTagsFromText } from "openclaw/plugin-sdk/text-chunking";
|
|
20
20
|
import fs from "node:fs";
|
|
@@ -1032,7 +1032,7 @@ var FeishuStreamingSession = class {
|
|
|
1032
1032
|
sequence: 1,
|
|
1033
1033
|
currentText: "",
|
|
1034
1034
|
sentText: "",
|
|
1035
|
-
hasNote:
|
|
1035
|
+
hasNote: Boolean(options?.note)
|
|
1036
1036
|
};
|
|
1037
1037
|
this.log?.(`Started streaming: cardId=${cardId}, messageId=${sendRes.data.message_id}`);
|
|
1038
1038
|
}
|
|
@@ -2562,7 +2562,7 @@ async function handleFeishuMessage(params) {
|
|
|
2562
2562
|
return threadContext;
|
|
2563
2563
|
}
|
|
2564
2564
|
const rootMsg = await getRootMessageInfo();
|
|
2565
|
-
|
|
2565
|
+
const feishuThreadId = ctx.threadId ?? rootMessageThreadId ?? rootMsg?.threadId;
|
|
2566
2566
|
if (feishuThreadId) log(`feishu[${account.accountId}]: resolved thread ID: ${feishuThreadId}`);
|
|
2567
2567
|
if (!feishuThreadId) {
|
|
2568
2568
|
log(`feishu[${account.accountId}]: no threadId found for root message ${ctx.rootId ?? "none"}, skipping thread history`);
|
|
@@ -4204,7 +4204,7 @@ async function resolveDriveCommentEventCore(params) {
|
|
|
4204
4204
|
return null;
|
|
4205
4205
|
}
|
|
4206
4206
|
const context = await fetchDriveCommentContext({
|
|
4207
|
-
client: createClient ? createClient(account ?? { accountId }) : createFeishuClient((await import("./accounts-
|
|
4207
|
+
client: createClient ? createClient(account ?? { accountId }) : createFeishuClient((await import("./accounts-Bpe6CjpS.js").then((n) => n.t)).resolveFeishuAccount({
|
|
4208
4208
|
cfg,
|
|
4209
4209
|
accountId
|
|
4210
4210
|
})),
|
|
@@ -4582,14 +4582,15 @@ function createSequentialQueue(options = {}) {
|
|
|
4582
4582
|
}
|
|
4583
4583
|
async function boundedRun(key, task, timeoutMs, onTaskTimeout) {
|
|
4584
4584
|
if (!Number.isFinite(timeoutMs) || timeoutMs <= 0) return task();
|
|
4585
|
+
const resolvedTimeoutMs = resolveTimerTimeoutMs(timeoutMs, DEFAULT_TASK_TIMEOUT_MS);
|
|
4585
4586
|
let timeoutHandle;
|
|
4586
4587
|
const timeoutPromise = new Promise((resolve) => {
|
|
4587
4588
|
timeoutHandle = setTimeout(() => {
|
|
4588
4589
|
try {
|
|
4589
|
-
onTaskTimeout?.(key,
|
|
4590
|
+
onTaskTimeout?.(key, resolvedTimeoutMs);
|
|
4590
4591
|
} catch {}
|
|
4591
4592
|
resolve();
|
|
4592
|
-
},
|
|
4593
|
+
}, resolvedTimeoutMs);
|
|
4593
4594
|
});
|
|
4594
4595
|
try {
|
|
4595
4596
|
await Promise.race([task(), timeoutPromise]);
|
|
@@ -4857,7 +4858,7 @@ const FEISHU_WS_LOG_ERROR_MAX_LENGTH = 500;
|
|
|
4857
4858
|
const FEISHU_WS_RECONNECT_EXHAUSTED_RE = /^WebSocket reconnect exhausted after \d+ attempts?/;
|
|
4858
4859
|
const FEISHU_WS_AUTORECONNECT_DISABLED_ERROR = "WebSocket connect failed and autoReconnect is disabled";
|
|
4859
4860
|
function isFeishuWebhookPayload(value) {
|
|
4860
|
-
return
|
|
4861
|
+
return Boolean(value) && typeof value === "object" && !Array.isArray(value);
|
|
4861
4862
|
}
|
|
4862
4863
|
function buildFeishuWebhookEnvelope(req, payload) {
|
|
4863
4864
|
return Object.assign(Object.create({ headers: req.headers }), payload);
|
|
@@ -4929,14 +4930,13 @@ function waitForFeishuWsCycleEnd(params) {
|
|
|
4929
4930
|
if (params.abortSignal?.aborted) return Promise.resolve("abort");
|
|
4930
4931
|
return new Promise((resolve) => {
|
|
4931
4932
|
let settled = false;
|
|
4932
|
-
let handleAbort;
|
|
4933
4933
|
const finish = (result) => {
|
|
4934
4934
|
if (settled) return;
|
|
4935
4935
|
settled = true;
|
|
4936
4936
|
if (handleAbort) params.abortSignal?.removeEventListener("abort", handleAbort);
|
|
4937
4937
|
resolve(result);
|
|
4938
4938
|
};
|
|
4939
|
-
handleAbort = () => finish("abort");
|
|
4939
|
+
const handleAbort = () => finish("abort");
|
|
4940
4940
|
params.abortSignal?.addEventListener("abort", handleAbort, { once: true });
|
|
4941
4941
|
if (params.abortSignal?.aborted) {
|
|
4942
4942
|
finish("abort");
|
|
@@ -5152,7 +5152,7 @@ async function resolveReactionSyntheticEvent(params) {
|
|
|
5152
5152
|
const senderId = event.user_id?.open_id;
|
|
5153
5153
|
const senderUserId = event.user_id?.user_id;
|
|
5154
5154
|
if (!emoji || !messageId || !senderId) return null;
|
|
5155
|
-
const { resolveFeishuAccount } = await import("./accounts-
|
|
5155
|
+
const { resolveFeishuAccount } = await import("./accounts-Bpe6CjpS.js").then((n) => n.t);
|
|
5156
5156
|
const reactionNotifications = resolveFeishuAccount({
|
|
5157
5157
|
cfg,
|
|
5158
5158
|
accountId
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { t as probeFeishu } from "./probe-
|
|
1
|
+
import { t as probeFeishu } from "./probe-BjKRV7em.js";
|
|
2
2
|
import { parseStrictPositiveInteger } from "openclaw/plugin-sdk/number-runtime";
|
|
3
3
|
import { normalizeLowercaseStringOrEmpty } from "openclaw/plugin-sdk/string-coerce-runtime";
|
|
4
4
|
import { WEBHOOK_ANOMALY_COUNTER_DEFAULTS, WEBHOOK_RATE_LIMIT_DEFAULTS, createFixedWindowRateLimiter, createWebhookAnomalyTracker } from "openclaw/plugin-sdk/webhook-ingress";
|
|
@@ -41,8 +41,6 @@ function waitForAbortableDelay(delayMs, abortSignal) {
|
|
|
41
41
|
if (abortSignal?.aborted) return Promise.resolve(false);
|
|
42
42
|
return new Promise((resolve) => {
|
|
43
43
|
let settled = false;
|
|
44
|
-
let timer;
|
|
45
|
-
let handleAbort;
|
|
46
44
|
const finish = (value) => {
|
|
47
45
|
if (settled) return;
|
|
48
46
|
settled = true;
|
|
@@ -50,7 +48,7 @@ function waitForAbortableDelay(delayMs, abortSignal) {
|
|
|
50
48
|
if (handleAbort) abortSignal?.removeEventListener("abort", handleAbort);
|
|
51
49
|
resolve(value);
|
|
52
50
|
};
|
|
53
|
-
handleAbort = () => {
|
|
51
|
+
const handleAbort = () => {
|
|
54
52
|
finish(false);
|
|
55
53
|
};
|
|
56
54
|
abortSignal?.addEventListener("abort", handleAbort, { once: true });
|
|
@@ -58,7 +56,7 @@ function waitForAbortableDelay(delayMs, abortSignal) {
|
|
|
58
56
|
finish(false);
|
|
59
57
|
return;
|
|
60
58
|
}
|
|
61
|
-
timer = setTimeout(() => finish(true), delayMs);
|
|
59
|
+
const timer = setTimeout(() => finish(true), resolveTimerTimeoutMs(delayMs, 1));
|
|
62
60
|
timer.unref?.();
|
|
63
61
|
});
|
|
64
62
|
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { c as createFeishuApiError, f as isRecord$1, g as requestFeishuApi, s as resolveFeishuRuntimeAccount } from "./accounts-
|
|
1
|
+
import { c as createFeishuApiError, f as isRecord$1, g as requestFeishuApi, s as resolveFeishuRuntimeAccount } from "./accounts-Bpe6CjpS.js";
|
|
2
2
|
import { i as resolveReceiveIdType, r as normalizeFeishuTarget } from "./targets-BUjQ1TcA.js";
|
|
3
|
-
import { i as toFeishuSendResult, r as resolveFeishuReceiptKind, t as assertFeishuMessageApiSuccess } from "./send-result-
|
|
3
|
+
import { i as toFeishuSendResult, r as resolveFeishuReceiptKind, t as assertFeishuMessageApiSuccess } from "./send-result-D9rgEUlm.js";
|
|
4
4
|
import { t as getFeishuRuntime } from "./runtime-C5JxBWZp.js";
|
|
5
5
|
import { r as createFeishuClient } from "./client-BhMNZBJD.js";
|
|
6
6
|
import { parseStrictNonNegativeInteger } from "openclaw/plugin-sdk/number-runtime";
|
|
@@ -583,7 +583,7 @@ function extractMentionTargets(event, botOpenId) {
|
|
|
583
583
|
return (event.message.mentions ?? []).filter((m) => {
|
|
584
584
|
if (isFeishuBroadcastMention(m)) return false;
|
|
585
585
|
if (botOpenId && m.id.open_id === botOpenId) return false;
|
|
586
|
-
return
|
|
586
|
+
return Boolean(m.id.open_id);
|
|
587
587
|
}).map((m) => ({
|
|
588
588
|
openId: m.id.open_id,
|
|
589
589
|
name: m.name,
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { f as isRecord } from "./accounts-
|
|
1
|
+
import { f as isRecord } from "./accounts-Bpe6CjpS.js";
|
|
2
2
|
import { createMessageReceiptFromOutboundResults } from "openclaw/plugin-sdk/channel-outbound";
|
|
3
3
|
//#region extensions/feishu/src/card-interaction.ts
|
|
4
4
|
const FEISHU_CARD_INTERACTION_VERSION = "ocf1";
|
package/dist/setup-api.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { i as feishuSetupAdapter, n as feishuSetupWizard, t as feishuPlugin } from "./channel-
|
|
1
|
+
import { i as feishuSetupAdapter, n as feishuSetupWizard, t as feishuPlugin } from "./channel-TXwK9jIG.js";
|
|
2
2
|
export { feishuPlugin, feishuSetupAdapter, feishuSetupWizard };
|
|
@@ -5,33 +5,40 @@ All notable changes to this project will be documented in this file.
|
|
|
5
5
|
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/)
|
|
6
6
|
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
7
7
|
|
|
8
|
-
## [v1.1.
|
|
8
|
+
## [v1.1.2](https://github.com/es-shims/es-object-atoms/compare/v1.1.1...v1.1.2) - 2026-05-22
|
|
9
9
|
|
|
10
10
|
### Commits
|
|
11
11
|
|
|
12
|
-
- [
|
|
12
|
+
- [Dev Deps] update `@ljharb/eslint-config`, `@ljharb/tsconfig`, `auto-changelog`, `eslint`, `npmignore` [`41e3d94`](https://github.com/es-shims/es-object-atoms/commit/41e3d94f6b49237fa490ec598e068f170c8b161e)
|
|
13
|
+
- [types] improve `isObject` type [`758edc2`](https://github.com/es-shims/es-object-atoms/commit/758edc2280fa6993a294a55957a43cee5951bf51)
|
|
13
14
|
|
|
14
|
-
## [v1.1.
|
|
15
|
+
## [v1.1.1](https://github.com/es-shims/es-object-atoms/compare/v1.1.0...v1.1.1) - 2025-01-14
|
|
15
16
|
|
|
16
17
|
### Commits
|
|
17
18
|
|
|
18
|
-
- [
|
|
19
|
+
- [types] `ToObject`: improve types [`cfe8c8a`](https://github.com/es-shims/es-object-atoms/commit/cfe8c8a105c44820cb22e26f62d12ef0ad9715c8)
|
|
19
20
|
|
|
20
|
-
## [v1.0
|
|
21
|
+
## [v1.1.0](https://github.com/es-shims/es-object-atoms/compare/v1.0.1...v1.1.0) - 2025-01-14
|
|
21
22
|
|
|
22
23
|
### Commits
|
|
23
24
|
|
|
24
|
-
- [
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
25
|
+
- [New] add `isObject` [`51e4042`](https://github.com/es-shims/es-object-atoms/commit/51e4042df722eb3165f40dc5f4bf33d0197ecb07)
|
|
26
|
+
|
|
27
|
+
## [v1.0.1](https://github.com/es-shims/es-object-atoms/compare/v1.0.0...v1.0.1) - 2025-01-13
|
|
28
|
+
|
|
29
|
+
### Commits
|
|
30
|
+
|
|
31
|
+
- [Dev Deps] update `@ljharb/eslint-config`, `@ljharb/tsconfig`, `@types/tape`, `auto-changelog`, `tape` [`38ab9eb`](https://github.com/es-shims/es-object-atoms/commit/38ab9eb00b62c2f4668644f5e513d9b414ebd595)
|
|
32
|
+
- [types] improve types [`7d1beb8`](https://github.com/es-shims/es-object-atoms/commit/7d1beb887958b78b6a728a210a1c8370ab7e2aa1)
|
|
33
|
+
- [Tests] replace `aud` with `npm audit` [`25863ba`](https://github.com/es-shims/es-object-atoms/commit/25863baf99178f1d1ad33d1120498db28631907e)
|
|
34
|
+
- [Dev Deps] add missing peer dep [`c012309`](https://github.com/es-shims/es-object-atoms/commit/c0123091287e6132d6f4240496340c427433df28)
|
|
28
35
|
|
|
29
36
|
## v1.0.0 - 2024-03-16
|
|
30
37
|
|
|
31
38
|
### Commits
|
|
32
39
|
|
|
33
|
-
- Initial implementation, tests, readme, types [`f1499db`](https://github.com/
|
|
34
|
-
- Initial commit [`99eedc7`](https://github.com/
|
|
35
|
-
- [meta] rename repo [`fc851fa`](https://github.com/
|
|
36
|
-
- npm init [`b909377`](https://github.com/
|
|
37
|
-
- Only apps should have lockfiles [`7249edd`](https://github.com/
|
|
40
|
+
- Initial implementation, tests, readme, types [`f1499db`](https://github.com/es-shims/es-object-atoms/commit/f1499db7d3e1741e64979c61d645ab3137705e82)
|
|
41
|
+
- Initial commit [`99eedc7`](https://github.com/es-shims/es-object-atoms/commit/99eedc7b5fde38a50a28d3c8b724706e3e4c5f6a)
|
|
42
|
+
- [meta] rename repo [`fc851fa`](https://github.com/es-shims/es-object-atoms/commit/fc851fa70616d2d182aaf0bd02c2ed7084dea8fa)
|
|
43
|
+
- npm init [`b909377`](https://github.com/es-shims/es-object-atoms/commit/b909377c50049bd0ec575562d20b0f9ebae8947f)
|
|
44
|
+
- Only apps should have lockfiles [`7249edd`](https://github.com/es-shims/es-object-atoms/commit/7249edd2178c1b9ddfc66ffcc6d07fdf0d28efc1)
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "es-object-atoms",
|
|
3
|
-
"version": "1.1.
|
|
3
|
+
"version": "1.1.2",
|
|
4
4
|
"description": "ES Object-related atoms: Object, ToObject, RequireObjectCoercible",
|
|
5
5
|
"main": "index.js",
|
|
6
6
|
"exports": {
|
|
@@ -46,16 +46,15 @@
|
|
|
46
46
|
"es-errors": "^1.3.0"
|
|
47
47
|
},
|
|
48
48
|
"devDependencies": {
|
|
49
|
-
"@ljharb/eslint-config": "^
|
|
50
|
-
"@ljharb/tsconfig": "^0.2
|
|
49
|
+
"@ljharb/eslint-config": "^22.2.3",
|
|
50
|
+
"@ljharb/tsconfig": "^0.3.2",
|
|
51
51
|
"@types/tape": "^5.8.1",
|
|
52
|
-
"auto-changelog": "^2.5.
|
|
52
|
+
"auto-changelog": "^2.5.1",
|
|
53
53
|
"eclint": "^2.8.1",
|
|
54
|
-
"
|
|
55
|
-
"eslint": "^8.8.0",
|
|
54
|
+
"eslint": "^8.57.1",
|
|
56
55
|
"evalmd": "^0.0.19",
|
|
57
56
|
"in-publish": "^2.0.1",
|
|
58
|
-
"npmignore": "^0.3.
|
|
57
|
+
"npmignore": "^0.3.5",
|
|
59
58
|
"nyc": "^10.3.2",
|
|
60
59
|
"safe-publish-latest": "^2.0.0",
|
|
61
60
|
"tape": "^5.9.0",
|
|
@@ -5,6 +5,13 @@ All notable changes to this project will be documented in this file.
|
|
|
5
5
|
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/)
|
|
6
6
|
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
7
7
|
|
|
8
|
+
## [v2.0.4](https://github.com/inspect-js/hasOwn/compare/v2.0.3...v2.0.4) - 2026-05-28
|
|
9
|
+
|
|
10
|
+
### Commits
|
|
11
|
+
|
|
12
|
+
- [types] drop the dead key-narrowing overload [`fdab00e`](https://github.com/inspect-js/hasOwn/commit/fdab00e2703e65411424e19bf86a7e72a8f10da9)
|
|
13
|
+
- [Dev Deps] update `@ljharb/eslint-config`, `auto-changelog`, `eslint` [`91f6247`](https://github.com/inspect-js/hasOwn/commit/91f624768dd0f7db0d019b89d4d86bd66e20ec30)
|
|
14
|
+
|
|
8
15
|
## [v2.0.3](https://github.com/inspect-js/hasOwn/compare/v2.0.2...v2.0.3) - 2026-04-17
|
|
9
16
|
|
|
10
17
|
### Commits
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "hasown",
|
|
3
|
-
"version": "2.0.
|
|
3
|
+
"version": "2.0.4",
|
|
4
4
|
"description": "A robust, ES3 compatible, \"has own property\" predicate.",
|
|
5
5
|
"main": "index.js",
|
|
6
6
|
"exports": {
|
|
@@ -52,13 +52,12 @@
|
|
|
52
52
|
},
|
|
53
53
|
"devDependencies": {
|
|
54
54
|
"@arethetypeswrong/cli": "^0.18.2",
|
|
55
|
-
"@ljharb/eslint-config": "^22.2.
|
|
55
|
+
"@ljharb/eslint-config": "^22.2.3",
|
|
56
56
|
"@ljharb/tsconfig": "^0.3.2",
|
|
57
57
|
"@types/function-bind": "^1.1.10",
|
|
58
58
|
"@types/tape": "^5.8.1",
|
|
59
|
-
"auto-changelog": "^2.5.
|
|
60
|
-
"
|
|
61
|
-
"eslint": "^10.2.0",
|
|
59
|
+
"auto-changelog": "^2.5.1",
|
|
60
|
+
"eslint": "^10.4.0",
|
|
62
61
|
"evalmd": "^0.0.19",
|
|
63
62
|
"in-publish": "^2.0.1",
|
|
64
63
|
"jiti": "^0.0.0",
|
|
@@ -164,10 +164,13 @@ export type TExtendsMapping<Input extends [unknown, unknown, unknown, unknown, u
|
|
|
164
164
|
export declare function ExtendsMapping(input: [unknown, unknown, unknown, unknown, unknown, unknown] | []): unknown;
|
|
165
165
|
export type TBaseMapping<Input extends [unknown, unknown, unknown] | unknown> = (Input extends ['(', infer Type extends T.TSchema, ')'] ? Type : Input extends infer Type extends T.TSchema ? Type : never);
|
|
166
166
|
export declare function BaseMapping(input: [unknown, unknown, unknown] | unknown): unknown;
|
|
167
|
+
export type TWithMapping<Input extends [unknown, unknown] | []> = (Input extends ['with', infer Options extends Record<PropertyKey, unknown>] ? Options : []);
|
|
168
|
+
export declare function WithMapping(input: [unknown, unknown] | []): unknown;
|
|
167
169
|
type TFactorIndexArray<Type extends T.TSchema, IndexArray extends unknown[]> = (IndexArray extends [infer Left extends T.TSchema[], ...infer Right extends unknown[]] ? (Left extends [infer Indexer extends T.TSchema] ? TFactorIndexArray<C.TIndexDeferred<Type, Indexer>, Right> : Left extends [] ? TFactorIndexArray<T.TArray<Type>, Right> : T.TNever) : Type);
|
|
168
170
|
type TFactorExtends<Type extends T.TSchema, Extends extends unknown[]> = (Extends extends [infer Right extends T.TSchema, infer True extends T.TSchema, infer False extends T.TSchema] ? C.TConditionalDeferred<Type, Right, True, False> : Type);
|
|
169
|
-
|
|
170
|
-
export
|
|
171
|
+
type TFactorWith<Type extends T.TSchema, With extends unknown> = (With extends Record<PropertyKey, unknown> ? C.TOptionsDeferred<Type, With> : Type);
|
|
172
|
+
export type TFactorMapping<Input extends [unknown, unknown, unknown, unknown, unknown]> = (Input extends [infer KeyOf extends boolean, infer Type extends T.TSchema, infer IndexArray extends unknown[], infer Extend extends unknown[], infer WithClause extends unknown] ? TFactorWith<KeyOf extends true ? TFactorExtends<C.TKeyOfDeferred<TFactorIndexArray<Type, IndexArray>>, Extend> : TFactorExtends<TFactorIndexArray<Type, IndexArray>, Extend>, WithClause> : never);
|
|
173
|
+
export declare function FactorMapping(input: [unknown, unknown, unknown, unknown, unknown]): unknown;
|
|
171
174
|
type TExprBinaryMapping<Left extends T.TSchema, Rest extends unknown[]> = (Rest extends [infer Operator extends unknown, infer Right extends T.TSchema, infer Next extends unknown[]] ? (TExprBinaryMapping<Right, Next> extends infer Schema extends T.TSchema ? (Operator extends '&' ? (Schema extends T.TIntersect<infer Types extends T.TSchema[]> ? T.TIntersect<[Left, ...Types]> : T.TIntersect<[Left, Schema]>) : Operator extends '|' ? (Schema extends T.TUnion<infer Types extends T.TSchema[]> ? T.TUnion<[Left, ...Types]> : T.TUnion<[Left, Schema]>) : never) : never) : Left);
|
|
172
175
|
export type TExprTermTailMapping<Input extends [unknown, unknown, unknown] | []> = (Input);
|
|
173
176
|
export declare function ExprTermTailMapping(input: [unknown, unknown, unknown] | []): unknown;
|
|
@@ -185,27 +185,34 @@ export function BaseMapping(input) {
|
|
|
185
185
|
? input[1]
|
|
186
186
|
: input;
|
|
187
187
|
}
|
|
188
|
+
export function WithMapping(input) {
|
|
189
|
+
return Guard.IsEqual(input.length, 2) ? input[1] : [];
|
|
190
|
+
}
|
|
188
191
|
// deno-coverage-ignore-start
|
|
189
|
-
|
|
190
|
-
const FactorIndexArray = (Type, indexArray) => {
|
|
192
|
+
function FactorIndexArray(Type, indexArray) {
|
|
191
193
|
return indexArray.reduce((result, left) => {
|
|
192
194
|
const _left = left;
|
|
193
195
|
return (Guard.IsEqual(_left.length, 1) ? C.IndexDeferred(result, _left[0]) :
|
|
194
196
|
Guard.IsEqual(_left.length, 0) ? T.Array(result) :
|
|
195
197
|
Unreachable());
|
|
196
198
|
}, Type);
|
|
197
|
-
}
|
|
199
|
+
}
|
|
198
200
|
// deno-coverage-ignore-stop
|
|
199
|
-
|
|
201
|
+
function FactorExtends(type, extend) {
|
|
200
202
|
return Guard.IsEqual(extend.length, 3)
|
|
201
203
|
? C.ConditionalDeferred(type, extend[0], extend[1], extend[2])
|
|
202
204
|
: type;
|
|
203
|
-
}
|
|
205
|
+
}
|
|
206
|
+
function FactorWith(type, withClause) {
|
|
207
|
+
return Guard.IsArray(withClause) && Guard.IsEqual(withClause.length, 0)
|
|
208
|
+
? type
|
|
209
|
+
: C.OptionsDeferred(type, withClause);
|
|
210
|
+
}
|
|
204
211
|
export function FactorMapping(input) {
|
|
205
|
-
const [keyOf, type, indexArray, extend] = input;
|
|
206
|
-
return keyOf
|
|
212
|
+
const [keyOf, type, indexArray, extend, withClause] = input;
|
|
213
|
+
return FactorWith(keyOf
|
|
207
214
|
? FactorExtends(C.KeyOfDeferred(FactorIndexArray(type, indexArray)), extend)
|
|
208
|
-
: FactorExtends(FactorIndexArray(type, indexArray), extend);
|
|
215
|
+
: FactorExtends(FactorIndexArray(type, indexArray), extend), withClause);
|
|
209
216
|
}
|
|
210
217
|
// deno-coverage-ignore-start
|
|
211
218
|
function ExprBinaryMapping(left, rest) {
|
|
@@ -43,7 +43,8 @@ export type TIndexArray_0<Input extends string, Result extends unknown[] = []> =
|
|
|
43
43
|
export type TIndexArray<Input extends string> = TIndexArray_0<Input> extends [infer _0 extends ([unknown, unknown, unknown] | [unknown, unknown])[], infer Input extends string] ? [S.TIndexArrayMapping<_0>, Input] : [];
|
|
44
44
|
export type TExtends<Input extends string> = ((Token.TConst<'extends', Input> extends [infer _0, infer Input extends string] ? (TType<Input> extends [infer _1, infer Input extends string] ? (Token.TConst<'?', Input> extends [infer _2, infer Input extends string] ? (TType<Input> extends [infer _3, infer Input extends string] ? (Token.TConst<':', Input> extends [infer _4, infer Input extends string] ? (TType<Input> extends [infer _5, infer Input extends string] ? [[_0, _1, _2, _3, _4, _5], Input] : []) : []) : []) : []) : []) : []) extends [infer _0, infer Input extends string] ? [_0, Input] : [[], Input] extends [infer _0, infer Input extends string] ? [_0, Input] : []) extends [infer _0 extends [unknown, unknown, unknown, unknown, unknown, unknown] | [], infer Input extends string] ? [S.TExtendsMapping<_0>, Input] : [];
|
|
45
45
|
export type TBase<Input extends string> = ((Token.TConst<'(', Input> extends [infer _0, infer Input extends string] ? (TType<Input> extends [infer _1, infer Input extends string] ? (Token.TConst<')', Input> extends [infer _2, infer Input extends string] ? [[_0, _1, _2], Input] : []) : []) : []) extends [infer _0, infer Input extends string] ? [_0, Input] : TKeyword<Input> extends [infer _0, infer Input extends string] ? [_0, Input] : T_Object_<Input> extends [infer _0, infer Input extends string] ? [_0, Input] : TTuple<Input> extends [infer _0, infer Input extends string] ? [_0, Input] : TTemplateLiteral<Input> extends [infer _0, infer Input extends string] ? [_0, Input] : TLiteral<Input> extends [infer _0, infer Input extends string] ? [_0, Input] : TConstructor<Input> extends [infer _0, infer Input extends string] ? [_0, Input] : T_Function_<Input> extends [infer _0, infer Input extends string] ? [_0, Input] : TMapped<Input> extends [infer _0, infer Input extends string] ? [_0, Input] : TOptions<Input> extends [infer _0, infer Input extends string] ? [_0, Input] : TGenericCall<Input> extends [infer _0, infer Input extends string] ? [_0, Input] : TReference<Input> extends [infer _0, infer Input extends string] ? [_0, Input] : []) extends [infer _0 extends [unknown, unknown, unknown] | unknown, infer Input extends string] ? [S.TBaseMapping<_0>, Input] : [];
|
|
46
|
-
export type
|
|
46
|
+
export type TWith<Input extends string> = ((Token.TConst<'with', Input> extends [infer _0, infer Input extends string] ? (TJsonObject<Input> extends [infer _1, infer Input extends string] ? [[_0, _1], Input] : []) : []) extends [infer _0, infer Input extends string] ? [_0, Input] : [[], Input] extends [infer _0, infer Input extends string] ? [_0, Input] : []) extends [infer _0 extends [unknown, unknown] | [], infer Input extends string] ? [S.TWithMapping<_0>, Input] : [];
|
|
47
|
+
export type TFactor<Input extends string> = (TKeyOf<Input> extends [infer _0, infer Input extends string] ? (TBase<Input> extends [infer _1, infer Input extends string] ? (TIndexArray<Input> extends [infer _2, infer Input extends string] ? (TExtends<Input> extends [infer _3, infer Input extends string] ? (TWith<Input> extends [infer _4, infer Input extends string] ? [[_0, _1, _2, _3, _4], Input] : []) : []) : []) : []) : []) extends [infer _0 extends [unknown, unknown, unknown, unknown, unknown], infer Input extends string] ? [S.TFactorMapping<_0>, Input] : [];
|
|
47
48
|
export type TExprTermTail<Input extends string> = ((Token.TConst<'&', Input> extends [infer _0, infer Input extends string] ? (TFactor<Input> extends [infer _1, infer Input extends string] ? (TExprTermTail<Input> extends [infer _2, infer Input extends string] ? [[_0, _1, _2], Input] : []) : []) : []) extends [infer _0, infer Input extends string] ? [_0, Input] : [[], Input] extends [infer _0, infer Input extends string] ? [_0, Input] : []) extends [infer _0 extends [unknown, unknown, unknown] | [], infer Input extends string] ? [S.TExprTermTailMapping<_0>, Input] : [];
|
|
48
49
|
export type TExprTerm<Input extends string> = (TFactor<Input> extends [infer _0, infer Input extends string] ? (TExprTermTail<Input> extends [infer _1, infer Input extends string] ? [[_0, _1], Input] : []) : []) extends [infer _0 extends [unknown, unknown], infer Input extends string] ? [S.TExprTermMapping<_0>, Input] : [];
|
|
49
50
|
export type TExprTail<Input extends string> = ((Token.TConst<'|', Input> extends [infer _0, infer Input extends string] ? (TExprTerm<Input> extends [infer _1, infer Input extends string] ? (TExprTail<Input> extends [infer _2, infer Input extends string] ? [[_0, _1, _2], Input] : []) : []) : []) extends [infer _0, infer Input extends string] ? [_0, Input] : [[], Input] extends [infer _0, infer Input extends string] ? [_0, Input] : []) extends [infer _0 extends [unknown, unknown, unknown] | [], infer Input extends string] ? [S.TExprTailMapping<_0>, Input] : [];
|
|
@@ -172,6 +173,7 @@ export declare const IndexArray_0: (input: string, result?: unknown[]) => [unkno
|
|
|
172
173
|
export declare const IndexArray: (input: string) => [unknown, string] | [];
|
|
173
174
|
export declare const Extends: (input: string) => [unknown, string] | [];
|
|
174
175
|
export declare const Base: (input: string) => [unknown, string] | [];
|
|
176
|
+
export declare const With: (input: string) => [unknown, string] | [];
|
|
175
177
|
export declare const Factor: (input: string) => [unknown, string] | [];
|
|
176
178
|
export declare const ExprTermTail: (input: string) => [unknown, string] | [];
|
|
177
179
|
export declare const ExprTerm: (input: string) => [unknown, string] | [];
|
|
@@ -47,7 +47,8 @@ export const IndexArray_0 = (input, result = []) => If(If(If(Token.Const('[', in
|
|
|
47
47
|
export const IndexArray = (input) => If(IndexArray_0(input), ([_0, input]) => [S.IndexArrayMapping(_0), input]);
|
|
48
48
|
export const Extends = (input) => If(If(If(Token.Const('extends', input), ([_0, input]) => If(Type(input), ([_1, input]) => If(Token.Const('?', input), ([_2, input]) => If(Type(input), ([_3, input]) => If(Token.Const(':', input), ([_4, input]) => If(Type(input), ([_5, input]) => [[_0, _1, _2, _3, _4, _5], input])))))), ([_0, input]) => [_0, input], () => If([[], input], ([_0, input]) => [_0, input], () => [])), ([_0, input]) => [S.ExtendsMapping(_0), input]);
|
|
49
49
|
export const Base = (input) => If(If(If(Token.Const('(', input), ([_0, input]) => If(Type(input), ([_1, input]) => If(Token.Const(')', input), ([_2, input]) => [[_0, _1, _2], input]))), ([_0, input]) => [_0, input], () => If(Keyword(input), ([_0, input]) => [_0, input], () => If(_Object_(input), ([_0, input]) => [_0, input], () => If(Tuple(input), ([_0, input]) => [_0, input], () => If(TemplateLiteral(input), ([_0, input]) => [_0, input], () => If(Literal(input), ([_0, input]) => [_0, input], () => If(Constructor(input), ([_0, input]) => [_0, input], () => If(_Function_(input), ([_0, input]) => [_0, input], () => If(Mapped(input), ([_0, input]) => [_0, input], () => If(Options(input), ([_0, input]) => [_0, input], () => If(GenericCall(input), ([_0, input]) => [_0, input], () => If(Reference(input), ([_0, input]) => [_0, input], () => [])))))))))))), ([_0, input]) => [S.BaseMapping(_0), input]);
|
|
50
|
-
export const
|
|
50
|
+
export const With = (input) => If(If(If(Token.Const('with', input), ([_0, input]) => If(JsonObject(input), ([_1, input]) => [[_0, _1], input])), ([_0, input]) => [_0, input], () => If([[], input], ([_0, input]) => [_0, input], () => [])), ([_0, input]) => [S.WithMapping(_0), input]);
|
|
51
|
+
export const Factor = (input) => If(If(KeyOf(input), ([_0, input]) => If(Base(input), ([_1, input]) => If(IndexArray(input), ([_2, input]) => If(Extends(input), ([_3, input]) => If(With(input), ([_4, input]) => [[_0, _1, _2, _3, _4], input]))))), ([_0, input]) => [S.FactorMapping(_0), input]);
|
|
51
52
|
export const ExprTermTail = (input) => If(If(If(Token.Const('&', input), ([_0, input]) => If(Factor(input), ([_1, input]) => If(ExprTermTail(input), ([_2, input]) => [[_0, _1, _2], input]))), ([_0, input]) => [_0, input], () => If([[], input], ([_0, input]) => [_0, input], () => [])), ([_0, input]) => [S.ExprTermTailMapping(_0), input]);
|
|
52
53
|
export const ExprTerm = (input) => If(If(Factor(input), ([_0, input]) => If(ExprTermTail(input), ([_1, input]) => [[_0, _1], input])), ([_0, input]) => [S.ExprTermMapping(_0), input]);
|
|
53
54
|
export const ExprTail = (input) => If(If(If(Token.Const('|', input), ([_0, input]) => If(ExprTerm(input), ([_1, input]) => If(ExprTail(input), ([_2, input]) => [[_0, _1, _2], input]))), ([_0, input]) => [_0, input], () => If([[], input], ([_0, input]) => [_0, input], () => [])), ([_0, input]) => [S.ExprTailMapping(_0), input]);
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "typebox",
|
|
3
3
|
"description": "Json Schema Type Builder with Static Type Resolution for TypeScript",
|
|
4
|
-
"version": "1.1.
|
|
4
|
+
"version": "1.1.39",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"typescript",
|
|
7
7
|
"jsonschema"
|
|
@@ -16,22 +16,6 @@
|
|
|
16
16
|
"types": "./build/index.d.mts",
|
|
17
17
|
"module": "./build/index.mjs",
|
|
18
18
|
"exports": {
|
|
19
|
-
"./guard": {
|
|
20
|
-
"import": "./build/guard/index.mjs",
|
|
21
|
-
"default": "./build/guard/index.mjs"
|
|
22
|
-
},
|
|
23
|
-
"./error": {
|
|
24
|
-
"import": "./build/error/index.mjs",
|
|
25
|
-
"default": "./build/error/index.mjs"
|
|
26
|
-
},
|
|
27
|
-
"./compile": {
|
|
28
|
-
"import": "./build/compile/index.mjs",
|
|
29
|
-
"default": "./build/compile/index.mjs"
|
|
30
|
-
},
|
|
31
|
-
"./system": {
|
|
32
|
-
"import": "./build/system/index.mjs",
|
|
33
|
-
"default": "./build/system/index.mjs"
|
|
34
|
-
},
|
|
35
19
|
"./format": {
|
|
36
20
|
"import": "./build/format/index.mjs",
|
|
37
21
|
"default": "./build/format/index.mjs"
|
|
@@ -44,10 +28,26 @@
|
|
|
44
28
|
"import": "./build/schema/index.mjs",
|
|
45
29
|
"default": "./build/schema/index.mjs"
|
|
46
30
|
},
|
|
31
|
+
"./compile": {
|
|
32
|
+
"import": "./build/compile/index.mjs",
|
|
33
|
+
"default": "./build/compile/index.mjs"
|
|
34
|
+
},
|
|
47
35
|
"./value": {
|
|
48
36
|
"import": "./build/value/index.mjs",
|
|
49
37
|
"default": "./build/value/index.mjs"
|
|
50
38
|
},
|
|
39
|
+
"./guard": {
|
|
40
|
+
"import": "./build/guard/index.mjs",
|
|
41
|
+
"default": "./build/guard/index.mjs"
|
|
42
|
+
},
|
|
43
|
+
"./system": {
|
|
44
|
+
"import": "./build/system/index.mjs",
|
|
45
|
+
"default": "./build/system/index.mjs"
|
|
46
|
+
},
|
|
47
|
+
"./error": {
|
|
48
|
+
"import": "./build/error/index.mjs",
|
|
49
|
+
"default": "./build/error/index.mjs"
|
|
50
|
+
},
|
|
51
51
|
".": {
|
|
52
52
|
"import": "./build/index.mjs",
|
|
53
53
|
"default": "./build/index.mjs"
|
|
@@ -55,18 +55,6 @@
|
|
|
55
55
|
},
|
|
56
56
|
"typesVersions": {
|
|
57
57
|
"*": {
|
|
58
|
-
"guard": [
|
|
59
|
-
"./build/guard/index.d.mts"
|
|
60
|
-
],
|
|
61
|
-
"error": [
|
|
62
|
-
"./build/error/index.d.mts"
|
|
63
|
-
],
|
|
64
|
-
"compile": [
|
|
65
|
-
"./build/compile/index.d.mts"
|
|
66
|
-
],
|
|
67
|
-
"system": [
|
|
68
|
-
"./build/system/index.d.mts"
|
|
69
|
-
],
|
|
70
58
|
"format": [
|
|
71
59
|
"./build/format/index.d.mts"
|
|
72
60
|
],
|
|
@@ -76,9 +64,21 @@
|
|
|
76
64
|
"schema": [
|
|
77
65
|
"./build/schema/index.d.mts"
|
|
78
66
|
],
|
|
67
|
+
"compile": [
|
|
68
|
+
"./build/compile/index.d.mts"
|
|
69
|
+
],
|
|
79
70
|
"value": [
|
|
80
71
|
"./build/value/index.d.mts"
|
|
81
72
|
],
|
|
73
|
+
"guard": [
|
|
74
|
+
"./build/guard/index.d.mts"
|
|
75
|
+
],
|
|
76
|
+
"system": [
|
|
77
|
+
"./build/system/index.d.mts"
|
|
78
|
+
],
|
|
79
|
+
"error": [
|
|
80
|
+
"./build/error/index.d.mts"
|
|
81
|
+
],
|
|
82
82
|
".": [
|
|
83
83
|
"./build/index.d.mts"
|
|
84
84
|
]
|
package/npm-shrinkwrap.json
CHANGED
|
@@ -1,19 +1,19 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@openclaw/feishu",
|
|
3
|
-
"version": "2026.5.
|
|
3
|
+
"version": "2026.5.31-beta.2",
|
|
4
4
|
"lockfileVersion": 3,
|
|
5
5
|
"requires": true,
|
|
6
6
|
"packages": {
|
|
7
7
|
"": {
|
|
8
8
|
"name": "@openclaw/feishu",
|
|
9
|
-
"version": "2026.5.
|
|
9
|
+
"version": "2026.5.31-beta.2",
|
|
10
10
|
"dependencies": {
|
|
11
11
|
"@larksuiteoapi/node-sdk": "1.66.0",
|
|
12
|
-
"typebox": "1.1.
|
|
12
|
+
"typebox": "1.1.39",
|
|
13
13
|
"zod": "4.4.3"
|
|
14
14
|
},
|
|
15
15
|
"peerDependencies": {
|
|
16
|
-
"openclaw": ">=2026.5.
|
|
16
|
+
"openclaw": ">=2026.5.31-beta.2"
|
|
17
17
|
},
|
|
18
18
|
"peerDependenciesMeta": {
|
|
19
19
|
"openclaw": {
|
|
@@ -136,9 +136,9 @@
|
|
|
136
136
|
}
|
|
137
137
|
},
|
|
138
138
|
"node_modules/es-object-atoms": {
|
|
139
|
-
"version": "1.1.
|
|
140
|
-
"resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.
|
|
141
|
-
"integrity": "sha512-
|
|
139
|
+
"version": "1.1.2",
|
|
140
|
+
"resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.2.tgz",
|
|
141
|
+
"integrity": "sha512-HWcBoN6NileqtSydK2FqHbS/LoDd2pqrnQHLyJzBj4kOp/ky2MWMN694xOfkK8/SnUsW2DH7EfyVlydKCsm1Zw==",
|
|
142
142
|
"license": "MIT",
|
|
143
143
|
"dependencies": {
|
|
144
144
|
"es-errors": "^1.3.0"
|
|
@@ -293,9 +293,9 @@
|
|
|
293
293
|
}
|
|
294
294
|
},
|
|
295
295
|
"node_modules/hasown": {
|
|
296
|
-
"version": "2.0.
|
|
297
|
-
"resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.
|
|
298
|
-
"integrity": "sha512-
|
|
296
|
+
"version": "2.0.4",
|
|
297
|
+
"resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.4.tgz",
|
|
298
|
+
"integrity": "sha512-T2UbfbBEF32wiepXIsMlTW9+dDYC6wMh/t/vYA4tuOMKqWz/n3vr1NFSxQiyP+zk2mXsoMA/i/7qV6LKut1t1A==",
|
|
299
299
|
"license": "MIT",
|
|
300
300
|
"dependencies": {
|
|
301
301
|
"function-bind": "^1.1.2"
|
|
@@ -500,9 +500,9 @@
|
|
|
500
500
|
}
|
|
501
501
|
},
|
|
502
502
|
"node_modules/typebox": {
|
|
503
|
-
"version": "1.1.
|
|
504
|
-
"resolved": "https://registry.npmjs.org/typebox/-/typebox-1.1.
|
|
505
|
-
"integrity": "sha512-
|
|
503
|
+
"version": "1.1.39",
|
|
504
|
+
"resolved": "https://registry.npmjs.org/typebox/-/typebox-1.1.39.tgz",
|
|
505
|
+
"integrity": "sha512-vj0afVtOfLQvv0GR0VxVagYxsXN64btL7Z9XoaG0ZggH3mruMMkOO6hXdgMsjCY3shZgEvooAWVeznQVs5c43w==",
|
|
506
506
|
"license": "MIT"
|
|
507
507
|
},
|
|
508
508
|
"node_modules/ws": {
|
package/openclaw.plugin.json
CHANGED
|
@@ -35,6 +35,14 @@
|
|
|
35
35
|
"appId",
|
|
36
36
|
"appSecret"
|
|
37
37
|
]
|
|
38
|
+
},
|
|
39
|
+
{
|
|
40
|
+
"rootPath": "channels.feishu",
|
|
41
|
+
"overlayMapPath": "accounts",
|
|
42
|
+
"required": [
|
|
43
|
+
"appId",
|
|
44
|
+
"appSecret"
|
|
45
|
+
]
|
|
38
46
|
}
|
|
39
47
|
]
|
|
40
48
|
},
|
|
@@ -46,6 +54,14 @@
|
|
|
46
54
|
"appId",
|
|
47
55
|
"appSecret"
|
|
48
56
|
]
|
|
57
|
+
},
|
|
58
|
+
{
|
|
59
|
+
"rootPath": "channels.feishu",
|
|
60
|
+
"overlayMapPath": "accounts",
|
|
61
|
+
"required": [
|
|
62
|
+
"appId",
|
|
63
|
+
"appSecret"
|
|
64
|
+
]
|
|
49
65
|
}
|
|
50
66
|
]
|
|
51
67
|
},
|
|
@@ -57,6 +73,14 @@
|
|
|
57
73
|
"appId",
|
|
58
74
|
"appSecret"
|
|
59
75
|
]
|
|
76
|
+
},
|
|
77
|
+
{
|
|
78
|
+
"rootPath": "channels.feishu",
|
|
79
|
+
"overlayMapPath": "accounts",
|
|
80
|
+
"required": [
|
|
81
|
+
"appId",
|
|
82
|
+
"appSecret"
|
|
83
|
+
]
|
|
60
84
|
}
|
|
61
85
|
]
|
|
62
86
|
},
|
|
@@ -68,6 +92,14 @@
|
|
|
68
92
|
"appId",
|
|
69
93
|
"appSecret"
|
|
70
94
|
]
|
|
95
|
+
},
|
|
96
|
+
{
|
|
97
|
+
"rootPath": "channels.feishu",
|
|
98
|
+
"overlayMapPath": "accounts",
|
|
99
|
+
"required": [
|
|
100
|
+
"appId",
|
|
101
|
+
"appSecret"
|
|
102
|
+
]
|
|
71
103
|
}
|
|
72
104
|
]
|
|
73
105
|
},
|
|
@@ -79,6 +111,14 @@
|
|
|
79
111
|
"appId",
|
|
80
112
|
"appSecret"
|
|
81
113
|
]
|
|
114
|
+
},
|
|
115
|
+
{
|
|
116
|
+
"rootPath": "channels.feishu",
|
|
117
|
+
"overlayMapPath": "accounts",
|
|
118
|
+
"required": [
|
|
119
|
+
"appId",
|
|
120
|
+
"appSecret"
|
|
121
|
+
]
|
|
82
122
|
}
|
|
83
123
|
]
|
|
84
124
|
},
|
|
@@ -90,6 +130,14 @@
|
|
|
90
130
|
"appId",
|
|
91
131
|
"appSecret"
|
|
92
132
|
]
|
|
133
|
+
},
|
|
134
|
+
{
|
|
135
|
+
"rootPath": "channels.feishu",
|
|
136
|
+
"overlayMapPath": "accounts",
|
|
137
|
+
"required": [
|
|
138
|
+
"appId",
|
|
139
|
+
"appSecret"
|
|
140
|
+
]
|
|
93
141
|
}
|
|
94
142
|
]
|
|
95
143
|
},
|
|
@@ -101,6 +149,14 @@
|
|
|
101
149
|
"appId",
|
|
102
150
|
"appSecret"
|
|
103
151
|
]
|
|
152
|
+
},
|
|
153
|
+
{
|
|
154
|
+
"rootPath": "channels.feishu",
|
|
155
|
+
"overlayMapPath": "accounts",
|
|
156
|
+
"required": [
|
|
157
|
+
"appId",
|
|
158
|
+
"appSecret"
|
|
159
|
+
]
|
|
104
160
|
}
|
|
105
161
|
]
|
|
106
162
|
},
|
|
@@ -112,6 +168,14 @@
|
|
|
112
168
|
"appId",
|
|
113
169
|
"appSecret"
|
|
114
170
|
]
|
|
171
|
+
},
|
|
172
|
+
{
|
|
173
|
+
"rootPath": "channels.feishu",
|
|
174
|
+
"overlayMapPath": "accounts",
|
|
175
|
+
"required": [
|
|
176
|
+
"appId",
|
|
177
|
+
"appSecret"
|
|
178
|
+
]
|
|
115
179
|
}
|
|
116
180
|
]
|
|
117
181
|
},
|
|
@@ -123,6 +187,14 @@
|
|
|
123
187
|
"appId",
|
|
124
188
|
"appSecret"
|
|
125
189
|
]
|
|
190
|
+
},
|
|
191
|
+
{
|
|
192
|
+
"rootPath": "channels.feishu",
|
|
193
|
+
"overlayMapPath": "accounts",
|
|
194
|
+
"required": [
|
|
195
|
+
"appId",
|
|
196
|
+
"appSecret"
|
|
197
|
+
]
|
|
126
198
|
}
|
|
127
199
|
]
|
|
128
200
|
},
|
|
@@ -134,6 +206,14 @@
|
|
|
134
206
|
"appId",
|
|
135
207
|
"appSecret"
|
|
136
208
|
]
|
|
209
|
+
},
|
|
210
|
+
{
|
|
211
|
+
"rootPath": "channels.feishu",
|
|
212
|
+
"overlayMapPath": "accounts",
|
|
213
|
+
"required": [
|
|
214
|
+
"appId",
|
|
215
|
+
"appSecret"
|
|
216
|
+
]
|
|
137
217
|
}
|
|
138
218
|
]
|
|
139
219
|
},
|
|
@@ -145,6 +225,14 @@
|
|
|
145
225
|
"appId",
|
|
146
226
|
"appSecret"
|
|
147
227
|
]
|
|
228
|
+
},
|
|
229
|
+
{
|
|
230
|
+
"rootPath": "channels.feishu",
|
|
231
|
+
"overlayMapPath": "accounts",
|
|
232
|
+
"required": [
|
|
233
|
+
"appId",
|
|
234
|
+
"appSecret"
|
|
235
|
+
]
|
|
148
236
|
}
|
|
149
237
|
]
|
|
150
238
|
},
|
|
@@ -156,6 +244,14 @@
|
|
|
156
244
|
"appId",
|
|
157
245
|
"appSecret"
|
|
158
246
|
]
|
|
247
|
+
},
|
|
248
|
+
{
|
|
249
|
+
"rootPath": "channels.feishu",
|
|
250
|
+
"overlayMapPath": "accounts",
|
|
251
|
+
"required": [
|
|
252
|
+
"appId",
|
|
253
|
+
"appSecret"
|
|
254
|
+
]
|
|
159
255
|
}
|
|
160
256
|
]
|
|
161
257
|
},
|
|
@@ -167,6 +263,14 @@
|
|
|
167
263
|
"appId",
|
|
168
264
|
"appSecret"
|
|
169
265
|
]
|
|
266
|
+
},
|
|
267
|
+
{
|
|
268
|
+
"rootPath": "channels.feishu",
|
|
269
|
+
"overlayMapPath": "accounts",
|
|
270
|
+
"required": [
|
|
271
|
+
"appId",
|
|
272
|
+
"appSecret"
|
|
273
|
+
]
|
|
170
274
|
}
|
|
171
275
|
]
|
|
172
276
|
},
|
|
@@ -178,6 +282,14 @@
|
|
|
178
282
|
"appId",
|
|
179
283
|
"appSecret"
|
|
180
284
|
]
|
|
285
|
+
},
|
|
286
|
+
{
|
|
287
|
+
"rootPath": "channels.feishu",
|
|
288
|
+
"overlayMapPath": "accounts",
|
|
289
|
+
"required": [
|
|
290
|
+
"appId",
|
|
291
|
+
"appSecret"
|
|
292
|
+
]
|
|
181
293
|
}
|
|
182
294
|
]
|
|
183
295
|
}
|
|
@@ -960,6 +1072,12 @@
|
|
|
960
1072
|
},
|
|
961
1073
|
"scopes": {
|
|
962
1074
|
"type": "boolean"
|
|
1075
|
+
},
|
|
1076
|
+
"bitable": {
|
|
1077
|
+
"type": "boolean"
|
|
1078
|
+
},
|
|
1079
|
+
"base": {
|
|
1080
|
+
"type": "boolean"
|
|
963
1081
|
}
|
|
964
1082
|
},
|
|
965
1083
|
"additionalProperties": false
|
|
@@ -1693,6 +1811,12 @@
|
|
|
1693
1811
|
},
|
|
1694
1812
|
"scopes": {
|
|
1695
1813
|
"type": "boolean"
|
|
1814
|
+
},
|
|
1815
|
+
"bitable": {
|
|
1816
|
+
"type": "boolean"
|
|
1817
|
+
},
|
|
1818
|
+
"base": {
|
|
1819
|
+
"type": "boolean"
|
|
1696
1820
|
}
|
|
1697
1821
|
},
|
|
1698
1822
|
"additionalProperties": false
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@openclaw/feishu",
|
|
3
|
-
"version": "2026.5.
|
|
3
|
+
"version": "2026.5.31-beta.2",
|
|
4
4
|
"description": "OpenClaw Feishu/Lark channel plugin for chats and workplace tools (community maintained by @m1heng).",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
@@ -9,11 +9,11 @@
|
|
|
9
9
|
"type": "module",
|
|
10
10
|
"dependencies": {
|
|
11
11
|
"@larksuiteoapi/node-sdk": "1.66.0",
|
|
12
|
-
"typebox": "1.1.
|
|
12
|
+
"typebox": "1.1.39",
|
|
13
13
|
"zod": "4.4.3"
|
|
14
14
|
},
|
|
15
15
|
"peerDependencies": {
|
|
16
|
-
"openclaw": ">=2026.5.
|
|
16
|
+
"openclaw": ">=2026.5.31-beta.2"
|
|
17
17
|
},
|
|
18
18
|
"peerDependenciesMeta": {
|
|
19
19
|
"openclaw": {
|
|
@@ -47,10 +47,10 @@
|
|
|
47
47
|
"minHostVersion": ">=2026.5.29"
|
|
48
48
|
},
|
|
49
49
|
"compat": {
|
|
50
|
-
"pluginApi": ">=2026.5.
|
|
50
|
+
"pluginApi": ">=2026.5.31-beta.2"
|
|
51
51
|
},
|
|
52
52
|
"build": {
|
|
53
|
-
"openclawVersion": "2026.5.
|
|
53
|
+
"openclawVersion": "2026.5.31-beta.2"
|
|
54
54
|
},
|
|
55
55
|
"release": {
|
|
56
56
|
"publishToClawHub": true,
|
|
@@ -65,6 +65,7 @@
|
|
|
65
65
|
"dist/**",
|
|
66
66
|
"openclaw.plugin.json",
|
|
67
67
|
"npm-shrinkwrap.json",
|
|
68
|
+
"README.md",
|
|
68
69
|
"skills/**"
|
|
69
70
|
],
|
|
70
71
|
"bundledDependencies": [
|