@openclaw/nextcloud-talk 2026.8.1-beta.2 → 2026.8.1-beta.3
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-gYP-jQPr.js";
|
|
2
2
|
export { nextcloudTalkPlugin };
|
|
@@ -4,7 +4,7 @@ import { n as collectRuntimeConfigAssignments, r as secretTargetRegistryEntries
|
|
|
4
4
|
import { createAccountListHelpers, describeWebhookAccountSnapshot } from "openclaw/plugin-sdk/account-helpers";
|
|
5
5
|
import { createChatChannelPlugin } from "openclaw/plugin-sdk/channel-core";
|
|
6
6
|
import { createLoggedPairingApprovalNotifier, createPairingPrefixStripper } from "openclaw/plugin-sdk/channel-pairing";
|
|
7
|
-
import { createAllowlistProviderRouteAllowlistWarningCollector, resolveScopeRequireMention, resolveScopeToolsPolicy } from "openclaw/plugin-sdk/channel-policy";
|
|
7
|
+
import { createAllowlistProviderRouteAllowlistWarningCollector, createConditionalWarningCollector, resolveScopeRequireMention, resolveScopeToolsPolicy } from "openclaw/plugin-sdk/channel-policy";
|
|
8
8
|
import { buildWebhookChannelStatusSummary, createComputedAccountStatusAdapter, createDefaultChannelRuntimeState } from "openclaw/plugin-sdk/status-helpers";
|
|
9
9
|
import { FormatCapabilityProfile, convertMarkdownTables, renderMarkdownWithMarkers, sanitizeAssistantVisibleText } from "openclaw/plugin-sdk/text-chunking";
|
|
10
10
|
import { createChannelApprovalAuth } from "openclaw/plugin-sdk/approval-auth-runtime";
|
|
@@ -12,7 +12,7 @@ import { normalizeLowercaseStringOrEmpty, normalizeOptionalLowercaseString, norm
|
|
|
12
12
|
import { DEFAULT_ACCOUNT_ID, hasConfiguredAccountValue, normalizeAccountId, resolveAccountWithDefaultFallback } from "openclaw/plugin-sdk/account-core";
|
|
13
13
|
import { isTruthyEnvValue } from "openclaw/plugin-sdk/runtime-env";
|
|
14
14
|
import { tryReadSecretFileSync } from "openclaw/plugin-sdk/secret-file-runtime";
|
|
15
|
-
import { buildSecretInputSchema, hasConfiguredSecretInput, normalizeResolvedSecretInputString } from "openclaw/plugin-sdk/secret-input";
|
|
15
|
+
import { buildSecretInputSchema, hasConfiguredSecretInput, normalizeResolvedSecretInputString, resolveSecretInputString } from "openclaw/plugin-sdk/secret-input";
|
|
16
16
|
import { formatErrorMessage } from "openclaw/plugin-sdk/error-runtime";
|
|
17
17
|
import { parseStrictNonNegativeInteger, parseStrictPositiveInteger } from "openclaw/plugin-sdk/number-runtime";
|
|
18
18
|
import { readProviderJsonResponse, readResponseTextLimited } from "openclaw/plugin-sdk/provider-http";
|
|
@@ -40,7 +40,7 @@ import { buildChannelKeyCandidates, normalizeChannelSlug, resolveChannelEntryMat
|
|
|
40
40
|
import { pruneMapToMaxSize } from "openclaw/plugin-sdk/collection-runtime";
|
|
41
41
|
import { truncateUtf16Safe } from "openclaw/plugin-sdk/text-utility-runtime";
|
|
42
42
|
import { createServer } from "node:http";
|
|
43
|
-
import { WEBHOOK_RATE_LIMIT_DEFAULTS, createAuthRateLimiter, isRequestBodyLimitError, readRequestBodyWithLimit, requestBodyErrorToText } from "openclaw/plugin-sdk/webhook-ingress";
|
|
43
|
+
import { WEBHOOK_RATE_LIMIT_DEFAULTS, createAuthRateLimiter, isRequestBodyLimitError, readRequestBodyWithLimit, requestBodyErrorToText, resolveRequestClientIp } from "openclaw/plugin-sdk/webhook-ingress";
|
|
44
44
|
import { isRecord } from "openclaw/plugin-sdk/channel-secret-basic-runtime";
|
|
45
45
|
import { jsonResult, readStringParam, resolveReactionMessageId } from "openclaw/plugin-sdk/channel-actions";
|
|
46
46
|
import { DEFAULT_ACCOUNT_ID as DEFAULT_ACCOUNT_ID$1, buildOutboundBaseSessionKey, normalizeAccountId as normalizeAccountId$1 } from "openclaw/plugin-sdk/routing";
|
|
@@ -97,18 +97,26 @@ function listNextcloudTalkAccountIds(cfg) {
|
|
|
97
97
|
debugAccounts("listNextcloudTalkAccountIds", ids);
|
|
98
98
|
return ids;
|
|
99
99
|
}
|
|
100
|
-
function resolveNextcloudTalkSecret(
|
|
101
|
-
const
|
|
102
|
-
|
|
100
|
+
function resolveNextcloudTalkSecret(accountId, merged) {
|
|
101
|
+
const configuredSecret = resolveSecretInputString({
|
|
102
|
+
value: merged.botSecret,
|
|
103
|
+
path: `channels.nextcloud-talk.accounts.${accountId}.botSecret`,
|
|
104
|
+
mode: "inspect"
|
|
105
|
+
});
|
|
106
|
+
if (configuredSecret.status === "configured_unavailable") return {
|
|
107
|
+
secret: "",
|
|
108
|
+
source: "config",
|
|
109
|
+
status: "configured_unavailable"
|
|
110
|
+
};
|
|
103
111
|
const envSecret = normalizeOptionalString(process.env.NEXTCLOUD_TALK_BOT_SECRET);
|
|
104
|
-
if (envSecret &&
|
|
112
|
+
if (envSecret && accountId === DEFAULT_ACCOUNT_ID) return {
|
|
105
113
|
secret: envSecret,
|
|
106
114
|
source: "env",
|
|
107
115
|
status: "available"
|
|
108
116
|
};
|
|
109
117
|
const botSecretFile = normalizeOptionalString(merged.botSecretFile);
|
|
110
118
|
if (botSecretFile) {
|
|
111
|
-
const result = tryReadSecretFileSync(botSecretFile, "Nextcloud Talk bot secret file", { rejectSymlink: true }, { configPath: `channels.nextcloud-talk.accounts.${
|
|
119
|
+
const result = tryReadSecretFileSync(botSecretFile, "Nextcloud Talk bot secret file", { rejectSymlink: true }, { configPath: `channels.nextcloud-talk.accounts.${accountId}.botSecretFile` });
|
|
112
120
|
return result.status === "available" ? {
|
|
113
121
|
secret: result.value,
|
|
114
122
|
source: "secretFile",
|
|
@@ -120,12 +128,8 @@ function resolveNextcloudTalkSecret(cfg, opts) {
|
|
|
120
128
|
diagnostic: result.diagnostic
|
|
121
129
|
};
|
|
122
130
|
}
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
path: `channels.nextcloud-talk.accounts.${resolvedAccountId}.botSecret`
|
|
126
|
-
});
|
|
127
|
-
if (inlineSecret) return {
|
|
128
|
-
secret: inlineSecret,
|
|
131
|
+
if (configuredSecret.status === "available") return {
|
|
132
|
+
secret: configuredSecret.value,
|
|
129
133
|
source: "config",
|
|
130
134
|
status: "available"
|
|
131
135
|
};
|
|
@@ -142,7 +146,7 @@ function resolveNextcloudTalkAccount(params) {
|
|
|
142
146
|
const merged = mergeNextcloudTalkAccountConfig(params.cfg, accountId);
|
|
143
147
|
const accountEnabled = merged.enabled !== false;
|
|
144
148
|
const enabled = baseEnabled && accountEnabled;
|
|
145
|
-
const secretResolution = resolveNextcloudTalkSecret(
|
|
149
|
+
const secretResolution = resolveNextcloudTalkSecret(accountId, merged);
|
|
146
150
|
const apiCredentialResolution = resolveNextcloudTalkApiCredentialsResult({
|
|
147
151
|
apiUser: merged.apiUser,
|
|
148
152
|
apiPassword: merged.apiPassword,
|
|
@@ -1352,7 +1356,7 @@ function createNextcloudTalkWebhookServer(opts) {
|
|
|
1352
1356
|
res.end();
|
|
1353
1357
|
return;
|
|
1354
1358
|
}
|
|
1355
|
-
const clientIp = req.socket.remoteAddress ?? "unknown";
|
|
1359
|
+
const clientIp = resolveRequestClientIp(req, opts.trustedProxies, opts.allowRealIpFallback) ?? req.socket.remoteAddress ?? "unknown";
|
|
1356
1360
|
if (!webhookAuthRateLimiter.check(clientIp, WEBHOOK_AUTH_RATE_LIMIT_SCOPE).allowed) {
|
|
1357
1361
|
res.writeHead(429);
|
|
1358
1362
|
res.end("Too Many Requests");
|
|
@@ -1647,6 +1651,8 @@ async function monitorNextcloudTalkProvider(opts) {
|
|
|
1647
1651
|
onError: (error) => {
|
|
1648
1652
|
logger.error(`[nextcloud-talk:${account.accountId}] webhook error: ${error.message}`);
|
|
1649
1653
|
},
|
|
1654
|
+
trustedProxies: cfg.gateway?.trustedProxies,
|
|
1655
|
+
allowRealIpFallback: cfg.gateway?.allowRealIpFallback,
|
|
1650
1656
|
abortSignal: opts.abortSignal
|
|
1651
1657
|
});
|
|
1652
1658
|
let stopPromise;
|
|
@@ -2192,6 +2198,12 @@ const collectNextcloudTalkSecurityWarnings = createAllowlistProviderRouteAllowli
|
|
|
2192
2198
|
groupAllowFromPath: "channels.nextcloud-talk.groupAllowFrom"
|
|
2193
2199
|
}
|
|
2194
2200
|
});
|
|
2201
|
+
const collectNextcloudTalkOpenGroupFindings = createConditionalWarningCollector.findings({
|
|
2202
|
+
collectWarnings: collectNextcloudTalkSecurityWarnings,
|
|
2203
|
+
checkId: "channels.nextcloud-talk.groups.open",
|
|
2204
|
+
severity: "critical",
|
|
2205
|
+
title: "Nextcloud Talk security warning"
|
|
2206
|
+
});
|
|
2195
2207
|
const nextcloudTalkPlugin = createChatChannelPlugin({
|
|
2196
2208
|
base: {
|
|
2197
2209
|
id: "nextcloud-talk",
|
|
@@ -2288,7 +2300,7 @@ const nextcloudTalkPlugin = createChatChannelPlugin({
|
|
|
2288
2300
|
} },
|
|
2289
2301
|
security: {
|
|
2290
2302
|
...nextcloudTalkSecurityAdapter,
|
|
2291
|
-
collectWarnings:
|
|
2303
|
+
collectWarnings: collectNextcloudTalkOpenGroupFindings
|
|
2292
2304
|
},
|
|
2293
2305
|
outbound: {
|
|
2294
2306
|
base: {
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { t as nextcloudTalkPlugin } from "./channel-
|
|
1
|
+
import { t as nextcloudTalkPlugin } from "./channel-gYP-jQPr.js";
|
|
2
2
|
export { nextcloudTalkPlugin };
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@openclaw/nextcloud-talk",
|
|
3
|
-
"version": "2026.8.1-beta.
|
|
3
|
+
"version": "2026.8.1-beta.3",
|
|
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.8.1-beta.
|
|
11
|
+
"openclaw": ">=2026.8.1-beta.3"
|
|
12
12
|
},
|
|
13
13
|
"peerDependenciesMeta": {
|
|
14
14
|
"openclaw": {
|
|
@@ -127,10 +127,10 @@
|
|
|
127
127
|
"minHostVersion": ">=2026.4.10"
|
|
128
128
|
},
|
|
129
129
|
"compat": {
|
|
130
|
-
"pluginApi": ">=2026.8.1-beta.
|
|
130
|
+
"pluginApi": ">=2026.8.1-beta.3"
|
|
131
131
|
},
|
|
132
132
|
"build": {
|
|
133
|
-
"openclawVersion": "2026.8.1-beta.
|
|
133
|
+
"openclawVersion": "2026.8.1-beta.3"
|
|
134
134
|
},
|
|
135
135
|
"release": {
|
|
136
136
|
"publishToClawHub": true,
|