@openclaw/nextcloud-talk 2026.10.10 → 2026.11.2

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.
@@ -0,0 +1,3 @@
1
+ import { t as nextcloudTalkPlugin } from "./channel-AgVv-cc1.mjs";
2
+ import "../api.js";
3
+ export { nextcloudTalkPlugin };
@@ -1,7 +1,7 @@
1
- import { a as __exportAll, n as legacyConfigRules, o as __reExport, r as normalizeCompatibilityConfig } from "./doctor-contract-CkWQa5uZ.mjs";
1
+ import { a as __exportAll, n as legacyConfigRules, o as __reExport, r as normalizeCompatibilityConfig } from "./doctor-contract-DwH950tH.mjs";
2
2
  import { listNextcloudTalkAccountIds, mergeNextcloudTalkAccountConfig, resolveDefaultNextcloudTalkAccountId } from "../configured-state.js";
3
- import { a as logInboundDrop, c as warnMissingProviderGroupPolicyFallbackOnce, i as fetchWithSsrFGuard, l as getNextcloudTalkRuntime, n as createChannelPairingController, o as resolveAllowlistProviderRuntimeGroupPolicy, r as deliverFormattedTextWithAttachments, s as resolveDefaultGroupPolicy, t as GROUP_POLICY_BLOCKED_LABEL, u as getOptionalNextcloudTalkRuntime } from "./runtime-api-DSz4xBAm.mjs";
4
- import { n as collectRuntimeConfigAssignments, r as secretTargetRegistryEntries } from "./secret-contract-BHyPrmz3.mjs";
3
+ import { a as logInboundDrop, c as warnMissingProviderGroupPolicyFallbackOnce, i as fetchWithSsrFGuard, l as getNextcloudTalkRuntime, n as createChannelPairingController, o as resolveAllowlistProviderRuntimeGroupPolicy, r as deliverFormattedTextWithAttachments, s as resolveDefaultGroupPolicy, t as GROUP_POLICY_BLOCKED_LABEL, u as getOptionalNextcloudTalkRuntime } from "./runtime-api-DVkVOUSo.mjs";
4
+ import { n as collectRuntimeConfigAssignments, r as secretTargetRegistryEntries } from "./secret-contract-Be0kL8Gz.mjs";
5
5
  import { describeWebhookAccountSnapshot } from "openclaw/plugin-sdk/account-helpers";
6
6
  import { buildChannelOutboundSessionRoute, createChatChannelPlugin } from "openclaw/plugin-sdk/channel-core";
7
7
  import { createLoggedPairingApprovalNotifier, createPairingPrefixStripper } from "openclaw/plugin-sdk/channel-pairing";
@@ -52,7 +52,7 @@ import { defineChannelSetupContract } from "openclaw/plugin-sdk/channel-setup";
52
52
  import { applyAccountNameToChannelSection, baseUrlTextInput, createPromptParsedAllowFromForAccount, createSetupTranslator, createStandardChannelSetupStatus, defineTokenCredential, formatDocsLink, patchScopedAccountConfig, setSetupChannelEnabled } from "openclaw/plugin-sdk/setup";
53
53
  import { createSetupInputPresenceValidator, createSetupTranslator as createSetupTranslator$1, mergeAllowFromEntries } from "openclaw/plugin-sdk/setup-runtime";
54
54
  import { formatDocsLink as formatDocsLink$1 } from "openclaw/plugin-sdk/setup-tools";
