auto: sync OpenClaw config 2026-09-09 16:13
This commit is contained in:
@@ -0,0 +1,78 @@
|
||||
"use strict";
|
||||
/**
|
||||
* Copyright (c) 2026 ByteDance Ltd. and/or its affiliates
|
||||
* SPDX-License-Identifier: MIT
|
||||
*
|
||||
* Feishu channel secret-contract registration. Declares which fields are
|
||||
* SecretRef-shaped so OpenClaw's runtime resolves them at startup.
|
||||
*/
|
||||
Object.defineProperty(exports, "__esModule", { value: true });
|
||||
exports.secretTargetRegistryEntries = void 0;
|
||||
exports.collectRuntimeConfigAssignments = collectRuntimeConfigAssignments;
|
||||
const channel_secret_basic_runtime_1 = require("openclaw/plugin-sdk/channel-secret-basic-runtime");
|
||||
const SECRET_FIELDS = ['appSecret', 'encryptKey', 'verificationToken'];
|
||||
/** Fields the Lark SDK only consumes when an account is in webhook mode. */
|
||||
const WEBHOOK_ONLY_FIELDS = ['encryptKey', 'verificationToken'];
|
||||
exports.secretTargetRegistryEntries = SECRET_FIELDS.flatMap((field) => {
|
||||
const acctPath = `channels.feishu.accounts.*.${field}`;
|
||||
const topPath = `channels.feishu.${field}`;
|
||||
return [
|
||||
{
|
||||
id: acctPath,
|
||||
targetType: acctPath,
|
||||
configFile: 'openclaw.json',
|
||||
pathPattern: acctPath,
|
||||
secretShape: 'secret_input',
|
||||
expectedResolvedValue: 'string',
|
||||
includeInPlan: true,
|
||||
includeInConfigure: true,
|
||||
includeInAudit: true,
|
||||
},
|
||||
{
|
||||
id: topPath,
|
||||
targetType: topPath,
|
||||
configFile: 'openclaw.json',
|
||||
pathPattern: topPath,
|
||||
secretShape: 'secret_input',
|
||||
expectedResolvedValue: 'string',
|
||||
includeInPlan: true,
|
||||
includeInConfigure: true,
|
||||
includeInAudit: true,
|
||||
},
|
||||
];
|
||||
});
|
||||
function collectRuntimeConfigAssignments(params) {
|
||||
const resolved = (0, channel_secret_basic_runtime_1.getChannelSurface)(params.config, 'feishu');
|
||||
if (!resolved)
|
||||
return;
|
||||
const { channel, surface } = resolved;
|
||||
(0, channel_secret_basic_runtime_1.collectSimpleChannelFieldAssignments)({
|
||||
channelKey: 'feishu',
|
||||
field: 'appSecret',
|
||||
channel,
|
||||
surface,
|
||||
defaults: params.defaults,
|
||||
context: params.context,
|
||||
topInactiveReason: 'no enabled Feishu account inherits this top-level appSecret.',
|
||||
accountInactiveReason: 'Feishu account is disabled.',
|
||||
});
|
||||
const baseConnectionMode = (0, channel_secret_basic_runtime_1.normalizeSecretStringValue)(channel.connectionMode) === 'webhook' ? 'webhook' : 'websocket';
|
||||
const resolveAccountMode = (account) => (0, channel_secret_basic_runtime_1.hasOwnProperty)(account, 'connectionMode')
|
||||
? (0, channel_secret_basic_runtime_1.normalizeSecretStringValue)(account.connectionMode)
|
||||
: baseConnectionMode;
|
||||
for (const field of WEBHOOK_ONLY_FIELDS) {
|
||||
(0, channel_secret_basic_runtime_1.collectConditionalChannelFieldAssignments)({
|
||||
channelKey: 'feishu',
|
||||
field,
|
||||
channel,
|
||||
surface,
|
||||
defaults: params.defaults,
|
||||
context: params.context,
|
||||
topLevelActiveWithoutAccounts: baseConnectionMode === 'webhook',
|
||||
topLevelInheritedAccountActive: ({ account, enabled }) => enabled && !(0, channel_secret_basic_runtime_1.hasOwnProperty)(account, field) && resolveAccountMode(account) === 'webhook',
|
||||
accountActive: ({ account, enabled }) => enabled && resolveAccountMode(account) === 'webhook',
|
||||
topInactiveReason: `no enabled Feishu webhook-mode surface inherits this top-level ${field}.`,
|
||||
accountInactiveReason: 'Feishu account is disabled or not running in webhook mode.',
|
||||
});
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user