@openclaw/nextcloud-talk 2026.7.2-beta.4 → 2026.7.2-beta.7
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 +1 -1
- package/dist/api.js +1 -1
- package/dist/{channel-DtnECxVM.js → channel-B9yquEb1.js} +33 -121
- package/dist/channel-plugin-api.js +1 -1
- package/package.json +4 -5
- package/npm-shrinkwrap.json +0 -32
package/README.md
CHANGED
|
@@ -5,7 +5,7 @@ Official OpenClaw channel plugin for Nextcloud Talk conversations.
|
|
|
5
5
|
Install from OpenClaw:
|
|
6
6
|
|
|
7
7
|
```bash
|
|
8
|
-
openclaw
|
|
8
|
+
openclaw plugins install @openclaw/nextcloud-talk
|
|
9
9
|
```
|
|
10
10
|
|
|
11
11
|
Configure the Nextcloud server and Talk credentials in OpenClaw, then enable the conversations where agents should receive and send messages.
|
package/dist/api.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { t as nextcloudTalkPlugin } from "./channel-
|
|
1
|
+
import { t as nextcloudTalkPlugin } from "./channel-B9yquEb1.js";
|
|
2
2
|
export { nextcloudTalkPlugin };
|
|
@@ -1,15 +1,16 @@
|
|
|
1
1
|
import { a as fetchWithSsrFGuard, c as resolveDefaultGroupPolicy, i as deliverFormattedTextWithAttachments, l as warnMissingProviderGroupPolicyFallbackOnce, o as logInboundDrop, r as createChannelPairingController, s as resolveAllowlistProviderRuntimeGroupPolicy, t as GROUP_POLICY_BLOCKED_LABEL, u as getNextcloudTalkRuntime } from "./runtime-api-BKsxTw4J.js";
|
|
2
2
|
import { n as normalizeCompatibilityConfig, t as legacyConfigRules } from "./doctor-contract-fNhK1wag.js";
|
|
3
3
|
import { n as collectRuntimeConfigAssignments, r as secretTargetRegistryEntries } from "./secret-contract-DGgvfVqm.js";
|
|
4
|
-
import { describeWebhookAccountSnapshot } from "openclaw/plugin-sdk/account-helpers";
|
|
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
7
|
import { createAllowlistProviderRouteAllowlistWarningCollector, resolveScopeRequireMention, resolveScopeToolsPolicy } from "openclaw/plugin-sdk/channel-policy";
|
|
8
8
|
import { buildWebhookChannelStatusSummary, createComputedAccountStatusAdapter, createDefaultChannelRuntimeState } from "openclaw/plugin-sdk/status-helpers";
|
|
9
|
-
import { convertMarkdownTables, renderMarkdownWithMarkers, sanitizeAssistantVisibleText } from "openclaw/plugin-sdk/text-chunking";
|
|
9
|
+
import { FormatCapabilityProfile, convertMarkdownTables, renderMarkdownWithMarkers, sanitizeAssistantVisibleText } from "openclaw/plugin-sdk/text-chunking";
|
|
10
10
|
import { createChannelApprovalAuth } from "openclaw/plugin-sdk/approval-auth-runtime";
|
|
11
11
|
import { normalizeLowercaseStringOrEmpty, normalizeOptionalLowercaseString, normalizeOptionalString, normalizeStringEntries } from "openclaw/plugin-sdk/string-coerce-runtime";
|
|
12
|
-
import { DEFAULT_ACCOUNT_ID,
|
|
12
|
+
import { DEFAULT_ACCOUNT_ID, hasConfiguredAccountValue, normalizeAccountId, resolveAccountWithDefaultFallback } from "openclaw/plugin-sdk/account-core";
|
|
13
|
+
import { isTruthyEnvValue } from "openclaw/plugin-sdk/runtime-env";
|
|
13
14
|
import { tryReadSecretFileSync } from "openclaw/plugin-sdk/secret-file-runtime";
|
|
14
15
|
import { buildSecretInputSchema, hasConfiguredSecretInput, normalizeResolvedSecretInputString } from "openclaw/plugin-sdk/secret-input";
|
|
15
16
|
import { formatErrorMessage } from "openclaw/plugin-sdk/error-runtime";
|
|
@@ -39,8 +40,10 @@ import { pruneMapToMaxSize } from "openclaw/plugin-sdk/collection-runtime";
|
|
|
39
40
|
import { truncateUtf16Safe } from "openclaw/plugin-sdk/text-utility-runtime";
|
|
40
41
|
import { createServer } from "node:http";
|
|
41
42
|
import { WEBHOOK_RATE_LIMIT_DEFAULTS, createAuthRateLimiter, isRequestBodyLimitError, readRequestBodyWithLimit, requestBodyErrorToText } from "openclaw/plugin-sdk/webhook-ingress";
|
|
43
|
+
import { isRecord } from "openclaw/plugin-sdk/channel-secret-basic-runtime";
|
|
42
44
|
import { jsonResult, readStringParam, resolveReactionMessageId } from "openclaw/plugin-sdk/channel-actions";
|
|
43
45
|
import { DEFAULT_ACCOUNT_ID as DEFAULT_ACCOUNT_ID$1, buildOutboundBaseSessionKey, normalizeAccountId as normalizeAccountId$1 } from "openclaw/plugin-sdk/routing";
|
|
46
|
+
import { createChannelDmPolicy } from "openclaw/plugin-sdk/channel-dm-policy";
|
|
44
47
|
import { defineChannelSetupContract } from "openclaw/plugin-sdk/channel-setup";
|
|
45
48
|
import { applyAccountNameToChannelSection, baseUrlTextInput, createSetupTranslator, createStandardChannelSetupStatus, defineTokenCredential, formatDocsLink, patchScopedAccountConfig, setSetupChannelEnabled } from "openclaw/plugin-sdk/setup";
|
|
46
49
|
import { createSetupInputPresenceValidator, createSetupTranslator as createSetupTranslator$1, mergeAllowFromEntries, promptParsedAllowFromForAccount, resolveSetupAccountId } from "openclaw/plugin-sdk/setup-runtime";
|
|
@@ -77,15 +80,12 @@ function resolveNextcloudTalkApiCredentials(params) {
|
|
|
77
80
|
}
|
|
78
81
|
//#endregion
|
|
79
82
|
//#region extensions/nextcloud-talk/src/accounts.ts
|
|
80
|
-
function isTruthyEnvValue(value) {
|
|
81
|
-
const normalized = normalizeLowercaseStringOrEmpty(value);
|
|
82
|
-
return normalized === "true" || normalized === "1" || normalized === "yes" || normalized === "on";
|
|
83
|
-
}
|
|
84
83
|
const debugAccounts = (...args) => {
|
|
85
84
|
if (isTruthyEnvValue(process.env.OPENCLAW_DEBUG_NEXTCLOUD_TALK_ACCOUNTS)) console.warn("[nextcloud-talk:accounts]", ...args);
|
|
86
85
|
};
|
|
87
|
-
const { listAccountIds: listNextcloudTalkAccountIdsInternal, resolveDefaultAccountId: resolveDefaultNextcloudTalkAccountId } = createAccountListHelpers("nextcloud-talk", {
|
|
86
|
+
const { listAccountIds: listNextcloudTalkAccountIdsInternal, resolveDefaultAccountId: resolveDefaultNextcloudTalkAccountId, resolveAccountConfig: mergeNextcloudTalkAccountConfig } = createAccountListHelpers("nextcloud-talk", {
|
|
88
87
|
normalizeAccountId,
|
|
88
|
+
omitKeys: ["defaultAccount"],
|
|
89
89
|
hasImplicitDefaultAccount: (cfg) => {
|
|
90
90
|
const channel = cfg.channels?.["nextcloud-talk"];
|
|
91
91
|
return Boolean(channel?.baseUrl?.trim() && (hasConfiguredAccountValue(channel.botSecret) || channel.botSecretFile?.trim() || process.env.NEXTCLOUD_TALK_BOT_SECRET?.trim()));
|
|
@@ -96,15 +96,6 @@ function listNextcloudTalkAccountIds(cfg) {
|
|
|
96
96
|
debugAccounts("listNextcloudTalkAccountIds", ids);
|
|
97
97
|
return ids;
|
|
98
98
|
}
|
|
99
|
-
function mergeNextcloudTalkAccountConfig(cfg, accountId) {
|
|
100
|
-
return resolveMergedAccountConfig({
|
|
101
|
-
channelConfig: cfg.channels?.["nextcloud-talk"],
|
|
102
|
-
accounts: cfg.channels?.["nextcloud-talk"]?.accounts,
|
|
103
|
-
accountId,
|
|
104
|
-
omitKeys: ["defaultAccount"],
|
|
105
|
-
normalizeAccountId
|
|
106
|
-
});
|
|
107
|
-
}
|
|
108
99
|
function resolveNextcloudTalkSecret(cfg, opts) {
|
|
109
100
|
const resolvedAccountId = opts.accountId ?? resolveDefaultNextcloudTalkAccountId(cfg);
|
|
110
101
|
const merged = mergeNextcloudTalkAccountConfig(cfg, resolvedAccountId);
|
|
@@ -706,33 +697,14 @@ function looksLikeNextcloudTalkTargetId(raw) {
|
|
|
706
697
|
const NEXTCLOUD_TALK_ERROR_SNIPPET_MAX_BYTES = 8 * 1024;
|
|
707
698
|
const NEXTCLOUD_TALK_ERROR_SNIPPET_MAX_CHARS = 200;
|
|
708
699
|
const NEXTCLOUD_TALK_SEND_TIMEOUT_MS = 3e4;
|
|
709
|
-
const NEXTCLOUD_TALK_FORMAT_PROFILE = {
|
|
700
|
+
const NEXTCLOUD_TALK_FORMAT_PROFILE = FormatCapabilityProfile.define({
|
|
710
701
|
mechanism: "markdown",
|
|
711
|
-
constructs: {
|
|
712
|
-
bold: "native",
|
|
713
|
-
italic: "native",
|
|
714
|
-
underline: "native",
|
|
715
|
-
strikethrough: "native",
|
|
716
|
-
spoiler: "native",
|
|
717
|
-
codeInline: "native",
|
|
718
|
-
codeBlock: "native",
|
|
719
|
-
codeLanguage: "native",
|
|
720
|
-
linkLabel: "native",
|
|
721
|
-
heading: "native",
|
|
722
|
-
bulletList: "native",
|
|
723
|
-
orderedList: "native",
|
|
724
|
-
taskList: "native",
|
|
725
|
-
table: "native",
|
|
726
|
-
blockquote: "native",
|
|
727
|
-
image: "native",
|
|
728
|
-
mention: "native"
|
|
729
|
-
},
|
|
730
702
|
chunk: {
|
|
731
703
|
limit: 4e3,
|
|
732
704
|
unit: "chars",
|
|
733
705
|
hardCap: 32e3
|
|
734
706
|
}
|
|
735
|
-
};
|
|
707
|
+
});
|
|
736
708
|
function renderNextcloudTalkMarkdown(markdown) {
|
|
737
709
|
return renderMarkdownWithMarkers({
|
|
738
710
|
text: markdown,
|
|
@@ -1228,9 +1200,6 @@ var NextcloudTalkWebhookPayloadError = class extends Error {
|
|
|
1228
1200
|
this.name = "NextcloudTalkWebhookPayloadError";
|
|
1229
1201
|
}
|
|
1230
1202
|
};
|
|
1231
|
-
function isRecord(value) {
|
|
1232
|
-
return typeof value === "object" && value !== null && !Array.isArray(value);
|
|
1233
|
-
}
|
|
1234
1203
|
function parseRawObject(rawEvent) {
|
|
1235
1204
|
let parsed;
|
|
1236
1205
|
try {
|
|
@@ -1294,6 +1263,8 @@ async function migrateNextcloudTalkLegacyReplayState(params) {
|
|
|
1294
1263
|
//#region extensions/nextcloud-talk/src/monitor.ts
|
|
1295
1264
|
const DEFAULT_WEBHOOK_MAX_BODY_BYTES = 1024 * 1024;
|
|
1296
1265
|
const PREAUTH_WEBHOOK_MAX_BODY_BYTES = 64 * 1024;
|
|
1266
|
+
const NEXTCLOUD_TALK_WEBHOOK_ACCEPTED_HEADER = "x-openclaw-delivery-accepted";
|
|
1267
|
+
const NEXTCLOUD_TALK_WEBHOOK_ACCEPTED_VALUE = "durable";
|
|
1297
1268
|
const PREAUTH_WEBHOOK_BODY_TIMEOUT_MS = 5e3;
|
|
1298
1269
|
const HEALTH_PATH = "/healthz";
|
|
1299
1270
|
const WEBHOOK_AUTH_RATE_LIMIT_SCOPE = "nextcloud-talk-webhook-auth";
|
|
@@ -1402,7 +1373,7 @@ function createNextcloudTalkWebhookServer(opts) {
|
|
|
1402
1373
|
clientIp,
|
|
1403
1374
|
authRateLimiter: webhookAuthRateLimiter
|
|
1404
1375
|
})) return;
|
|
1405
|
-
await onWebhook(body);
|
|
1376
|
+
if (await onWebhook(body) === "accepted") res.setHeader(NEXTCLOUD_TALK_WEBHOOK_ACCEPTED_HEADER, NEXTCLOUD_TALK_WEBHOOK_ACCEPTED_VALUE);
|
|
1406
1377
|
writeJsonResponse(res, 200);
|
|
1407
1378
|
} catch (err) {
|
|
1408
1379
|
if (isRequestBodyLimitError(err, "PAYLOAD_TOO_LARGE")) {
|
|
@@ -1464,11 +1435,6 @@ function createNextcloudTalkWebhookServer(opts) {
|
|
|
1464
1435
|
//#endregion
|
|
1465
1436
|
//#region extensions/nextcloud-talk/src/webhook-spool.ts
|
|
1466
1437
|
const NEXTCLOUD_TALK_INGRESS_POLL_INTERVAL_MS = 500;
|
|
1467
|
-
const NEXTCLOUD_TALK_INGRESS_PRUNE_INTERVAL_MS = 3600 * 1e3;
|
|
1468
|
-
const NEXTCLOUD_TALK_INGRESS_COMPLETED_TTL_MS = 720 * 60 * 60 * 1e3;
|
|
1469
|
-
const NEXTCLOUD_TALK_INGRESS_COMPLETED_MAX_ENTRIES = 1e4;
|
|
1470
|
-
const NEXTCLOUD_TALK_INGRESS_FAILED_TTL_MS = 720 * 60 * 60 * 1e3;
|
|
1471
|
-
const NEXTCLOUD_TALK_INGRESS_FAILED_MAX_ENTRIES = 1e4;
|
|
1472
1438
|
const NextcloudTalkWebhookPayloadSchema = z.object({
|
|
1473
1439
|
type: z.enum([
|
|
1474
1440
|
"Create",
|
|
@@ -1572,11 +1538,8 @@ function createNextcloudTalkWebhookSpool(options) {
|
|
|
1572
1538
|
pollIntervalMs: options.pollIntervalMs ?? NEXTCLOUD_TALK_INGRESS_POLL_INTERVAL_MS,
|
|
1573
1539
|
waitForDeliveryIdleBeforeRepump: true,
|
|
1574
1540
|
retention: {
|
|
1575
|
-
|
|
1576
|
-
|
|
1577
|
-
completedMaxEntries: NEXTCLOUD_TALK_INGRESS_COMPLETED_MAX_ENTRIES,
|
|
1578
|
-
failedTtlMs: NEXTCLOUD_TALK_INGRESS_FAILED_TTL_MS,
|
|
1579
|
-
failedMaxEntries: NEXTCLOUD_TALK_INGRESS_FAILED_MAX_ENTRIES
|
|
1541
|
+
completedMaxEntries: 1e4,
|
|
1542
|
+
failedMaxEntries: 1e4
|
|
1580
1543
|
},
|
|
1581
1544
|
drain: {
|
|
1582
1545
|
resolveNonRetryableFailure,
|
|
@@ -1811,6 +1774,11 @@ const nextcloudTalkMessageActions = {
|
|
|
1811
1774
|
handleAction: async ({ action, params, cfg, accountId, toolContext }) => {
|
|
1812
1775
|
if (action === "send") throw new Error("Send should be handled by outbound, not actions handler.");
|
|
1813
1776
|
if (action === "react") {
|
|
1777
|
+
const account = resolveNextcloudTalkAccount({
|
|
1778
|
+
cfg,
|
|
1779
|
+
accountId
|
|
1780
|
+
});
|
|
1781
|
+
if (!isAccountConfigured(account)) throw new Error(`Nextcloud Talk account "${account.accountId}" is disabled or not configured.`);
|
|
1814
1782
|
const target = readStringParam(params, "to", {
|
|
1815
1783
|
required: true,
|
|
1816
1784
|
label: "to (room token)"
|
|
@@ -1892,9 +1860,6 @@ const channel$1 = "nextcloud-talk";
|
|
|
1892
1860
|
function readOptionalString(value) {
|
|
1893
1861
|
return typeof value === "string" && value.length > 0 ? value : void 0;
|
|
1894
1862
|
}
|
|
1895
|
-
function addWildcardAllowFrom(allowFrom) {
|
|
1896
|
-
return mergeAllowFromEntries(allowFrom, ["*"]);
|
|
1897
|
-
}
|
|
1898
1863
|
function normalizeNextcloudTalkBaseUrl(value) {
|
|
1899
1864
|
return value?.trim().replace(/\/+$/, "") ?? "";
|
|
1900
1865
|
}
|
|
@@ -1902,46 +1867,15 @@ function validateNextcloudTalkBaseUrl(value) {
|
|
|
1902
1867
|
if (!value) return "Required";
|
|
1903
1868
|
if (!value.startsWith("http://") && !value.startsWith("https://")) return "URL must start with http:// or https://";
|
|
1904
1869
|
}
|
|
1905
|
-
function setNextcloudTalkAccountConfig(cfg, accountId, updates) {
|
|
1870
|
+
function setNextcloudTalkAccountConfig(cfg, accountId, updates, clearFields) {
|
|
1906
1871
|
return patchScopedAccountConfig({
|
|
1907
1872
|
cfg,
|
|
1908
1873
|
channelKey: channel$1,
|
|
1909
1874
|
accountId,
|
|
1910
|
-
patch: updates
|
|
1875
|
+
patch: updates,
|
|
1876
|
+
...clearFields ? { clearFields } : {}
|
|
1911
1877
|
});
|
|
1912
1878
|
}
|
|
1913
|
-
function clearNextcloudTalkAccountFields(cfg, accountId, fields) {
|
|
1914
|
-
const section = cfg.channels?.["nextcloud-talk"];
|
|
1915
|
-
if (!section) return cfg;
|
|
1916
|
-
if (accountId === DEFAULT_ACCOUNT_ID$1) {
|
|
1917
|
-
const nextSection = { ...section };
|
|
1918
|
-
for (const field of fields) delete nextSection[field];
|
|
1919
|
-
return {
|
|
1920
|
-
...cfg,
|
|
1921
|
-
channels: {
|
|
1922
|
-
...cfg.channels,
|
|
1923
|
-
"nextcloud-talk": nextSection
|
|
1924
|
-
}
|
|
1925
|
-
};
|
|
1926
|
-
}
|
|
1927
|
-
const currentAccount = section.accounts?.[accountId];
|
|
1928
|
-
if (!currentAccount) return cfg;
|
|
1929
|
-
const nextAccount = { ...currentAccount };
|
|
1930
|
-
for (const field of fields) delete nextAccount[field];
|
|
1931
|
-
return {
|
|
1932
|
-
...cfg,
|
|
1933
|
-
channels: {
|
|
1934
|
-
...cfg.channels,
|
|
1935
|
-
"nextcloud-talk": {
|
|
1936
|
-
...section,
|
|
1937
|
-
accounts: {
|
|
1938
|
-
...section.accounts,
|
|
1939
|
-
[accountId]: nextAccount
|
|
1940
|
-
}
|
|
1941
|
-
}
|
|
1942
|
-
}
|
|
1943
|
-
};
|
|
1944
|
-
}
|
|
1945
1879
|
async function promptNextcloudTalkAllowFrom(params) {
|
|
1946
1880
|
return await promptParsedAllowFromForAccount({
|
|
1947
1881
|
cfg: params.cfg,
|
|
@@ -1980,35 +1914,16 @@ async function promptNextcloudTalkAllowFromForAccount(params) {
|
|
|
1980
1914
|
accountId
|
|
1981
1915
|
});
|
|
1982
1916
|
}
|
|
1983
|
-
const nextcloudTalkDmPolicy = {
|
|
1917
|
+
const nextcloudTalkDmPolicy = createChannelDmPolicy({
|
|
1984
1918
|
label: "Nextcloud Talk",
|
|
1985
1919
|
channel: channel$1,
|
|
1986
|
-
|
|
1987
|
-
allowFromKey: "channels.nextcloud-talk.allowFrom",
|
|
1988
|
-
resolveConfigKeys: (cfg, accountId) => (accountId ?? resolveDefaultNextcloudTalkAccountId(cfg)) !== DEFAULT_ACCOUNT_ID$1 ? {
|
|
1989
|
-
policyKey: `channels.nextcloud-talk.accounts.${accountId ?? resolveDefaultNextcloudTalkAccountId(cfg)}.dmPolicy`,
|
|
1990
|
-
allowFromKey: `channels.nextcloud-talk.accounts.${accountId ?? resolveDefaultNextcloudTalkAccountId(cfg)}.allowFrom`
|
|
1991
|
-
} : {
|
|
1992
|
-
policyKey: "channels.nextcloud-talk.dmPolicy",
|
|
1993
|
-
allowFromKey: "channels.nextcloud-talk.allowFrom"
|
|
1994
|
-
},
|
|
1995
|
-
getCurrent: (cfg, accountId) => resolveNextcloudTalkAccount({
|
|
1920
|
+
resolveAccount: (cfg, accountId) => resolveNextcloudTalkAccount({
|
|
1996
1921
|
cfg,
|
|
1997
1922
|
accountId: accountId ?? resolveDefaultNextcloudTalkAccountId(cfg)
|
|
1998
|
-
})
|
|
1999
|
-
|
|
2000
|
-
const resolvedAccountId = accountId ?? resolveDefaultNextcloudTalkAccountId(cfg);
|
|
2001
|
-
const resolved = resolveNextcloudTalkAccount({
|
|
2002
|
-
cfg,
|
|
2003
|
-
accountId: resolvedAccountId
|
|
2004
|
-
});
|
|
2005
|
-
return setNextcloudTalkAccountConfig(cfg, resolvedAccountId, {
|
|
2006
|
-
dmPolicy: policy,
|
|
2007
|
-
...policy === "open" ? { allowFrom: addWildcardAllowFrom(resolved.config.allowFrom) } : {}
|
|
2008
|
-
});
|
|
2009
|
-
},
|
|
1923
|
+
}),
|
|
1924
|
+
applyPatch: ({ cfg, account, patch }) => setNextcloudTalkAccountConfig(cfg, account.accountId, patch),
|
|
2010
1925
|
promptAllowFrom: promptNextcloudTalkAllowFromForAccount
|
|
2011
|
-
};
|
|
1926
|
+
});
|
|
2012
1927
|
const nextcloudTalkSetupAdapter = {
|
|
2013
1928
|
singleAccountKeysToMove: ["rooms"],
|
|
2014
1929
|
resolveAccountId: ({ accountId }) => normalizeAccountId$1(accountId),
|
|
@@ -2038,16 +1953,15 @@ const nextcloudTalkSetupAdapter = {
|
|
|
2038
1953
|
}),
|
|
2039
1954
|
applyAccountConfig: ({ cfg, accountId, input }) => {
|
|
2040
1955
|
const setupInput = input;
|
|
2041
|
-
|
|
1956
|
+
return setNextcloudTalkAccountConfig(applyAccountNameToChannelSection({
|
|
2042
1957
|
cfg,
|
|
2043
1958
|
channelKey: channel$1,
|
|
2044
1959
|
accountId,
|
|
2045
1960
|
name: setupInput.name
|
|
2046
|
-
})
|
|
2047
|
-
return setNextcloudTalkAccountConfig(setupInput.useEnv ? clearNextcloudTalkAccountFields(namedConfig, accountId, ["botSecret", "botSecretFile"]) : namedConfig, accountId, {
|
|
1961
|
+
}), accountId, {
|
|
2048
1962
|
baseUrl: normalizeNextcloudTalkBaseUrl(setupInput.baseUrl),
|
|
2049
1963
|
...setupInput.useEnv ? {} : setupInput.secretFile ? { botSecretFile: setupInput.secretFile } : setupInput.secret ? { botSecret: setupInput.secret } : {}
|
|
2050
|
-
});
|
|
1964
|
+
}, setupInput.useEnv ? ["botSecret", "botSecretFile"] : void 0);
|
|
2051
1965
|
}
|
|
2052
1966
|
};
|
|
2053
1967
|
const nextcloudTalkSetupContract = defineChannelSetupContract({
|
|
@@ -2192,9 +2106,7 @@ const nextcloudTalkSetupWizard = {
|
|
|
2192
2106
|
hasConfiguredValue: (account) => Boolean(hasConfiguredSecretInput(account.config.botSecret) || account.config.botSecretFile),
|
|
2193
2107
|
resolvedValue: (account) => account.secret || void 0,
|
|
2194
2108
|
envValue: ({ accountId }) => accountId === DEFAULT_ACCOUNT_ID$1 ? normalizeOptionalString(process.env.NEXTCLOUD_TALK_BOT_SECRET) : void 0,
|
|
2195
|
-
patchAccount: ({ cfg, accountId, patch, clearFields }) =>
|
|
2196
|
-
return setNextcloudTalkAccountConfig(clearNextcloudTalkAccountFields(cfg, accountId, clearFields), accountId, patch);
|
|
2197
|
-
},
|
|
2109
|
+
patchAccount: ({ cfg, accountId, patch, clearFields }) => setNextcloudTalkAccountConfig(cfg, accountId, patch, clearFields),
|
|
2198
2110
|
useEnv: {
|
|
2199
2111
|
clearFields: ["botSecret", "botSecretFile"],
|
|
2200
2112
|
patch: (account) => ({ baseUrl: account.baseUrl })
|
|
@@ -2217,7 +2129,7 @@ const nextcloudTalkSetupWizard = {
|
|
|
2217
2129
|
accountConfigured: (account) => Boolean(account.config.apiUser?.trim() && (hasConfiguredSecretInput(account.config.apiPassword) || account.config.apiPasswordFile)),
|
|
2218
2130
|
hasConfiguredValue: (account) => Boolean(hasConfiguredSecretInput(account.config.apiPassword) || account.config.apiPasswordFile),
|
|
2219
2131
|
shouldPrompt: ({ credentialValues }) => credentialValues[CONFIGURE_API_FLAG] === "1",
|
|
2220
|
-
patchAccount: ({ cfg, accountId, patch, clearFields }) => setNextcloudTalkAccountConfig(
|
|
2132
|
+
patchAccount: ({ cfg, accountId, patch, clearFields }) => setNextcloudTalkAccountConfig(cfg, accountId, patch, clearFields),
|
|
2221
2133
|
set: { clearFields: ["apiPassword", "apiPasswordFile"] }
|
|
2222
2134
|
})],
|
|
2223
2135
|
textInputs: [baseUrlTextInput({
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { t as nextcloudTalkPlugin } from "./channel-
|
|
1
|
+
import { t as nextcloudTalkPlugin } from "./channel-B9yquEb1.js";
|
|
2
2
|
export { nextcloudTalkPlugin };
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@openclaw/nextcloud-talk",
|
|
3
|
-
"version": "2026.7.2-beta.
|
|
3
|
+
"version": "2026.7.2-beta.7",
|
|
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.7.2-beta.
|
|
11
|
+
"openclaw": ">=2026.7.2-beta.7"
|
|
12
12
|
},
|
|
13
13
|
"peerDependenciesMeta": {
|
|
14
14
|
"openclaw": {
|
|
@@ -124,10 +124,10 @@
|
|
|
124
124
|
"minHostVersion": ">=2026.4.10"
|
|
125
125
|
},
|
|
126
126
|
"compat": {
|
|
127
|
-
"pluginApi": ">=2026.7.2-beta.
|
|
127
|
+
"pluginApi": ">=2026.7.2-beta.7"
|
|
128
128
|
},
|
|
129
129
|
"build": {
|
|
130
|
-
"openclawVersion": "2026.7.2-beta.
|
|
130
|
+
"openclawVersion": "2026.7.2-beta.7"
|
|
131
131
|
},
|
|
132
132
|
"release": {
|
|
133
133
|
"publishToClawHub": true,
|
|
@@ -144,7 +144,6 @@
|
|
|
144
144
|
"files": [
|
|
145
145
|
"dist/**",
|
|
146
146
|
"openclaw.plugin.json",
|
|
147
|
-
"npm-shrinkwrap.json",
|
|
148
147
|
"README.md"
|
|
149
148
|
],
|
|
150
149
|
"bundledDependencies": [
|
package/npm-shrinkwrap.json
DELETED
|
@@ -1,32 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"name": "@openclaw/nextcloud-talk",
|
|
3
|
-
"version": "2026.7.2-beta.4",
|
|
4
|
-
"lockfileVersion": 3,
|
|
5
|
-
"requires": true,
|
|
6
|
-
"packages": {
|
|
7
|
-
"": {
|
|
8
|
-
"name": "@openclaw/nextcloud-talk",
|
|
9
|
-
"version": "2026.7.2-beta.4",
|
|
10
|
-
"dependencies": {
|
|
11
|
-
"zod": "4.4.3"
|
|
12
|
-
},
|
|
13
|
-
"peerDependencies": {
|
|
14
|
-
"openclaw": ">=2026.7.2-beta.4"
|
|
15
|
-
},
|
|
16
|
-
"peerDependenciesMeta": {
|
|
17
|
-
"openclaw": {
|
|
18
|
-
"optional": true
|
|
19
|
-
}
|
|
20
|
-
}
|
|
21
|
-
},
|
|
22
|
-
"node_modules/zod": {
|
|
23
|
-
"version": "4.4.3",
|
|
24
|
-
"resolved": "https://registry.npmjs.org/zod/-/zod-4.4.3.tgz",
|
|
25
|
-
"integrity": "sha512-ytENFjIJFl2UwYglde2jchW2Hwm4GJFLDiSXWdTrJQBIN9Fcyp7n4DhxJEiWNAJMV1/BqWfW/kkg71UDcHJyTQ==",
|
|
26
|
-
"license": "MIT",
|
|
27
|
-
"funding": {
|
|
28
|
-
"url": "https://github.com/sponsors/colinhacks"
|
|
29
|
-
}
|
|
30
|
-
}
|
|
31
|
-
}
|
|
32
|
-
}
|