55
- // extensions/nextcloud-talk/src/api-credentials.ts
55
+ //#region extensions/nextcloud-talk/src/api-credentials.ts
56
56
  function resolveNextcloudTalkApiCredentialsResult(params) {
57
57
  const apiUser = params.apiUser?.trim();
58
58
  if (!apiUser) return { status: "missing" };
@@ -84,7 +84,8 @@ function resolveNextcloudTalkApiCredentials(params) {
84
84
  const result = resolveNextcloudTalkApiCredentialsResult(params);
85
85
  return result.status === "available" ? result.value : void 0;
86
86
  }
87
- // extensions/nextcloud-talk/src/accounts.ts
87
+ //#endregion
88
+ //#region extensions/nextcloud-talk/src/accounts.ts
88
89
  function resolveNextcloudTalkSecret(accountId, merged) {
89
90
  const configuredSecret = resolveSecretInputString({
90
91
  value: merged.botSecret,
@@ -177,7 +178,8 @@ function inspectNextcloudTalkAccount(params) {
177
178
  function isNextcloudTalkAccountConfigured(account) {
178
179
  return Boolean(account.tokenStatus !== "missing" && account.baseUrl?.trim());
179
180
  }
180
- // extensions/nextcloud-talk/src/approval-auth.ts
181
+ //#endregion
182
+ //#region extensions/nextcloud-talk/src/approval-auth.ts
181
183
  function normalizeNextcloudTalkApproverId(value) {
182
184
  return normalizeOptionalLowercaseString(String(value).trim().replace(/^(nextcloud-talk|nc-talk|nc):/i, ""));
183
185
  }
@@ -191,7 +193,8 @@ const nextcloudTalkApprovalAuth = createChannelApprovalAuth({
191
193
  },
192
194
  normalizeApprover: normalizeNextcloudTalkApproverId
193
195
  }).approvalAuth;
194
- // extensions/nextcloud-talk/src/guarded-response.ts
196
+ //#endregion
197
+ //#region extensions/nextcloud-talk/src/guarded-response.ts
195
198
  async function readNextcloudTalkErrorBody(response, ...credentials) {
196
199
  try {
197
200
  let body = await readProviderTextResponse(response, "Nextcloud Talk error", {
@@ -204,7 +207,8 @@ async function readNextcloudTalkErrorBody(response, ...credentials) {
204
207
  return "";
205
208
  }
206
209
  }
207
- // extensions/nextcloud-talk/src/signature.ts
210
+ //#endregion
211
+ //#region extensions/nextcloud-talk/src/signature.ts
208
212
  const SIGNATURE_HEADER = "x-nextcloud-talk-signature";
209
213
  const RANDOM_HEADER = "x-nextcloud-talk-random";
210
214
  const BACKEND_HEADER = "x-nextcloud-talk-backend";
@@ -241,7 +245,8 @@ function generateNextcloudTalkSignature(params) {
241
245
  signature: createHmac("sha256", secret).update(random + body).digest("hex")
242
246
  };
243
247
  }
244
- // extensions/nextcloud-talk/src/bot-preflight.ts
248
+ //#endregion
249
+ //#region extensions/nextcloud-talk/src/bot-preflight.ts
245
250
  const BOT_FEATURE_RESPONSE = 2;
246
251
  function normalizeUrlForMatch(value) {
247
252
  const trimmed = value?.trim() ?? "";
@@ -342,7 +347,8 @@ async function probeNextcloudTalkBotResponseFeature(params) {
342
347
  };
343
348
  }
344
349
  }
345
- // extensions/nextcloud-talk/src/channel.adapters.ts
350
+ //#endregion
351
+ //#region extensions/nextcloud-talk/src/channel.adapters.ts
346
352
  const nextcloudTalkConfigAdapter = createScopedChannelConfigAdapter({
347
353
  sectionKey: "nextcloud-talk",
348
354
  listAccountIds: listNextcloudTalkAccountIds,
@@ -382,7 +388,8 @@ const nextcloudTalkPairingTextAdapter = {
382
388
  message: "OpenClaw: your access has been approved.",
383
389
  normalizeAllowEntry: createPairingPrefixStripper(/^(nextcloud-talk|nc-talk|nc):/i, (entry) => normalizeLowercaseStringOrEmpty(entry))
384
390
  };
385
- // extensions/nextcloud-talk/src/config-schema.ts
391
+ //#endregion
392
+ //#region extensions/nextcloud-talk/src/config-schema.ts
386
393
  const NextcloudTalkRoomSchema = buildGroupEntrySchema({ allowFrom: z.array(z.string()).optional() }).omit({ toolsBySender: true });
387
394
  const NextcloudTalkNetworkSchema = z.object({
388
395
  /** Dangerous opt-in for self-hosted Nextcloud Talk on trusted private/internal hosts. */
@@ -426,7 +433,8 @@ const NextcloudTalkConfigSchema = buildMultiAccountChannelSchema(NextcloudTalkAc
426
433
  });
427
434
  }
428
435
  });
429
- // src/gateway/gateway-http-route-contracts.ts
436
+ //#endregion
437
+ //#region src/gateway/gateway-http-route-contracts.ts
430
438
  const GATEWAY_PROBE_ROUTES = /* @__PURE__ */ new Map([
431
439
  ["/health", "live"],
432
440
  ["/healthz", "live"],
@@ -442,7 +450,8 @@ function classifyGatewayProbePath(pathname) {
442
450
  }
443
451
  return "outside";
444
452
  }
445
- // packages/normalization-core/src/string-coerce.ts
453
+ //#endregion
454
+ //#region packages/normalization-core/src/string-coerce.ts
446
455
  /** Trims string input and returns null for non-strings or empty strings. */
447
456
  function normalizeNullableString(value) {
448
457
  if (typeof value !== "string") return null;
@@ -461,11 +470,13 @@ function normalizeOptionalLowercaseString$1(value) {
461
470
  function normalizeLowercaseStringOrEmpty$1(value) {
462
471
  return normalizeOptionalLowercaseString$1(value) ?? "";
463
472
  }
464
- // src/plugins/http-path-prefix.ts
473
+ //#endregion
474
+ //#region src/plugins/http-path-prefix.ts
465
475
  function prefixMatchPath(pathname, prefix) {
466
476
  return pathname === prefix || pathname.startsWith(`${prefix}/`) || pathname.startsWith(`${prefix}%`);
467
477
  }
468
- // src/gateway/security-path.ts
478
+ //#endregion
479
+ //#region src/gateway/security-path.ts
469
480
  const MAX_PATH_DECODE_PASSES = 32;
470
481
  function normalizePathSeparators(pathname) {
471
482
  const collapsed = pathname.replace(/\/{2,}/g, "/");
@@ -518,7 +529,8 @@ function canonicalizePathForSecurity(pathname) {
518
529
  };
519
530
  }
520
531
  const PROTECTED_PLUGIN_ROUTE_PREFIXES = ["/api/channels"];
521
- // src/gateway/server/plugins-http/path-context.ts
532
+ //#endregion
533
+ //#region src/gateway/server/plugins-http/path-context.ts
522
534
  function normalizeProtectedPrefix(prefix) {
523
535
  const collapsed = normalizeLowercaseStringOrEmpty$1(prefix).replace(/\/{2,}/g, "/");
524
536
  if (collapsed.length <= 1) return collapsed || "/";
@@ -544,7 +556,8 @@ function resolvePluginRoutePathContext(pathname) {
544
556
  rawNormalizedPath: canonical.rawNormalizedPath
545
557
  };
546
558
  }
547
- // \0openclaw:bundled-sdk:openclaw/plugin-sdk/gateway-config-runtime
559
+ //#endregion
560
+ //#region \0openclaw:bundled-sdk:openclaw/plugin-sdk/gateway-config-runtime
548
561
  var gateway_config_runtime_exports = /* @__PURE__ */ __exportAll({
549
562
  classifyGatewayProbePath: () => classifyGatewayProbePath,
550
563
  isProtectedPluginRoutePathFromContext: () => isProtectedPluginRoutePathFromContext,
@@ -552,7 +565,8 @@ var gateway_config_runtime_exports = /* @__PURE__ */ __exportAll({
552
565
  });
553
566
  import * as import_openclaw_plugin_sdk_gateway_config_runtime from "openclaw/plugin-sdk/gateway-config-runtime";
554
567
  __reExport(gateway_config_runtime_exports, import_openclaw_plugin_sdk_gateway_config_runtime);
555
- // extensions/nextcloud-talk/src/webhook-route.ts
568
+ //#endregion
569
+ //#region extensions/nextcloud-talk/src/webhook-route.ts
556
570
  const DEFAULT_NEXTCLOUD_TALK_WEBHOOK_PATH = "/nextcloud-talk-webhook";
557
571
  function resolveNextcloudTalkLegacyWebhook(config) {
558
572
  const listener = config.legacyWebhook;
@@ -568,7 +582,8 @@ function describeNextcloudTalkWebhookRouteConflict(path, gatewayPort) {
568
582
  if (!reason) return;
569
583
  return `Webhook path "${path}" ${reason} and cannot receive Nextcloud callbacks on the Gateway port. Set webhookPath to "${DEFAULT_NEXTCLOUD_TALK_WEBHOOK_PATH}" and update the Nextcloud bot callback and reverse-proxy upstream to Gateway port ${gatewayPort}${DEFAULT_NEXTCLOUD_TALK_WEBHOOK_PATH}.`;
570
584
  }
571
- // extensions/nextcloud-talk/src/doctor.ts
585
+ //#endregion
586
+ //#region extensions/nextcloud-talk/src/doctor.ts
572
587
  function sanitizeLegacyReplaySegment(value) {
573
588
  const trimmed = value.trim();
574
589
  if (!trimmed) return "default";
@@ -631,7 +646,8 @@ const nextcloudTalkDoctor = {
631
646
  };
632
647
  }
633
648
  };
634
- // extensions/nextcloud-talk/src/policy.ts
649
+ //#endregion
650
+ //#region extensions/nextcloud-talk/src/policy.ts
635
651
  function normalizeNextcloudTalkAllowEntry(raw) {
636
652
  return raw.trim().replace(/^(nextcloud-talk|nc-talk|nc):/i, "").toLowerCase();
637
653
  }
@@ -710,7 +726,8 @@ function resolveNextcloudTalkGroupRequireMention(params) {
710
726
  path: exactPath
711
727
  });
712
728
  }
713
- // extensions/nextcloud-talk/src/room-info.ts
729
+ //#endregion
730
+ //#region extensions/nextcloud-talk/src/room-info.ts
714
731
  const ROOM_CACHE_TTL_MS = 3e5;
715
732
  const ROOM_CACHE_ERROR_TTL_MS = 3e4;
716
733
  const ROOM_CACHE_MAX_ENTRIES = 1e3;
@@ -788,7 +805,8 @@ async function resolveNextcloudTalkRoomKind(params) {
788
805
  await release();
789
806
  }
790
807
  }
791
- // extensions/nextcloud-talk/src/normalize.ts
808
+ //#endregion
809
+ //#region extensions/nextcloud-talk/src/normalize.ts
792
810
  function stripNextcloudTalkTargetPrefix(raw) {
793
811
  return raw.trim().replace(/^(nextcloud-talk|nc-talk|nc):/i, "").trim().replace(/^room:/i, "").trim() || void 0;
794
812
  }
@@ -802,7 +820,8 @@ function looksLikeNextcloudTalkTargetId(raw) {
802
820
  if (/^(nextcloud-talk|nc-talk|nc|room):/i.test(trimmed)) return true;
803
821
  return /^[a-z0-9]{8,}$/i.test(trimmed);
804
822
  }
805
- // extensions/nextcloud-talk/src/send.ts
823
+ //#endregion
824
+ //#region extensions/nextcloud-talk/src/send.ts
806
825
  const NEXTCLOUD_TALK_ERROR_SNIPPET_MAX_CHARS = 200;
807
826
  const NEXTCLOUD_TALK_SEND_TIMEOUT_MS = 3e4;
808
827
  /** Collapses and caps an already-redacted error body for display. */
@@ -948,7 +967,8 @@ async function sendReactionNextcloudTalk(roomToken, messageId, reaction, opts) {
948
967
  await release();
949
968
  }
950
969
  }
951
- // extensions/nextcloud-talk/src/inbound.ts
970
+ //#endregion
971
+ //#region extensions/nextcloud-talk/src/inbound.ts
952
972
  const CHANNEL_ID = "nextcloud-talk";
953
973
  function hasAllowEntries(entries) {
954
974
  return normalizeNextcloudTalkAllowlist(entries).length > 0;
@@ -1312,7 +1332,8 @@ async function migrateNextcloudTalkLegacyReplayState(params) {
1312
1332
  await params.store.clear();
1313
1333
  return migrated;
1314
1334
  }
1315
- // extensions/nextcloud-talk/src/monitor.ts
1335
+ //#endregion
1336
+ //#region extensions/nextcloud-talk/src/monitor.ts
1316
1337
  const PREAUTH_WEBHOOK_MAX_BODY_BYTES = 65536;
1317
1338
  const NEXTCLOUD_TALK_WEBHOOK_ACCEPTED_HEADER = "x-openclaw-delivery-accepted";
1318
1339
  const NEXTCLOUD_TALK_WEBHOOK_ACCEPTED_VALUE = "durable";
@@ -1534,7 +1555,8 @@ function registerNextcloudTalkWebhook(target) {
1534
1555
  throw error;
1535
1556
  }
1536
1557
  }
1537
- // extensions/nextcloud-talk/src/webhook-spool.ts
1558
+ //#endregion
1559
+ //#region extensions/nextcloud-talk/src/webhook-spool.ts
1538
1560
  const NEXTCLOUD_TALK_INGRESS_POLL_INTERVAL_MS = 500;
1539
1561
  function describeIgnoredWebhookEvent(rawEvent) {
1540
1562
  const envelope = parseRawObject(rawEvent);
@@ -1691,7 +1713,8 @@ function createNextcloudTalkWebhookSpool(options) {
1691
1713
  }
1692
1714
  };
1693
1715
  }
1694
- // extensions/nextcloud-talk/src/monitor-runtime.ts
1716
+ //#endregion
1717
+ //#region extensions/nextcloud-talk/src/monitor-runtime.ts
1695
1718
  function normalizeOrigin(value) {
1696
1719
  return URL.parse(value)?.origin.toLowerCase() ?? null;
1697
1720
  }
@@ -1785,7 +1808,8 @@ async function monitorNextcloudTalkProvider(opts) {
1785
1808
  if (legacyListener) logger.info(`[nextcloud-talk:${account.accountId}] legacy webhook listener ${legacyListener.host}:${legacyListener.port} forwards to the Gateway route. After verifying the callback or proxy upstream uses the Gateway port, remove the legacyWebhook pin; use legacyWebhook: false to override an inherited endpoint.`);
1786
1809
  return { stop };
1787
1810
  }
1788
- // extensions/nextcloud-talk/src/gateway.ts
1811
+ //#endregion
1812
+ //#region extensions/nextcloud-talk/src/gateway.ts
1789
1813
  const nextcloudTalkGatewayAdapter = {
1790
1814
  startAccount: async (ctx) => {
1791
1815
  const account = ctx.account;
@@ -1831,7 +1855,8 @@ const nextcloudTalkGatewayAdapter = {
1831
1855
  };
1832
1856
  }
1833
1857
  };
1834
- // extensions/nextcloud-talk/src/message-actions.ts
1858
+ //#endregion
1859
+ //#region extensions/nextcloud-talk/src/message-actions.ts
1835
1860
  const providerId = "nextcloud-talk";
1836
1861
  function isAccountConfigured(account) {
1837
1862
  return Boolean(account.enabled && account.secret?.trim() && account.baseUrl?.trim());
@@ -1884,7 +1909,8 @@ const nextcloudTalkMessageActions = {
1884
1909
  throw new Error(`Action ${action} not supported for ${providerId}.`);
1885
1910
  }
1886
1911
  };
1887
- // extensions/nextcloud-talk/src/message-adapter.ts
1912
+ //#endregion
1913
+ //#region extensions/nextcloud-talk/src/message-adapter.ts
1888
1914
  function sendNextcloudTalkMessage(ctx, text = ctx.text) {
1889
1915
  return sendMessageNextcloudTalk(ctx.to, text, {
1890
1916
  accountId: ctx.accountId ?? void 0,
@@ -1906,7 +1932,8 @@ const nextcloudTalkMessageAdapter = defineChannelMessageAdapter({
1906
1932
  media: (ctx) => sendNextcloudTalkMessage(ctx, ctx.mediaUrl ? `${ctx.text}\n\nAttachment: ${ctx.mediaUrl}` : ctx.text)
1907
1933
  }
1908
1934
  });
1909
- // extensions/nextcloud-talk/src/session-route.ts
1935
+ //#endregion
1936
+ //#region extensions/nextcloud-talk/src/session-route.ts
1910
1937
  function resolveNextcloudTalkOutboundSessionRoute(params) {
1911
1938
  const roomId = stripNextcloudTalkTargetPrefix(params.target);
1912
1939
  if (!roomId) return null;
@@ -1925,7 +1952,8 @@ function resolveNextcloudTalkOutboundSessionRoute(params) {
1925
1952
  to: `nextcloud-talk:${roomId}`
1926
1953
  });
1927
1954
  }
1928
- // extensions/nextcloud-talk/src/setup-core.ts
1955
+ //#endregion
1956
+ //#region extensions/nextcloud-talk/src/setup-core.ts
1929
1957
  const t$1 = createSetupTranslator$1();
1930
1958
  const channel$1 = "nextcloud-talk";
1931
1959
  function normalizeNextcloudTalkBaseUrl(value) {
@@ -2086,7 +2114,8 @@ const nextcloudTalkSetupContract = defineChannelSetupContract({
2086
2114
  },
2087
2115
  legacyAdapter: nextcloudTalkSetupAdapter
2088
2116
  });
2089
- // extensions/nextcloud-talk/src/setup-surface.ts
2117
+ //#endregion
2118
+ //#region extensions/nextcloud-talk/src/setup-surface.ts
2090
2119
  const t = createSetupTranslator();
2091
2120
  const channel = "nextcloud-talk";
2092
2121
  const CONFIGURE_API_FLAG = "__nextcloudTalkConfigureApiCredentials";
@@ -2214,7 +2243,8 @@ const nextcloudTalkSetupWizard = {
2214
2243
  dmPolicy: nextcloudTalkDmPolicy,
2215
2244
  disable: (cfg) => setSetupChannelEnabled(cfg, channel, false)
2216
2245
  };
2217
- // extensions/nextcloud-talk/src/channel.ts
2246
+ //#endregion
2247
+ //#region extensions/nextcloud-talk/src/channel.ts
2218
2248
  const meta = {
2219
2249
  id: "nextcloud-talk",
2220
2250
  label: "Nextcloud Talk",
@@ -2367,4 +2397,5 @@ const nextcloudTalkPlugin = createChatChannelPlugin({
2367
2397
  }
2368
2398
  }
2369
2399
  });
2400
+ //#endregion
2370
2401
  export { nextcloudTalkPlugin as t };
@@ -1,5 +1,5 @@
1
1
  import { hasConfiguredNextcloudTalkChannelState, listNextcloudTalkAccountIds, mergeNextcloudTalkAccountConfig } from "../configured-state.js";
2
- // \0rolldown/runtime.js
2
+ //#region \0rolldown/runtime.js
3
3
  var __defProp = Object.defineProperty;
4
4
  var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
5
5
  var __getOwnPropNames = Object.getOwnPropertyNames;
@@ -24,7 +24,8 @@ var __copyProps = (to, from, except, desc) => {
24
24
  return to;
25
25
  };
26
26
  var __reExport = (target, mod, secondTarget) => (__copyProps(target, mod, "default"), secondTarget && __copyProps(secondTarget, mod, "default"));
27
- // packages/normalization-core/src/record-coerce.ts
27
+ //#endregion
28
+ //#region packages/normalization-core/src/record-coerce.ts
28
29
  /** Type guard for non-array object records at browser-safe boundaries. */
29
30
  function isRecord(value) {
30
31
  return value !== null && typeof value === "object" && !Array.isArray(value);
@@ -33,7 +34,8 @@ function isRecord(value) {
33
34
  function asNullableRecord(value) {
34
35
  return isRecord(value) ? value : null;
35
36
  }
36
- // src/config/channel-config-normalization.ts
37
+ //#endregion
38
+ //#region src/config/channel-config-normalization.ts
37
39
  /** Applies one channel-specific doctor migration to every object-shaped account. */
38
40
  function normalizeChannelAccounts(params) {
39
41
  const rawAccounts = asNullableRecord(params.entry.accounts);
@@ -109,7 +111,8 @@ function normalizeChannelConfigEntries(params) {
109
111
  changes
110
112
  };
111
113
  }
112
- // src/plugin-sdk/legacy-webhook-listener-migration.ts
114
+ //#endregion
115
+ //#region src/plugin-sdk/legacy-webhook-listener-migration.ts
113
116
  /** Preserve explicitly configured webhook listeners while moving ingress onto Gateway routes. */
114
117
  function createLegacyWebhookListenerDoctorContract(params) {
115
118
  const portKey = params.portKey ?? "webhookPort";
@@ -179,11 +182,13 @@ function createLegacyWebhookListenerDoctorContract(params) {
179
182
  }
180
183
  };
181
184
  }
182
- // \0openclaw:bundled-sdk:openclaw/plugin-sdk/runtime-doctor-migrations
185
+ //#endregion
186
+ //#region \0openclaw:bundled-sdk:openclaw/plugin-sdk/runtime-doctor-migrations
183
187
  var runtime_doctor_migrations_exports = /* @__PURE__ */ __exportAll({ createLegacyWebhookListenerDoctorContract: () => createLegacyWebhookListenerDoctorContract });
184
188
  import * as import_openclaw_plugin_sdk_runtime_doctor_migrations from "openclaw/plugin-sdk/runtime-doctor-migrations";
185
189
  __reExport(runtime_doctor_migrations_exports, import_openclaw_plugin_sdk_runtime_doctor_migrations);
186
- // extensions/nextcloud-talk/src/doctor-contract.ts
190
+ //#endregion
191
+ //#region extensions/nextcloud-talk/src/doctor-contract.ts
187
192
  const webhookContract = createLegacyWebhookListenerDoctorContract({
188
193
  channelKey: "nextcloud-talk",
189
194
  defaultHost: "0.0.0.0",
@@ -215,4 +220,5 @@ function normalizeCompatibilityConfig({ cfg }) {
215
220
  historicalWebhookAccountIds: webhook.historicalWebhookAccountIds
216
221
  };
217
222
  }
223
+ //#endregion
218
224
  export { __exportAll as a, normalizeHistoricalWebhookConfig as i, legacyConfigRules as n, __reExport as o, normalizeCompatibilityConfig as r, historicalWebhookListener as t };
@@ -4,9 +4,10 @@ import { GROUP_POLICY_BLOCKED_LABEL, resolveAllowlistProviderRuntimeGroupPolicy,
4
4
  import { deliverFormattedTextWithAttachments } from "openclaw/plugin-sdk/reply-payload";
5
5
  import { fetchWithSsrFGuard } from "openclaw/plugin-sdk/ssrf-runtime";
6
6
  import { createPluginRuntimeStore } from "openclaw/plugin-sdk/runtime-store";
7
- // extensions/nextcloud-talk/src/runtime.ts
7
+ //#region extensions/nextcloud-talk/src/runtime.ts
8
8
  const { setRuntime: setNextcloudTalkRuntime, getRuntime: getNextcloudTalkRuntime, tryGetRuntime: getOptionalNextcloudTalkRuntime } = createPluginRuntimeStore({
9
9
  pluginId: "nextcloud-talk",
10
10
  errorMessage: "Nextcloud Talk runtime not initialized"
11
11
  });
12
+ //#endregion
12
13
  export { logInboundDrop as a, warnMissingProviderGroupPolicyFallbackOnce as c, setNextcloudTalkRuntime as d, fetchWithSsrFGuard as i, getNextcloudTalkRuntime as l, createChannelPairingController as n, resolveAllowlistProviderRuntimeGroupPolicy as o, deliverFormattedTextWithAttachments as r, resolveDefaultGroupPolicy as s, GROUP_POLICY_BLOCKED_LABEL as t, getOptionalNextcloudTalkRuntime as u };
@@ -0,0 +1,20 @@
1
+ import { hasConfiguredNextcloudAccount } from "../configured-state.js";
2
+ import { collectSimpleChannelFieldAssignments, createChannelSecretContract } from "openclaw/plugin-sdk/channel-secret-basic-runtime";
3
+ //#region extensions/nextcloud-talk/src/secret-contract.ts
4
+ const channelSecrets = createChannelSecretContract({
5
+ channelKey: "nextcloud-talk",
6
+ account: ["apiPassword", "botSecret"],
7
+ channel: ["apiPassword", "botSecret"],
8
+ hasImplicitDefaultAccount: ({ context }) => hasConfiguredNextcloudAccount(context.sourceConfig.channels?.["nextcloud-talk"], context.env),
9
+ collect(params) {
10
+ for (const field of ["botSecret", "apiPassword"]) collectSimpleChannelFieldAssignments({
11
+ ...params,
12
+ field,
13
+ topInactiveReason: `no enabled Nextcloud Talk surface inherits this top-level ${field}.`,
14
+ accountInactiveReason: "Nextcloud Talk account is disabled."
15
+ });
16
+ }
17
+ });
18
+ const { secretTargetRegistryEntries, collectRuntimeConfigAssignments } = channelSecrets;
19
+ //#endregion
20
+ export { collectRuntimeConfigAssignments as n, secretTargetRegistryEntries as r, channelSecrets as t };
@@ -0,0 +1,3 @@
1
+ import { n as collectRuntimeConfigAssignments, r as secretTargetRegistryEntries, t as channelSecrets } from "./secret-contract-Be0kL8Gz.mjs";
2
+ import "../secret-contract-api.js";
3
+ export { channelSecrets, collectRuntimeConfigAssignments, secretTargetRegistryEntries };
package/dist/api.js CHANGED
@@ -1 +1,2 @@
1
- export { t as nextcloudTalkPlugin } from "./.setup/channel-D9tHRtkv.mjs";
1
+ import { t as nextcloudTalkPlugin } from "./.setup/channel-AgVv-cc1.mjs";
2
+ export { nextcloudTalkPlugin };
@@ -1 +1,2 @@
1
- export { t as nextcloudTalkPlugin } from "./.setup/channel-D9tHRtkv.mjs";
1
+ import { t as nextcloudTalkPlugin } from "./.setup/channel-AgVv-cc1.mjs";
2
+ export { nextcloudTalkPlugin };
@@ -1,12 +1,9 @@
1
1
  import { DEFAULT_ACCOUNT_ID, createAccountListHelpers, hasConfiguredAccountValue, normalizeAccountId } from "openclaw/plugin-sdk/account-core";
2
- // extensions/nextcloud-talk/configured-state.ts
2
+ //#region extensions/nextcloud-talk/configured-state.ts
3
3
  const { listAccountIds: listNextcloudTalkAccountIds, resolveDefaultAccountId: resolveDefaultNextcloudTalkAccountId, resolveAccountConfig: mergeNextcloudTalkAccountConfig } = createAccountListHelpers("nextcloud-talk", {
4
4
  normalizeAccountId,
5
5
  omitKeys: ["defaultAccount"],
6
- hasImplicitDefaultAccount: (cfg) => {
7
- const channel = cfg.channels?.["nextcloud-talk"];
8
- return Boolean(channel?.baseUrl?.trim() && (hasConfiguredAccountValue(channel.botSecret) || channel.botSecretFile?.trim() || process.env.NEXTCLOUD_TALK_BOT_SECRET?.trim()));
9
- }
6
+ hasImplicitDefaultAccount: (cfg) => hasConfiguredNextcloudAccount(cfg.channels?.["nextcloud-talk"], process.env)
10
7
  });
11
8
  function hasConfiguredNextcloudAccount(account, env) {
12
9
  return Boolean(account?.baseUrl?.trim() && (hasConfiguredAccountValue(account.botSecret) || hasConfiguredAccountValue(account.botSecretFile) || hasConfiguredAccountValue(env.NEXTCLOUD_TALK_BOT_SECRET)));
@@ -20,4 +17,5 @@ function hasConfiguredNextcloudTalkChannelState(params) {
20
17
  }
21
18
  return Object.entries(channel?.accounts ?? {}).some(([accountId, account]) => accountId !== DEFAULT_ACCOUNT_ID && account.enabled !== false && hasConfiguredNextcloudAccount(mergeNextcloudTalkAccountConfig(params.cfg, accountId), {}));
22
19
  }
23
- export { hasConfiguredNextcloudTalkChannelState, listNextcloudTalkAccountIds, mergeNextcloudTalkAccountConfig, resolveDefaultNextcloudTalkAccountId };
20
+ //#endregion
21
+ export { hasConfiguredNextcloudAccount, hasConfiguredNextcloudTalkChannelState, listNextcloudTalkAccountIds, mergeNextcloudTalkAccountConfig, resolveDefaultNextcloudTalkAccountId };
@@ -1 +1,2 @@
1
- export { t as historicalWebhookListener, n as legacyConfigRules, r as normalizeCompatibilityConfig, i as normalizeHistoricalWebhookConfig } from "./.setup/doctor-contract-CkWQa5uZ.mjs";
1
+ import { i as normalizeHistoricalWebhookConfig, n as legacyConfigRules, r as normalizeCompatibilityConfig, t as historicalWebhookListener } from "./.setup/doctor-contract-DwH950tH.mjs";
2
+ export { historicalWebhookListener, legacyConfigRules, normalizeCompatibilityConfig, normalizeHistoricalWebhookConfig };
package/dist/index.js CHANGED
@@ -1,5 +1,5 @@
1
1
  import { defineBundledChannelEntry } from "openclaw/plugin-sdk/channel-entry-contract";
2
- // extensions/nextcloud-talk/index.ts
2
+ //#region extensions/nextcloud-talk/index.ts
3
3
  var nextcloud_talk_default = defineBundledChannelEntry({
4
4
  id: "nextcloud-talk",
5
5
  name: "Nextcloud Talk",
@@ -18,4 +18,5 @@ var nextcloud_talk_default = defineBundledChannelEntry({
18
18
  exportName: "setNextcloudTalkRuntime"
19
19
  }
20
20
  });
21
+ //#endregion
21
22
  export { nextcloud_talk_default as default };
@@ -1 +1,2 @@
1
- export { t as GROUP_POLICY_BLOCKED_LABEL, n as createChannelPairingController, r as deliverFormattedTextWithAttachments, i as fetchWithSsrFGuard, a as logInboundDrop, o as resolveAllowlistProviderRuntimeGroupPolicy, s as resolveDefaultGroupPolicy, d as setNextcloudTalkRuntime, c as warnMissingProviderGroupPolicyFallbackOnce } from "./.setup/runtime-api-DSz4xBAm.mjs";
1
+ import { a as logInboundDrop, c as warnMissingProviderGroupPolicyFallbackOnce, d as setNextcloudTalkRuntime, i as fetchWithSsrFGuard, n as createChannelPairingController, o as resolveAllowlistProviderRuntimeGroupPolicy, r as deliverFormattedTextWithAttachments, s as resolveDefaultGroupPolicy, t as GROUP_POLICY_BLOCKED_LABEL } from "./.setup/runtime-api-DVkVOUSo.mjs";
2
+ export { GROUP_POLICY_BLOCKED_LABEL, createChannelPairingController, deliverFormattedTextWithAttachments, fetchWithSsrFGuard, logInboundDrop, resolveAllowlistProviderRuntimeGroupPolicy, resolveDefaultGroupPolicy, setNextcloudTalkRuntime, warnMissingProviderGroupPolicyFallbackOnce };
@@ -1 +1,2 @@
1
- export { t as channelSecrets, n as collectRuntimeConfigAssignments, r as secretTargetRegistryEntries } from "./.setup/secret-contract-BHyPrmz3.mjs";
1
+ import { n as collectRuntimeConfigAssignments, r as secretTargetRegistryEntries, t as channelSecrets } from "./.setup/secret-contract-Be0kL8Gz.mjs";
2
+ export { channelSecrets, collectRuntimeConfigAssignments, secretTargetRegistryEntries };
@@ -1,15 +1,16 @@
1
1
  import { defineBundledChannelSetupEntry } from "openclaw/plugin-sdk/channel-entry-contract";
2
2
  import { fileURLToPath } from "node:url";
3
- // extensions/nextcloud-talk/setup-entry.ts
3
+ //#region extensions/nextcloud-talk/setup-entry.ts
4
4
  var setup_entry_default = defineBundledChannelSetupEntry({
5
5
  importMetaUrl: import.meta.url,
6
6
  plugin: {
7
- specifier: fileURLToPath(new URL(".setup/api-BgnUYkO3.mjs", import.meta.url).href),
7
+ specifier: fileURLToPath(new URL(".setup/api-BF9Pu6Yv.mjs", import.meta.url).href),
8
8
  exportName: "nextcloudTalkPlugin"
9
9
  },
10
10
  secrets: {
11
- specifier: fileURLToPath(new URL(".setup/secret-contract-api-CKCDZ3m8.mjs", import.meta.url).href),
11
+ specifier: fileURLToPath(new URL(".setup/secret-contract-api-Crkkicb7.mjs", import.meta.url).href),
12
12
  exportName: "channelSecrets"
13
13
  }
14
14
  });
15
+ //#endregion
15
16
  export { setup_entry_default as default };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@openclaw/nextcloud-talk",
3
- "version": "2026.10.10",
3
+ "version": "2026.11.2",
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.10.10"
11
+ "openclaw": ">=2026.11.2"
12
12
  },
13
13
  "peerDependenciesMeta": {
14
14
  "openclaw": {
@@ -130,10 +130,10 @@
130
130
  "minHostVersion": ">=2026.4.10"
131
131
  },
132
132
  "compat": {
133
- "pluginApi": ">=2026.10.10"
133
+ "pluginApi": ">=2026.11.2"
134
134
  },
135
135
  "build": {
136
- "openclawVersion": "2026.10.10"
136
+ "openclawVersion": "2026.11.2"
137
137
  },
138
138
  "release": {
139
139
  "publishToClawHub": true,
@@ -1,2 +0,0 @@
1
- export { t as nextcloudTalkPlugin } from "./channel-D9tHRtkv.mjs";
2
- import "../api.js";
@@ -1,14 +0,0 @@
1
- import { createSimpleChannelSecretContract } from "openclaw/plugin-sdk/channel-secret-basic-runtime";
2
- // extensions/nextcloud-talk/src/secret-contract.ts
3
- const channelSecrets = createSimpleChannelSecretContract({
4
- channelKey: "nextcloud-talk",
5
- label: "Nextcloud Talk",
6
- accountFields: ["apiPassword", "botSecret"],
7
- channelFields: ["apiPassword", "botSecret"],
8
- mode: {
9
- kind: "surface-inheritance",
10
- collectionFields: ["botSecret", "apiPassword"]
11
- }
12
- });
13
- const { secretTargetRegistryEntries, collectRuntimeConfigAssignments } = channelSecrets;
14
- export { collectRuntimeConfigAssignments as n, secretTargetRegistryEntries as r, channelSecrets as t };
@@ -1,2 +0,0 @@
1
- export { t as channelSecrets, n as collectRuntimeConfigAssignments, r as secretTargetRegistryEntries } from "./secret-contract-BHyPrmz3.mjs";
2
- import "../secret-contract-api.js";
@@ -1 +0,0 @@
1
- {"version":3,"entries":[{"output":"api.js","source":"extensions/nextcloud-talk/api.ts"},{"output":"channel-plugin-api.js","source":"extensions/nextcloud-talk/channel-plugin-api.ts"},{"output":"configured-state.js","source":"extensions/nextcloud-talk/configured-state.ts"},{"output":"doctor-contract-api.js","source":"extensions/nextcloud-talk/doctor-contract-api.ts"},{"output":"index.js","source":"extensions/nextcloud-talk/index.ts"},{"output":"runtime-api.js","source":"extensions/nextcloud-talk/runtime-api.ts"},{"output":"secret-contract-api.js","source":"extensions/nextcloud-talk/secret-contract-api.ts"},{"output":"setup-entry.js","source":"extensions/nextcloud-talk/setup-entry.ts"}],"chunks":[{"output":".setup/api-BgnUYkO3.mjs","sha256":"945cc048854654a4ada1853cc1aed051db4abccd2daabf3096f074f9e81fd970","facadeSource":"extensions/nextcloud-talk/api.ts","sources":[]},{"output":".setup/channel-D9tHRtkv.mjs","sha256":"899d4001d61c145d8eb353d4b5e91260c9c3ef8f1f4cc885c76486dd6e73d5d0","facadeSource":null,"sources":["extensions/nextcloud-talk/src/accounts.ts","extensions/nextcloud-talk/src/api-credentials.ts","extensions/nextcloud-talk/src/approval-auth.ts","extensions/nextcloud-talk/src/bot-preflight.ts","extensions/nextcloud-talk/src/channel.adapters.ts","extensions/nextcloud-talk/src/channel.ts","extensions/nextcloud-talk/src/config-schema.ts","extensions/nextcloud-talk/src/doctor.ts","extensions/nextcloud-talk/src/gateway.ts","extensions/nextcloud-talk/src/guarded-response.ts","extensions/nextcloud-talk/src/inbound.ts","extensions/nextcloud-talk/src/message-actions.ts","extensions/nextcloud-talk/src/message-adapter.ts","extensions/nextcloud-talk/src/monitor-runtime.ts","extensions/nextcloud-talk/src/monitor.ts","extensions/nextcloud-talk/src/normalize.ts","extensions/nextcloud-talk/src/policy.ts","extensions/nextcloud-talk/src/replay-migration-contract.ts","extensions/nextcloud-talk/src/room-info.ts","extensions/nextcloud-talk/src/send.ts","extensions/nextcloud-talk/src/session-route.ts","extensions/nextcloud-talk/src/setup-core.ts","extensions/nextcloud-talk/src/setup-surface.ts","extensions/nextcloud-talk/src/signature.ts","extensions/nextcloud-talk/src/webhook-route.ts","extensions/nextcloud-talk/src/webhook-spool-state.ts","extensions/nextcloud-talk/src/webhook-spool.ts","packages/normalization-core/src/string-coerce.ts","src/gateway/gateway-http-route-contracts.ts","src/gateway/security-path.ts","src/gateway/server/plugins-http/path-context.ts","src/plugins/http-path-prefix.ts"]},{"output":".setup/doctor-contract-CkWQa5uZ.mjs","sha256":"b580887eb445ab10c67ee1a057982cd3be79d68e2c3440b3f2a46f2a8852c55b","facadeSource":null,"sources":["extensions/nextcloud-talk/src/doctor-contract.ts","packages/normalization-core/src/record-coerce.ts","src/config/channel-config-normalization.ts","src/plugin-sdk/legacy-webhook-listener-migration.ts"]},{"output":".setup/runtime-api-DSz4xBAm.mjs","sha256":"79e7b7e7515c5d1f25e7b68e5414e33205303525bab418b7c6dc5e213fd0720c","facadeSource":null,"sources":["extensions/nextcloud-talk/src/runtime.ts"]},{"output":".setup/secret-contract-api-CKCDZ3m8.mjs","sha256":"933a73cbc5f8e153d60c80ea144877ff4103c0c6b5f4d2fb06597a1cb8714297","facadeSource":"extensions/nextcloud-talk/secret-contract-api.ts","sources":[]},{"output":".setup/secret-contract-BHyPrmz3.mjs","sha256":"5f6db1b8c1dca4ba0353e9ab2c801f210de8e341d9d4b766f0dfda338024bd71","facadeSource":null,"sources":["extensions/nextcloud-talk/src/secret-contract.ts"]},{"output":"api.js","sha256":"62e2b17453728f9567dc0394c6ae4b5bba68a906a7f4f63071ad317d2c9d8c5c","facadeSource":"extensions/nextcloud-talk/api.ts","sources":[]},{"output":"channel-plugin-api.js","sha256":"62e2b17453728f9567dc0394c6ae4b5bba68a906a7f4f63071ad317d2c9d8c5c","facadeSource":"extensions/nextcloud-talk/channel-plugin-api.ts","sources":[]},{"output":"configured-state.js","sha256":"6b5a8e74636ef9d9248d993b87f8fc2086b5407fb6bd94e02be183293db99a2d","facadeSource":"extensions/nextcloud-talk/configured-state.ts","sources":["extensions/nextcloud-talk/configured-state.ts"]},{"output":"doctor-contract-api.js","sha256":"71237fb5c510be1302851b9fb7b264dd4e0d0095be206e50ffce4b5890ace54f","facadeSource":"extensions/nextcloud-talk/doctor-contract-api.ts","sources":[]},{"output":"index.js","sha256":"16bcc875626f7dd3bc4c1195210f856deaa9c3757abe5cea2a1d90cb2877cd22","facadeSource":"extensions/nextcloud-talk/index.ts","sources":["extensions/nextcloud-talk/index.ts"]},{"output":"runtime-api.js","sha256":"9dc767e1c55c58a1e7abbefa444b966bd60321a9bd0d23a8707d49dbdd847aee","facadeSource":"extensions/nextcloud-talk/runtime-api.ts","sources":[]},{"output":"secret-contract-api.js","sha256":"79a0a9fc59d00a3c7d8a9ccdd12ae4d7679ef97821b50bd5e40cbdb0de7a814a","facadeSource":"extensions/nextcloud-talk/secret-contract-api.ts","sources":[]},{"output":"setup-entry.js","sha256":"e8dae8c12575ca86353d6476dd9a685d4befa32fe948d12a69a89f970d1329d8","facadeSource":"extensions/nextcloud-talk/setup-entry.ts","sources":["extensions/nextcloud-talk/setup-entry.ts"]}],"unrenderedSources":["extensions/nextcloud-talk/api.ts","extensions/nextcloud-talk/channel-plugin-api.ts","extensions/nextcloud-talk/config-doctor-api.ts","extensions/nextcloud-talk/doctor-contract-api.ts","extensions/nextcloud-talk/runtime-api.ts","extensions/nextcloud-talk/secret-contract-api.ts","extensions/nextcloud-talk/src/channel-api.ts","extensions/nextcloud-talk/src/send.runtime.ts"]}