@openclaw/nextcloud-talk 2026.8.1 → 2026.8.33

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-BRTC52in.mjs";
2
+ import "../api.js";
3
+ export { nextcloudTalkPlugin };
@@ -1,18 +1,18 @@
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
- import { n as normalizeCompatibilityConfig, t as legacyConfigRules } from "./doctor-contract-Bda_xc6V.js";
3
- import { n as collectRuntimeConfigAssignments, r as secretTargetRegistryEntries } from "./secret-contract-Bvm0PmP3.js";
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.mjs";
2
+ import { n as normalizeCompatibilityConfig, t as legacyConfigRules } from "./doctor-contract-Bda_xc6V.mjs";
3
+ import { n as collectRuntimeConfigAssignments, r as secretTargetRegistryEntries } from "./secret-contract-Bvm0PmP3.mjs";
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
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
- import { createChannelApprovalAuth } from "openclaw/plugin-sdk/approval-auth-runtime";
11
- import { normalizeLowercaseStringOrEmpty, normalizeOptionalLowercaseString, normalizeOptionalString, normalizeStringEntries, readNonEmptyStringPreservingWhitespace } from "openclaw/plugin-sdk/string-coerce-runtime";
12
10
  import { DEFAULT_ACCOUNT_ID, hasConfiguredAccountValue, normalizeAccountId, resolveAccountWithDefaultFallback } from "openclaw/plugin-sdk/account-core";
13
11
  import { isTruthyEnvValue } from "openclaw/plugin-sdk/runtime-env";
14
12
  import { tryReadSecretFileSync } from "openclaw/plugin-sdk/secret-file-runtime";
