@excitedjs/dreamux 0.9.2 → 0.9.3
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.
|
@@ -4,15 +4,31 @@
|
|
|
4
4
|
* Trigger rule (deliberately different from claudemux):
|
|
5
5
|
*
|
|
6
6
|
* In a group, a `/introduce` message triggers **if and only if the sender is
|
|
7
|
-
*
|
|
8
|
-
* `require_mention` setting is ignored on this
|
|
7
|
+
* authorized to run it under the group's policy**. No `@`-mention of our bot
|
|
8
|
+
* is required, and the group's `require_mention` setting is ignored on this
|
|
9
|
+
* path.
|
|
9
10
|
*
|
|
10
|
-
*
|
|
11
|
-
*
|
|
12
|
-
*
|
|
13
|
-
*
|
|
14
|
-
*
|
|
15
|
-
* the
|
|
11
|
+
* Authorization mirrors the delivery gate (`dreamuxFeishuGate`) for the same
|
|
12
|
+
* group policy, minus the @-mention requirement that introduce deliberately
|
|
13
|
+
* waives. The parity is exact except for two divergences that are intentional
|
|
14
|
+
* (issue #62), not accidental — keep them when "aligning" the two gates:
|
|
15
|
+
*
|
|
16
|
+
* - `block` — never authorized (the gate drops every group message).
|
|
17
|
+
* - `follow-user` — the chat needs no authorization; `allow_chats` is ignored
|
|
18
|
+
* exactly as the gate ignores it. The sender must be on the
|
|
19
|
+
* global `allow_users` list.
|
|
20
|
+
* - `allowlist` — the chat must be named in `allow_chats` (the group is the
|
|
21
|
+
* unit of trust). The sender must ALSO be on `allow_users` —
|
|
22
|
+
* this is the #62 divergence: a trust-changing command is
|
|
23
|
+
* sender-scoped even in an allowlisted group, whereas the
|
|
24
|
+
* delivery gate lets any member of an allowlisted group
|
|
25
|
+
* speak. "Any member of an allowlisted group" is therefore
|
|
26
|
+
* deliberately NOT a path to introduce.
|
|
27
|
+
*
|
|
28
|
+
* Before issue #79/#82 made the gate policy-aware, introduce kept a hardcoded
|
|
29
|
+
* `chat_not_allowlisted` check for *every* policy — so an `allow_users` sender
|
|
30
|
+
* could chat in a brand-new `follow-user` group but could never `/introduce`
|
|
31
|
+
* there. That accidental split is the bug this contract now closes.
|
|
16
32
|
*
|
|
17
33
|
* The peer bots being introduced are the message's @-mentions (excluding our
|
|
18
34
|
* own bot); the host records them as *trusted* for the chat. Recording a human
|
|
@@ -26,22 +42,37 @@ const UNKNOWN_PEER_LABEL = '伙伴';
|
|
|
26
42
|
* is authorized. This is the single source of truth for the issue #62 hard
|
|
27
43
|
* contract; `canRunIntroduce` is the boolean projection of it.
|
|
28
44
|
*
|
|
29
|
-
*
|
|
30
|
-
*
|
|
31
|
-
*
|
|
32
|
-
*
|
|
45
|
+
* Policy-aware, mirroring `dreamuxFeishuGate`'s group branch for the same policy
|
|
46
|
+
* (minus the @-mention requirement introduce waives):
|
|
47
|
+
* - `block` → `group_blocked` (the gate drops every group message).
|
|
48
|
+
* - `follow-user` → `allow_chats` is ignored exactly as the gate ignores it;
|
|
49
|
+
* only the sender's membership in `allow_users` matters.
|
|
50
|
+
* - `allowlist` → the chat must be in `allow_chats` (chat-as-unit-of-trust)
|
|
51
|
+
* AND the sender must be on `allow_users` (the #62 sender
|
|
52
|
+
* scoping that the delivery gate does not impose).
|
|
53
|
+
* Empty allowlists authorize nobody — there is no "any member of an allowlisted
|
|
54
|
+
* group" path.
|
|
33
55
|
*/
|
|
34
56
|
export function introduceDenyReason(access, input) {
|
|
35
57
|
if (input.chatType !== 'group')
|
|
36
58
|
return 'non_group';
|
|
37
59
|
if (input.senderId === '')
|
|
38
60
|
return 'empty_sender_id';
|
|
39
|
-
|
|
40
|
-
//
|
|
41
|
-
//
|
|
42
|
-
//
|
|
43
|
-
|
|
61
|
+
const policy = access.group.policy;
|
|
62
|
+
// `block` drops every group message; a trust-changing command is no exception.
|
|
63
|
+
// (Before this was explicit, `block` blocked introduce only by accident — its
|
|
64
|
+
// empty `allow_chats` tripped `chat_not_allowlisted`. Once `follow-user` stops
|
|
65
|
+
// checking `allow_chats`, the block case needs its own guard.)
|
|
66
|
+
if (policy === 'block')
|
|
67
|
+
return 'group_blocked';
|
|
68
|
+
// Under `allowlist` the group is the unit of trust, so the chat must be named.
|
|
69
|
+
// Under `follow-user` the chat allowlist is intentionally ignored — the group
|
|
70
|
+
// needs no authorization, exactly as the delivery gate ignores it. This is the
|
|
71
|
+
// line that was previously hardcoded for every policy and split introduce from
|
|
72
|
+
// the gate (issue #82 made the gate policy-aware but left this behind).
|
|
73
|
+
if (policy === 'allowlist' && !access.group.allow_chats.includes(input.chatId)) {
|
|
44
74
|
return 'chat_not_allowlisted';
|
|
75
|
+
}
|
|
45
76
|
// The sender must be on the global allow-user list — the same list that gates
|
|
46
77
|
// direct messages and `follow-user` group delivery. An empty list authorizes
|
|
47
78
|
// nobody, keeping the rule sender-scoped rather than "any member of an
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"introduce.js","sourceRoot":"","sources":["../../src/channel/introduce.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"introduce.js","sourceRoot":"","sources":["../../src/channel/introduce.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoCG;AAOH,MAAM,YAAY,GAAG,uBAAuB,CAAC;AAC7C,MAAM,kBAAkB,GAAG,IAAI,CAAC;AAqBhC;;;;;;;;;;;;;;;GAeG;AACH,MAAM,UAAU,mBAAmB,CACjC,MAA6B,EAC7B,KAAyB;IAEzB,IAAI,KAAK,CAAC,QAAQ,KAAK,OAAO;QAAE,OAAO,WAAW,CAAC;IACnD,IAAI,KAAK,CAAC,QAAQ,KAAK,EAAE;QAAE,OAAO,iBAAiB,CAAC;IACpD,MAAM,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC;IACnC,+EAA+E;IAC/E,8EAA8E;IAC9E,+EAA+E;IAC/E,+DAA+D;IAC/D,IAAI,MAAM,KAAK,OAAO;QAAE,OAAO,eAAe,CAAC;IAC/C,+EAA+E;IAC/E,8EAA8E;IAC9E,+EAA+E;IAC/E,+EAA+E;IAC/E,wEAAwE;IACxE,IAAI,MAAM,KAAK,WAAW,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC;QAC/E,OAAO,sBAAsB,CAAC;IAChC,CAAC;IACD,8EAA8E;IAC9E,6EAA6E;IAC7E,uEAAuE;IACvE,uEAAuE;IACvE,4EAA4E;IAC5E,uCAAuC;IACvC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,KAAK,CAAC,QAAQ,CAAC;QAAE,OAAO,qBAAqB,CAAC;IAC/E,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,eAAe,CAC7B,MAA6B,EAC7B,KAAyB;IAEzB,OAAO,mBAAmB,CAAC,MAAM,EAAE,KAAK,CAAC,KAAK,IAAI,CAAC;AACrD,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,eAAe,CAC7B,WAAmB,EACnB,UAAkB,EAClB,QAAmB;IAEnB,IAAI,WAAW,KAAK,MAAM;QAAE,OAAO,KAAK,CAAC;IACzC,IAAI,IAAY,CAAC;IACjB,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,CAAY,CAAC;QACjD,IAAI;YACF,MAAM,KAAK,IAAI,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC;gBACrE,CAAC,CAAC,OAAQ,MAAkC,CAAC,MAAM,CAAC,KAAK,QAAQ;oBAC/D,CAAC,CAAG,MAAkC,CAAC,MAAM,CAAY;oBACzD,CAAC,CAAC,EAAE;gBACN,CAAC,CAAC,EAAE,CAAC;IACX,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;IACD,2EAA2E;IAC3E,6EAA6E;IAC7E,4EAA4E;IAC5E,+EAA+E;IAC/E,MAAM,IAAI,GAAG,QAAQ;SAClB,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC;SACjB,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,KAAK,EAAE,CAAC;SAC3B,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC;IACvC,IAAI,SAAS,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC;IACjC,IAAI,QAAQ,GAAG,IAAI,CAAC;IACpB,OAAO,QAAQ,EAAE,CAAC;QAChB,QAAQ,GAAG,KAAK,CAAC;QACjB,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;YACvB,IAAI,SAAS,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;gBAC9B,SAAS,GAAG,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,SAAS,EAAE,CAAC;gBACpD,QAAQ,GAAG,IAAI,CAAC;gBAChB,MAAM;YACR,CAAC;QACH,CAAC;IACH,CAAC;IACD,OAAO,YAAY,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;AACtC,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,eAAe,CAC7B,QAAmB,EACnB,UAA8B;IAE9B,MAAM,KAAK,GAAc,EAAE,CAAC;IAC5B,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;IAC/B,KAAK,MAAM,CAAC,IAAI,QAAQ,EAAE,CAAC;QACzB,MAAM,MAAM,GAAG,CAAC,CAAC,EAAE,EAAE,OAAO,IAAI,CAAC,CAAC,EAAE,EAAE,QAAQ,IAAI,EAAE,CAAC;QACrD,IAAI,MAAM,KAAK,EAAE,IAAI,MAAM,KAAK,UAAU,IAAI,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC;YAAE,SAAS;QACzE,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QACjB,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC;IAC3E,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,gBAAgB,CAAC,KAAgB;IAC/C,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IACpC,MAAM,KAAK,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,iBAAiB,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC3E,OAAO,WAAW,KAAK,CAAC,MAAM,QAAQ,KAAK,EAAE,CAAC;AAChD,CAAC;AAED,SAAS,iBAAiB,CAAC,IAAa;IACtC,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IACtE,OAAO,IAAI,KAAK,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,kBAAkB,CAAC;AACjD,CAAC;AAED,SAAS,cAAc,CAAC,KAAa;IACnC,OAAO,KAAK;SACT,OAAO,CAAC,yBAAyB,EAAE,GAAG,CAAC;SACvC,OAAO,CAAC,UAAU,EAAE,GAAG,CAAC;SACxB,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC;SACpB,IAAI,EAAE,CAAC;AACZ,CAAC"}
|
package/package.json
CHANGED