@xmanrui/dsh-im 4.2.1 → 4.4.0
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.en.md +4 -2
- package/README.md +4 -2
- package/lib/client.js +1267 -787
- package/lib/index.js +237 -235
- package/package.json +1 -1
- package/plugin-src/client/access-policy-settings.js +351 -0
- package/plugin-src/client/channel-card-meta.js +2 -1
- package/plugin-src/client/channels/dingtalk/api.js +5 -0
- package/plugin-src/client/channels/dingtalk/index.js +1 -0
- package/plugin-src/client/channels/feishu/api.js +5 -0
- package/plugin-src/client/channels/feishu/index.js +1 -0
- package/plugin-src/client/channels/qq/api.js +5 -0
- package/plugin-src/client/channels/qq/index.js +1 -0
- package/plugin-src/client/channels/shared/token-api.js +5 -0
- package/plugin-src/client/channels/shared/token-channel.js +1 -0
- package/plugin-src/client/channels/telegram/api.js +2 -17
- package/plugin-src/client/channels/telegram/index.js +0 -112
- package/plugin-src/client/channels/telegram/styles.js +0 -28
- package/plugin-src/client/channels/wecom/api.js +5 -0
- package/plugin-src/client/channels/wecom/index.js +1 -0
- package/plugin-src/client/channels/weixin/api.js +5 -0
- package/plugin-src/client/channels/weixin/index.js +1 -0
- package/plugin-src/client/channels/whatsapp/api.js +4 -10
- package/plugin-src/client/channels/whatsapp/index.js +1 -125
- package/plugin-src/client/channels/whatsapp/styles.js +0 -25
- package/plugin-src/client/context-enhancement.js +207 -102
- package/plugin-src/client/delivery-settings.js +61 -9
- package/plugin-src/client/i18n.js +71 -3
- package/plugin-src/client/index.js +1 -0
- package/plugin-src/client/styles.js +59 -8
- package/plugin-src/host/channels/dingtalk/production.mjs +12 -1
- package/plugin-src/host/channels/dingtalk/rpc.mjs +11 -0
- package/plugin-src/host/channels/feishu/production.mjs +39 -1
- package/plugin-src/host/channels/feishu/rpc.mjs +19 -2
- package/plugin-src/host/channels/qq/production.mjs +12 -1
- package/plugin-src/host/channels/qq/rpc.mjs +11 -0
- package/plugin-src/host/channels/shared/access-policy-production.mjs +137 -0
- package/plugin-src/host/channels/shared/access-policy-rpc.mjs +17 -0
- package/plugin-src/host/channels/shared/production.mjs +15 -1
- package/plugin-src/host/channels/shared/rpc.mjs +9 -0
- package/plugin-src/host/channels/slack/production.mjs +12 -1
- package/plugin-src/host/channels/slack/rpc.mjs +10 -0
- package/plugin-src/host/channels/telegram/rpc.mjs +2 -49
- package/plugin-src/host/channels/wecom/production.mjs +12 -1
- package/plugin-src/host/channels/wecom/rpc.mjs +11 -0
- package/plugin-src/host/channels/weixin/production.mjs +12 -1
- package/plugin-src/host/channels/weixin/rpc.mjs +11 -0
- package/plugin-src/host/channels/whatsapp/production.mjs +16 -2
- package/plugin-src/host/channels/whatsapp/rpc.mjs +10 -15
- package/scripts/verify-package.mjs +4 -3
- package/src/channels/dingtalk/dingtalk-bridge.mjs +61 -9
- package/src/channels/dingtalk/dingtalk-runtime.mjs +4 -0
- package/src/channels/discord/discord-runtime.mjs +29 -1
- package/src/channels/feishu/bridge.mjs +286 -120
- package/src/channels/feishu/feishu-runtime.mjs +4 -0
- package/src/channels/feishu/message-utils.mjs +5 -0
- package/src/channels/qq/qq-bridge.mjs +59 -17
- package/src/channels/qq/qq-runtime.mjs +25 -3
- package/src/channels/shared/access-policy.mjs +210 -0
- package/src/channels/shared/bot-workspace-store.mjs +176 -33
- package/src/channels/shared/command-permission.mjs +32 -0
- package/src/channels/shared/compact-command.mjs +5 -2
- package/src/channels/shared/context-enhancement.mjs +73 -20
- package/src/channels/shared/i18n-en/shared-c.mjs +2 -0
- package/src/channels/shared/inbound-access.mjs +43 -0
- package/src/channels/shared/text-harness-bridge.mjs +47 -4
- package/src/channels/shared/workspace-command.mjs +10 -1
- package/src/channels/slack/slack-runtime.mjs +4 -0
- package/src/channels/telegram/telegram-runtime.mjs +5 -13
- package/src/channels/wecom/wecom-bridge.mjs +51 -4
- package/src/channels/wecom/wecom-runtime.mjs +4 -0
- package/src/channels/weixin/weixin-bridge.mjs +59 -16
- package/src/channels/weixin/weixin-runtime.mjs +4 -0
- package/src/channels/whatsapp/whatsapp-runtime.mjs +42 -20
|
@@ -3,6 +3,7 @@ import { fetchFileStream } from '../shared/file-download.mjs';
|
|
|
3
3
|
import { fetchImageBuffer } from '../shared/image-prompt.mjs';
|
|
4
4
|
import { t } from '../shared/i18n.mjs';
|
|
5
5
|
import { captureContextEnhancement } from '../shared/context-enhancement.mjs';
|
|
6
|
+
import { evaluateInboundAccess } from '../shared/inbound-access.mjs';
|
|
6
7
|
import { DiscordApi } from './discord-api.mjs';
|
|
7
8
|
import { createDiscordBridgeStatus, DiscordHarnessBridge } from './discord-bridge.mjs';
|
|
8
9
|
|
|
@@ -433,6 +434,7 @@ export class DiscordRuntime {
|
|
|
433
434
|
#harness;
|
|
434
435
|
#state;
|
|
435
436
|
#contextEnhancement;
|
|
437
|
+
#accessPolicy;
|
|
436
438
|
#logger;
|
|
437
439
|
#replyTimeoutMs;
|
|
438
440
|
#connectTimeoutMs;
|
|
@@ -464,6 +466,7 @@ export class DiscordRuntime {
|
|
|
464
466
|
harness,
|
|
465
467
|
state,
|
|
466
468
|
contextEnhancement,
|
|
469
|
+
accessPolicy,
|
|
467
470
|
logger = console,
|
|
468
471
|
replyTimeoutMs = 600_000,
|
|
469
472
|
connectTimeoutMs = 20_000,
|
|
@@ -480,6 +483,7 @@ export class DiscordRuntime {
|
|
|
480
483
|
this.#harness = harness;
|
|
481
484
|
this.#state = state;
|
|
482
485
|
this.#contextEnhancement = contextEnhancement;
|
|
486
|
+
this.#accessPolicy = accessPolicy;
|
|
483
487
|
this.#logger = logger;
|
|
484
488
|
this.#replyTimeoutMs = replyTimeoutMs;
|
|
485
489
|
this.#connectTimeoutMs = connectTimeoutMs;
|
|
@@ -559,6 +563,7 @@ export class DiscordRuntime {
|
|
|
559
563
|
harness: this.#harness,
|
|
560
564
|
state: this.#state,
|
|
561
565
|
contextEnhancement: this.#contextEnhancement,
|
|
566
|
+
accessPolicy: this.#accessPolicy,
|
|
562
567
|
status: this.#status,
|
|
563
568
|
logger: this.#logger,
|
|
564
569
|
replyTimeoutMs: this.#replyTimeoutMs,
|
|
@@ -730,6 +735,24 @@ export class DiscordRuntime {
|
|
|
730
735
|
async #acceptMessage(message, bridge) {
|
|
731
736
|
const messageId = String(message?.id ?? '');
|
|
732
737
|
if (!messageId || this.#state.hasSeen(messageId)) return;
|
|
738
|
+
const preflight = normalizeDiscordMessage(message, this.#config.platformId);
|
|
739
|
+
let accessDecision;
|
|
740
|
+
if (preflight?.kind === 'group' && preflight.addressed === true
|
|
741
|
+
&& preflight.senderIsBot !== true) {
|
|
742
|
+
accessDecision = evaluateInboundAccess(this.#accessPolicy, {
|
|
743
|
+
conversationType: 'group',
|
|
744
|
+
senderIds: [preflight.senderId],
|
|
745
|
+
text: preflight.content,
|
|
746
|
+
hasImages: preflight.images.length > 0,
|
|
747
|
+
hasFiles: preflight.files.length > 0,
|
|
748
|
+
});
|
|
749
|
+
if (!accessDecision.allowed) {
|
|
750
|
+
// Let the shared bridge apply its normal silent/command-denial behavior,
|
|
751
|
+
// but do so against the source channel before creating a Thread.
|
|
752
|
+
await bridge.accept(preflight, { accessDecision });
|
|
753
|
+
return;
|
|
754
|
+
}
|
|
755
|
+
}
|
|
733
756
|
let route = this.#routing.get(messageId);
|
|
734
757
|
if (!route) {
|
|
735
758
|
const contextSnapshot = captureContextEnhancement(
|
|
@@ -750,7 +773,12 @@ export class DiscordRuntime {
|
|
|
750
773
|
}
|
|
751
774
|
try {
|
|
752
775
|
const normalized = await route.pendingRoute;
|
|
753
|
-
if (normalized)
|
|
776
|
+
if (normalized) {
|
|
777
|
+
await bridge.accept(normalized, {
|
|
778
|
+
contextSnapshot: route.contextSnapshot,
|
|
779
|
+
...(accessDecision ? { accessDecision } : {}),
|
|
780
|
+
});
|
|
781
|
+
}
|
|
754
782
|
} catch (error) {
|
|
755
783
|
if (error?.code === 'discord-thread-create-uncertain') {
|
|
756
784
|
await this.#state.markSeen(messageId);
|