@openclaw/nextcloud-talk 2026.7.2-beta.4 → 2026.7.2-beta.5
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-D6MTjGj3.js} +21 -103
- 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-D6MTjGj3.js";
|
|
2
2
|
export { nextcloudTalkPlugin };
|
|
@@ -1,15 +1,15 @@
|
|
|
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
13
|
import { tryReadSecretFileSync } from "openclaw/plugin-sdk/secret-file-runtime";
|
|
14
14
|
import { buildSecretInputSchema, hasConfiguredSecretInput, normalizeResolvedSecretInputString } from "openclaw/plugin-sdk/secret-input";
|
|
15
15
|
import { formatErrorMessage } from "openclaw/plugin-sdk/error-runtime";
|
|
@@ -41,6 +41,7 @@ import { createServer } from "node:http";
|
|
|
41
41
|
import { WEBHOOK_RATE_LIMIT_DEFAULTS, createAuthRateLimiter, isRequestBodyLimitError, readRequestBodyWithLimit, requestBodyErrorToText } from "openclaw/plugin-sdk/webhook-ingress";
|
|
42
42
|
import { jsonResult, readStringParam, resolveReactionMessageId } from "openclaw/plugin-sdk/channel-actions";
|
|
43
43
|
import { DEFAULT_ACCOUNT_ID as DEFAULT_ACCOUNT_ID$1, buildOutboundBaseSessionKey, normalizeAccountId as normalizeAccountId$1 } from "openclaw/plugin-sdk/routing";
|
|
44
|
+
import { createChannelDmPolicy } from "openclaw/plugin-sdk/channel-dm-policy";
|
|
44
45
|
import { defineChannelSetupContract } from "openclaw/plugin-sdk/channel-setup";
|
|
45
46
|
import { applyAccountNameToChannelSection, baseUrlTextInput, createSetupTranslator, createStandardChannelSetupStatus, defineTokenCredential, formatDocsLink, patchScopedAccountConfig, setSetupChannelEnabled } from "openclaw/plugin-sdk/setup";
|
|
46
47
|
import { createSetupInputPresenceValidator, createSetupTranslator as createSetupTranslator$1, mergeAllowFromEntries, promptParsedAllowFromForAccount, resolveSetupAccountId } from "openclaw/plugin-sdk/setup-runtime";
|
|
@@ -84,8 +85,9 @@ function isTruthyEnvValue(value) {
|
|
|
84
85
|
const debugAccounts = (...args) => {
|
|
85
86
|
if (isTruthyEnvValue(process.env.OPENCLAW_DEBUG_NEXTCLOUD_TALK_ACCOUNTS)) console.warn("[nextcloud-talk:accounts]", ...args);
|
|
86
87
|
};
|
|
87
|
-
const { listAccountIds: listNextcloudTalkAccountIdsInternal, resolveDefaultAccountId: resolveDefaultNextcloudTalkAccountId } = createAccountListHelpers("nextcloud-talk", {
|
|
88
|
+
const { listAccountIds: listNextcloudTalkAccountIdsInternal, resolveDefaultAccountId: resolveDefaultNextcloudTalkAccountId, resolveAccountConfig: mergeNextcloudTalkAccountConfig } = createAccountListHelpers("nextcloud-talk", {
|
|
88
89
|
normalizeAccountId,
|
|
90
|
+
omitKeys: ["defaultAccount"],
|
|
89
91
|
hasImplicitDefaultAccount: (cfg) => {
|
|
90
92
|
const channel = cfg.channels?.["nextcloud-talk"];
|
|
91
93
|
return Boolean(channel?.baseUrl?.trim() && (hasConfiguredAccountValue(channel.botSecret) || channel.botSecretFile?.trim() || process.env.NEXTCLOUD_TALK_BOT_SECRET?.trim()));
|
|
@@ -96,15 +98,6 @@ function listNextcloudTalkAccountIds(cfg) {
|
|
|
96
98
|
debugAccounts("listNextcloudTalkAccountIds", ids);
|
|
97
99
|
return ids;
|
|
98
100
|
}
|
|
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
101
|
function resolveNextcloudTalkSecret(cfg, opts) {
|
|
109
102
|
const resolvedAccountId = opts.accountId ?? resolveDefaultNextcloudTalkAccountId(cfg);
|
|
110
103
|
const merged = mergeNextcloudTalkAccountConfig(cfg, resolvedAccountId);
|
|
@@ -706,33 +699,14 @@ function looksLikeNextcloudTalkTargetId(raw) {
|
|
|
706
699
|
const NEXTCLOUD_TALK_ERROR_SNIPPET_MAX_BYTES = 8 * 1024;
|
|
707
700
|
const NEXTCLOUD_TALK_ERROR_SNIPPET_MAX_CHARS = 200;
|
|
708
701
|
const NEXTCLOUD_TALK_SEND_TIMEOUT_MS = 3e4;
|
|
709
|
-
const NEXTCLOUD_TALK_FORMAT_PROFILE = {
|
|
702
|
+
const NEXTCLOUD_TALK_FORMAT_PROFILE = FormatCapabilityProfile.define({
|
|
710
703
|
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
704
|
chunk: {
|
|
731
705
|
limit: 4e3,
|
|
732
706
|
unit: "chars",
|
|
733
707
|
hardCap: 32e3
|
|
734
708
|
}
|
|
735
|
-
};
|
|
709
|
+
});
|
|
736
710
|
function renderNextcloudTalkMarkdown(markdown) {
|
|
737
711
|
return renderMarkdownWithMarkers({
|
|
738
712
|
text: markdown,
|
|
@@ -1892,9 +1866,6 @@ const channel$1 = "nextcloud-talk";
|
|
|
1892
1866
|
function readOptionalString(value) {
|
|
1893
1867
|
return typeof value === "string" && value.length > 0 ? value : void 0;
|
|
1894
1868
|
}
|
|
1895
|
-
function addWildcardAllowFrom(allowFrom) {
|
|
1896
|
-
return mergeAllowFromEntries(allowFrom, ["*"]);
|
|
1897
|
-
}
|
|
1898
1869
|
function normalizeNextcloudTalkBaseUrl(value) {
|
|
1899
1870
|
return value?.trim().replace(/\/+$/, "") ?? "";
|
|
1900
1871
|
}
|
|
@@ -1902,46 +1873,15 @@ function validateNextcloudTalkBaseUrl(value) {
|
|
|
1902
1873
|
if (!value) return "Required";
|
|
1903
1874
|
if (!value.startsWith("http://") && !value.startsWith("https://")) return "URL must start with http:// or https://";
|
|
1904
1875
|
}
|
|
1905
|
-
function setNextcloudTalkAccountConfig(cfg, accountId, updates) {
|
|
1876
|
+
function setNextcloudTalkAccountConfig(cfg, accountId, updates, clearFields) {
|
|
1906
1877
|
return patchScopedAccountConfig({
|
|
1907
1878
|
cfg,
|
|
1908
1879
|
channelKey: channel$1,
|
|
1909
1880
|
accountId,
|
|
1910
|
-
patch: updates
|
|
1881
|
+
patch: updates,
|
|
1882
|
+
...clearFields ? { clearFields } : {}
|
|
1911
1883
|
});
|
|
1912
1884
|
}
|
|
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
1885
|
async function promptNextcloudTalkAllowFrom(params) {
|
|
1946
1886
|
return await promptParsedAllowFromForAccount({
|
|
1947
1887
|
cfg: params.cfg,
|
|
@@ -1980,35 +1920,16 @@ async function promptNextcloudTalkAllowFromForAccount(params) {
|
|
|
1980
1920
|
accountId
|
|
1981
1921
|
});
|
|
1982
1922
|
}
|
|
1983
|
-
const nextcloudTalkDmPolicy = {
|
|
1923
|
+
const nextcloudTalkDmPolicy = createChannelDmPolicy({
|
|
1984
1924
|
label: "Nextcloud Talk",
|
|
1985
1925
|
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({
|
|
1926
|
+
resolveAccount: (cfg, accountId) => resolveNextcloudTalkAccount({
|
|
1996
1927
|
cfg,
|
|
1997
1928
|
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
|
-
},
|
|
1929
|
+
}),
|
|
1930
|
+
applyPatch: ({ cfg, account, patch }) => setNextcloudTalkAccountConfig(cfg, account.accountId, patch),
|
|
2010
1931
|
promptAllowFrom: promptNextcloudTalkAllowFromForAccount
|
|
2011
|
-
};
|
|
1932
|
+
});
|
|
2012
1933
|
const nextcloudTalkSetupAdapter = {
|
|
2013
1934
|
singleAccountKeysToMove: ["rooms"],
|
|
2014
1935
|
resolveAccountId: ({ accountId }) => normalizeAccountId$1(accountId),
|
|
@@ -2038,16 +1959,15 @@ const nextcloudTalkSetupAdapter = {
|
|
|
2038
1959
|
}),
|
|
2039
1960
|
applyAccountConfig: ({ cfg, accountId, input }) => {
|
|
2040
1961
|
const setupInput = input;
|
|
2041
|
-
|
|
1962
|
+
return setNextcloudTalkAccountConfig(applyAccountNameToChannelSection({
|
|
2042
1963
|
cfg,
|
|
2043
1964
|
channelKey: channel$1,
|
|
2044
1965
|
accountId,
|
|
2045
1966
|
name: setupInput.name
|
|
2046
|
-
})
|
|
2047
|
-
return setNextcloudTalkAccountConfig(setupInput.useEnv ? clearNextcloudTalkAccountFields(namedConfig, accountId, ["botSecret", "botSecretFile"]) : namedConfig, accountId, {
|
|
1967
|
+
}), accountId, {
|
|
2048
1968
|
baseUrl: normalizeNextcloudTalkBaseUrl(setupInput.baseUrl),
|
|
2049
1969
|
...setupInput.useEnv ? {} : setupInput.secretFile ? { botSecretFile: setupInput.secretFile } : setupInput.secret ? { botSecret: setupInput.secret } : {}
|
|
2050
|
-
});
|
|
1970
|
+
}, setupInput.useEnv ? ["botSecret", "botSecretFile"] : void 0);
|
|
2051
1971
|
}
|
|
2052
1972
|
};
|
|
2053
1973
|
const nextcloudTalkSetupContract = defineChannelSetupContract({
|
|
@@ -2192,9 +2112,7 @@ const nextcloudTalkSetupWizard = {
|
|
|
2192
2112
|
hasConfiguredValue: (account) => Boolean(hasConfiguredSecretInput(account.config.botSecret) || account.config.botSecretFile),
|
|
2193
2113
|
resolvedValue: (account) => account.secret || void 0,
|
|
2194
2114
|
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
|
-
},
|
|
2115
|
+
patchAccount: ({ cfg, accountId, patch, clearFields }) => setNextcloudTalkAccountConfig(cfg, accountId, patch, clearFields),
|
|
2198
2116
|
useEnv: {
|
|
2199
2117
|
clearFields: ["botSecret", "botSecretFile"],
|
|
2200
2118
|
patch: (account) => ({ baseUrl: account.baseUrl })
|
|
@@ -2217,7 +2135,7 @@ const nextcloudTalkSetupWizard = {
|
|
|
2217
2135
|
accountConfigured: (account) => Boolean(account.config.apiUser?.trim() && (hasConfiguredSecretInput(account.config.apiPassword) || account.config.apiPasswordFile)),
|
|
2218
2136
|
hasConfiguredValue: (account) => Boolean(hasConfiguredSecretInput(account.config.apiPassword) || account.config.apiPasswordFile),
|
|
2219
2137
|
shouldPrompt: ({ credentialValues }) => credentialValues[CONFIGURE_API_FLAG] === "1",
|
|
2220
|
-
patchAccount: ({ cfg, accountId, patch, clearFields }) => setNextcloudTalkAccountConfig(
|
|
2138
|
+
patchAccount: ({ cfg, accountId, patch, clearFields }) => setNextcloudTalkAccountConfig(cfg, accountId, patch, clearFields),
|
|
2221
2139
|
set: { clearFields: ["apiPassword", "apiPasswordFile"] }
|
|
2222
2140
|
})],
|
|
2223
2141
|
textInputs: [baseUrlTextInput({
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { t as nextcloudTalkPlugin } from "./channel-
|
|
1
|
+
import { t as nextcloudTalkPlugin } from "./channel-D6MTjGj3.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.5",
|
|
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.5"
|
|
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.5"
|
|
128
128
|
},
|
|
129
129
|
"build": {
|
|
130
|
-
"openclawVersion": "2026.7.2-beta.
|
|
130
|
+
"openclawVersion": "2026.7.2-beta.5"
|
|
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
|
-
}
|