@openclaw/nextcloud-talk 2026.5.14-beta.1 → 2026.5.16-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-cSkkIgTL.js";
1
+ import { t as nextcloudTalkPlugin } from "./channel-CvZn7Hj1.js";
2
2
  export { nextcloudTalkPlugin };
@@ -12,6 +12,7 @@ import { normalizeLowercaseStringOrEmpty, normalizeOptionalLowercaseString, norm
12
12
  import { buildSecretInputSchema, hasConfiguredSecretInput, normalizeResolvedSecretInputString } from "openclaw/plugin-sdk/secret-input";
13
13
  import { createResolvedApproverActionAuthAdapter, resolveApprovalApprovers } from "openclaw/plugin-sdk/approval-auth-runtime";
14
14
  import { formatErrorMessage } from "openclaw/plugin-sdk/error-runtime";
15
+ import { readProviderJsonResponse } from "openclaw/plugin-sdk/provider-http";
15
16
  import { createMessageReceiptFromOutboundResults, defineChannelMessageAdapter } from "openclaw/plugin-sdk/channel-message";
16
17
  import { ssrfPolicyFromPrivateNetworkOptIn, ssrfPolicyFromPrivateNetworkOptIn as ssrfPolicyFromPrivateNetworkOptIn$1 } from "openclaw/plugin-sdk/ssrf-runtime";
17
18
  import { readFileSync } from "node:fs";
@@ -36,8 +37,8 @@ import { WEBHOOK_RATE_LIMIT_DEFAULTS, createAuthRateLimiter, isRequestBodyLimitE
36
37
  import path from "node:path";
37
38
  import { createClaimableDedupe } from "openclaw/plugin-sdk/persistent-dedupe";
38
39
  import { DEFAULT_ACCOUNT_ID as DEFAULT_ACCOUNT_ID$1, buildOutboundBaseSessionKey, normalizeAccountId as normalizeAccountId$1 } from "openclaw/plugin-sdk/routing";
39
- import { applyAccountNameToChannelSection, createStandardChannelSetupStatus, formatDocsLink, patchScopedAccountConfig, setSetupChannelEnabled } from "openclaw/plugin-sdk/setup";
40
- import { createSetupInputPresenceValidator, mergeAllowFromEntries, promptParsedAllowFromForAccount, resolveSetupAccountId } from "openclaw/plugin-sdk/setup-runtime";
40
+ import { applyAccountNameToChannelSection, createSetupTranslator, createStandardChannelSetupStatus, formatDocsLink, patchScopedAccountConfig, setSetupChannelEnabled } from "openclaw/plugin-sdk/setup";
41
+ import { createSetupInputPresenceValidator, createSetupTranslator as createSetupTranslator$1, mergeAllowFromEntries, promptParsedAllowFromForAccount, resolveSetupAccountId } from "openclaw/plugin-sdk/setup-runtime";
41
42
  import { formatDocsLink as formatDocsLink$1 } from "openclaw/plugin-sdk/setup-tools";
42
43
  //#region extensions/nextcloud-talk/src/accounts.ts
43
44
  function isTruthyEnvValue(value) {
@@ -295,7 +296,7 @@ async function probeNextcloudTalkBotResponseFeature(params) {
295
296
  message: `Nextcloud Talk bot response feature probe failed (${response.status})${body ? `: ${body}` : ""}`
296
297
  };
297
298
  }
298
- const payload = await response.json();
299
+ const payload = await readProviderJsonResponse(response, "Nextcloud Talk bot response feature probe failed");
299
300
  const bot = (Array.isArray(payload.ocs?.data) ? payload.ocs.data : []).find((entry) => normalizeUrlForMatch(entry.url) === webhookUrl);
300
301
  if (!bot) return {
301
302
  ok: false,
@@ -326,7 +327,7 @@ async function probeNextcloudTalkBotResponseFeature(params) {
326
327
  return {
327
328
  ok: false,
328
329
  code: "request_failed",
329
- message: `Nextcloud Talk bot response feature probe failed: ${formatErrorMessage(error)}`
330
+ message: `Nextcloud Talk bot response feature probe failed: ${error instanceof Error ? error.message : formatErrorMessage(error)}`
330
331
  };
331
332
  }
332
333
  }
@@ -570,7 +571,7 @@ async function resolveNextcloudTalkRoomKind(params) {
570
571
  runtime?.log?.(`nextcloud-talk: room lookup failed (${response.status}) token=${roomToken}`);
571
572
  return;
572
573
  }
573
- const kind = resolveRoomKindFromType(coerceRoomType((await response.json()).ocs?.data?.type));
574
+ const kind = resolveRoomKindFromType(coerceRoomType((await readProviderJsonResponse(response, "Nextcloud Talk room info failed")).ocs?.data?.type));
574
575
  roomCache.set(key, {
575
576
  fetchedAt: Date.now(),
576
577
  kind
@@ -1554,6 +1555,7 @@ function resolveNextcloudTalkOutboundSessionRoute(params) {
1554
1555
  }
1555
1556
  //#endregion
1556
1557
  //#region extensions/nextcloud-talk/src/setup-core.ts
1558
+ const t$1 = createSetupTranslator$1();
1557
1559
  const channel$1 = "nextcloud-talk";
1558
1560
  function addWildcardAllowFrom(allowFrom) {
1559
1561
  return mergeAllowFromEntries(allowFrom, ["*"]);
@@ -1611,14 +1613,14 @@ async function promptNextcloudTalkAllowFrom(params) {
1611
1613
  accountId: params.accountId,
1612
1614
  defaultAccountId: params.accountId,
1613
1615
  prompter: params.prompter,
1614
- noteTitle: "Nextcloud Talk user id",
1616
+ noteTitle: t$1("wizard.nextcloudTalk.userIdTitle"),
1615
1617
  noteLines: [
1616
- "1) Check the Nextcloud admin panel for user IDs",
1617
- "2) Or look at the webhook payload logs when someone messages",
1618
- "3) User IDs are typically lowercase usernames in Nextcloud",
1619
- `Docs: ${formatDocsLink$1("/channels/nextcloud-talk", "nextcloud-talk")}`
1618
+ t$1("wizard.nextcloudTalk.userIdHelpAdmin"),
1619
+ t$1("wizard.nextcloudTalk.userIdHelpLogs"),
1620
+ t$1("wizard.nextcloudTalk.userIdHelpLowercase"),
1621
+ t$1("wizard.channels.docs", { link: formatDocsLink$1("/channels/nextcloud-talk", "nextcloud-talk") })
1620
1622
  ],
1621
- message: "Nextcloud Talk allowFrom (user id)",
1623
+ message: t$1("wizard.nextcloudTalk.allowFromPrompt"),
1622
1624
  placeholder: "username",
1623
1625
  parseEntries: (raw) => ({ entries: raw.split(/[\n,;]+/g).map(normalizeLowercaseStringOrEmpty).filter(Boolean) }),
1624
1626
  getExistingAllowFrom: ({ cfg, accountId }) => resolveNextcloudTalkAccount({
@@ -1705,6 +1707,7 @@ const nextcloudTalkSetupAdapter = {
1705
1707
  };
1706
1708
  //#endregion
1707
1709
  //#region extensions/nextcloud-talk/src/setup-surface.ts
1710
+ const t = createSetupTranslator();
1708
1711
  const channel = "nextcloud-talk";
1709
1712
  const CONFIGURE_API_FLAG = "__nextcloudTalkConfigureApiCredentials";
1710
1713
  const nextcloudTalkSetupWizard = {
@@ -1712,10 +1715,10 @@ const nextcloudTalkSetupWizard = {
1712
1715
  stepOrder: "text-first",
1713
1716
  status: createStandardChannelSetupStatus({
1714
1717
  channelLabel: "Nextcloud Talk",
1715
- configuredLabel: "configured",
1716
- unconfiguredLabel: "needs setup",
1717
- configuredHint: "configured",
1718
- unconfiguredHint: "self-hosted chat",
1718
+ configuredLabel: t("wizard.channels.statusConfigured"),
1719
+ unconfiguredLabel: t("wizard.channels.statusNeedsSetup"),
1720
+ configuredHint: t("wizard.channels.statusConfigured"),
1721
+ unconfiguredHint: t("wizard.channels.statusSelfHostedChat"),
1719
1722
  configuredScore: 1,
1720
1723
  unconfiguredScore: 5,
1721
1724
  resolveConfigured: ({ cfg, accountId }) => {
@@ -1727,14 +1730,14 @@ const nextcloudTalkSetupWizard = {
1727
1730
  }
1728
1731
  }),
1729
1732
  introNote: {
1730
- title: "Nextcloud Talk bot setup",
1733
+ title: t("wizard.nextcloudTalk.setupTitle"),
1731
1734
  lines: [
1732
- "1) SSH into your Nextcloud server",
1733
- "2) Run: ./occ talk:bot:install \"OpenClaw\" \"<shared-secret>\" \"<webhook-url>\" --feature webhook --feature response --feature reaction",
1734
- "3) Copy the shared secret you used in the command",
1735
- "4) Enable the bot in your Nextcloud Talk room settings",
1736
- "Tip: you can also set NEXTCLOUD_TALK_BOT_SECRET in your env.",
1737
- `Docs: ${formatDocsLink("/channels/nextcloud-talk", "channels/nextcloud-talk")}`
1735
+ t("wizard.nextcloudTalk.helpSsh"),
1736
+ t("wizard.nextcloudTalk.helpInstallCommand"),
1737
+ t("wizard.nextcloudTalk.helpCopySecret"),
1738
+ t("wizard.nextcloudTalk.helpEnableRoom"),
1739
+ t("wizard.nextcloudTalk.helpEnvTip"),
1740
+ t("wizard.channels.docs", { link: formatDocsLink("/channels/nextcloud-talk", "channels/nextcloud-talk") })
1738
1741
  ],
1739
1742
  shouldShow: ({ cfg, accountId }) => {
1740
1743
  const account = resolveNextcloudTalkAccount({
@@ -1751,7 +1754,7 @@ const nextcloudTalkSetupWizard = {
1751
1754
  });
1752
1755
  const hasApiCredentials = Boolean(resolvedAccount.config.apiUser?.trim() && (hasConfiguredSecretInput(resolvedAccount.config.apiPassword) || resolvedAccount.config.apiPasswordFile));
1753
1756
  if (!await prompter.confirm({
1754
- message: "Configure optional Nextcloud Talk API credentials for room lookups?",
1757
+ message: t("wizard.nextcloudTalk.configureApiCredentials"),
1755
1758
  initialValue: hasApiCredentials
1756
1759
  })) return;
1757
1760
  return { credentialValues: {
@@ -1762,11 +1765,11 @@ const nextcloudTalkSetupWizard = {
1762
1765
  credentials: [{
1763
1766
  inputKey: "token",
1764
1767
  providerHint: channel,
1765
- credentialLabel: "bot secret",
1768
+ credentialLabel: t("wizard.nextcloudTalk.botSecret"),
1766
1769
  preferredEnvVar: "NEXTCLOUD_TALK_BOT_SECRET",
1767
- envPrompt: "NEXTCLOUD_TALK_BOT_SECRET detected. Use env var?",
1768
- keepPrompt: "Nextcloud Talk bot secret already configured. Keep it?",
1769
- inputPrompt: "Enter Nextcloud Talk bot secret",
1770
+ envPrompt: t("wizard.nextcloudTalk.botSecretEnvPrompt"),
1771
+ keepPrompt: t("wizard.nextcloudTalk.botSecretKeep"),
1772
+ inputPrompt: t("wizard.nextcloudTalk.botSecretInput"),
1770
1773
  allowEnv: ({ accountId }) => accountId === DEFAULT_ACCOUNT_ID$1,
1771
1774
  inspect: ({ cfg, accountId }) => {
1772
1775
  const resolvedAccount = resolveNextcloudTalkAccount({
@@ -1791,11 +1794,11 @@ const nextcloudTalkSetupWizard = {
1791
1794
  }, {
1792
1795
  inputKey: "password",
1793
1796
  providerHint: "nextcloud-talk-api",
1794
- credentialLabel: "API password",
1797
+ credentialLabel: t("wizard.nextcloudTalk.apiPassword"),
1795
1798
  preferredEnvVar: "NEXTCLOUD_TALK_API_PASSWORD",
1796
1799
  envPrompt: "",
1797
- keepPrompt: "Nextcloud Talk API password already configured. Keep it?",
1798
- inputPrompt: "Enter Nextcloud Talk API password",
1800
+ keepPrompt: t("wizard.nextcloudTalk.apiPasswordKeep"),
1801
+ inputPrompt: t("wizard.nextcloudTalk.apiPasswordInput"),
1799
1802
  inspect: ({ cfg, accountId }) => {
1800
1803
  const resolvedAccount = resolveNextcloudTalkAccount({
1801
1804
  cfg,
@@ -1813,7 +1816,7 @@ const nextcloudTalkSetupWizard = {
1813
1816
  }],
1814
1817
  textInputs: [{
1815
1818
  inputKey: "httpUrl",
1816
- message: "Enter Nextcloud instance URL (e.g., https://cloud.example.com)",
1819
+ message: t("wizard.nextcloudTalk.instanceUrlPrompt"),
1817
1820
  currentValue: ({ cfg, accountId }) => resolveNextcloudTalkAccount({
1818
1821
  cfg,
1819
1822
  accountId
@@ -1824,13 +1827,13 @@ const nextcloudTalkSetupWizard = {
1824
1827
  applySet: async (params) => setNextcloudTalkAccountConfig(params.cfg, params.accountId, { baseUrl: params.value })
1825
1828
  }, {
1826
1829
  inputKey: "userId",
1827
- message: "Nextcloud Talk API user",
1830
+ message: t("wizard.nextcloudTalk.apiUserPrompt"),
1828
1831
  currentValue: ({ cfg, accountId }) => resolveNextcloudTalkAccount({
1829
1832
  cfg,
1830
1833
  accountId
1831
1834
  }).config.apiUser?.trim() || void 0,
1832
1835
  shouldPrompt: ({ credentialValues }) => credentialValues[CONFIGURE_API_FLAG] === "1",
1833
- validate: ({ value }) => value ? void 0 : "Required",
1836
+ validate: ({ value }) => value ? void 0 : t("common.required"),
1834
1837
  applySet: async (params) => setNextcloudTalkAccountConfig(params.cfg, params.accountId, { apiUser: params.value })
1835
1838
  }],
1836
1839
  dmPolicy: nextcloudTalkDmPolicy,
@@ -1,2 +1,2 @@
1
- import { t as nextcloudTalkPlugin } from "./channel-cSkkIgTL.js";
1
+ import { t as nextcloudTalkPlugin } from "./channel-CvZn7Hj1.js";
2
2
  export { nextcloudTalkPlugin };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@openclaw/nextcloud-talk",
3
- "version": "2026.5.14-beta.1",
3
+ "version": "2026.5.16-beta.1",
4
4
  "description": "OpenClaw Nextcloud Talk channel plugin",
5
5
  "repository": {
6
6
  "type": "git",
@@ -12,7 +12,7 @@
12
12
  "openclaw": "workspace:*"
13
13
  },
14
14
  "peerDependencies": {
15
- "openclaw": ">=2026.5.14-beta.1"
15
+ "openclaw": ">=2026.5.16-beta.1"
16
16
  },
17
17
  "peerDependenciesMeta": {
18
18
  "openclaw": {
@@ -44,10 +44,10 @@
44
44
  "minHostVersion": ">=2026.4.10"
45
45
  },
46
46
  "compat": {
47
- "pluginApi": ">=2026.5.14-beta.1"
47
+ "pluginApi": ">=2026.5.16-beta.1"
48
48
  },
49
49
  "build": {
50
- "openclawVersion": "2026.5.14-beta.1"
50
+ "openclawVersion": "2026.5.16-beta.1"
51
51
  },
52
52
  "release": {
53
53
  "publishToClawHub": true,