@openclaw/discord 2026.9.8 → 2026.10.1-beta.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.
- package/README.md +7 -0
- package/dist/.setup/{account-inspect-De8hOUxG.mjs → account-inspect-CjKqkDnH.mjs} +2 -2
- package/dist/.setup/{accounts-ChaMcixG.mjs → accounts-DXHCL8Zm.mjs} +9 -32
- package/dist/.setup/{active-turn-thread-route-fmHl1HNd.mjs → active-turn-thread-route-C4tp9noA.mjs} +5 -9
- package/dist/.setup/{activities-api-tvbsU2e3.mjs → activities-api-BL_hJ0JQ.mjs} +15 -18
- package/dist/.setup/{api-DVbJwZVt.mjs → api-_oznjffB.mjs} +1 -1
- package/dist/.setup/{approval-handler.runtime-DxCK2Rux.mjs → approval-handler.runtime-BilYSrRF.mjs} +22 -61
- package/dist/.setup/{approval-message-updates-BKFqavHZ.mjs → approval-message-updates-CgRwc2_Q.mjs} +2 -2
- package/dist/.setup/{audit-CLg9I71N.mjs → audit-DtvzxONM.mjs} +4 -4
- package/dist/.setup/{channel-access-C12aDZ0p.mjs → channel-access-BRp3Y-rF.mjs} +4 -17
- package/dist/.setup/{channel-type-DRCrEMss.mjs → channel-type-D1_b5UhU.mjs} +12 -16
- package/dist/.setup/{channel-DxlUVU9t.mjs → channel-z5lQMS_9.mjs} +79 -75
- package/dist/.setup/{channel.setup-CRo1GjV7.mjs → channel.setup-DBJtugJO.mjs} +14 -34
- package/dist/.setup/{components-Cq1PvIpN.mjs → components-CzXLR3QH.mjs} +56 -72
- package/dist/.setup/{config-schema-oxELUSDx.mjs → config-schema-CsemBDpS.mjs} +6 -17
- package/dist/.setup/{conversation-binding-route-Caz_XuFH.mjs → conversation-binding-route-Bi62ApSt.mjs} +1 -1
- package/dist/.setup/{directory-config-esqNn0Eo.mjs → directory-config-BH1LA-gi.mjs} +1 -1
- package/dist/.setup/{directory-live-DtKRHuGV.mjs → directory-live-C9xz7IPm.mjs} +10 -13
- package/dist/.setup/{discord-0xJYfdDD.mjs → discord-J7aRzq2Q.mjs} +101 -381
- package/dist/.setup/{doctor-BCl1H5tl.mjs → doctor-DxSAngJq.mjs} +31 -70
- package/dist/.setup/doctor-contract-Bg3NPAMw.mjs +137 -0
- package/dist/.setup/{handle-action-CUvQWnE7.mjs → handle-action-DlmFX-_G.mjs} +10 -11
- package/dist/.setup/{handle-action.guild-admin-Df-8gVle.mjs → handle-action.guild-admin-BnyqTczR.mjs} +67 -129
- package/dist/.setup/{live-policy-config-8Pv20CHc.mjs → live-policy-config-emmPNyh4.mjs} +1 -1
- package/dist/.setup/{message-handler-B-Jk4oDk.mjs → message-handler-BNToPZrx.mjs} +7 -6
- package/dist/.setup/{message-handler.preflight-v-__NSDq.mjs → message-handler.preflight-D0BcCyI7.mjs} +13 -23
- package/dist/.setup/{message-handler.preflight-pluralkit-CWLUBVcx.mjs → message-handler.preflight-pluralkit-D1g3eq0B.mjs} +5 -8
- package/dist/.setup/{message-handler.process-BNFFuChn.mjs → message-handler.process-CThRmCWK.mjs} +57 -96
- package/dist/.setup/{outbound-adapter-BobT-kse.mjs → outbound-adapter-BPq0c2wY.mjs} +11 -17
- package/dist/.setup/{outbound-session-route-zVGxxceg.mjs → outbound-session-route-DGPPKA0z.mjs} +21 -46
- package/dist/.setup/{presence-cache-Di3H3DIU.mjs → presence-cache-Dg3_dADn.mjs} +2 -4
- package/dist/.setup/{probe-LYrIHlBF.mjs → probe-DIRY8vh7.mjs} +17 -27
- package/dist/.setup/{provider-B_G5hASF.mjs → provider-D2OKMo0f.mjs} +273 -446
- package/dist/.setup/{provider-session.runtime-BYlTBFD2.mjs → provider-session.runtime-BupCTZQv.mjs} +3 -3
- package/dist/.setup/provider.runtime-BaW_JnfU.mjs +2 -0
- package/dist/.setup/{realtime-session.runtime-oUd9DOcz.mjs → realtime-session.runtime-D5RSC8Mm.mjs} +6 -8
- package/dist/.setup/{receive-recovery-CHPOsnLc.mjs → receive-recovery-GqF2PUN_.mjs} +1 -4
- package/dist/.setup/{resolve-allowlist-common-DPdRggu5.mjs → resolve-allowlist-common-DUYRrrVB.mjs} +5 -9
- package/dist/.setup/{resolve-channels-BFPNRmVv.mjs → resolve-channels--MUatisx.mjs} +3 -3
- package/dist/.setup/{resolve-users-0-aBuCy3.mjs → resolve-users-CxLcDmM0.mjs} +6 -9
- package/dist/.setup/{retry-pz_cSha2.mjs → retry-BKzO25k4.mjs} +27 -51
- package/dist/.setup/{runtime-sUksZ--Q.mjs → runtime-CerRBfaa.mjs} +2 -2
- package/dist/.setup/{runtime-FN000lxA.mjs → runtime-CwUA0RLr.mjs} +228 -255
- package/dist/.setup/{runtime-doctor-migrations-CshUGl36.mjs → runtime-doctor-migrations-BPV-R4G9.mjs} +6 -0
- package/dist/.setup/{security-audit-Cdaegq7C.mjs → security-audit-D42cp5N7.mjs} +21 -48
- package/dist/.setup/{send-CrfEI6Bs.mjs → send-2X7m2Zmw.mjs} +45 -58
- package/dist/.setup/{send.components-DxQAMfES.mjs → send.components-RqvgmCs3.mjs} +44 -90
- package/dist/.setup/{send.outbound-BISKnb-a.mjs → send.outbound-B4QHSEzm.mjs} +60 -98
- package/dist/.setup/{send.shared-DGFkbkQR.mjs → send.shared-BQIUh6Vn.mjs} +13 -20
- package/dist/.setup/{sender-identity-B9X5Vb9R.mjs → sender-identity-CooeYfAn.mjs} +1 -1
- package/dist/.setup/{session-key-normalization-wJgsKPNF.mjs → session-key-normalization-CCHGNSQw.mjs} +3 -9
- package/dist/.setup/setup-plugin-api-nn_giXvZ.mjs +3 -0
- package/dist/.setup/{shared-B3wZ4hN-.mjs → shared-CIJn6AEC.mjs} +7 -7
- package/dist/.setup/{subagent-hooks-nlUE9ow7.mjs → subagent-hooks-BYlVnxzy.mjs} +4 -9
- package/dist/.setup/{system-events-CdeZnvPV.mjs → system-events-CQ3if_pS.mjs} +2 -2
- package/dist/.setup/{target-resolver-BuLapkhy.mjs → target-resolver-Dzxf80Y3.mjs} +5 -13
- package/dist/.setup/targets-Lf8D55w-.mjs +3 -0
- package/dist/.setup/{thread-bindings-D7TfgjR_.mjs → thread-bindings-yNNlcUWE.mjs} +5 -6
- package/dist/.setup/{thread-bindings.manager-DN-NissX.mjs → thread-bindings.manager-plk0zJAW.mjs} +14 -20
- package/dist/.setup/{thread-bindings.session-updates-CshfKghV.mjs → thread-bindings.session-updates-C9aKtVs6.mjs} +295 -5
- package/dist/.setup/{timeouts-D86uWLt_.mjs → timeouts-pun7VJ02.mjs} +2 -15
- package/dist/.setup/{transcripts-source-p8EV179h.mjs → transcripts-source-CNWswry-.mjs} +31 -79
- package/dist/.setup/typing-CNlSKY5S.mjs +11 -0
- package/dist/.setup/{voice-runtime-B46rcwrG.mjs → voice-runtime-Bc75quiH.mjs} +62 -110
- package/dist/account-inspect-api.js +1 -1
- package/dist/action-runtime-api.js +1 -1
- package/dist/activities-api.js +1 -1
- package/dist/api.js +18 -18
- package/dist/channel-config-api.js +1 -1
- package/dist/channel-plugin-api.js +1 -1
- package/dist/control-ui/2afbdab1d3aa65a789d8a3eba666f4b1ec5df07073538fe30d6cf32093a1fb2d/index.js +1 -0
- package/dist/directory-contract-api.js +1 -1
- package/dist/doctor-contract-api.js +19 -128
- package/dist/index.js +1 -1
- package/dist/runtime-api.js +20 -21
- package/dist/security-audit-contract-api.js +1 -1
- package/dist/session-key-api.js +1 -1
- package/dist/setup-entry.js +1 -1
- package/dist/setup-plugin-api.js +1 -1
- package/dist/src/voice/audio-worker.runtime.js +6 -8
- package/dist/subagent-hooks-api.js +1 -1
- package/dist/transcripts-source-api.js +1 -1
- package/node_modules/libopus-wasm/CHANGELOG.md +8 -0
- package/node_modules/libopus-wasm/dist/discordjs.d.ts.map +1 -1
- package/node_modules/libopus-wasm/dist/discordjs.js +14 -2
- package/node_modules/libopus-wasm/dist/generated/libopus.generated.mjs +0 -0
- package/node_modules/libopus-wasm/dist/index.d.ts.map +1 -1
- package/node_modules/libopus-wasm/dist/index.js +55 -100
- package/node_modules/libopus-wasm/package.json +5 -5
- package/node_modules/undici/README.md +10 -1
- package/node_modules/undici/docs/docs/api/Agent.md +8 -8
- package/node_modules/undici/docs/docs/api/DiagnosticsChannel.md +9 -6
- package/node_modules/undici/docs/docs/api/Dispatcher.md +9 -0
- package/node_modules/undici/docs/docs/api/Errors.md +25 -0
- package/node_modules/undici/docs/docs/api/Fetch.md +10 -0
- package/node_modules/undici/docs/docs/api/Interceptors.md +4 -3
- package/node_modules/undici/docs/docs/api/Pool.md +5 -6
- package/node_modules/undici/docs/docs/index.md +10 -1
- package/node_modules/undici/lib/api/readable.js +1 -2
- package/node_modules/undici/lib/core/request.js +23 -2
- package/node_modules/undici/lib/core/util.js +0 -39
- package/node_modules/undici/lib/dispatcher/client-h1.js +11 -4
- package/node_modules/undici/lib/dispatcher/client-h2.js +52 -8
- package/node_modules/undici/lib/dispatcher/client.js +6 -1
- package/node_modules/undici/lib/dispatcher/env-http-proxy-agent.js +21 -6
- package/node_modules/undici/lib/dispatcher/pool-base.js +63 -2
- package/node_modules/undici/lib/dispatcher/pool.js +90 -7
- package/node_modules/undici/lib/dispatcher/proxy-agent.js +16 -3
- package/node_modules/undici/lib/handler/deduplication-handler.js +24 -11
- package/node_modules/undici/lib/handler/redirect-handler.js +5 -0
- package/node_modules/undici/lib/handler/retry-handler.js +72 -13
- package/node_modules/undici/lib/interceptor/cache.js +4 -1
- package/node_modules/undici/lib/interceptor/decompress.js +236 -69
- package/node_modules/undici/lib/web/cache/cache.js +17 -8
- package/node_modules/undici/lib/web/cache/cachestorage.js +11 -5
- package/node_modules/undici/lib/web/cookies/index.js +19 -7
- package/node_modules/undici/lib/web/cookies/util.js +3 -1
- package/node_modules/undici/lib/web/eventsource/eventsource.js +25 -1
- package/node_modules/undici/lib/web/fetch/body.js +22 -15
- package/node_modules/undici/lib/web/fetch/data-url.js +6 -6
- package/node_modules/undici/lib/web/fetch/formdata.js +30 -36
- package/node_modules/undici/lib/web/fetch/headers.js +34 -31
- package/node_modules/undici/lib/web/fetch/index.js +46 -25
- package/node_modules/undici/lib/web/fetch/request.js +74 -79
- package/node_modules/undici/lib/web/fetch/response.js +43 -44
- package/node_modules/undici/lib/web/fetch/util.js +7 -7
- package/node_modules/undici/lib/web/infra/index.js +16 -1
- package/node_modules/undici/lib/web/webidl/index.js +2 -14
- package/node_modules/undici/lib/web/websocket/connection.js +33 -12
- package/node_modules/undici/lib/web/websocket/events.js +43 -26
- package/node_modules/undici/lib/web/websocket/receiver.js +2 -0
- package/node_modules/undici/lib/web/websocket/stream/websocketerror.js +13 -10
- package/node_modules/undici/lib/web/websocket/stream/websocketstream.js +19 -4
- package/node_modules/undici/lib/web/websocket/websocket.js +44 -41
- package/node_modules/undici/package.json +1 -1
- package/node_modules/undici/types/diagnostics-channel.d.ts +2 -1
- package/node_modules/undici/types/interceptors.d.ts +1 -1
- package/node_modules/undici/types/webidl.d.ts +13 -7
- package/openclaw.plugin.json +6 -0
- package/package.json +12 -7
- package/dist/.setup/doctor-contract-CvvgwrrG.mjs +0 -409
- package/dist/.setup/model-picker-preference-primitives-BHT1LkR_.mjs +0 -37
- package/dist/.setup/provider.runtime-CUE3UxER.mjs +0 -2
- package/dist/.setup/setup-plugin-api-BQUBxbhe.mjs +0 -3
- package/dist/.setup/targets-0KUcEIYx.mjs +0 -3
- package/dist/.setup/thread-bindings.state-g6v9zAym.mjs +0 -331
- package/dist/.setup/typing-BiHCzBRu.mjs +0 -15
|
@@ -1,73 +1,20 @@
|
|
|
1
1
|
import { n as DISCORD_COMMAND_DEPLOY_HASH_NAMESPACE, t as DISCORD_COMMAND_DEPLOY_HASH_MAX_ENTRIES } from "./.setup/command-deploy-store-DFkBTViB.mjs";
|
|
2
|
-
import { t as runtime_doctor_migrations_exports } from "./.setup/runtime-doctor-migrations-
|
|
3
|
-
import { n as normalizeCompatibilityConfig, t as legacyConfigRules } from "./.setup/doctor-contract-
|
|
4
|
-
import
|
|
5
|
-
import { MAX_DATE_TIMESTAMP_MS, timestampMsToIsoString } from "openclaw/plugin-sdk/number-runtime";
|
|
2
|
+
import { t as runtime_doctor_migrations_exports } from "./.setup/runtime-doctor-migrations-BPV-R4G9.mjs";
|
|
3
|
+
import { n as normalizeCompatibilityConfig, t as legacyConfigRules } from "./.setup/doctor-contract-Bg3NPAMw.mjs";
|
|
4
|
+
import fs from "node:fs/promises";
|
|
6
5
|
import path from "node:path";
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
const
|
|
10
|
-
const MAX_PLUGIN_STATE_KEY_BYTES = 512;
|
|
11
|
-
const textEncoder = new TextEncoder();
|
|
12
|
-
function fileExists(filePath) {
|
|
6
|
+
//#region extensions/discord/src/monitor/command-deploy-migration.ts
|
|
7
|
+
const detectDiscordCommandDeployCacheMigration = async ({ stateDir }) => {
|
|
8
|
+
const sourcePath = path.join(stateDir, "discord", "command-deploy-cache.json");
|
|
13
9
|
try {
|
|
14
|
-
|
|
10
|
+
if (!(await fs.stat(sourcePath)).isFile()) return [];
|
|
15
11
|
} catch {
|
|
16
|
-
return
|
|
12
|
+
return [];
|
|
17
13
|
}
|
|
18
|
-
|
|
19
|
-
function readLegacyStore(filePath) {
|
|
20
|
-
try {
|
|
21
|
-
const parsed = JSON.parse(fs.readFileSync(filePath, "utf8"));
|
|
22
|
-
return parsed && typeof parsed === "object" ? parsed : null;
|
|
23
|
-
} catch {
|
|
24
|
-
return null;
|
|
25
|
-
}
|
|
26
|
-
}
|
|
27
|
-
function readLegacyThreadBindingsStore(filePath) {
|
|
28
|
-
const parsed = JSON.parse(fs.readFileSync(filePath, "utf8"));
|
|
29
|
-
if (!parsed || typeof parsed !== "object") throw new Error("legacy Discord thread bindings store must be an object");
|
|
30
|
-
return parsed;
|
|
31
|
-
}
|
|
32
|
-
function normalizeLegacyPreferenceKey(key) {
|
|
33
|
-
const trimmed = key.trim();
|
|
34
|
-
if (!trimmed || textEncoder.encode(trimmed).length > MAX_PLUGIN_STATE_KEY_BYTES) return;
|
|
35
|
-
return trimmed;
|
|
36
|
-
}
|
|
37
|
-
function legacyUpdatedAtForIndex(updatedAt, index, total) {
|
|
38
|
-
const baseMs = preferenceTimestampMs(updatedAt);
|
|
39
|
-
const shiftedMs = Math.min(baseMs + Math.max(0, total), MAX_DATE_TIMESTAMP_MS) - Math.max(0, index);
|
|
40
|
-
return timestampMsToIsoString(shiftedMs) ?? timestampMsToIsoString(baseMs) ?? timestampMsToIsoString(Math.max(0, total - index)) ?? "1970-01-01T00:00:00.000Z";
|
|
41
|
-
}
|
|
42
|
-
function readFiniteNumberField(entry, key) {
|
|
43
|
-
const value = entry[key];
|
|
44
|
-
return typeof value === "number" && Number.isFinite(value) ? Math.floor(value) : void 0;
|
|
45
|
-
}
|
|
46
|
-
function upgradeLegacyThreadBindingShape(rawEntry) {
|
|
47
|
-
if (!rawEntry || typeof rawEntry !== "object" || Array.isArray(rawEntry)) return rawEntry;
|
|
48
|
-
const entry = { ...rawEntry };
|
|
49
|
-
if (entry.targetSessionKey === void 0 && typeof entry.sessionKey === "string") entry.targetSessionKey = entry.sessionKey;
|
|
50
|
-
delete entry.sessionKey;
|
|
51
|
-
const expiresAt = readFiniteNumberField(entry, "expiresAt");
|
|
52
|
-
delete entry.expiresAt;
|
|
53
|
-
if (entry.idleTimeoutMs === void 0 && entry.maxAgeMs === void 0 && expiresAt !== void 0) {
|
|
54
|
-
entry.idleTimeoutMs = 0;
|
|
55
|
-
if (expiresAt <= 0) entry.maxAgeMs = 0;
|
|
56
|
-
else {
|
|
57
|
-
const boundAt = readFiniteNumberField(entry, "boundAt") ?? 0;
|
|
58
|
-
const lastActivityAt = readFiniteNumberField(entry, "lastActivityAt") ?? 0;
|
|
59
|
-
entry.maxAgeMs = Math.max(1, expiresAt - Math.max(0, boundAt > 0 ? boundAt : lastActivityAt));
|
|
60
|
-
}
|
|
61
|
-
}
|
|
62
|
-
return entry;
|
|
63
|
-
}
|
|
64
|
-
const detectDiscordLegacyStateMigrations = async ({ stateDir }) => {
|
|
65
|
-
const plans = [];
|
|
66
|
-
const commandDeployCacheSourcePath = path.join(stateDir, "discord", "command-deploy-cache.json");
|
|
67
|
-
if (fileExists(commandDeployCacheSourcePath)) plans.push({
|
|
14
|
+
return [{
|
|
68
15
|
kind: "plugin-state-import",
|
|
69
16
|
label: "Discord command deployment cache",
|
|
70
|
-
sourcePath
|
|
17
|
+
sourcePath,
|
|
71
18
|
targetPath: `plugin state:${DISCORD_COMMAND_DEPLOY_HASH_NAMESPACE}`,
|
|
72
19
|
pluginId: "discord",
|
|
73
20
|
namespace: DISCORD_COMMAND_DEPLOY_HASH_NAMESPACE,
|
|
@@ -77,75 +24,19 @@ const detectDiscordLegacyStateMigrations = async ({ stateDir }) => {
|
|
|
77
24
|
cleanupWhenEmpty: true,
|
|
78
25
|
cleanupWarningDisposition: "recoverable",
|
|
79
26
|
readEntries: () => []
|
|
80
|
-
}
|
|
81
|
-
const modelPickerSourcePath = path.join(stateDir, "discord", "model-picker-preferences.json");
|
|
82
|
-
if (fileExists(modelPickerSourcePath)) plans.push({
|
|
83
|
-
kind: "plugin-state-import",
|
|
84
|
-
label: "Discord model picker preferences",
|
|
85
|
-
sourcePath: modelPickerSourcePath,
|
|
86
|
-
targetPath: "plugin state:model-picker-preferences",
|
|
87
|
-
pluginId: "discord",
|
|
88
|
-
namespace: "model-picker-preferences",
|
|
89
|
-
maxEntries: PREFERENCE_MAX_ENTRIES,
|
|
90
|
-
scopeKey: "",
|
|
91
|
-
cleanupSource: "rename",
|
|
92
|
-
readEntries: () => {
|
|
93
|
-
const store = readLegacyStore(modelPickerSourcePath);
|
|
94
|
-
if (!store || !store.entries || typeof store.entries !== "object") return [];
|
|
95
|
-
const out = [];
|
|
96
|
-
for (const [rawKey, rawEntry] of Object.entries(store.entries)) {
|
|
97
|
-
const scopeKey = normalizeLegacyPreferenceKey(rawKey);
|
|
98
|
-
if (!scopeKey || !rawEntry || typeof rawEntry !== "object") continue;
|
|
99
|
-
const recent = sanitizeRecentModels(rawEntry.recent, 10);
|
|
100
|
-
for (const [index, modelRef] of recent.entries()) out.push({
|
|
101
|
-
key: buildPreferenceModelKey(scopeKey, modelRef),
|
|
102
|
-
value: {
|
|
103
|
-
scopeKey,
|
|
104
|
-
modelRef,
|
|
105
|
-
updatedAt: legacyUpdatedAtForIndex(rawEntry.updatedAt, index, recent.length)
|
|
106
|
-
}
|
|
107
|
-
});
|
|
108
|
-
}
|
|
109
|
-
return out;
|
|
110
|
-
}
|
|
111
|
-
});
|
|
112
|
-
const threadBindingsSourcePath = path.join(stateDir, "discord", "thread-bindings.json");
|
|
113
|
-
if (fileExists(threadBindingsSourcePath)) {
|
|
114
|
-
const { normalizePersistedBinding, THREAD_BINDINGS_MAX_ENTRIES, THREAD_BINDINGS_NAMESPACE, toBindingRecordKey } = await import("./.setup/thread-bindings.state-g6v9zAym.mjs").then((n) => n.A);
|
|
115
|
-
plans.push({
|
|
116
|
-
kind: "plugin-state-import",
|
|
117
|
-
label: "Discord thread bindings",
|
|
118
|
-
sourcePath: threadBindingsSourcePath,
|
|
119
|
-
targetPath: `plugin state:${THREAD_BINDINGS_NAMESPACE}`,
|
|
120
|
-
pluginId: "discord",
|
|
121
|
-
namespace: THREAD_BINDINGS_NAMESPACE,
|
|
122
|
-
maxEntries: THREAD_BINDINGS_MAX_ENTRIES,
|
|
123
|
-
scopeKey: "",
|
|
124
|
-
cleanupSource: "rename",
|
|
125
|
-
cleanupWhenEmpty: true,
|
|
126
|
-
readEntries: () => {
|
|
127
|
-
const store = readLegacyThreadBindingsStore(threadBindingsSourcePath);
|
|
128
|
-
if (store?.version !== 1 || !store.bindings || typeof store.bindings !== "object") throw new Error("legacy Discord thread bindings store must have version 1 bindings");
|
|
129
|
-
const out = [];
|
|
130
|
-
for (const [rawKey, rawEntry] of Object.entries(store.bindings)) {
|
|
131
|
-
const normalized = normalizePersistedBinding(rawKey, upgradeLegacyThreadBindingShape(rawEntry));
|
|
132
|
-
if (normalized) out.push({
|
|
133
|
-
key: toBindingRecordKey(normalized),
|
|
134
|
-
value: normalized
|
|
135
|
-
});
|
|
136
|
-
}
|
|
137
|
-
return out;
|
|
138
|
-
}
|
|
139
|
-
});
|
|
140
|
-
}
|
|
141
|
-
return plans;
|
|
27
|
+
}];
|
|
142
28
|
};
|
|
143
29
|
//#endregion
|
|
144
30
|
//#region extensions/discord/doctor-contract-api.ts
|
|
145
|
-
const stateMigrations = [(0, runtime_doctor_migrations_exports.
|
|
31
|
+
const stateMigrations = [(0, runtime_doctor_migrations_exports.defineRetiredPluginStateMigration)({
|
|
32
|
+
id: "discord-retired-state",
|
|
33
|
+
label: "Discord retired model preferences and thread bindings",
|
|
34
|
+
intermediateVersion: "2026.9.5",
|
|
35
|
+
findSources: ({ stateDir }) => [path.join(stateDir, "discord", "model-picker-preferences.json"), path.join(stateDir, "discord", "thread-bindings.json")]
|
|
36
|
+
}), (0, runtime_doctor_migrations_exports.definePluginDoctorMigrationFromPlans)({
|
|
146
37
|
id: "discord-legacy-state",
|
|
147
|
-
label: "Discord
|
|
148
|
-
resolvePlans:
|
|
38
|
+
label: "Discord command deployment cache",
|
|
39
|
+
resolvePlans: detectDiscordCommandDeployCacheMigration
|
|
149
40
|
})];
|
|
150
41
|
//#endregion
|
|
151
42
|
export { legacyConfigRules, normalizeCompatibilityConfig, stateMigrations };
|
package/dist/index.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { t as registerDiscordActivities } from "./.setup/activities-api-
|
|
1
|
+
import { t as registerDiscordActivities } from "./.setup/activities-api-BL_hJ0JQ.mjs";
|
|
2
2
|
import { registerDiscordSubagentHooks } from "./subagent-hooks-api.js";
|
|
3
3
|
import { registerDiscordTranscriptSourceProvider } from "./transcripts-source-api.js";
|
|
4
4
|
import { defineBundledChannelEntry } from "openclaw/plugin-sdk/channel-entry-contract";
|
package/dist/runtime-api.js
CHANGED
|
@@ -1,23 +1,22 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { n as registerBuiltDiscordComponentMessage, r as sendDiscordComponentMessage, t as editDiscordComponentMessage } from "./.setup/send.components-
|
|
1
|
+
import { a as normalizeDiscordAllowList, b as resolveGroupDmAllow, f as resolveDiscordCommandAuthorized, i as isDiscordGroupAllowedByPolicy, l as resolveDiscordChannelConfig, n as allowListMatches, p as resolveDiscordGuildEntry, s as normalizeDiscordSlug, u as resolveDiscordChannelConfigWithFallback, x as shouldEmitDiscordReactionNotification, y as resolveDiscordShouldRequireMention } from "./.setup/channel-type-D1_b5UhU.mjs";
|
|
2
|
+
import { n as registerBuiltDiscordComponentMessage, r as sendDiscordComponentMessage, t as editDiscordComponentMessage } from "./.setup/send.components-RqvgmCs3.mjs";
|
|
3
3
|
import { r as setDiscordRuntime } from "./.setup/runtime-DgnVQ7zW.mjs";
|
|
4
|
-
import { n as listDiscordDirectoryGroupsLive, r as listDiscordDirectoryPeersLive } from "./.setup/directory-live-
|
|
5
|
-
import { H as getGateway, S as hasAllGuildPermissionsDiscord, U as registerGateway, V as clearGateways, W as unregisterGateway, b as fetchChannelPermissionsDiscord, g as DiscordSendError, w as hasAnyGuildPermissionDiscord, x as fetchMemberGuildPermissionsDiscord } from "./.setup/send.shared-
|
|
6
|
-
import { n as sendPollDiscord, r as sendStickerDiscord, t as sendMessageDiscord } from "./.setup/send.outbound-
|
|
7
|
-
import { h as sanitizeDiscordThreadName, p as resolveDiscordReplyTarget } from "./.setup/transcripts-source-
|
|
8
|
-
import { i as
|
|
9
|
-
import {
|
|
10
|
-
import { a as
|
|
11
|
-
import { c as readDiscordChannelMoveParams, i as requiredGuildPermissionForModerationAction, l as readDiscordParentIdParam, n as isDiscordModerationAction, o as readDiscordChannelCreateParams, r as readDiscordModerationCommand, s as readDiscordChannelEditParams, t as handleDiscordAction } from "./.setup/runtime-
|
|
12
|
-
import { t as resolveDiscordOutboundSessionRoute, v as discordMessageActions } from "./.setup/outbound-session-route-
|
|
13
|
-
import {
|
|
14
|
-
import {
|
|
15
|
-
import { t as
|
|
16
|
-
import { t as
|
|
17
|
-
import { c as
|
|
18
|
-
import {
|
|
19
|
-
import {
|
|
20
|
-
import {
|
|
21
|
-
import {
|
|
22
|
-
import { t as createDiscordMessageHandler } from "./.setup/message-handler-B-Jk4oDk.mjs";
|
|
4
|
+
import { n as listDiscordDirectoryGroupsLive, r as listDiscordDirectoryPeersLive } from "./.setup/directory-live-C9xz7IPm.mjs";
|
|
5
|
+
import { H as getGateway, S as hasAllGuildPermissionsDiscord, U as registerGateway, V as clearGateways, W as unregisterGateway, b as fetchChannelPermissionsDiscord, g as DiscordSendError, w as hasAnyGuildPermissionDiscord, x as fetchMemberGuildPermissionsDiscord } from "./.setup/send.shared-BQIUh6Vn.mjs";
|
|
6
|
+
import { n as sendPollDiscord, r as sendStickerDiscord, t as sendMessageDiscord } from "./.setup/send.outbound-B4QHSEzm.mjs";
|
|
7
|
+
import { h as sanitizeDiscordThreadName, p as resolveDiscordReplyTarget } from "./.setup/transcripts-source-CNWswry-.mjs";
|
|
8
|
+
import { a as isAbortError, c as runDiscordTaskWithTimeout, i as DISCORD_DEFAULT_LISTENER_TIMEOUT_MS, n as DISCORD_ATTACHMENT_TOTAL_TIMEOUT_MS, o as normalizeDiscordInboundWorkerTimeoutMs, r as DISCORD_DEFAULT_INBOUND_WORKER_TIMEOUT_MS, s as normalizeDiscordListenerTimeoutMs, t as DISCORD_ATTACHMENT_IDLE_TIMEOUT_MS } from "./.setup/timeouts-pun7VJ02.mjs";
|
|
9
|
+
import { i as setPresence, n as getPresence, r as presenceCacheSize, t as clearPresences } from "./.setup/presence-cache-Dg3_dADn.mjs";
|
|
10
|
+
import { A as listScheduledEventsDiscord, B as moveChannelDiscord, C as fetchChannelInfoDiscord, D as fetchVoiceStatusDiscord, E as fetchRoleInfoDiscord, F as uploadEmojiDiscord, H as setChannelPermissionDiscord, I as uploadStickerDiscord, L as createChannelDiscord, M as resolveEventCoverImage, N as timeoutMemberDiscord, O as kickMemberDiscord, P as listGuildEmojisDiscord, R as deleteChannelDiscord, S as createScheduledEventDiscord, T as fetchMemberInfoDiscord, V as removeChannelPermissionDiscord, _ as readMessagesDiscord, a as removeReactionDiscord, b as addRoleDiscord, c as sendWebhookMessageDiscord, d as deleteMessageDiscord, f as editMessageDiscord, g as pinMessageDiscord, h as listThreadsDiscord, i as removeOwnReactionsDiscord, j as removeRoleDiscord, k as listGuildChannelsDiscord, m as listPinsDiscord, n as fetchReactionsDiscord, o as sendTypingDiscord, p as fetchMessageDiscord, r as reactMessageDiscord, s as sendVoiceMessageDiscord, u as createThreadDiscord, v as searchMessagesDiscord, x as banMemberDiscord, y as unpinMessageDiscord, z as editChannelDiscord } from "./.setup/send-2X7m2Zmw.mjs";
|
|
11
|
+
import { c as readDiscordChannelMoveParams, i as requiredGuildPermissionForModerationAction, l as readDiscordParentIdParam, n as isDiscordModerationAction, o as readDiscordChannelCreateParams, r as readDiscordModerationCommand, s as readDiscordChannelEditParams, t as handleDiscordAction } from "./.setup/runtime-CwUA0RLr.mjs";
|
|
12
|
+
import { t as resolveDiscordOutboundSessionRoute, v as discordMessageActions } from "./.setup/outbound-session-route-DGPPKA0z.mjs";
|
|
13
|
+
import { F as resolveThreadBindingMaxAgeMs, M as resolveThreadBindingIdleTimeoutMs, N as resolveThreadBindingInactivityExpiresAt, P as resolveThreadBindingMaxAgeExpiresAt, r as setThreadBindingMaxAgeBySessionKey, t as setThreadBindingIdleTimeoutBySessionKey } from "./.setup/thread-bindings.session-updates-C9aKtVs6.mjs";
|
|
14
|
+
import { t as resolveDiscordChannelAllowlist } from "./.setup/resolve-channels--MUatisx.mjs";
|
|
15
|
+
import { t as resolveDiscordUserAllowlist } from "./.setup/resolve-users-CxLcDmM0.mjs";
|
|
16
|
+
import { c as resolveThreadBindingPersonaFromRecord, i as createNoopThreadBindingManager, n as getThreadBindingManager, s as resolveThreadBindingPersona, t as createThreadBindingManager } from "./.setup/thread-bindings.manager-plk0zJAW.mjs";
|
|
17
|
+
import { a as autoBindSpawnedDiscordSubagent, c as reconcileAcpThreadBindingsOnStartup, d as resolveDiscordThreadBindingIdleTimeoutMs, f as resolveDiscordThreadBindingMaxAgeMs, l as unbindThreadBindingsBySessionKey, n as resolveThreadBindingIntroText, o as listThreadBindingsBySessionKey, p as resolveThreadBindingsEnabled, r as resolveThreadBindingThreadName, s as listThreadBindingsForAccount, t as formatThreadBindingDurationLabel } from "./.setup/thread-bindings-yNNlcUWE.mjs";
|
|
18
|
+
import { i as probeDiscord, n as fetchDiscordApplicationSummary, r as parseApplicationIdFromToken, s as resolveDiscordPrivilegedIntentsFromFlags, t as fetchDiscordApplicationId } from "./.setup/probe-DIRY8vh7.mjs";
|
|
19
|
+
import { r as collectDiscordAuditChannelIds, t as auditDiscordChannelPermissions } from "./.setup/audit-DtvzxONM.mjs";
|
|
20
|
+
import { S as createDiscordNativeCommand, b as resolveDiscordGatewayIntents, k as registerDiscordListener, t as monitorDiscordProvider, x as waitForDiscordGatewayPluginRegistration, y as createDiscordGatewayPlugin } from "./.setup/provider-D2OKMo0f.mjs";
|
|
21
|
+
import { t as createDiscordMessageHandler } from "./.setup/message-handler-BNToPZrx.mjs";
|
|
23
22
|
export { DISCORD_ATTACHMENT_IDLE_TIMEOUT_MS, DISCORD_ATTACHMENT_TOTAL_TIMEOUT_MS, DISCORD_DEFAULT_INBOUND_WORKER_TIMEOUT_MS, DISCORD_DEFAULT_LISTENER_TIMEOUT_MS, DiscordSendError, addRoleDiscord, allowListMatches, auditDiscordChannelPermissions, autoBindSpawnedDiscordSubagent, banMemberDiscord, clearGateways, clearPresences, collectDiscordAuditChannelIds, createChannelDiscord, createDiscordGatewayPlugin, createDiscordMessageHandler, createDiscordNativeCommand, createNoopThreadBindingManager, createScheduledEventDiscord, createThreadBindingManager, createThreadDiscord, deleteChannelDiscord, deleteMessageDiscord, discordMessageActions, editChannelDiscord, editDiscordComponentMessage, editMessageDiscord, fetchChannelInfoDiscord, fetchChannelPermissionsDiscord, fetchDiscordApplicationId, fetchDiscordApplicationSummary, fetchMemberGuildPermissionsDiscord, fetchMemberInfoDiscord, fetchMessageDiscord, fetchReactionsDiscord, fetchRoleInfoDiscord, fetchVoiceStatusDiscord, formatThreadBindingDurationLabel, getGateway, getPresence, getThreadBindingManager, handleDiscordAction, hasAllGuildPermissionsDiscord, hasAnyGuildPermissionDiscord, isAbortError, isDiscordGroupAllowedByPolicy, isDiscordModerationAction, kickMemberDiscord, listDiscordDirectoryGroupsLive, listDiscordDirectoryPeersLive, listGuildChannelsDiscord, listGuildEmojisDiscord, listPinsDiscord, listScheduledEventsDiscord, listThreadBindingsBySessionKey, listThreadBindingsForAccount, listThreadsDiscord, monitorDiscordProvider, moveChannelDiscord, normalizeDiscordAllowList, normalizeDiscordInboundWorkerTimeoutMs, normalizeDiscordListenerTimeoutMs, normalizeDiscordSlug, parseApplicationIdFromToken, pinMessageDiscord, presenceCacheSize, probeDiscord, reactMessageDiscord, readDiscordChannelCreateParams, readDiscordChannelEditParams, readDiscordChannelMoveParams, readDiscordModerationCommand, readDiscordParentIdParam, readMessagesDiscord, reconcileAcpThreadBindingsOnStartup, registerBuiltDiscordComponentMessage, registerDiscordListener, registerGateway, removeChannelPermissionDiscord, removeOwnReactionsDiscord, removeReactionDiscord, removeRoleDiscord, requiredGuildPermissionForModerationAction, resolveDiscordChannelAllowlist, resolveDiscordChannelConfig, resolveDiscordChannelConfigWithFallback, resolveDiscordCommandAuthorized, resolveDiscordGatewayIntents, resolveDiscordGuildEntry, resolveDiscordOutboundSessionRoute, resolveDiscordPrivilegedIntentsFromFlags, resolveDiscordReplyTarget, resolveDiscordShouldRequireMention, resolveDiscordThreadBindingIdleTimeoutMs, resolveDiscordThreadBindingMaxAgeMs, resolveDiscordUserAllowlist, resolveEventCoverImage, resolveGroupDmAllow, resolveThreadBindingIdleTimeoutMs, resolveThreadBindingInactivityExpiresAt, resolveThreadBindingIntroText, resolveThreadBindingMaxAgeExpiresAt, resolveThreadBindingMaxAgeMs, resolveThreadBindingPersona, resolveThreadBindingPersonaFromRecord, resolveThreadBindingThreadName, resolveThreadBindingsEnabled, runDiscordTaskWithTimeout, sanitizeDiscordThreadName, searchMessagesDiscord, sendDiscordComponentMessage, sendMessageDiscord, sendPollDiscord, sendStickerDiscord, sendTypingDiscord, sendVoiceMessageDiscord, sendWebhookMessageDiscord, setChannelPermissionDiscord, setDiscordRuntime, setPresence, setThreadBindingIdleTimeoutBySessionKey, setThreadBindingMaxAgeBySessionKey, shouldEmitDiscordReactionNotification, timeoutMemberDiscord, unbindThreadBindingsBySessionKey, unpinMessageDiscord, unregisterGateway, uploadEmojiDiscord, uploadStickerDiscord, waitForDiscordGatewayPluginRegistration };
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { t as collectDiscordSecurityAuditFindings } from "./.setup/security-audit-
|
|
1
|
+
import { t as collectDiscordSecurityAuditFindings } from "./.setup/security-audit-D42cp5N7.mjs";
|
|
2
2
|
export { collectDiscordSecurityAuditFindings };
|
package/dist/session-key-api.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { t as normalizeExplicitDiscordSessionKey } from "./.setup/session-key-normalization-
|
|
1
|
+
import { t as normalizeExplicitDiscordSessionKey } from "./.setup/session-key-normalization-CCHGNSQw.mjs";
|
|
2
2
|
export { normalizeExplicitDiscordSessionKey };
|
package/dist/setup-entry.js
CHANGED
|
@@ -4,7 +4,7 @@ import { fileURLToPath } from "node:url";
|
|
|
4
4
|
var setup_entry_default = defineBundledChannelSetupEntry({
|
|
5
5
|
importMetaUrl: import.meta.url,
|
|
6
6
|
plugin: {
|
|
7
|
-
specifier: fileURLToPath(new URL(".setup/setup-plugin-api-
|
|
7
|
+
specifier: fileURLToPath(new URL(".setup/setup-plugin-api-nn_giXvZ.mjs", import.meta.url).href),
|
|
8
8
|
exportName: "discordSetupPlugin"
|
|
9
9
|
}
|
|
10
10
|
});
|
package/dist/setup-plugin-api.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { t as discordSetupPlugin } from "./.setup/channel.setup-
|
|
1
|
+
import { t as discordSetupPlugin } from "./.setup/channel.setup-DBJtugJO.mjs";
|
|
2
2
|
export { discordSetupPlugin };
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { _ as releaseDiscordAudioInput, b as serializeDiscordAudioError, c as createDiscordOpusEncodeStream, d as createRealtimePcmToDiscordConverter, f as decodeOpusStreamChunks, g as getDiscordAudioOutputStatus, i as enableDaveReceivePassthrough, l as createDiscordOpusPlaybackStream, m as DiscordAudioOutputStatus, n as analyzeVoiceReceiveError, o as recoverDaveZeroTransition, x as setDiscordAudioOutputStatus, y as retireDiscordAudioOutput } from "../../.setup/receive-recovery-
|
|
1
|
+
import { _ as releaseDiscordAudioInput, b as serializeDiscordAudioError, c as createDiscordOpusEncodeStream, d as createRealtimePcmToDiscordConverter, f as decodeOpusStreamChunks, g as getDiscordAudioOutputStatus, i as enableDaveReceivePassthrough, l as createDiscordOpusPlaybackStream, m as DiscordAudioOutputStatus, n as analyzeVoiceReceiveError, o as recoverDaveZeroTransition, x as setDiscordAudioOutputStatus, y as retireDiscordAudioOutput } from "../../.setup/receive-recovery-GqF2PUN_.mjs";
|
|
2
2
|
import { createRequire } from "node:module";
|
|
3
3
|
import { formatErrorMessage } from "openclaw/plugin-sdk/error-runtime";
|
|
4
4
|
import { createSubsystemLogger } from "openclaw/plugin-sdk/runtime-env";
|
|
@@ -9,9 +9,7 @@ import { createRealtimeVoiceOutputActivityTracker, isRealtimeVoiceAudioAudible }
|
|
|
9
9
|
//#region extensions/discord/src/voice/sdk-runtime.ts
|
|
10
10
|
let cachedDiscordVoiceSdk = null;
|
|
11
11
|
function loadDiscordVoiceSdk() {
|
|
12
|
-
|
|
13
|
-
cachedDiscordVoiceSdk = createRequire(import.meta.url)("@discordjs/voice");
|
|
14
|
-
return cachedDiscordVoiceSdk;
|
|
12
|
+
return cachedDiscordVoiceSdk ||= createRequire(import.meta.url)("@discordjs/voice");
|
|
15
13
|
}
|
|
16
14
|
//#endregion
|
|
17
15
|
//#region extensions/discord/src/voice/realtime-player.runtime.ts
|
|
@@ -110,7 +108,7 @@ const DISCORD_REALTIME_OUTPUT_PLAYBACK_WATCHDOG_MARGIN_MS = 3e3;
|
|
|
110
108
|
var DiscordRealtimeOutput = class {
|
|
111
109
|
constructor(params) {
|
|
112
110
|
this.params = params;
|
|
113
|
-
this.activity = createRealtimeVoiceOutputActivityTracker();
|
|
111
|
+
this.activity = createRealtimeVoiceOutputActivityTracker({ now: () => performance.now() });
|
|
114
112
|
this.converter = createRealtimePcmToDiscordConverter();
|
|
115
113
|
this.stream = new PassThrough({ highWaterMark: DISCORD_RAW_PCM_FRAME_BYTES * 128 });
|
|
116
114
|
this.ready = false;
|
|
@@ -555,7 +553,7 @@ var DiscordAudioWorker = class {
|
|
|
555
553
|
this.player.on("error", this.onError);
|
|
556
554
|
}
|
|
557
555
|
async connect() {
|
|
558
|
-
const deadline =
|
|
556
|
+
const deadline = performance.now() + this.options.connectTimeoutMs;
|
|
559
557
|
for (let attempt = 0; attempt < 2; attempt += 1) {
|
|
560
558
|
if (this.stopped) return;
|
|
561
559
|
const connection = this.sdk.joinVoiceChannel({
|
|
@@ -583,7 +581,7 @@ var DiscordAudioWorker = class {
|
|
|
583
581
|
this.connection = connection;
|
|
584
582
|
connection.on("error", this.onError);
|
|
585
583
|
try {
|
|
586
|
-
await this.sdk.entersState(connection, this.sdk.VoiceConnectionStatus.Ready, AbortSignal.any([this.stopAbort.signal, AbortSignal.timeout(Math.max(1, deadline -
|
|
584
|
+
await this.sdk.entersState(connection, this.sdk.VoiceConnectionStatus.Ready, AbortSignal.any([this.stopAbort.signal, AbortSignal.timeout(Math.max(1, Math.floor(deadline - performance.now())))]));
|
|
587
585
|
if (this.stopped) return;
|
|
588
586
|
connection.subscribe(this.player);
|
|
589
587
|
connection.on("stateChange", (_old, state) => {
|
|
@@ -610,7 +608,7 @@ var DiscordAudioWorker = class {
|
|
|
610
608
|
} catch (error) {
|
|
611
609
|
if (this.stopped) return;
|
|
612
610
|
if (connection.state.status !== this.sdk.VoiceConnectionStatus.Destroyed) connection.destroy();
|
|
613
|
-
if (attempt === 0 && !this.stopped &&
|
|
611
|
+
if (attempt === 0 && !this.stopped && performance.now() < deadline && error instanceof Error && error.message.toLowerCase().includes("operation was aborted")) continue;
|
|
614
612
|
throw error;
|
|
615
613
|
}
|
|
616
614
|
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { createLazyRuntimeModule } from "openclaw/plugin-sdk/lazy-runtime";
|
|
2
2
|
//#region extensions/discord/subagent-hooks-api.ts
|
|
3
|
-
const loadDiscordSubagentHooksModule = createLazyRuntimeModule(() => import("./.setup/subagent-hooks-
|
|
3
|
+
const loadDiscordSubagentHooksModule = createLazyRuntimeModule(() => import("./.setup/subagent-hooks-BYlVnxzy.mjs").then((n) => n.r));
|
|
4
4
|
function registerDiscordSubagentHooks(api) {
|
|
5
5
|
api.on("subagent_ended", async (event) => {
|
|
6
6
|
const { handleDiscordSubagentEnded } = await loadDiscordSubagentHooksModule();
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { n as discordVoiceTranscriptsSourceProvider } from "./.setup/transcripts-source-
|
|
1
|
+
import { n as discordVoiceTranscriptsSourceProvider } from "./.setup/transcripts-source-CNWswry-.mjs";
|
|
2
2
|
//#region extensions/discord/transcripts-source-api.ts
|
|
3
3
|
function registerDiscordTranscriptSourceProvider(api) {
|
|
4
4
|
api.registerTranscriptSourceProvider(discordVoiceTranscriptsSourceProvider);
|
|
@@ -2,6 +2,14 @@
|
|
|
2
2
|
|
|
3
3
|
## Unreleased
|
|
4
4
|
|
|
5
|
+
## 0.4.1 - 2026-09-24
|
|
6
|
+
|
|
7
|
+
**Highlights:** Safer numeric settings and codec initialization, with accurate guidance for decoder output formats.
|
|
8
|
+
|
|
9
|
+
- Reject CTL values and numeric bitrates outside signed 32-bit bounds and invalid application modes before WebAssembly can coerce them into different settings; correct the Q8 decoder gain examples. (#19)
|
|
10
|
+
- Free partially initialized Discord adapters when either codec fails, and reject failed WASM error-buffer allocations before creating native codecs. (#20)
|
|
11
|
+
- Correct decoder documentation to describe selectable output sample rates and mono/stereo conversion, and clarify that source builds recompile cached libopus sources. (#23)
|
|
12
|
+
|
|
5
13
|
## 0.4.0 - 2026-09-13
|
|
6
14
|
|
|
7
15
|
- Reserve enough WebAssembly stack for 40 ms and 60 ms stereo frames so encoding cannot corrupt later codec operations. (#18)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"discordjs.d.ts","sourceRoot":"","sources":["../src/discordjs.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAIrC,qBAAa,WAAW;;IACtB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;IAM9B,YAAY,IAAI,SAAS,EAAE,QAAQ,SAAI,
|
|
1
|
+
{"version":3,"file":"discordjs.d.ts","sourceRoot":"","sources":["../src/discordjs.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAIrC,qBAAa,WAAW;;IACtB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;IAM9B,YAAY,IAAI,SAAS,EAAE,QAAQ,SAAI,EAqCtC;IAED,OAAa,MAAM,CAAC,IAAI,SAAS,EAAE,QAAQ,SAAI,GAAG,OAAO,CAAC,WAAW,CAAC,CAIrE;IAED,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,UAAU,GAAG,MAAM,CAIvC;IAED,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,UAAU,GAAG,MAAM,CAIvC;IAED,eAAe,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,CAEhD;IAED,eAAe,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,CAEhD;IAED,UAAU,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAEhC;IAED,UAAU,IAAI,MAAM,CAEnB;IAED,MAAM,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAE7B;IAED,MAAM,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI,CAE/B;IAED,IAAI,IAAI,IAAI,CAOX;IAED,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,IAAI,CAEvB;CAwBF"}
|
|
@@ -11,7 +11,7 @@ export class OpusEncoder {
|
|
|
11
11
|
constructor(rate = 48_000, channels = 2) {
|
|
12
12
|
this.rate = rate;
|
|
13
13
|
this.channels = channels;
|
|
14
|
-
this.ready = Promise.
|
|
14
|
+
this.ready = Promise.allSettled([
|
|
15
15
|
createEncoder({
|
|
16
16
|
channels: channels,
|
|
17
17
|
sampleRate: rate,
|
|
@@ -20,7 +20,19 @@ export class OpusEncoder {
|
|
|
20
20
|
channels: channels,
|
|
21
21
|
sampleRate: rate,
|
|
22
22
|
}),
|
|
23
|
-
]).then(([
|
|
23
|
+
]).then(([encoderResult, decoderResult]) => {
|
|
24
|
+
if (encoderResult.status === "rejected") {
|
|
25
|
+
if (decoderResult.status === "fulfilled") {
|
|
26
|
+
decoderResult.value.free();
|
|
27
|
+
}
|
|
28
|
+
throw encoderResult.reason;
|
|
29
|
+
}
|
|
30
|
+
const encoder = encoderResult.value;
|
|
31
|
+
if (decoderResult.status === "rejected") {
|
|
32
|
+
encoder.free();
|
|
33
|
+
throw decoderResult.reason;
|
|
34
|
+
}
|
|
35
|
+
const decoder = decoderResult.value;
|
|
24
36
|
if (this.#freed) {
|
|
25
37
|
encoder.free();
|
|
26
38
|
decoder.free();
|
|
Binary file
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|