15
- import { buildSecretInputSchema, hasConfiguredSecretInput, normalizeResolvedSecretInputString, resolveSecretInputString } from "openclaw/plugin-sdk/secret-input";
13
+ import { buildSecretInputSchema, hasConfiguredSecretInput, resolveSecretInputString } from "openclaw/plugin-sdk/secret-input";
14
+ import { normalizeLowercaseStringOrEmpty, normalizeOptionalLowercaseString, normalizeOptionalString, normalizeStringEntries, readNonEmptyStringPreservingWhitespace } from "openclaw/plugin-sdk/string-coerce-runtime";
15
+ import { createChannelApprovalAuth } from "openclaw/plugin-sdk/approval-auth-runtime";
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, readProviderTextResponse } from "openclaw/plugin-sdk/provider-http";
@@ -53,17 +53,19 @@ import { formatDocsLink as formatDocsLink$1 } from "openclaw/plugin-sdk/setup-to
53
53
  function resolveNextcloudTalkApiCredentialsResult(params) {
54
54
  const apiUser = params.apiUser?.trim();
55
55
  if (!apiUser) return { status: "missing" };
56
- const inlinePassword = normalizeResolvedSecretInputString({
56
+ const inlinePassword = resolveSecretInputString({
57
57
  value: params.apiPassword,
58
- path: "channels.nextcloud-talk.apiPassword"
58
+ path: "channels.nextcloud-talk.apiPassword",
59
+ mode: params.mode
59
60
  });
60
- if (inlinePassword) return {
61
+ if (inlinePassword.status === "available") return {
61
62
  status: "available",
62
63
  value: {
63
64
  apiUser,
64
- apiPassword: inlinePassword
65
+ apiPassword: inlinePassword.value
65
66
  }
66
67
  };
68
+ if (inlinePassword.status === "configured_unavailable") return { status: "configured_unavailable" };
67
69
  if (!params.apiPasswordFile?.trim()) return { status: "missing" };
68
70
  const result = tryReadSecretFileSync(params.apiPasswordFile, "Nextcloud Talk API password", { rejectHardlinks: false }, { configPath: params.configPath ?? "channels.nextcloud-talk.apiPasswordFile" });
69
71
  if (result.status === "available") return result.value ? {
@@ -180,15 +182,21 @@ function inspectNextcloudTalkAccount(params) {
180
182
  apiUser: account.config.apiUser,
181
183
  apiPassword: account.config.apiPassword,
182
184
  apiPasswordFile: account.config.apiPasswordFile,
183
- configPath: `channels.nextcloud-talk.accounts.${account.accountId}.apiPasswordFile`
185
+ configPath: `channels.nextcloud-talk.accounts.${account.accountId}.apiPasswordFile`,
186
+ mode: "inspect"
184
187
  });
185
- const credentialDiagnostics = [...account.credentialDiagnostics ?? [], ...apiCredentialResolution.status === "configured_unavailable" ? [apiCredentialResolution.diagnostic] : []];
188
+ const credentialDiagnostics = [...account.credentialDiagnostics ?? [], ...apiCredentialResolution.status === "configured_unavailable" && apiCredentialResolution.diagnostic ? [apiCredentialResolution.diagnostic] : []];
186
189
  return {
187
190
  ...account,
191
+ configured: isNextcloudTalkAccountConfigured(account),
192
+ mode: "webhook",
188
193
  apiCredentialStatus: apiCredentialResolution.status,
189
194
  ...credentialDiagnostics.length > 0 ? { credentialDiagnostics } : {}
190
195
  };
191
196
  }
197
+ function isNextcloudTalkAccountConfigured(account) {
198
+ return Boolean(account.tokenStatus !== "missing" && account.baseUrl?.trim());
199
+ }
192
200
  //#endregion
193
201
  //#region extensions/nextcloud-talk/src/approval-auth.ts
194
202
  function normalizeNextcloudTalkApproverId(value) {
@@ -213,7 +221,7 @@ async function releaseNextcloudTalkGuardedResponse(params) {
213
221
  async function readNextcloudTalkErrorBody(response, ...credentials) {
214
222
  try {
215
223
  let body = await readProviderTextResponse(response, "Nextcloud Talk error", {
216
- maxBytes: 8 * 1024,
224
+ maxBytes: 8192,
217
225
  chunkTimeoutMs: 1e4
218
226
  });
219
227
  for (const credential of credentials) body = body.replaceAll(credential, "***");
@@ -234,7 +242,8 @@ const BACKEND_HEADER = "x-nextcloud-talk-backend";
234
242
  function verifyNextcloudTalkSignature(params) {
235
243
  const { signature, random, body, secret } = params;
236
244
  if (!signature || !random || !secret) return false;
237
- return safeEqualSecret(signature, createHmac("sha256", secret).update(random + body).digest("hex"));
245
+ const expected = createHmac("sha256", secret).update(random + body).digest("hex");
246
+ return safeEqualSecret(signature, expected);
238
247
  }
239
248
  /**
240
249
  * Extract webhook headers from an incoming request.
@@ -384,7 +393,16 @@ const nextcloudTalkConfigAdapter = createScopedChannelConfigAdapter({
384
393
  sectionKey: "nextcloud-talk",
385
394
  listAccountIds: listNextcloudTalkAccountIds,
386
395
  resolveAccount: adaptScopedAccountAccessor(resolveNextcloudTalkAccount),
387
- inspectAccount: adaptScopedAccountAccessor(inspectNextcloudTalkAccount),
396
+ inspectAccount: (cfg, accountId) => {
397
+ const account = inspectNextcloudTalkAccount({
398
+ cfg,
399
+ accountId
400
+ });
401
+ return {
402
+ ...account,
403
+ baseUrl: account.baseUrl ? "[set]" : "[missing]"
404
+ };
405
+ },
388
406
  defaultAccountId: resolveDefaultNextcloudTalkAccountId,
389
407
  clearBaseFields: [
390
408
  "botSecret",
@@ -416,7 +434,7 @@ const NextcloudTalkRoomSchema = buildGroupEntrySchema({ allowFrom: z.array(z.str
416
434
  const NextcloudTalkNetworkSchema = z.object({
417
435
  /** Dangerous opt-in for self-hosted Nextcloud Talk on trusted private/internal hosts. */
418
436
  dangerouslyAllowPrivateNetwork: z.boolean().optional() }).strict().optional();
419
- const NextcloudTalkConfigSchema = buildMultiAccountChannelSchema(z.object({
437
+ const NextcloudTalkAccountSchemaBase = z.object({
420
438
  name: z.string().optional(),
421
439
  enabled: z.boolean().optional(),
422
440
  configWrites: z.boolean().optional(),
@@ -440,7 +458,8 @@ const NextcloudTalkConfigSchema = buildMultiAccountChannelSchema(z.object({
440
458
  /** Network policy overrides for self-hosted Nextcloud Talk on trusted private/internal hosts. */
441
459
  network: NextcloudTalkNetworkSchema,
442
460
  ...ReplyRuntimeConfigSchemaShape
443
- }).strict(), {
461
+ }).strict();
462
+ const NextcloudTalkConfigSchema = buildMultiAccountChannelSchema(NextcloudTalkAccountSchemaBase, {
444
463
  optionalAccount: true,
445
464
  refine: (value, ctx) => {
446
465
  requireChannelOpenAllowFrom({
@@ -456,7 +475,7 @@ const NextcloudTalkConfigSchema = buildMultiAccountChannelSchema(z.object({
456
475
  //#region extensions/nextcloud-talk/src/replay-migration-contract.ts
457
476
  const NEXTCLOUD_TALK_PLUGIN_ID = "nextcloud-talk";
458
477
  const NEXTCLOUD_TALK_REPLAY_DEDUPE_NAMESPACE_PREFIX = "replay-dedupe";
459
- const NEXTCLOUD_TALK_REPLAY_DEDUPE_TTL_MS = 1440 * 60 * 1e3;
478
+ const NEXTCLOUD_TALK_REPLAY_DEDUPE_TTL_MS = 864e5;
460
479
  const NEXTCLOUD_TALK_REPLAY_DEDUPE_MAX_ENTRIES = 1e4;
461
480
  //#endregion
462
481
  //#region extensions/nextcloud-talk/src/doctor.ts
@@ -536,10 +555,12 @@ function normalizeNextcloudTalkAllowlist(values) {
536
555
  return (values ?? []).map((value) => normalizeNextcloudTalkAllowEntry(String(value))).filter(Boolean);
537
556
  }
538
557
  function resolveNextcloudTalkAllowlistMatch(params) {
558
+ const allowFrom = normalizeNextcloudTalkAllowlist(params.allowFrom);
559
+ const senderId = normalizeNextcloudTalkAllowEntry(params.senderId);
539
560
  return resolveAllowlistMatchByCandidates({
540
- allowList: normalizeNextcloudTalkAllowlist(params.allowFrom),
561
+ allowList: allowFrom,
541
562
  candidates: [{
542
- value: normalizeNextcloudTalkAllowEntry(params.senderId),
563
+ value: senderId,
543
564
  source: "id"
544
565
  }]
545
566
  });
@@ -607,8 +628,8 @@ function resolveNextcloudTalkGroupRequireMention(params) {
607
628
  }
608
629
  //#endregion
609
630
  //#region extensions/nextcloud-talk/src/room-info.ts
610
- const ROOM_CACHE_TTL_MS = 300 * 1e3;
611
- const ROOM_CACHE_ERROR_TTL_MS = 30 * 1e3;
631
+ const ROOM_CACHE_TTL_MS = 3e5;
632
+ const ROOM_CACHE_ERROR_TTL_MS = 3e4;
612
633
  const ROOM_CACHE_MAX_ENTRIES = 1e3;
613
634
  const NEXTCLOUD_TALK_ROOM_INFO_TIMEOUT_MS = 3e4;
614
635
  const roomCache = /* @__PURE__ */ new Map();
@@ -670,7 +691,8 @@ async function resolveNextcloudTalkRoomKind(params) {
670
691
  runtime?.log?.(`nextcloud-talk: room lookup failed (${response.status}) token=${roomToken}`);
671
692
  return;
672
693
  }
673
- const kind = resolveRoomKindFromType(parseStrictPositiveInteger((await readProviderJsonResponse(response, "Nextcloud Talk room info failed")).ocs?.data?.type));
694
+ const payload = await readProviderJsonResponse(response, "Nextcloud Talk room info failed");
695
+ const kind = resolveRoomKindFromType(parseStrictPositiveInteger(payload.ocs?.data?.type));
674
696
  cacheRoomInfo(key, {
675
697
  fetchedAt: Date.now(),
676
698
  kind
@@ -814,8 +836,9 @@ async function sendMessageNextcloudTalk(to, text, opts) {
814
836
  body: message,
815
837
  secret
816
838
  });
839
+ const url = `${baseUrl}/ocs/v2.php/apps/spreed/api/v1/bot/${roomToken}/message`;
817
840
  const { response, release } = await fetchWithSsrFGuard({
818
- url: `${baseUrl}/ocs/v2.php/apps/spreed/api/v1/bot/${roomToken}/message`,
841
+ url,
819
842
  init: {
820
843
  method: "POST",
821
844
  headers: {
@@ -876,8 +899,9 @@ async function sendReactionNextcloudTalk(roomToken, messageId, reaction, opts) {
876
899
  body: reaction,
877
900
  secret
878
901
  });
902
+ const url = `${baseUrl}/ocs/v2.php/apps/spreed/api/v1/bot/${normalizedToken}/reaction/${messageId}`;
879
903
  const { response, release } = await fetchWithSsrFGuard({
880
- url: `${baseUrl}/ocs/v2.php/apps/spreed/api/v1/bot/${normalizedToken}/reaction/${messageId}`,
904
+ url,
881
905
  init: {
882
906
  method: "POST",
883
907
  headers: {
@@ -1289,8 +1313,8 @@ async function migrateNextcloudTalkLegacyReplayState(params) {
1289
1313
  }
1290
1314
  //#endregion
1291
1315
  //#region extensions/nextcloud-talk/src/monitor.ts
1292
- const DEFAULT_WEBHOOK_MAX_BODY_BYTES = 1024 * 1024;
1293
- const PREAUTH_WEBHOOK_MAX_BODY_BYTES = 64 * 1024;
1316
+ const DEFAULT_WEBHOOK_MAX_BODY_BYTES = 1048576;
1317
+ const PREAUTH_WEBHOOK_MAX_BODY_BYTES = 65536;
1294
1318
  const NEXTCLOUD_TALK_WEBHOOK_ACCEPTED_HEADER = "x-openclaw-delivery-accepted";
1295
1319
  const NEXTCLOUD_TALK_WEBHOOK_ACCEPTED_VALUE = "durable";
1296
1320
  const PREAUTH_WEBHOOK_BODY_TIMEOUT_MS = 5e3;
@@ -1449,8 +1473,10 @@ function createNextcloudTalkWebhookServer(opts) {
1449
1473
  });
1450
1474
  });
1451
1475
  };
1452
- if (abortSignal) if (abortSignal.aborted) stop();
1453
- else abortSignal.addEventListener("abort", () => void stop(), { once: true });
1476
+ if (abortSignal) {
1477
+ if (abortSignal.aborted) stop();
1478
+ else abortSignal.addEventListener("abort", () => void stop(), { once: true });
1479
+ }
1454
1480
  return {
1455
1481
  server,
1456
1482
  start,
@@ -1933,6 +1959,49 @@ const nextcloudTalkDmPolicy = createChannelDmPolicy({
1933
1959
  applyPatch: ({ cfg, account, patch }) => setNextcloudTalkAccountConfig(cfg, account.accountId, patch),
1934
1960
  promptAllowFrom: promptNextcloudTalkAllowFromForAccount
1935
1961
  });
1962
+ const nextcloudTalkSetupAdapter = {
1963
+ singleAccountKeysToMove: ["rooms"],
1964
+ resolveAccountId: ({ accountId }) => normalizeAccountId$1(accountId),
1965
+ prepareAccountConfigInput: ({ input }) => {
1966
+ const setupInput = input;
1967
+ return {
1968
+ ...setupInput,
1969
+ baseUrl: setupInput.baseUrl ?? readNonEmptyStringPreservingWhitespace(setupInput.url),
1970
+ secret: setupInput.secret ?? readNonEmptyStringPreservingWhitespace(setupInput.token) ?? readNonEmptyStringPreservingWhitespace(setupInput.password),
1971
+ secretFile: setupInput.secretFile ?? readNonEmptyStringPreservingWhitespace(setupInput.tokenFile)
1972
+ };
1973
+ },
1974
+ applyAccountName: ({ cfg, accountId, name }) => applyAccountNameToChannelSection({
1975
+ cfg,
1976
+ channelKey: channel$1,
1977
+ accountId,
1978
+ name
1979
+ }),
1980
+ validateInput: createSetupInputPresenceValidator({
1981
+ defaultAccountOnlyEnvError: "NEXTCLOUD_TALK_BOT_SECRET can only be used for the default account.",
1982
+ validate: ({ input }) => {
1983
+ const setupInput = input;
1984
+ if (!setupInput.useEnv && !setupInput.secret && !setupInput.secretFile) return "Nextcloud Talk requires bot secret or --secret-file (or --use-env).";
1985
+ const normalizedBaseUrl = normalizeNextcloudTalkBaseUrl(setupInput.baseUrl);
1986
+ if (!normalizedBaseUrl) return "Nextcloud Talk requires --base-url.";
1987
+ const baseUrlError = validateNextcloudTalkBaseUrl(normalizedBaseUrl);
1988
+ if (baseUrlError) return baseUrlError;
1989
+ return null;
1990
+ }
1991
+ }),
1992
+ applyAccountConfig: ({ cfg, accountId, input }) => {
1993
+ const setupInput = input;
1994
+ return setNextcloudTalkAccountConfig(applyAccountNameToChannelSection({
1995
+ cfg,
1996
+ channelKey: channel$1,
1997
+ accountId,
1998
+ name: setupInput.name
1999
+ }), accountId, {
2000
+ baseUrl: normalizeNextcloudTalkBaseUrl(setupInput.baseUrl),
2001
+ ...setupInput.useEnv ? {} : setupInput.secretFile ? { botSecretFile: setupInput.secretFile } : setupInput.secret ? { botSecret: setupInput.secret } : {}
2002
+ }, setupInput.useEnv ? ["botSecret", "botSecretFile"] : void 0);
2003
+ }
2004
+ };
1936
2005
  const nextcloudTalkSetupContract = defineChannelSetupContract({
1937
2006
  fields: {
1938
2007
  baseUrl: {
@@ -1998,49 +2067,7 @@ const nextcloudTalkSetupContract = defineChannelSetupContract({
1998
2067
  envVars: ["NEXTCLOUD_TALK_BOT_SECRET"]
1999
2068
  }
2000
2069
  },
2001
- legacyAdapter: {
2002
- singleAccountKeysToMove: ["rooms"],
2003
- resolveAccountId: ({ accountId }) => normalizeAccountId$1(accountId),
2004
- prepareAccountConfigInput: ({ input }) => {
2005
- const setupInput = input;
2006
- return {
2007
- ...setupInput,
2008
- baseUrl: setupInput.baseUrl ?? readNonEmptyStringPreservingWhitespace(setupInput.url),
2009
- secret: setupInput.secret ?? readNonEmptyStringPreservingWhitespace(setupInput.token) ?? readNonEmptyStringPreservingWhitespace(setupInput.password),
2010
- secretFile: setupInput.secretFile ?? readNonEmptyStringPreservingWhitespace(setupInput.tokenFile)
2011
- };
2012
- },
2013
- applyAccountName: ({ cfg, accountId, name }) => applyAccountNameToChannelSection({
2014
- cfg,
2015
- channelKey: channel$1,
2016
- accountId,
2017
- name
2018
- }),
2019
- validateInput: createSetupInputPresenceValidator({
2020
- defaultAccountOnlyEnvError: "NEXTCLOUD_TALK_BOT_SECRET can only be used for the default account.",
2021
- validate: ({ input }) => {
2022
- const setupInput = input;
2023
- if (!setupInput.useEnv && !setupInput.secret && !setupInput.secretFile) return "Nextcloud Talk requires bot secret or --secret-file (or --use-env).";
2024
- const normalizedBaseUrl = normalizeNextcloudTalkBaseUrl(setupInput.baseUrl);
2025
- if (!normalizedBaseUrl) return "Nextcloud Talk requires --base-url.";
2026
- const baseUrlError = validateNextcloudTalkBaseUrl(normalizedBaseUrl);
2027
- if (baseUrlError) return baseUrlError;
2028
- return null;
2029
- }
2030
- }),
2031
- applyAccountConfig: ({ cfg, accountId, input }) => {
2032
- const setupInput = input;
2033
- return setNextcloudTalkAccountConfig(applyAccountNameToChannelSection({
2034
- cfg,
2035
- channelKey: channel$1,
2036
- accountId,
2037
- name: setupInput.name
2038
- }), accountId, {
2039
- baseUrl: normalizeNextcloudTalkBaseUrl(setupInput.baseUrl),
2040
- ...setupInput.useEnv ? {} : setupInput.secretFile ? { botSecretFile: setupInput.secretFile } : setupInput.secret ? { botSecret: setupInput.secret } : {}
2041
- }, setupInput.useEnv ? ["botSecret", "botSecretFile"] : void 0);
2042
- }
2043
- }
2070
+ legacyAdapter: nextcloudTalkSetupAdapter
2044
2071
  });
2045
2072
  //#endregion
2046
2073
  //#region extensions/nextcloud-talk/src/setup-surface.ts
@@ -2225,10 +2252,10 @@ const nextcloudTalkPlugin = createChatChannelPlugin({
2225
2252
  configSchema: buildChannelConfigSchema(NextcloudTalkConfigSchema),
2226
2253
  config: {
2227
2254
  ...nextcloudTalkConfigAdapter,
2228
- isConfigured: (account) => Boolean(account.tokenStatus !== "missing" && account.baseUrl?.trim()),
2255
+ isConfigured: isNextcloudTalkAccountConfigured,
2229
2256
  describeAccount: (account) => describeWebhookAccountSnapshot({
2230
2257
  account,
2231
- configured: Boolean(account.tokenStatus !== "missing" && account.baseUrl?.trim()),
2258
+ configured: isNextcloudTalkAccountConfigured(account),
2232
2259
  extra: {
2233
2260
  secretSource: account.secretSource,
2234
2261
  tokenStatus: account.tokenStatus,
@@ -2284,7 +2311,7 @@ const nextcloudTalkPlugin = createChatChannelPlugin({
2284
2311
  accountId: account.accountId,
2285
2312
  name: account.name,
2286
2313
  enabled: account.enabled,
2287
- configured: Boolean(account.tokenStatus !== "missing" && account.baseUrl?.trim()),
2314
+ configured: isNextcloudTalkAccountConfigured(account),
2288
2315
  extra: {
2289
2316
  secretSource: account.secretSource,
2290
2317
  tokenStatus: account.tokenStatus,
@@ -0,0 +1,3 @@
1
+ import { n as collectRuntimeConfigAssignments, r as secretTargetRegistryEntries, t as channelSecrets } from "./secret-contract-Bvm0PmP3.mjs";
2
+ import "../secret-contract-api.js";
3
+ export { channelSecrets, collectRuntimeConfigAssignments, secretTargetRegistryEntries };
package/dist/api.js CHANGED
@@ -1,2 +1,2 @@
1
- import { t as nextcloudTalkPlugin } from "./channel-C7Xe0Nkb.js";
1
+ import { t as nextcloudTalkPlugin } from "./.setup/channel-BRTC52in.mjs";
2
2
  export { nextcloudTalkPlugin };
@@ -1,2 +1,2 @@
1
- import { t as nextcloudTalkPlugin } from "./channel-C7Xe0Nkb.js";
1
+ import { t as nextcloudTalkPlugin } from "./.setup/channel-BRTC52in.mjs";
2
2
  export { nextcloudTalkPlugin };
@@ -1,2 +1,2 @@
1
- import { n as normalizeCompatibilityConfig, t as legacyConfigRules } from "./doctor-contract-Bda_xc6V.js";
1
+ import { n as normalizeCompatibilityConfig, t as legacyConfigRules } from "./.setup/doctor-contract-Bda_xc6V.mjs";
2
2
  export { legacyConfigRules, normalizeCompatibilityConfig };
@@ -1,2 +1,2 @@
1
- import { a as fetchWithSsrFGuard, c as resolveDefaultGroupPolicy, d as setNextcloudTalkRuntime, i as deliverFormattedTextWithAttachments, l as warnMissingProviderGroupPolicyFallbackOnce, n as createChannelMessageReplyPipeline, o as logInboundDrop, r as createChannelPairingController, s as resolveAllowlistProviderRuntimeGroupPolicy, t as GROUP_POLICY_BLOCKED_LABEL } from "./runtime-api-BKsxTw4J.js";
1
+ import { a as fetchWithSsrFGuard, c as resolveDefaultGroupPolicy, d as setNextcloudTalkRuntime, i as deliverFormattedTextWithAttachments, l as warnMissingProviderGroupPolicyFallbackOnce, n as createChannelMessageReplyPipeline, o as logInboundDrop, r as createChannelPairingController, s as resolveAllowlistProviderRuntimeGroupPolicy, t as GROUP_POLICY_BLOCKED_LABEL } from "./.setup/runtime-api-BKsxTw4J.mjs";
2
2
  export { GROUP_POLICY_BLOCKED_LABEL, createChannelMessageReplyPipeline, createChannelPairingController, deliverFormattedTextWithAttachments, fetchWithSsrFGuard, logInboundDrop, resolveAllowlistProviderRuntimeGroupPolicy, resolveDefaultGroupPolicy, setNextcloudTalkRuntime, warnMissingProviderGroupPolicyFallbackOnce };
@@ -1,2 +1,2 @@
1
- import { n as collectRuntimeConfigAssignments, r as secretTargetRegistryEntries, t as channelSecrets } from "./secret-contract-Bvm0PmP3.js";
1
+ import { n as collectRuntimeConfigAssignments, r as secretTargetRegistryEntries, t as channelSecrets } from "./.setup/secret-contract-Bvm0PmP3.mjs";
2
2
  export { channelSecrets, collectRuntimeConfigAssignments, secretTargetRegistryEntries };
@@ -1,13 +1,14 @@
1
1
  import { defineBundledChannelSetupEntry } from "openclaw/plugin-sdk/channel-entry-contract";
2
+ import { fileURLToPath } from "node:url";
2
3
  //#region extensions/nextcloud-talk/setup-entry.ts
3
4
  var setup_entry_default = defineBundledChannelSetupEntry({
4
5
  importMetaUrl: import.meta.url,
5
6
  plugin: {
6
- specifier: "./api.js",
7
+ specifier: fileURLToPath(new URL(".setup/api-BWIFedq4.mjs", import.meta.url).href),
7
8
  exportName: "nextcloudTalkPlugin"
8
9
  },
9
10
  secrets: {
10
- specifier: "./secret-contract-api.js",
11
+ specifier: fileURLToPath(new URL(".setup/secret-contract-api-DtjjYcg2.mjs", import.meta.url).href),
11
12
  exportName: "channelSecrets"
12
13
  }
13
14
  });
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@openclaw/nextcloud-talk",
3
- "version": "2026.8.1",
3
+ "version": "2026.8.33",
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"
11
+ "openclaw": ">=2026.8.33"
12
12
  },
13
13
  "peerDependenciesMeta": {
14
14
  "openclaw": {
@@ -129,10 +129,10 @@
129
129
  "minHostVersion": ">=2026.4.10"
130
130
  },
131
131
  "compat": {
132
- "pluginApi": ">=2026.8.1"
132
+ "pluginApi": ">=2026.8.33"
133
133
  },
134
134
  "build": {
135
- "openclawVersion": "2026.8.1"
135
+ "openclawVersion": "2026.8.33"
136
136
  },
137
137
  "release": {
138
138
  "publishToClawHub": true,