@openclaw/nextcloud-talk 2026.8.1-beta.3 → 2026.9.1-beta.1
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/api.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { t as nextcloudTalkPlugin } from "./channel-
|
|
1
|
+
import { t as nextcloudTalkPlugin } from "./channel-tgvjpexV.js";
|
|
2
2
|
export { nextcloudTalkPlugin };
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { t as nextcloudTalkPlugin } from "./channel-
|
|
1
|
+
import { t as nextcloudTalkPlugin } from "./channel-tgvjpexV.js";
|
|
2
2
|
export { nextcloudTalkPlugin };
|
|
@@ -25,7 +25,7 @@ import { createHmac, randomBytes } from "node:crypto";
|
|
|
25
25
|
import { fileExists, safeEqualSecret } from "openclaw/plugin-sdk/security-runtime";
|
|
26
26
|
import { clearAccountEntryFields } from "openclaw/plugin-sdk/channel-plugin-common";
|
|
27
27
|
import { DEFAULT_ACCOUNT_ID as DEFAULT_ACCOUNT_ID$2 } from "openclaw/plugin-sdk/account-id";
|
|
28
|
-
import { DmPolicySchema, GroupPolicySchema, MarkdownConfigSchema, ReplyRuntimeConfigSchemaShape, buildChannelConfigSchema, buildGroupEntrySchema, buildMultiAccountChannelSchema, requireOpenAllowFrom } from "openclaw/plugin-sdk/channel-config-schema";
|
|
28
|
+
import { DmPolicySchema, GroupPolicySchema, MarkdownConfigSchema, ReplyRuntimeConfigSchemaShape, ReplyToModeSchema, buildChannelConfigSchema, buildGroupEntrySchema, buildMultiAccountChannelSchema, requireOpenAllowFrom } from "openclaw/plugin-sdk/channel-config-schema";
|
|
29
29
|
import { formatAllowFromLowercase, resolveAllowlistMatchByCandidates } from "openclaw/plugin-sdk/allow-from";
|
|
30
30
|
import { adaptScopedAccountAccessor, createScopedChannelConfigAdapter, createScopedDmSecurityResolver } from "openclaw/plugin-sdk/channel-config-helpers";
|
|
31
31
|
import { requireChannelOpenAllowFrom, resolveLoggerBackedRuntime } from "openclaw/plugin-sdk/extension-shared";
|
|
@@ -147,13 +147,6 @@ function resolveNextcloudTalkAccount(params) {
|
|
|
147
147
|
const accountEnabled = merged.enabled !== false;
|
|
148
148
|
const enabled = baseEnabled && accountEnabled;
|
|
149
149
|
const secretResolution = resolveNextcloudTalkSecret(accountId, merged);
|
|
150
|
-
const apiCredentialResolution = resolveNextcloudTalkApiCredentialsResult({
|
|
151
|
-
apiUser: merged.apiUser,
|
|
152
|
-
apiPassword: merged.apiPassword,
|
|
153
|
-
apiPasswordFile: merged.apiPasswordFile,
|
|
154
|
-
configPath: `channels.nextcloud-talk.accounts.${accountId}.apiPasswordFile`
|
|
155
|
-
});
|
|
156
|
-
const diagnostics = [secretResolution.diagnostic, apiCredentialResolution.status === "configured_unavailable" ? apiCredentialResolution.diagnostic : void 0].filter((diagnostic) => Boolean(diagnostic));
|
|
157
150
|
const baseUrl = merged.baseUrl?.trim()?.replace(/\/$/, "") ?? "";
|
|
158
151
|
debugAccounts("resolve", {
|
|
159
152
|
accountId,
|
|
@@ -169,8 +162,7 @@ function resolveNextcloudTalkAccount(params) {
|
|
|
169
162
|
secret: secretResolution.secret,
|
|
170
163
|
secretSource: secretResolution.source,
|
|
171
164
|
tokenStatus: secretResolution.status,
|
|
172
|
-
|
|
173
|
-
...diagnostics.length > 0 ? { credentialDiagnostics: diagnostics } : {},
|
|
165
|
+
...secretResolution.diagnostic ? { credentialDiagnostics: [secretResolution.diagnostic] } : {},
|
|
174
166
|
config: merged
|
|
175
167
|
};
|
|
176
168
|
};
|
|
@@ -182,6 +174,21 @@ function resolveNextcloudTalkAccount(params) {
|
|
|
182
174
|
resolveDefaultAccountId: () => resolveDefaultNextcloudTalkAccountId(params.cfg)
|
|
183
175
|
});
|
|
184
176
|
}
|
|
177
|
+
function inspectNextcloudTalkAccount(params) {
|
|
178
|
+
const account = resolveNextcloudTalkAccount(params);
|
|
179
|
+
const apiCredentialResolution = resolveNextcloudTalkApiCredentialsResult({
|
|
180
|
+
apiUser: account.config.apiUser,
|
|
181
|
+
apiPassword: account.config.apiPassword,
|
|
182
|
+
apiPasswordFile: account.config.apiPasswordFile,
|
|
183
|
+
configPath: `channels.nextcloud-talk.accounts.${account.accountId}.apiPasswordFile`
|
|
184
|
+
});
|
|
185
|
+
const credentialDiagnostics = [...account.credentialDiagnostics ?? [], ...apiCredentialResolution.status === "configured_unavailable" ? [apiCredentialResolution.diagnostic] : []];
|
|
186
|
+
return {
|
|
187
|
+
...account,
|
|
188
|
+
apiCredentialStatus: apiCredentialResolution.status,
|
|
189
|
+
...credentialDiagnostics.length > 0 ? { credentialDiagnostics } : {}
|
|
190
|
+
};
|
|
191
|
+
}
|
|
185
192
|
//#endregion
|
|
186
193
|
//#region extensions/nextcloud-talk/src/approval-auth.ts
|
|
187
194
|
function normalizeNextcloudTalkApproverId(value) {
|
|
@@ -366,6 +373,7 @@ const nextcloudTalkConfigAdapter = createScopedChannelConfigAdapter({
|
|
|
366
373
|
sectionKey: "nextcloud-talk",
|
|
367
374
|
listAccountIds: listNextcloudTalkAccountIds,
|
|
368
375
|
resolveAccount: adaptScopedAccountAccessor(resolveNextcloudTalkAccount),
|
|
376
|
+
inspectAccount: adaptScopedAccountAccessor(inspectNextcloudTalkAccount),
|
|
369
377
|
defaultAccountId: resolveDefaultNextcloudTalkAccountId,
|
|
370
378
|
clearBaseFields: [
|
|
371
379
|
"botSecret",
|
|
@@ -401,6 +409,7 @@ const NextcloudTalkConfigSchema = buildMultiAccountChannelSchema(z.object({
|
|
|
401
409
|
name: z.string().optional(),
|
|
402
410
|
enabled: z.boolean().optional(),
|
|
403
411
|
configWrites: z.boolean().optional(),
|
|
412
|
+
replyToMode: ReplyToModeSchema.optional(),
|
|
404
413
|
markdown: MarkdownConfigSchema,
|
|
405
414
|
baseUrl: z.string().optional(),
|
|
406
415
|
botSecret: buildSecretInputSchema().optional(),
|
|
@@ -1414,6 +1423,7 @@ function createNextcloudTalkWebhookServer(opts) {
|
|
|
1414
1423
|
const stop = async () => {
|
|
1415
1424
|
stopRequested = true;
|
|
1416
1425
|
await closeIfListening();
|
|
1426
|
+
webhookAuthRateLimiter.dispose();
|
|
1417
1427
|
};
|
|
1418
1428
|
const start = () => {
|
|
1419
1429
|
if (stopRequested) return Promise.resolve();
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { DEFAULT_ACCOUNT_ID, hasConfiguredAccountValue, mergeAccountConfig } from "openclaw/plugin-sdk/account-core";
|
|
2
|
+
//#region extensions/nextcloud-talk/configured-state.ts
|
|
3
|
+
function hasConfiguredNextcloudAccount(account, env) {
|
|
4
|
+
return Boolean(account?.baseUrl?.trim() && (hasConfiguredAccountValue(account.botSecret) || hasConfiguredAccountValue(account.botSecretFile) || hasConfiguredAccountValue(env.NEXTCLOUD_TALK_BOT_SECRET)));
|
|
5
|
+
}
|
|
6
|
+
/** Require a Nextcloud server plus its account-owned bot credential. */
|
|
7
|
+
function hasConfiguredNextcloudTalkChannelState(params) {
|
|
8
|
+
const channel = params.cfg.channels?.["nextcloud-talk"];
|
|
9
|
+
if (channel?.enabled === false) return false;
|
|
10
|
+
const defaultAccount = channel?.accounts?.[DEFAULT_ACCOUNT_ID];
|
|
11
|
+
if (defaultAccount?.enabled !== false) {
|
|
12
|
+
if (hasConfiguredNextcloudAccount(defaultAccount ? mergeAccountConfig({
|
|
13
|
+
channelConfig: channel,
|
|
14
|
+
accountConfig: defaultAccount,
|
|
15
|
+
omitKeys: ["defaultAccount"]
|
|
16
|
+
}) : channel, params.env ?? process.env)) return true;
|
|
17
|
+
}
|
|
18
|
+
return Object.entries(channel?.accounts ?? {}).some(([accountId, account]) => accountId !== DEFAULT_ACCOUNT_ID && account.enabled !== false && hasConfiguredNextcloudAccount(mergeAccountConfig({
|
|
19
|
+
channelConfig: channel,
|
|
20
|
+
accountConfig: account,
|
|
21
|
+
omitKeys: ["defaultAccount"]
|
|
22
|
+
}), {}));
|
|
23
|
+
}
|
|
24
|
+
//#endregion
|
|
25
|
+
export { hasConfiguredNextcloudTalkChannelState };
|
package/openclaw.plugin.json
CHANGED
|
@@ -32,6 +32,26 @@
|
|
|
32
32
|
"configWrites": {
|
|
33
33
|
"type": "boolean"
|
|
34
34
|
},
|
|
35
|
+
"replyToMode": {
|
|
36
|
+
"anyOf": [
|
|
37
|
+
{
|
|
38
|
+
"type": "string",
|
|
39
|
+
"const": "off"
|
|
40
|
+
},
|
|
41
|
+
{
|
|
42
|
+
"type": "string",
|
|
43
|
+
"const": "first"
|
|
44
|
+
},
|
|
45
|
+
{
|
|
46
|
+
"type": "string",
|
|
47
|
+
"const": "all"
|
|
48
|
+
},
|
|
49
|
+
{
|
|
50
|
+
"type": "string",
|
|
51
|
+
"const": "batched"
|
|
52
|
+
}
|
|
53
|
+
]
|
|
54
|
+
},
|
|
35
55
|
"markdown": {
|
|
36
56
|
"type": "object",
|
|
37
57
|
"properties": {
|
|
@@ -479,6 +499,26 @@
|
|
|
479
499
|
"configWrites": {
|
|
480
500
|
"type": "boolean"
|
|
481
501
|
},
|
|
502
|
+
"replyToMode": {
|
|
503
|
+
"anyOf": [
|
|
504
|
+
{
|
|
505
|
+
"type": "string",
|
|
506
|
+
"const": "off"
|
|
507
|
+
},
|
|
508
|
+
{
|
|
509
|
+
"type": "string",
|
|
510
|
+
"const": "first"
|
|
511
|
+
},
|
|
512
|
+
{
|
|
513
|
+
"type": "string",
|
|
514
|
+
"const": "all"
|
|
515
|
+
},
|
|
516
|
+
{
|
|
517
|
+
"type": "string",
|
|
518
|
+
"const": "batched"
|
|
519
|
+
}
|
|
520
|
+
]
|
|
521
|
+
},
|
|
482
522
|
"markdown": {
|
|
483
523
|
"type": "object",
|
|
484
524
|
"properties": {
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@openclaw/nextcloud-talk",
|
|
3
|
-
"version": "2026.
|
|
3
|
+
"version": "2026.9.1-beta.1",
|
|
4
4
|
"description": "OpenClaw Nextcloud Talk channel plugin for conversations.",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
},
|
|
9
9
|
"type": "module",
|
|
10
10
|
"peerDependencies": {
|
|
11
|
-
"openclaw": ">=2026.
|
|
11
|
+
"openclaw": ">=2026.9.1-beta.1"
|
|
12
12
|
},
|
|
13
13
|
"peerDependenciesMeta": {
|
|
14
14
|
"openclaw": {
|
|
@@ -31,7 +31,9 @@
|
|
|
31
31
|
"NEXTCLOUD_TALK_BOT_SECRET",
|
|
32
32
|
"NEXTCLOUD_TALK_API_PASSWORD"
|
|
33
33
|
]
|
|
34
|
-
}
|
|
34
|
+
},
|
|
35
|
+
"specifier": "./dist/configured-state.js",
|
|
36
|
+
"exportName": "hasConfiguredNextcloudTalkChannelState"
|
|
35
37
|
},
|
|
36
38
|
"label": "Nextcloud Talk",
|
|
37
39
|
"selectionLabel": "Nextcloud Talk (self-hosted)",
|
|
@@ -127,10 +129,10 @@
|
|
|
127
129
|
"minHostVersion": ">=2026.4.10"
|
|
128
130
|
},
|
|
129
131
|
"compat": {
|
|
130
|
-
"pluginApi": ">=2026.
|
|
132
|
+
"pluginApi": ">=2026.9.1-beta.1"
|
|
131
133
|
},
|
|
132
134
|
"build": {
|
|
133
|
-
"openclawVersion": "2026.
|
|
135
|
+
"openclawVersion": "2026.9.1-beta.1"
|
|
134
136
|
},
|
|
135
137
|
"release": {
|
|
136
138
|
"publishToClawHub": true,
|