@openclaw/discord 2026.8.1-beta.3 → 2026.8.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/dist/account-inspect-BY-ve3yH.js +45 -0
- package/dist/account-inspect-api.js +1 -1
- package/dist/{accounts-DNl-oCEw.js → accounts-CwJQoLjM.js} +87 -162
- package/dist/action-runtime-api.js +1 -1
- package/dist/{activities-api-KCBAmWxD.js → activities-api-CkKcHUB6.js} +14 -12
- package/dist/activities-api.js +1 -1
- package/dist/{allow-list-BDMimASD.js → allow-list-C2JuH-R0.js} +10 -6
- package/dist/{api-DNVbJyEy.js → api-BfmEP6wp.js} +6 -5
- package/dist/api.js +18 -18
- package/dist/{approval-handler.runtime-B12RCYr8.js → approval-handler.runtime-DZM6Kt1Z.js} +30 -106
- package/dist/{audit-Yc7eZDd6.js → audit-DIbQA4VT.js} +8 -7
- package/dist/{channel-cXYzGc4L.js → channel-CarzU3bg.js} +25 -25
- package/dist/{channel-actions.runtime-CODTvo7c.js → channel-actions.runtime-B2wMqeVK.js} +60 -57
- package/dist/channel-config-api.js +1 -1
- package/dist/channel-plugin-api.js +1 -1
- package/dist/channel-type-CVLZyGYS.js +7 -0
- package/dist/{channel.setup-CSiwnMgs.js → channel.setup-z_ewMVa9.js} +18 -18
- package/dist/{components-ezGKo_Yh.js → components-gvRA0oaI.js} +33 -29
- package/dist/{config-schema-DC5kDtQ5.js → config-schema-B797-Spt.js} +21 -14
- package/dist/{conversation-binding-route-D6rCQ5S0.js → conversation-binding-route-DPpBRpYI.js} +1 -1
- package/dist/{directory-config-XyCfoqLg.js → directory-config-AA8wQx0D.js} +2 -2
- package/dist/directory-contract-api.js +1 -1
- package/dist/{directory-live-Df0NbFJB.js → directory-live-D_kFz_Fj.js} +4 -4
- package/dist/{doctor-DYY31GrO.js → doctor-QQTOkBfW.js} +5 -5
- package/dist/{doctor-contract-DsWvKIXF.js → doctor-contract-Co5vRCZ6.js} +9 -6
- package/dist/doctor-contract-api.js +4 -3
- package/dist/{handle-action.guild-admin-6Tvvinsa.js → handle-action.guild-admin-Cc88ZGon.js} +9 -5
- package/dist/index.js +1 -1
- package/dist/ingress-identity-BCzfPPYM.js +60 -0
- package/dist/{message-handler-B61q5MOF.js → message-handler-CAeEpqWo.js} +14 -10
- package/dist/{message-handler.preflight-Bzg_Hawz.js → message-handler.preflight-CoKoE3dY.js} +32 -91
- package/dist/{message-handler.process--4_712Ec.js → message-handler.process-cdIJ_fDT.js} +99 -123
- package/dist/{message-utils-BXLLnFl6.js → message-text-C0K4-fkg.js} +41 -34
- package/dist/{outbound-adapter-DxHTOqiN.js → outbound-adapter-Ch0At5Ra.js} +85 -78
- package/dist/{outbound-components-B2PL0ooH.js → outbound-components-Bnt_7x7r.js} +5 -4
- package/dist/outbound-session-route-CzzerX2K.js +668 -0
- package/dist/{owner-access-Bg41VzAf.js → owner-access-yc1sX7Gx.js} +7 -6
- package/dist/{pluralkit-dUl4v1X3.js → pluralkit-B3cUVI7i.js} +2 -2
- package/dist/{probe-BTdtVRwU.js → probe-3ovFAp3b.js} +3 -3
- package/dist/{probe.runtime-Dq5-PRKT.js → probe.runtime-BckHn3cJ.js} +1 -1
- package/dist/{provider-DlK_ynqt.js → provider-CjI8BSzS.js} +511 -342
- package/dist/{provider-session.runtime-CvvphHvs.js → provider-session.runtime-DdKRMcE9.js} +3 -3
- package/dist/provider.runtime-Bo1WbLLr.js +2 -0
- package/dist/{realtime-session.runtime-ysbMG8v7.js → realtime-session.runtime-37IC-p5K.js} +110 -126
- package/dist/{resolve-allowlist-common-DIVXbD1P.js → resolve-allowlist-common-BJ5UZNNT.js} +3 -3
- package/dist/{resolve-channels-CGeUoIqb.js → resolve-channels-BexR2eUn.js} +6 -5
- package/dist/{resolve-users-BtKxLUZv.js → resolve-users-BtXBCH5W.js} +5 -4
- package/dist/{retry-after-DdLPmPoa.js → retry-after-BrLjLUJi.js} +2 -1
- package/dist/{retry-DNsVTeTo.js → retry-t5RcEsPk.js} +237 -15
- package/dist/{runtime-CQovMsH3.js → runtime-BNlDfLwS.js} +2 -2
- package/dist/{runtime-D71_VFLr.js → runtime-DydyfxST.js} +182 -131
- package/dist/runtime-api.js +19 -26
- package/dist/{secret-config-contract-B3i6WxV5.js → secret-config-contract-DFu9hfU8.js} +14 -6
- package/dist/secret-contract-api.js +1 -1
- package/dist/{security-audit-BfJhAXZp.js → security-audit-DKfK-iPY.js} +10 -11
- package/dist/security-audit-contract-api.js +1 -1
- package/dist/{security-audit.runtime-BVKF9VtY.js → security-audit.runtime-sKZyKgpx.js} +1 -1
- package/dist/{send-rQIffSYu.js → send-mTKSBdmZ.js} +149 -58
- package/dist/{send.components-ChK1wS7w.js → send.components-nsPnc7kK.js} +29 -30
- package/dist/{send.outbound-HIkgji_7.js → send.outbound-CaOs9Zy1.js} +87 -84
- package/dist/{send.shared-B3fpaLWJ.js → send.shared-BJHt0Vyf.js} +55 -33
- package/dist/{sender-identity-BJtfyise.js → sender-identity-Dt0imZyY.js} +1 -1
- package/dist/setup-plugin-api.js +1 -1
- package/dist/{shared-CaAaoksy.js → shared-BNesVA4P.js} +43 -18
- package/dist/{subagent-hooks-CNT2ZJTJ.js → subagent-hooks-IeZVPLGj.js} +2 -2
- package/dist/subagent-hooks-api.js +1 -6
- package/dist/{system-events-Nuwoq_au.js → system-events-Be5EJI3b.js} +2 -2
- package/dist/{target-resolver-DIXShHaZ.js → target-resolver-C0MnwEki.js} +6 -5
- package/dist/targets-DQSye1Rv.js +3 -0
- package/dist/{thread-bindings-VlymUnbz.js → thread-bindings-wECUSIIG.js} +6 -6
- package/dist/{thread-bindings.manager-CngsgErq.js → thread-bindings.manager-B-3UHCc1.js} +31 -32
- package/dist/{thread-bindings.session-updates-CJb-BpPL.js → thread-bindings.session-updates-CC7HoQvt.js} +2 -1
- package/dist/{threading-DU6pgeGm.js → threading-te5ADPQI.js} +51 -27
- package/dist/{timeouts-B9cy6RvQ.js → timeouts-D86uWLt_.js} +1 -1
- package/dist/{transcripts-source-DeIMNbRh.js → transcripts-source-DkUhR7YK.js} +9 -4
- package/dist/transcripts-source-api.js +1 -1
- package/dist/{typing-oLiS5Z13.js → typing-DAwJF5VT.js} +2 -2
- package/dist/{voice-runtime-CjNFaynA.js → voice-runtime-COyYYTDD.js} +418 -74
- package/node_modules/@discord/embedded-app-sdk/node_modules/@types/lodash/README.md +1 -1
- package/node_modules/@discord/embedded-app-sdk/node_modules/@types/lodash/conforms.d.ts +2 -0
- package/node_modules/@discord/embedded-app-sdk/node_modules/@types/lodash/package.json +3 -3
- package/node_modules/@discord/embedded-app-sdk/node_modules/@types/lodash/stubArray.d.ts +2 -0
- package/node_modules/@discord/embedded-app-sdk/node_modules/@types/lodash/stubObject.d.ts +2 -0
- package/node_modules/@discord/embedded-app-sdk/node_modules/@types/lodash/stubString.d.ts +2 -0
- package/node_modules/@discord/embedded-app-sdk/node_modules/uuid/README.md +19 -19
- package/node_modules/@discord/embedded-app-sdk/node_modules/uuid/dist/v1.js +7 -3
- package/node_modules/@discord/embedded-app-sdk/node_modules/uuid/dist/v7.js +5 -2
- package/node_modules/@discord/embedded-app-sdk/node_modules/uuid/dist-node/v1.js +7 -3
- package/node_modules/@discord/embedded-app-sdk/node_modules/uuid/dist-node/v7.js +5 -2
- package/node_modules/@discord/embedded-app-sdk/node_modules/uuid/package.json +4 -3
- package/node_modules/@discordjs/voice/node_modules/@types/node/README.md +1 -1
- package/node_modules/@discordjs/voice/node_modules/@types/node/child_process.d.ts +0 -1
- package/node_modules/@discordjs/voice/node_modules/@types/node/crypto.d.ts +6 -6
- package/node_modules/@discordjs/voice/node_modules/@types/node/dns/promises.d.ts +5 -5
- package/node_modules/@discordjs/voice/node_modules/@types/node/dns.d.ts +5 -5
- package/node_modules/@discordjs/voice/node_modules/@types/node/fs.d.ts +7 -0
- package/node_modules/@discordjs/voice/node_modules/@types/node/http.d.ts +30 -0
- package/node_modules/@discordjs/voice/node_modules/@types/node/http2.d.ts +4 -4
- package/node_modules/@discordjs/voice/node_modules/@types/node/os.d.ts +30 -30
- package/node_modules/@discordjs/voice/node_modules/@types/node/package.json +2 -2
- package/node_modules/@discordjs/voice/node_modules/@types/node/perf_hooks.d.ts +2 -1
- package/node_modules/@discordjs/voice/node_modules/@types/node/process.d.ts +42 -43
- package/node_modules/@discordjs/voice/node_modules/@types/node/quic.d.ts +1049 -84
- package/node_modules/@discordjs/voice/node_modules/@types/node/sqlite.d.ts +14 -1
- package/node_modules/@discordjs/voice/node_modules/@types/node/stream/iter.d.ts +3 -2
- package/node_modules/@discordjs/voice/node_modules/@types/node/test.d.ts +61 -0
- package/node_modules/@discordjs/voice/node_modules/@types/node/v8.d.ts +20 -23
- package/node_modules/discord-api-types/CHANGELOG.md +8 -0
- package/node_modules/discord-api-types/package.json +4 -4
- package/node_modules/discord-api-types/payloads/v10/channel.d.ts +2 -2
- package/node_modules/discord-api-types/payloads/v10/channel.d.ts.map +1 -1
- package/node_modules/discord-api-types/payloads/v10/gateway.d.ts +4 -0
- package/node_modules/discord-api-types/payloads/v10/gateway.d.ts.map +1 -1
- package/node_modules/discord-api-types/payloads/v10/gateway.js.map +1 -1
- package/node_modules/discord-api-types/payloads/v10/message.d.ts +4 -1
- package/node_modules/discord-api-types/payloads/v10/message.d.ts.map +1 -1
- package/node_modules/discord-api-types/payloads/v10/message.js +1 -0
- package/node_modules/discord-api-types/payloads/v10/message.js.map +1 -1
- package/node_modules/discord-api-types/payloads/v9/channel.d.ts +2 -2
- package/node_modules/discord-api-types/payloads/v9/channel.d.ts.map +1 -1
- package/node_modules/discord-api-types/payloads/v9/gateway.d.ts +4 -0
- package/node_modules/discord-api-types/payloads/v9/gateway.d.ts.map +1 -1
- package/node_modules/discord-api-types/payloads/v9/gateway.js.map +1 -1
- package/node_modules/discord-api-types/payloads/v9/message.d.ts +4 -1
- package/node_modules/discord-api-types/payloads/v9/message.d.ts.map +1 -1
- package/node_modules/discord-api-types/payloads/v9/message.js +1 -0
- package/node_modules/discord-api-types/payloads/v9/message.js.map +1 -1
- package/node_modules/typebox/build/format/date.d.mts +1 -1
- package/node_modules/typebox/build/format/date.mjs +1 -1
- package/node_modules/typebox/build/format/date_time.d.mts +2 -2
- package/node_modules/typebox/build/format/date_time.mjs +3 -3
- package/node_modules/typebox/build/format/email.d.mts +1 -1
- package/node_modules/typebox/build/format/email.mjs +2 -2
- package/node_modules/typebox/build/format/hostname.mjs +2 -10
- package/node_modules/typebox/build/format/idn_email.d.mts +1 -1
- package/node_modules/typebox/build/format/idn_email.mjs +3 -3
- package/node_modules/typebox/build/format/idn_hostname.d.mts +1 -0
- package/node_modules/typebox/build/format/idn_hostname.mjs +3 -11
- package/node_modules/typebox/build/format/idna/format/bidi.d.mts +3 -0
- package/node_modules/typebox/build/format/idna/format/bidi.mjs +98 -0
- package/node_modules/typebox/build/format/idna/format/puny.d.mts +3 -0
- package/node_modules/typebox/build/format/idna/format/puny.mjs +144 -0
- package/node_modules/typebox/build/format/idna/hostname.d.mts +1 -0
- package/node_modules/typebox/build/format/idna/hostname.mjs +16 -0
- package/node_modules/typebox/build/format/idna/idn-hostname.d.mts +1 -0
- package/node_modules/typebox/build/format/idna/idn-hostname.mjs +41 -0
- package/node_modules/typebox/build/format/idna/index.d.mts +2 -0
- package/node_modules/typebox/build/format/idna/index.mjs +2 -0
- package/node_modules/typebox/build/format/idna/label/ascii.d.mts +1 -0
- package/node_modules/typebox/build/format/idna/label/ascii.mjs +9 -0
- package/node_modules/typebox/build/format/idna/label/puny.d.mts +1 -0
- package/node_modules/typebox/build/format/idna/label/puny.mjs +28 -0
- package/node_modules/typebox/build/format/idna/label/unicode.d.mts +1 -0
- package/node_modules/typebox/build/format/idna/label/unicode.mjs +106 -0
- package/node_modules/typebox/build/format/idna/pattern/pattern.d.mts +30 -0
- package/node_modules/typebox/build/format/idna/pattern/pattern.mjs +70 -0
- package/node_modules/typebox/build/format/ipv4.d.mts +0 -1
- package/node_modules/typebox/build/format/ipv4.mjs +2 -32
- package/node_modules/typebox/build/format/ipv6.mjs +2 -61
- package/node_modules/typebox/build/format/iri.d.mts +2 -2
- package/node_modules/typebox/build/format/iri.mjs +26 -8
- package/node_modules/typebox/build/format/iri_reference.d.mts +2 -2
- package/node_modules/typebox/build/format/iri_reference.mjs +9 -55
- package/node_modules/typebox/build/format/regex.d.mts +1 -2
- package/node_modules/typebox/build/format/regex.mjs +2 -6
- package/node_modules/typebox/build/format/time.d.mts +2 -2
- package/node_modules/typebox/build/format/time.mjs +19 -14
- package/node_modules/typebox/build/format/uri.d.mts +1 -1
- package/node_modules/typebox/build/format/uri.mjs +3 -130
- package/node_modules/typebox/build/format/uri_reference.d.mts +1 -1
- package/node_modules/typebox/build/format/uri_reference.mjs +2 -3
- package/node_modules/typebox/build/format/uri_template.d.mts +2 -3
- package/node_modules/typebox/build/format/uri_template.mjs +4 -5
- package/node_modules/typebox/build/format/url.d.mts +3 -3
- package/node_modules/typebox/build/format/url.mjs +4 -5
- package/node_modules/typebox/build/guard/emit.d.mts +3 -1
- package/node_modules/typebox/build/guard/emit.mjs +12 -5
- package/node_modules/typebox/build/guard/guard.d.mts +8 -2
- package/node_modules/typebox/build/guard/guard.mjs +25 -4
- package/node_modules/typebox/build/guard/string.d.mts +2 -2
- package/node_modules/typebox/build/guard/string.mjs +7 -7
- package/node_modules/typebox/build/schema/engine/_context.mjs +3 -3
- package/node_modules/typebox/build/schema/engine/_functions.mjs +1 -2
- package/node_modules/typebox/build/schema/engine/_regexp.d.mts +2 -0
- package/node_modules/typebox/build/schema/engine/_regexp.mjs +4 -0
- package/node_modules/typebox/build/schema/engine/_stack.mjs +12 -13
- package/node_modules/typebox/build/schema/engine/additionalItems.mjs +17 -7
- package/node_modules/typebox/build/schema/engine/additionalProperties.mjs +4 -3
- package/node_modules/typebox/build/schema/engine/contains.mjs +18 -6
- package/node_modules/typebox/build/schema/engine/enum.mjs +1 -1
- package/node_modules/typebox/build/schema/engine/items.mjs +26 -6
- package/node_modules/typebox/build/schema/engine/maxContains.mjs +3 -3
- package/node_modules/typebox/build/schema/engine/minContains.mjs +14 -4
- package/node_modules/typebox/build/schema/engine/not.mjs +4 -2
- package/node_modules/typebox/build/schema/engine/oneOf.mjs +7 -6
- package/node_modules/typebox/build/schema/engine/pattern.mjs +3 -2
- package/node_modules/typebox/build/schema/engine/patternProperties.mjs +4 -3
- package/node_modules/typebox/build/schema/engine/ref.mjs +1 -7
- package/node_modules/typebox/build/schema/engine/schema.mjs +13 -4
- package/node_modules/typebox/build/schema/engine/type.mjs +1 -1
- package/node_modules/typebox/build/schema/resolve/resolve.d.mts +4 -1
- package/node_modules/typebox/build/schema/resolve/resolve.mjs +202 -1
- package/node_modules/typebox/build/schema/static/propertyNames.d.mts +5 -0
- package/node_modules/typebox/build/schema/static/propertyNames.mjs +3 -0
- package/node_modules/typebox/build/schema/static/schema.d.mts +3 -0
- package/node_modules/typebox/build/schema/types/index.d.mts +0 -2
- package/node_modules/typebox/build/schema/types/index.mjs +0 -2
- package/node_modules/typebox/build/system/memory/clone.mjs +14 -11
- package/node_modules/typebox/build/system/memory/discard.mjs +6 -5
- package/node_modules/typebox/build/system/settings/settings.d.mts +9 -0
- package/node_modules/typebox/build/system/settings/settings.mjs +2 -0
- package/node_modules/typebox/build/type/engine/call/distribute_arguments.d.mts +6 -1
- package/node_modules/typebox/build/type/engine/call/distribute_arguments.mjs +16 -3
- package/node_modules/typebox/build/type/engine/call/instantiate.mjs +34 -4
- package/node_modules/typebox/build/type/engine/evaluate/broaden.d.mts +5 -5
- package/node_modules/typebox/build/type/engine/evaluate/broaden.mjs +20 -26
- package/node_modules/typebox/build/type/engine/evaluate/compare.d.mts +6 -10
- package/node_modules/typebox/build/type/engine/evaluate/compare.mjs +9 -13
- package/node_modules/typebox/build/type/engine/evaluate/composite.d.mts +7 -4
- package/node_modules/typebox/build/type/engine/evaluate/composite.mjs +12 -19
- package/node_modules/typebox/build/type/engine/evaluate/distribute.d.mts +4 -20
- package/node_modules/typebox/build/type/engine/evaluate/distribute.mjs +8 -20
- package/node_modules/typebox/build/type/engine/evaluate/evaluate.d.mts +4 -4
- package/node_modules/typebox/build/type/engine/evaluate/evaluate.mjs +11 -8
- package/node_modules/typebox/build/type/engine/evaluate/flatten.d.mts +1 -1
- package/node_modules/typebox/build/type/engine/evaluate/flatten.mjs +3 -4
- package/node_modules/typebox/build/type/engine/evaluate/narrow.d.mts +17 -2
- package/node_modules/typebox/build/type/engine/evaluate/narrow.mjs +26 -6
- package/node_modules/typebox/build/type/engine/exclude/operation.mjs +3 -4
- package/node_modules/typebox/build/type/engine/extract/operation.d.mts +1 -1
- package/node_modules/typebox/build/type/engine/extract/operation.mjs +3 -4
- package/node_modules/typebox/build/type/engine/priority/priority.d.mts +2 -2
- package/node_modules/typebox/build/type/engine/priority/priority.mjs +3 -4
- package/node_modules/typebox/build/type/script/mapping.d.mts +32 -29
- package/node_modules/typebox/build/type/script/mapping.mjs +18 -25
- package/node_modules/typebox/build/type/script/parser.d.mts +19 -25
- package/node_modules/typebox/build/type/script/parser.mjs +27 -23
- package/node_modules/typebox/build/value/errors/errors.d.mts +2 -2
- package/node_modules/typebox/build/value/errors/errors.mjs +1 -1
- package/node_modules/typebox/package.json +27 -27
- package/node_modules/typebox/readme.md +79 -82
- package/node_modules/undici/docs/docs/api/Client.md +21 -8
- package/node_modules/undici/lib/api/readable.js +33 -43
- package/node_modules/undici/lib/core/connect.js +16 -2
- package/node_modules/undici/lib/core/symbols.js +1 -0
- package/node_modules/undici/lib/dispatcher/client-h1.js +3 -3
- package/node_modules/undici/lib/dispatcher/client-h2.js +179 -10
- package/node_modules/undici/lib/dispatcher/client.js +74 -29
- package/node_modules/undici/lib/dispatcher/env-http-proxy-agent.js +28 -6
- package/node_modules/undici/lib/dispatcher/socks5-proxy-agent.js +15 -1
- package/node_modules/undici/lib/handler/retry-handler.js +7 -2
- package/node_modules/undici/lib/interceptor/cache.js +5 -2
- package/node_modules/undici/lib/interceptor/deduplicate.js +1 -1
- package/node_modules/undici/lib/mock/mock-utils.js +213 -24
- package/node_modules/undici/lib/util/cache.js +2 -4
- package/node_modules/undici/lib/web/websocket/websocket.js +22 -0
- package/node_modules/undici/package.json +1 -1
- package/node_modules/undici/types/client.d.ts +40 -0
- package/node_modules/ws/lib/permessage-deflate.js +3 -1
- package/node_modules/ws/package.json +1 -1
- package/openclaw.plugin.json +14 -6
- package/package.json +8 -8
- package/skills/discord/SKILL.md +1 -1
- package/dist/account-inspect-D5xmUpnj.js +0 -89
- package/dist/approval-message-safety-XGFPbDoI.js +0 -226
- package/dist/audit-core-BCX8UeFH.js +0 -105
- package/dist/channel-actions-Dr2QI8Bf.js +0 -212
- package/dist/inbound-event-delivery-De2qxTrP.js +0 -39
- package/dist/provider.runtime-CzKGRiAF.js +0 -2
- package/dist/runtime-api.actions.js +0 -3
- package/dist/runtime-api.lookup.js +0 -7
- package/dist/runtime-api.monitor-CzeTYF32.js +0 -6
- package/dist/runtime-api.monitor.js +0 -9
- package/dist/runtime-api.send.js +0 -7
- package/dist/runtime-api.threads.js +0 -5
- package/dist/sdk-runtime-37OU6_Yh.js +0 -369
- package/dist/send.reactions-gmJ6yFPo.js +0 -78
- package/dist/send.receipt-Cnhoautb.js +0 -76
- package/dist/subagent-progress-FPLqBY1s.js +0 -110
- package/dist/targets-B2pf49zc.js +0 -3
- package/node_modules/typebox/build/format/_idna.d.mts +0 -2
- package/node_modules/typebox/build/format/_idna.mjs +0 -246
- package/node_modules/typebox/build/format/_puny.d.mts +0 -1
- package/node_modules/typebox/build/format/_puny.mjs +0 -77
- package/node_modules/typebox/build/schema/resolve/ref.d.mts +0 -3
- package/node_modules/typebox/build/schema/resolve/ref.mjs +0 -146
- package/node_modules/typebox/build/schema/types/contentEncoding.d.mts +0 -9
- package/node_modules/typebox/build/schema/types/contentEncoding.mjs +0 -13
- package/node_modules/typebox/build/schema/types/contentMediaType.d.mts +0 -9
- package/node_modules/typebox/build/schema/types/contentMediaType.mjs +0 -13
|
@@ -17,6 +17,7 @@ const {
|
|
|
17
17
|
}
|
|
18
18
|
} = require('node:util')
|
|
19
19
|
const { InvalidArgumentError } = require('../core/errors')
|
|
20
|
+
const requestAborted = Symbol('request aborted')
|
|
20
21
|
|
|
21
22
|
function matchValue (match, value) {
|
|
22
23
|
if (typeof match === 'string') {
|
|
@@ -153,6 +154,11 @@ function getResponseData (data) {
|
|
|
153
154
|
return data
|
|
154
155
|
} else if (data instanceof ArrayBuffer) {
|
|
155
156
|
return data
|
|
157
|
+
} else if (ArrayBuffer.isView(data)) {
|
|
158
|
+
// A DataView, or any non-Uint8Array typed array, is a byte container
|
|
159
|
+
// rather than a plain object. Buffer.from() cannot read one directly, so
|
|
160
|
+
// expose the bytes it covers instead of letting it reach JSON.stringify.
|
|
161
|
+
return new Uint8Array(data.buffer, data.byteOffset, data.byteLength)
|
|
156
162
|
} else if (typeof data === 'object') {
|
|
157
163
|
return JSON.stringify(data)
|
|
158
164
|
} else if (data) {
|
|
@@ -225,9 +231,15 @@ function deleteMockDispatch (mockDispatches, key) {
|
|
|
225
231
|
}
|
|
226
232
|
|
|
227
233
|
/**
|
|
228
|
-
* @param {string} path Path to remove trailing slash from
|
|
234
|
+
* @param {string|RegExp|Function} path Path, or path matcher, to remove trailing slash from
|
|
229
235
|
*/
|
|
230
236
|
function removeTrailingSlash (path) {
|
|
237
|
+
// Registered path matchers may be a RegExp or a function, which have no
|
|
238
|
+
// trailing slash to strip; hand those back for matchValue to apply.
|
|
239
|
+
if (typeof path !== 'string') {
|
|
240
|
+
return path
|
|
241
|
+
}
|
|
242
|
+
|
|
231
243
|
while (path.endsWith('/')) {
|
|
232
244
|
path = path.slice(0, -1)
|
|
233
245
|
}
|
|
@@ -302,9 +314,13 @@ function mockDispatch (opts, handler) {
|
|
|
302
314
|
mockDispatch.consumed = !mockDispatch.persist && timesInvoked >= times
|
|
303
315
|
mockDispatch.pending = timesInvoked < times
|
|
304
316
|
|
|
317
|
+
const hasBodyHooks = typeof handler.onBodySent === 'function' ||
|
|
318
|
+
typeof handler.onRequestSent === 'function'
|
|
319
|
+
|
|
305
320
|
// Here's where we resolve a callback if a callback is present for the dispatch data.
|
|
306
|
-
if (mockDispatch.data.callback) {
|
|
307
|
-
const
|
|
321
|
+
if (mockDispatch.data.callback && (!hasBodyHooks || opts.body == null)) {
|
|
322
|
+
const { callback, ...responseDefaults } = mockDispatch.data
|
|
323
|
+
const callbackResult = callback(opts)
|
|
308
324
|
|
|
309
325
|
// An asynchronous reply options callback resolves to the reply data, so
|
|
310
326
|
// the dispatch can only continue once the returned promise settles.
|
|
@@ -313,18 +329,25 @@ function mockDispatch (opts, handler) {
|
|
|
313
329
|
if (isPromise(callbackResult)) {
|
|
314
330
|
callbackResult.then(
|
|
315
331
|
(resolvedData) => {
|
|
316
|
-
|
|
332
|
+
if (resolvedData == null || typeof resolvedData !== 'object') {
|
|
333
|
+
handler.onResponseError(null, new InvalidArgumentError('reply options callback must return an object'))
|
|
334
|
+
return
|
|
335
|
+
}
|
|
336
|
+
mockDispatch.data = { ...responseDefaults, ...resolvedData }
|
|
317
337
|
dispatchMockReply(mockDispatches, mockDispatch, key, opts, handler)
|
|
318
338
|
},
|
|
319
339
|
(error) => {
|
|
320
|
-
deleteMockDispatch(mockDispatches, key)
|
|
321
340
|
handler.onResponseError(null, error)
|
|
322
341
|
}
|
|
323
342
|
)
|
|
324
343
|
return true
|
|
325
344
|
}
|
|
326
345
|
|
|
327
|
-
|
|
346
|
+
if (callbackResult == null || typeof callbackResult !== 'object') {
|
|
347
|
+
throw new InvalidArgumentError('reply options callback must return an object')
|
|
348
|
+
}
|
|
349
|
+
|
|
350
|
+
mockDispatch.data = { ...responseDefaults, ...callbackResult }
|
|
328
351
|
}
|
|
329
352
|
|
|
330
353
|
return dispatchMockReply(mockDispatches, mockDispatch, key, opts, handler)
|
|
@@ -335,12 +358,12 @@ function mockDispatch (opts, handler) {
|
|
|
335
358
|
*/
|
|
336
359
|
function dispatchMockReply (mockDispatches, mockDispatch, key, opts, handler) {
|
|
337
360
|
// Parse mockDispatch data
|
|
338
|
-
const { data:
|
|
361
|
+
const { data: response, delay } = mockDispatch
|
|
339
362
|
|
|
340
363
|
// If specified, trigger dispatch error
|
|
341
|
-
if (error !== null) {
|
|
364
|
+
if (response.error !== null) {
|
|
342
365
|
deleteMockDispatch(mockDispatches, key)
|
|
343
|
-
handler.onResponseError(null, error)
|
|
366
|
+
handler.onResponseError(null, response.error)
|
|
344
367
|
return true
|
|
345
368
|
}
|
|
346
369
|
|
|
@@ -375,32 +398,107 @@ function dispatchMockReply (mockDispatches, mockDispatch, key, opts, handler) {
|
|
|
375
398
|
}
|
|
376
399
|
}
|
|
377
400
|
|
|
401
|
+
let replyOpts = opts
|
|
402
|
+
const dispatches = mockDispatches
|
|
403
|
+
|
|
378
404
|
// Call onRequestStart to allow the handler to receive the controller
|
|
379
405
|
handler.onRequestStart?.(controller, null)
|
|
380
406
|
|
|
381
|
-
|
|
382
|
-
|
|
383
|
-
|
|
384
|
-
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
|
|
388
|
-
|
|
407
|
+
if (aborted) {
|
|
408
|
+
return true
|
|
409
|
+
}
|
|
410
|
+
|
|
411
|
+
const requestBody = dispatchRequestBody(opts.body, handler, controller, () => aborted)
|
|
412
|
+
|
|
413
|
+
if (isPromise(requestBody)) {
|
|
414
|
+
requestBody.then((body) => {
|
|
415
|
+
if (body === requestAborted) {
|
|
416
|
+
return
|
|
417
|
+
}
|
|
418
|
+
|
|
419
|
+
if (body !== opts.body) {
|
|
420
|
+
replyOpts = { ...opts, body }
|
|
421
|
+
}
|
|
422
|
+
|
|
423
|
+
sendReply()
|
|
424
|
+
}, (error) => controller.abort(error))
|
|
425
|
+
return true
|
|
426
|
+
}
|
|
427
|
+
|
|
428
|
+
if (requestBody === requestAborted) {
|
|
429
|
+
return true
|
|
430
|
+
}
|
|
431
|
+
|
|
432
|
+
if (requestBody !== opts.body) {
|
|
433
|
+
replyOpts = { ...opts, body: requestBody }
|
|
434
|
+
}
|
|
435
|
+
|
|
436
|
+
sendReply()
|
|
437
|
+
|
|
438
|
+
function sendReply () {
|
|
439
|
+
if (response.callback) {
|
|
440
|
+
const { callback, ...responseDefaults } = response
|
|
441
|
+
let callbackResult
|
|
442
|
+
try {
|
|
443
|
+
callbackResult = callback(replyOpts)
|
|
444
|
+
} catch (err) {
|
|
445
|
+
deleteMockDispatch(mockDispatches, key)
|
|
446
|
+
handler.onResponseError(null, err)
|
|
447
|
+
return
|
|
448
|
+
}
|
|
449
|
+
|
|
450
|
+
if (isPromise(callbackResult)) {
|
|
451
|
+
callbackResult.then(
|
|
452
|
+
(resolvedData) => {
|
|
453
|
+
if (resolvedData == null || typeof resolvedData !== 'object') {
|
|
454
|
+
handler.onResponseError(null, new InvalidArgumentError('reply options callback must return an object'))
|
|
455
|
+
return
|
|
456
|
+
}
|
|
457
|
+
mockDispatch.data = { ...responseDefaults, ...resolvedData }
|
|
458
|
+
handleReply(dispatches, mockDispatch.data)
|
|
459
|
+
},
|
|
460
|
+
(err) => {
|
|
461
|
+
handler.onResponseError(null, err)
|
|
462
|
+
}
|
|
463
|
+
)
|
|
464
|
+
return
|
|
465
|
+
}
|
|
466
|
+
|
|
467
|
+
if (callbackResult == null || typeof callbackResult !== 'object') {
|
|
468
|
+
throw new InvalidArgumentError('reply options callback must return an object')
|
|
469
|
+
}
|
|
470
|
+
|
|
471
|
+
mockDispatch.data = { ...responseDefaults, ...callbackResult }
|
|
472
|
+
handleReply(dispatches, mockDispatch.data)
|
|
473
|
+
return
|
|
474
|
+
}
|
|
475
|
+
|
|
476
|
+
// Handle the request with a delay if necessary
|
|
477
|
+
if (typeof delay === 'number' && delay > 0) {
|
|
478
|
+
timer = setTimeout(() => {
|
|
479
|
+
timer = null
|
|
480
|
+
handleReply(dispatches)
|
|
481
|
+
}, delay)
|
|
482
|
+
} else {
|
|
483
|
+
handleReply(dispatches)
|
|
484
|
+
}
|
|
389
485
|
}
|
|
390
486
|
|
|
391
|
-
function handleReply (mockDispatches,
|
|
487
|
+
function handleReply (mockDispatches, _response = response) {
|
|
392
488
|
// Don't send response if the request was aborted
|
|
393
489
|
if (aborted) {
|
|
394
490
|
return
|
|
395
491
|
}
|
|
396
492
|
|
|
493
|
+
const { statusCode, data, headers, trailers } = _response
|
|
494
|
+
|
|
397
495
|
// fetch's HeadersList is a 1D string array
|
|
398
496
|
const optsHeaders = Array.isArray(opts.headers)
|
|
399
497
|
? buildHeadersFromArray(opts.headers)
|
|
400
498
|
: opts.headers
|
|
401
|
-
const body = typeof
|
|
402
|
-
?
|
|
403
|
-
:
|
|
499
|
+
const body = typeof data === 'function'
|
|
500
|
+
? data({ ...replyOpts, headers: optsHeaders })
|
|
501
|
+
: data
|
|
404
502
|
|
|
405
503
|
// util.types.isPromise is likely needed for jest.
|
|
406
504
|
if (isPromise(body)) {
|
|
@@ -409,7 +507,7 @@ function dispatchMockReply (mockDispatches, mockDispatch, key, opts, handler) {
|
|
|
409
507
|
// synchronously throw the error, which breaks some tests.
|
|
410
508
|
// Rather, we wait for the callback to resolve if it is a
|
|
411
509
|
// promise, and then re-run handleReply with the new body.
|
|
412
|
-
return body.then((newData) => handleReply(mockDispatches, newData))
|
|
510
|
+
return body.then((newData) => handleReply(mockDispatches, { ..._response, data: newData }))
|
|
413
511
|
}
|
|
414
512
|
|
|
415
513
|
// Check again if aborted after async body resolution
|
|
@@ -418,8 +516,8 @@ function dispatchMockReply (mockDispatches, mockDispatch, key, opts, handler) {
|
|
|
418
516
|
}
|
|
419
517
|
|
|
420
518
|
const responseData = getResponseData(body)
|
|
421
|
-
const responseHeaders = generateKeyValues(headers)
|
|
422
|
-
const responseTrailers = generateKeyValues(trailers)
|
|
519
|
+
const responseHeaders = generateKeyValues(headers ?? {})
|
|
520
|
+
const responseTrailers = generateKeyValues(trailers ?? {})
|
|
423
521
|
|
|
424
522
|
// Update the controller with response data
|
|
425
523
|
controller.rawHeaders = responseHeaders
|
|
@@ -434,6 +532,97 @@ function dispatchMockReply (mockDispatches, mockDispatch, key, opts, handler) {
|
|
|
434
532
|
return true
|
|
435
533
|
}
|
|
436
534
|
|
|
535
|
+
function dispatchRequestBody (body, handler, controller, isAborted) {
|
|
536
|
+
if (typeof handler.onBodySent !== 'function' && typeof handler.onRequestSent !== 'function') {
|
|
537
|
+
return body
|
|
538
|
+
}
|
|
539
|
+
|
|
540
|
+
if (body == null) {
|
|
541
|
+
return callOnRequestSent(handler, controller, isAborted) ? body : requestAborted
|
|
542
|
+
}
|
|
543
|
+
|
|
544
|
+
if (body && typeof body[Symbol.asyncIterator] === 'function') {
|
|
545
|
+
return dispatchAsyncIterableBody(body, handler, controller, isAborted)
|
|
546
|
+
}
|
|
547
|
+
|
|
548
|
+
if (isIterableBody(body)) {
|
|
549
|
+
const chunks = []
|
|
550
|
+
|
|
551
|
+
for (const chunk of body) {
|
|
552
|
+
if (isAborted()) {
|
|
553
|
+
return requestAborted
|
|
554
|
+
}
|
|
555
|
+
chunks.push(chunk)
|
|
556
|
+
if (!callOnBodySent(handler, controller, chunk) || isAborted()) {
|
|
557
|
+
return requestAborted
|
|
558
|
+
}
|
|
559
|
+
}
|
|
560
|
+
|
|
561
|
+
return callOnRequestSent(handler, controller, isAborted) ? chunks : requestAborted
|
|
562
|
+
}
|
|
563
|
+
|
|
564
|
+
if (isAborted()) {
|
|
565
|
+
return requestAborted
|
|
566
|
+
}
|
|
567
|
+
|
|
568
|
+
if (!callOnBodySent(handler, controller, body)) {
|
|
569
|
+
return requestAborted
|
|
570
|
+
}
|
|
571
|
+
|
|
572
|
+
return callOnRequestSent(handler, controller, isAborted) ? body : requestAborted
|
|
573
|
+
}
|
|
574
|
+
|
|
575
|
+
async function dispatchAsyncIterableBody (body, handler, controller, isAborted) {
|
|
576
|
+
const chunks = []
|
|
577
|
+
|
|
578
|
+
for await (const chunk of body) {
|
|
579
|
+
if (isAborted()) {
|
|
580
|
+
return requestAborted
|
|
581
|
+
}
|
|
582
|
+
chunks.push(chunk)
|
|
583
|
+
if (!callOnBodySent(handler, controller, chunk) || isAborted()) {
|
|
584
|
+
return requestAborted
|
|
585
|
+
}
|
|
586
|
+
}
|
|
587
|
+
|
|
588
|
+
if (!callOnRequestSent(handler, controller, isAborted)) {
|
|
589
|
+
return requestAborted
|
|
590
|
+
}
|
|
591
|
+
|
|
592
|
+
return {
|
|
593
|
+
async * [Symbol.asyncIterator] () {
|
|
594
|
+
yield * chunks
|
|
595
|
+
}
|
|
596
|
+
}
|
|
597
|
+
}
|
|
598
|
+
|
|
599
|
+
function callOnBodySent (handler, controller, chunk) {
|
|
600
|
+
try {
|
|
601
|
+
handler.onBodySent?.(chunk)
|
|
602
|
+
return true
|
|
603
|
+
} catch (error) {
|
|
604
|
+
controller.abort(error)
|
|
605
|
+
return false
|
|
606
|
+
}
|
|
607
|
+
}
|
|
608
|
+
|
|
609
|
+
function callOnRequestSent (handler, controller, isAborted) {
|
|
610
|
+
try {
|
|
611
|
+
handler.onRequestSent?.()
|
|
612
|
+
return !isAborted()
|
|
613
|
+
} catch (error) {
|
|
614
|
+
controller.abort(error)
|
|
615
|
+
return false
|
|
616
|
+
}
|
|
617
|
+
}
|
|
618
|
+
|
|
619
|
+
function isIterableBody (body) {
|
|
620
|
+
return typeof body !== 'string' &&
|
|
621
|
+
!Buffer.isBuffer(body) &&
|
|
622
|
+
!ArrayBuffer.isView(body) &&
|
|
623
|
+
typeof body[Symbol.iterator] === 'function'
|
|
624
|
+
}
|
|
625
|
+
|
|
437
626
|
function buildMockDispatch () {
|
|
438
627
|
const agent = this[kMockAgent]
|
|
439
628
|
const origin = this[kOrigin]
|
|
@@ -148,9 +148,7 @@ function getMalformedRestrictiveDirectiveName (key) {
|
|
|
148
148
|
* @param {import('../../types/dispatcher.d.ts').default.DispatchOptions} opts
|
|
149
149
|
*/
|
|
150
150
|
function makeCacheKey (opts) {
|
|
151
|
-
|
|
152
|
-
throw new Error('opts.origin is undefined')
|
|
153
|
-
}
|
|
151
|
+
const origin = opts.origin ? opts.origin.toString() : ''
|
|
154
152
|
|
|
155
153
|
let fullPath = opts.path || '/'
|
|
156
154
|
|
|
@@ -159,7 +157,7 @@ function makeCacheKey (opts) {
|
|
|
159
157
|
}
|
|
160
158
|
|
|
161
159
|
return {
|
|
162
|
-
origin
|
|
160
|
+
origin,
|
|
163
161
|
method: opts.method,
|
|
164
162
|
path: fullPath,
|
|
165
163
|
headers: opts.headers
|
|
@@ -25,6 +25,9 @@ const { SendQueue } = require('./sender')
|
|
|
25
25
|
const { WebsocketFrameSend } = require('./frame')
|
|
26
26
|
const { channels } = require('../../core/diagnostics')
|
|
27
27
|
|
|
28
|
+
const kRef = Symbol.for('nodejs.ref')
|
|
29
|
+
const kUnref = Symbol.for('nodejs.unref')
|
|
30
|
+
|
|
28
31
|
function getSocketAddress (socket) {
|
|
29
32
|
if (typeof socket?.address === 'function') {
|
|
30
33
|
return socket.address()
|
|
@@ -68,6 +71,7 @@ class WebSocket extends EventTarget {
|
|
|
68
71
|
#bufferedAmount = 0
|
|
69
72
|
#protocol = ''
|
|
70
73
|
#extensions = ''
|
|
74
|
+
#refed = true
|
|
71
75
|
|
|
72
76
|
/** @type {SendQueue} */
|
|
73
77
|
#sendQueue
|
|
@@ -194,6 +198,20 @@ class WebSocket extends EventTarget {
|
|
|
194
198
|
this.#binaryType = 'blob'
|
|
195
199
|
}
|
|
196
200
|
|
|
201
|
+
[kRef] () {
|
|
202
|
+
webidl.brandCheck(this, WebSocket)
|
|
203
|
+
|
|
204
|
+
this.#refed = true
|
|
205
|
+
this.#handler.socket?.ref?.()
|
|
206
|
+
}
|
|
207
|
+
|
|
208
|
+
[kUnref] () {
|
|
209
|
+
webidl.brandCheck(this, WebSocket)
|
|
210
|
+
|
|
211
|
+
this.#refed = false
|
|
212
|
+
this.#handler.socket?.unref?.()
|
|
213
|
+
}
|
|
214
|
+
|
|
197
215
|
/**
|
|
198
216
|
* @see https://websockets.spec.whatwg.org/#dom-websocket-close
|
|
199
217
|
* @param {number|undefined} code
|
|
@@ -468,6 +486,10 @@ class WebSocket extends EventTarget {
|
|
|
468
486
|
// once this happens, the connection is open
|
|
469
487
|
this.#handler.socket = response.socket
|
|
470
488
|
|
|
489
|
+
if (!this.#refed) {
|
|
490
|
+
this.#handler.socket.unref?.()
|
|
491
|
+
}
|
|
492
|
+
|
|
471
493
|
// Get options from dispatcher options
|
|
472
494
|
const maxFragments = this.#handler.controller.dispatcher?.webSocketOptions?.maxFragments
|
|
473
495
|
const maxPayloadSize = this.#handler.controller.dispatcher?.webSocketOptions?.maxPayloadSize
|
|
@@ -1,10 +1,15 @@
|
|
|
1
1
|
import { URL } from 'node:url'
|
|
2
|
+
import { SessionOptions } from 'node:http2'
|
|
2
3
|
import Dispatcher from './dispatcher'
|
|
3
4
|
import buildConnector from './connector'
|
|
4
5
|
import TClientStats from './client-stats'
|
|
5
6
|
|
|
6
7
|
type ClientConnectOptions<TOpaque = null> = Omit<Dispatcher.ConnectOptions<TOpaque>, 'origin'>
|
|
7
8
|
|
|
9
|
+
// TODO: Pendings
|
|
10
|
+
// 1. Reflect this on Client instantiation
|
|
11
|
+
// 2. Client H2 should use this namespaced options instead.
|
|
12
|
+
|
|
8
13
|
/**
|
|
9
14
|
* A basic HTTP/1.1 client, mapped on top a single TCP/TLS connection. Pipelining is disabled by default.
|
|
10
15
|
*/
|
|
@@ -87,23 +92,31 @@ export declare namespace Client {
|
|
|
87
92
|
/**
|
|
88
93
|
* @description Dictates the maximum number of concurrent streams for a single H2 session. It can be overridden by a SETTINGS remote frame.
|
|
89
94
|
* @default 100
|
|
95
|
+
* @deprecated Use h2Options.maxConcurrentStreams instead
|
|
90
96
|
*/
|
|
91
97
|
maxConcurrentStreams?: number;
|
|
92
98
|
/**
|
|
93
99
|
* @description Sets the HTTP/2 stream-level flow-control window size (SETTINGS_INITIAL_WINDOW_SIZE).
|
|
94
100
|
* @default 262144
|
|
101
|
+
* @deprecated Use h2Options.settings.initialWindowSize instead
|
|
95
102
|
*/
|
|
96
103
|
initialWindowSize?: number;
|
|
97
104
|
/**
|
|
98
105
|
* @description Sets the HTTP/2 connection-level flow-control window size (ClientHttp2Session.setLocalWindowSize).
|
|
99
106
|
* @default 524288
|
|
107
|
+
* @deprecated Use h2Options.connectionWindowSize instead
|
|
100
108
|
*/
|
|
101
109
|
connectionWindowSize?: number;
|
|
102
110
|
/**
|
|
103
111
|
* @description Time interval between PING frames dispatch
|
|
104
112
|
* @default 60000
|
|
113
|
+
* @deprecated Use h2Options.connectionWindowSize instead
|
|
105
114
|
*/
|
|
106
115
|
pingInterval?: number;
|
|
116
|
+
/**
|
|
117
|
+
* @description HTTP/2 configuration options
|
|
118
|
+
*/
|
|
119
|
+
h2Options?: Client.H2Options;
|
|
107
120
|
}
|
|
108
121
|
export interface SocketInfo {
|
|
109
122
|
localAddress?: string
|
|
@@ -129,6 +142,33 @@ export declare namespace Client {
|
|
|
129
142
|
*/
|
|
130
143
|
maxPayloadSize?: number;
|
|
131
144
|
}
|
|
145
|
+
|
|
146
|
+
export interface H2Options extends Omit<SessionOptions, keyof buildConnector.BuildOptions> {
|
|
147
|
+
/**
|
|
148
|
+
* @description Sets the HTTP/2 connection-level flow-control window size (ClientHttp2Session.setLocalWindowSize).
|
|
149
|
+
* @default 524288
|
|
150
|
+
*/
|
|
151
|
+
connectionWindowSize?: number;
|
|
152
|
+
/**
|
|
153
|
+
* @description Time interval between PING frames dispatch
|
|
154
|
+
* @default 60000
|
|
155
|
+
*/
|
|
156
|
+
pingInterval?: number;
|
|
157
|
+
/**
|
|
158
|
+
* @description Dictates the maximum number of concurrent streams for a single H2 session. It can be overridden by a SETTINGS remote frame.
|
|
159
|
+
* @default 100
|
|
160
|
+
*/
|
|
161
|
+
maxConcurrentStreams?: number;
|
|
162
|
+
/**
|
|
163
|
+
* @description Enable support for H2C (plain text)
|
|
164
|
+
* @default false
|
|
165
|
+
*/
|
|
166
|
+
useH2c?: boolean;
|
|
167
|
+
/**
|
|
168
|
+
* @description SETTINGS frame object. Default to 'node:http2' defaults
|
|
169
|
+
*/
|
|
170
|
+
settings?: Omit<SessionOptions['settings'], 'enablePush' | 'maxConcurrentStreams' | 'enableConnectProtocol'>
|
|
171
|
+
}
|
|
132
172
|
}
|
|
133
173
|
|
|
134
174
|
export default Client
|
|
@@ -167,7 +167,9 @@ class PerMessageDeflate {
|
|
|
167
167
|
(typeof opts.serverMaxWindowBits === 'number' &&
|
|
168
168
|
opts.serverMaxWindowBits > params.server_max_window_bits))) ||
|
|
169
169
|
(typeof opts.clientMaxWindowBits === 'number' &&
|
|
170
|
-
|
|
170
|
+
(typeof params.client_max_window_bits === 'number'
|
|
171
|
+
? opts.clientMaxWindowBits > params.client_max_window_bits
|
|
172
|
+
: !params.client_max_window_bits))
|
|
171
173
|
) {
|
|
172
174
|
return false;
|
|
173
175
|
}
|
package/openclaw.plugin.json
CHANGED
|
@@ -63,6 +63,7 @@
|
|
|
63
63
|
"type": "boolean"
|
|
64
64
|
},
|
|
65
65
|
"dmPolicy": {
|
|
66
|
+
"default": "pairing",
|
|
66
67
|
"type": "string",
|
|
67
68
|
"enum": [
|
|
68
69
|
"pairing",
|
|
@@ -359,6 +360,9 @@
|
|
|
359
360
|
}
|
|
360
361
|
]
|
|
361
362
|
},
|
|
363
|
+
"joinIntro": {
|
|
364
|
+
"type": "boolean"
|
|
365
|
+
},
|
|
362
366
|
"commands": {
|
|
363
367
|
"type": "object",
|
|
364
368
|
"properties": {
|
|
@@ -1892,7 +1896,6 @@
|
|
|
1892
1896
|
"type": "string"
|
|
1893
1897
|
},
|
|
1894
1898
|
"groupPolicy": {
|
|
1895
|
-
"default": "allowlist",
|
|
1896
1899
|
"type": "string",
|
|
1897
1900
|
"enum": [
|
|
1898
1901
|
"open",
|
|
@@ -2170,6 +2173,9 @@
|
|
|
2170
2173
|
}
|
|
2171
2174
|
]
|
|
2172
2175
|
},
|
|
2176
|
+
"joinIntro": {
|
|
2177
|
+
"type": "boolean"
|
|
2178
|
+
},
|
|
2173
2179
|
"commands": {
|
|
2174
2180
|
"type": "object",
|
|
2175
2181
|
"properties": {
|
|
@@ -3647,9 +3653,6 @@
|
|
|
3647
3653
|
"additionalProperties": false
|
|
3648
3654
|
}
|
|
3649
3655
|
},
|
|
3650
|
-
"required": [
|
|
3651
|
-
"groupPolicy"
|
|
3652
|
-
],
|
|
3653
3656
|
"additionalProperties": false
|
|
3654
3657
|
}
|
|
3655
3658
|
},
|
|
@@ -3658,6 +3661,7 @@
|
|
|
3658
3661
|
}
|
|
3659
3662
|
},
|
|
3660
3663
|
"required": [
|
|
3664
|
+
"dmPolicy",
|
|
3661
3665
|
"groupPolicy"
|
|
3662
3666
|
],
|
|
3663
3667
|
"additionalProperties": false
|
|
@@ -3769,6 +3773,10 @@
|
|
|
3769
3773
|
"label": "Discord Progress Command Text",
|
|
3770
3774
|
"help": "Command/exec detail in progress draft lines: \"status\" is the safe default; \"raw\" opts into command text."
|
|
3771
3775
|
},
|
|
3776
|
+
"joinIntro": {
|
|
3777
|
+
"label": "Discord Guild Join Introduction",
|
|
3778
|
+
"help": "Post one brief, room-specific introduction when the bot joins an allowed Discord guild (default: true). Account settings override the channel-wide setting."
|
|
3779
|
+
},
|
|
3772
3780
|
"proxy": {
|
|
3773
3781
|
"label": "Discord Proxy URL",
|
|
3774
3782
|
"help": "Proxy URL for Discord gateway + API requests (app-id lookup and allowlist resolution). Set per account via channels.discord.accounts.<id>.proxy."
|
|
@@ -3787,11 +3795,11 @@
|
|
|
3787
3795
|
},
|
|
3788
3796
|
"threadBindings.enabled": {
|
|
3789
3797
|
"label": "Discord Thread Binding Enabled",
|
|
3790
|
-
"help": "Enable Discord thread
|
|
3798
|
+
"help": "Enable Discord thread-bound session spawning, routing, and delivery. Overrides session.threadBindings.enabled when set."
|
|
3791
3799
|
},
|
|
3792
3800
|
"threadBindings.idleHours": {
|
|
3793
3801
|
"label": "Discord Thread Binding Idle Timeout (hours)",
|
|
3794
|
-
"help": "Inactivity window in hours for Discord thread-bound sessions
|
|
3802
|
+
"help": "Inactivity window in hours for Discord thread-bound sessions. Set 0 to disable idle expiry (default: 24). Overrides session.threadBindings.idleHours when set."
|
|
3795
3803
|
},
|
|
3796
3804
|
"threadBindings.maxAgeHours": {
|
|
3797
3805
|
"label": "Discord Thread Binding Max Age (hours)",
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@openclaw/discord",
|
|
3
|
-
"version": "2026.8.
|
|
3
|
+
"version": "2026.8.2",
|
|
4
4
|
"description": "OpenClaw Discord channel plugin for channels, DMs, commands, and app events.",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
@@ -10,16 +10,16 @@
|
|
|
10
10
|
"dependencies": {
|
|
11
11
|
"@discord/embedded-app-sdk": "2.5.0",
|
|
12
12
|
"@discordjs/voice": "0.19.2",
|
|
13
|
-
"discord-api-types": "0.38.
|
|
13
|
+
"discord-api-types": "0.38.53",
|
|
14
14
|
"libopus-wasm": "0.2.0",
|
|
15
15
|
"mdast-util-from-markdown": "2.0.3",
|
|
16
|
-
"typebox": "1.3.
|
|
17
|
-
"undici": "8.
|
|
18
|
-
"ws": "8.21.
|
|
16
|
+
"typebox": "1.3.17",
|
|
17
|
+
"undici": "8.10.0",
|
|
18
|
+
"ws": "8.21.3",
|
|
19
19
|
"zod": "4.4.3"
|
|
20
20
|
},
|
|
21
21
|
"peerDependencies": {
|
|
22
|
-
"openclaw": ">=2026.8.
|
|
22
|
+
"openclaw": ">=2026.8.2"
|
|
23
23
|
},
|
|
24
24
|
"peerDependenciesMeta": {
|
|
25
25
|
"openclaw": {
|
|
@@ -94,10 +94,10 @@
|
|
|
94
94
|
"allowInvalidConfigRecovery": true
|
|
95
95
|
},
|
|
96
96
|
"compat": {
|
|
97
|
-
"pluginApi": ">=2026.8.
|
|
97
|
+
"pluginApi": ">=2026.8.2"
|
|
98
98
|
},
|
|
99
99
|
"build": {
|
|
100
|
-
"openclawVersion": "2026.8.
|
|
100
|
+
"openclawVersion": "2026.8.2",
|
|
101
101
|
"staticAssets": [
|
|
102
102
|
{
|
|
103
103
|
"source": "./assets/embedded-app-sdk.mjs",
|
package/skills/discord/SKILL.md
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: discord
|
|
3
3
|
description: "Discord messaging workflows through OpenClaw's message tool."
|
|
4
|
-
metadata: { "openclaw": { "emoji": "🎮", "requires": { "config": ["channels.discord
|
|
4
|
+
metadata: { "openclaw": { "emoji": "🎮", "requires": { "config": ["channels.discord"] } } }
|
|
5
5
|
allowed-tools: ["message"]
|
|
6
6
|
---
|
|
7
7
|
|