moltbot-dingtalk-stream 1.0.8 → 1.0.9

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/dist/schema.js ADDED
@@ -0,0 +1,235 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.DingTalkConfigSchema = exports.DEFAULT_ACCOUNT_ID = exports.CHANNEL_ID = void 0;
4
+ exports.listDingTalkAccountIds = listDingTalkAccountIds;
5
+ exports.resolveDingTalkAccount = resolveDingTalkAccount;
6
+ exports.resolveDefaultDingTalkAccountId = resolveDefaultDingTalkAccountId;
7
+ exports.normalizeAccountId = normalizeAccountId;
8
+ exports.setAccountEnabledInConfig = setAccountEnabledInConfig;
9
+ exports.deleteAccountFromConfig = deleteAccountFromConfig;
10
+ exports.applyAccountNameToConfig = applyAccountNameToConfig;
11
+ // Channel ID
12
+ exports.CHANNEL_ID = "moltbot-dingtalk-stream";
13
+ exports.DEFAULT_ACCOUNT_ID = "default";
14
+ // Config schema for validation
15
+ exports.DingTalkConfigSchema = {
16
+ type: "object",
17
+ properties: {
18
+ enabled: { type: "boolean" },
19
+ clientId: { type: "string" },
20
+ clientSecret: { type: "string" },
21
+ webhookUrl: { type: "string" },
22
+ name: { type: "string" },
23
+ groupPolicy: { type: "string", enum: ["open", "allowlist"] },
24
+ requireMention: { type: "boolean" },
25
+ dm: {
26
+ type: "object",
27
+ properties: {
28
+ policy: { type: "string", enum: ["open", "pairing", "allowlist"] },
29
+ allowFrom: { type: "array", items: { type: "string" } },
30
+ },
31
+ },
32
+ accounts: {
33
+ type: "object",
34
+ additionalProperties: {
35
+ type: "object",
36
+ properties: {
37
+ enabled: { type: "boolean" },
38
+ clientId: { type: "string" },
39
+ clientSecret: { type: "string" },
40
+ webhookUrl: { type: "string" },
41
+ name: { type: "string" },
42
+ },
43
+ required: ["clientId", "clientSecret"],
44
+ },
45
+ },
46
+ },
47
+ };
48
+ // Helper functions
49
+ function listDingTalkAccountIds(cfg) {
50
+ const channelConfig = cfg.channels?.[exports.CHANNEL_ID];
51
+ if (!channelConfig)
52
+ return [];
53
+ const accountIds = [];
54
+ // Check for top-level (default) account
55
+ if (channelConfig.clientId && channelConfig.clientSecret) {
56
+ accountIds.push(exports.DEFAULT_ACCOUNT_ID);
57
+ }
58
+ // Check for named accounts
59
+ const accounts = channelConfig.accounts;
60
+ if (accounts) {
61
+ for (const id of Object.keys(accounts)) {
62
+ if (id !== exports.DEFAULT_ACCOUNT_ID || !accountIds.includes(exports.DEFAULT_ACCOUNT_ID)) {
63
+ accountIds.push(id);
64
+ }
65
+ }
66
+ }
67
+ return accountIds;
68
+ }
69
+ function resolveDingTalkAccount(opts) {
70
+ const { cfg, accountId = exports.DEFAULT_ACCOUNT_ID } = opts;
71
+ const channelConfig = cfg.channels?.[exports.CHANNEL_ID];
72
+ // Try to get account config
73
+ let accountConfig;
74
+ let tokenSource = "none";
75
+ if (accountId === exports.DEFAULT_ACCOUNT_ID) {
76
+ // For default account, check top-level first, then accounts.default
77
+ if (channelConfig?.clientId && channelConfig?.clientSecret) {
78
+ accountConfig = {
79
+ enabled: channelConfig.enabled,
80
+ clientId: channelConfig.clientId,
81
+ clientSecret: channelConfig.clientSecret,
82
+ webhookUrl: channelConfig.webhookUrl,
83
+ name: channelConfig.name,
84
+ groupPolicy: channelConfig.groupPolicy,
85
+ requireMention: channelConfig.requireMention,
86
+ dm: channelConfig.dm,
87
+ };
88
+ tokenSource = "config";
89
+ }
90
+ else if (channelConfig?.accounts?.[exports.DEFAULT_ACCOUNT_ID]) {
91
+ accountConfig = channelConfig.accounts[exports.DEFAULT_ACCOUNT_ID];
92
+ tokenSource = "config";
93
+ }
94
+ else if (process.env.DINGTALK_CLIENT_ID && process.env.DINGTALK_CLIENT_SECRET) {
95
+ accountConfig = {
96
+ enabled: true,
97
+ clientId: process.env.DINGTALK_CLIENT_ID,
98
+ clientSecret: process.env.DINGTALK_CLIENT_SECRET,
99
+ webhookUrl: process.env.DINGTALK_WEBHOOK_URL,
100
+ };
101
+ tokenSource = "env";
102
+ }
103
+ }
104
+ else {
105
+ // Named account
106
+ accountConfig = channelConfig?.accounts?.[accountId];
107
+ if (accountConfig) {
108
+ tokenSource = "config";
109
+ }
110
+ }
111
+ const config = accountConfig || { clientId: "", clientSecret: "" };
112
+ return {
113
+ accountId,
114
+ name: config.name,
115
+ enabled: config.enabled ?? true,
116
+ configured: Boolean(config.clientId?.trim() && config.clientSecret?.trim()),
117
+ clientId: config.clientId || "",
118
+ clientSecret: config.clientSecret || "",
119
+ tokenSource,
120
+ config,
121
+ };
122
+ }
123
+ function resolveDefaultDingTalkAccountId(cfg) {
124
+ const accountIds = listDingTalkAccountIds(cfg);
125
+ return accountIds.includes(exports.DEFAULT_ACCOUNT_ID)
126
+ ? exports.DEFAULT_ACCOUNT_ID
127
+ : accountIds[0] || exports.DEFAULT_ACCOUNT_ID;
128
+ }
129
+ function normalizeAccountId(accountId) {
130
+ if (!accountId || accountId === "default" || accountId === "") {
131
+ return exports.DEFAULT_ACCOUNT_ID;
132
+ }
133
+ return accountId.toLowerCase().replace(/[^a-z0-9_-]/g, "_");
134
+ }
135
+ function setAccountEnabledInConfig(opts) {
136
+ const { cfg, accountId, enabled } = opts;
137
+ const channelConfig = cfg.channels?.[exports.CHANNEL_ID] || {};
138
+ if (accountId === exports.DEFAULT_ACCOUNT_ID && channelConfig.clientId) {
139
+ // Top-level default account
140
+ return {
141
+ ...cfg,
142
+ channels: {
143
+ ...cfg.channels,
144
+ [exports.CHANNEL_ID]: {
145
+ ...channelConfig,
146
+ enabled,
147
+ },
148
+ },
149
+ };
150
+ }
151
+ // Named account
152
+ return {
153
+ ...cfg,
154
+ channels: {
155
+ ...cfg.channels,
156
+ [exports.CHANNEL_ID]: {
157
+ ...channelConfig,
158
+ accounts: {
159
+ ...channelConfig.accounts,
160
+ [accountId]: {
161
+ ...channelConfig.accounts?.[accountId],
162
+ enabled,
163
+ },
164
+ },
165
+ },
166
+ },
167
+ };
168
+ }
169
+ function deleteAccountFromConfig(opts) {
170
+ const { cfg, accountId } = opts;
171
+ const channelConfig = cfg.channels?.[exports.CHANNEL_ID];
172
+ if (!channelConfig)
173
+ return cfg;
174
+ if (accountId === exports.DEFAULT_ACCOUNT_ID && channelConfig.clientId) {
175
+ // Remove top-level credentials
176
+ const { clientId, clientSecret, webhookUrl, name, ...rest } = channelConfig;
177
+ return {
178
+ ...cfg,
179
+ channels: {
180
+ ...cfg.channels,
181
+ [exports.CHANNEL_ID]: rest,
182
+ },
183
+ };
184
+ }
185
+ // Remove named account
186
+ if (channelConfig.accounts?.[accountId]) {
187
+ const { [accountId]: removed, ...remainingAccounts } = channelConfig.accounts;
188
+ return {
189
+ ...cfg,
190
+ channels: {
191
+ ...cfg.channels,
192
+ [exports.CHANNEL_ID]: {
193
+ ...channelConfig,
194
+ accounts: remainingAccounts,
195
+ },
196
+ },
197
+ };
198
+ }
199
+ return cfg;
200
+ }
201
+ function applyAccountNameToConfig(opts) {
202
+ const { cfg, accountId, name } = opts;
203
+ if (!name)
204
+ return cfg;
205
+ const channelConfig = cfg.channels?.[exports.CHANNEL_ID] || {};
206
+ if (accountId === exports.DEFAULT_ACCOUNT_ID && channelConfig.clientId) {
207
+ return {
208
+ ...cfg,
209
+ channels: {
210
+ ...cfg.channels,
211
+ [exports.CHANNEL_ID]: {
212
+ ...channelConfig,
213
+ name,
214
+ },
215
+ },
216
+ };
217
+ }
218
+ return {
219
+ ...cfg,
220
+ channels: {
221
+ ...cfg.channels,
222
+ [exports.CHANNEL_ID]: {
223
+ ...channelConfig,
224
+ accounts: {
225
+ ...channelConfig.accounts,
226
+ [accountId]: {
227
+ ...channelConfig.accounts?.[accountId],
228
+ name,
229
+ },
230
+ },
231
+ },
232
+ },
233
+ };
234
+ }
235
+ //# sourceMappingURL=schema.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schema.js","sourceRoot":"","sources":["../src/schema.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "moltbot-dingtalk-stream",
3
- "version": "1.0.8",
3
+ "version": "1.0.9",
4
4
  "description": "DingTalk custom channel plugin for Moltbot/Clawdbot",
5
5
  "main": "dist/index.js",
6
6
  "clawdbot": {
@@ -22,14 +22,15 @@
22
22
  "channel",
23
23
  "chatbot"
24
24
  ],
25
- "author": "Your Name",
25
+ "author": "Jack",
26
26
  "license": "MIT",
27
27
  "dependencies": {
28
28
  "axios": "^1.6.0",
29
+ "clawdbot": "^2026.1.24",
29
30
  "dingtalk-stream": "^2.1.4"
30
31
  },
31
32
  "devDependencies": {
32
33
  "@types/node": "^20.0.0",
33
34
  "typescript": "^5.0.0"
34
35
  }
35
- }
36
+ }