@zhin.js/adapter-slack 4.0.1 → 4.1.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.
Files changed (118) hide show
  1. package/CHANGELOG.md +18 -0
  2. package/README.md +207 -98
  3. package/{skills/slack/SKILL.md → agent/skills/slack.md} +2 -0
  4. package/agent/tools/add_reaction.ts +26 -0
  5. package/agent/tools/archive_channel.ts +24 -0
  6. package/agent/tools/edit_message.ts +27 -0
  7. package/agent/tools/invite_to_channel.ts +26 -0
  8. package/agent/tools/pin_message.ts +26 -0
  9. package/agent/tools/remove_reaction.ts +26 -0
  10. package/agent/tools/set_purpose.ts +26 -0
  11. package/agent/tools/set_topic.ts +26 -0
  12. package/agent/tools/unarchive.ts +24 -0
  13. package/agent/tools/unpin_message.ts +26 -0
  14. package/agent/tools/user_info.ts +31 -0
  15. package/lib/agent/tools/add_reaction.js +21 -0
  16. package/lib/agent/tools/add_reaction.js.map +1 -0
  17. package/lib/agent/tools/archive_channel.js +21 -0
  18. package/lib/agent/tools/archive_channel.js.map +1 -0
  19. package/lib/agent/tools/edit_message.js +22 -0
  20. package/lib/agent/tools/edit_message.js.map +1 -0
  21. package/lib/agent/tools/invite_to_channel.js +22 -0
  22. package/lib/agent/tools/invite_to_channel.js.map +1 -0
  23. package/lib/agent/tools/pin_message.js +22 -0
  24. package/lib/agent/tools/pin_message.js.map +1 -0
  25. package/lib/agent/tools/remove_reaction.js +21 -0
  26. package/lib/agent/tools/remove_reaction.js.map +1 -0
  27. package/lib/agent/tools/set_purpose.js +22 -0
  28. package/lib/agent/tools/set_purpose.js.map +1 -0
  29. package/lib/agent/tools/set_topic.js +22 -0
  30. package/lib/agent/tools/set_topic.js.map +1 -0
  31. package/lib/agent/tools/unarchive.js +21 -0
  32. package/lib/agent/tools/unarchive.js.map +1 -0
  33. package/lib/agent/tools/unpin_message.js +22 -0
  34. package/lib/agent/tools/unpin_message.js.map +1 -0
  35. package/lib/agent/tools/user_info.js +28 -0
  36. package/lib/agent/tools/user_info.js.map +1 -0
  37. package/lib/{adapter.js → src/adapter.js} +19 -3
  38. package/lib/src/adapter.js.map +1 -0
  39. package/lib/src/endpoint.js +312 -0
  40. package/lib/src/endpoint.js.map +1 -0
  41. package/lib/src/event-dispatcher.js +233 -0
  42. package/lib/src/event-dispatcher.js.map +1 -0
  43. package/lib/src/index.js +51 -0
  44. package/lib/src/index.js.map +1 -0
  45. package/lib/src/markdown-to-mrkdwn.js +61 -0
  46. package/lib/src/markdown-to-mrkdwn.js.map +1 -0
  47. package/lib/src/mrkdwn-to-markdown.js +31 -0
  48. package/lib/src/mrkdwn-to-markdown.js.map +1 -0
  49. package/lib/{platform-permit.js → src/platform-permit.js} +3 -0
  50. package/lib/src/platform-permit.js.map +1 -0
  51. package/lib/src/segment-mapper.js.map +1 -0
  52. package/lib/src/signing.js +21 -0
  53. package/lib/src/signing.js.map +1 -0
  54. package/lib/src/slack-agent-deps.js +10 -0
  55. package/lib/src/slack-agent-deps.js.map +1 -0
  56. package/lib/src/slack-inbound-filter.js +47 -0
  57. package/lib/src/slack-inbound-filter.js.map +1 -0
  58. package/lib/src/slack-inbound.js +127 -0
  59. package/lib/src/slack-inbound.js.map +1 -0
  60. package/lib/src/slack-message-ref.js +18 -0
  61. package/lib/src/slack-message-ref.js.map +1 -0
  62. package/lib/src/slack-outbound.js +223 -0
  63. package/lib/src/slack-outbound.js.map +1 -0
  64. package/lib/src/slack-reaction.js +27 -0
  65. package/lib/src/slack-reaction.js.map +1 -0
  66. package/lib/src/slack-response-url.js +17 -0
  67. package/lib/src/slack-response-url.js.map +1 -0
  68. package/lib/src/slack-side-events.js +64 -0
  69. package/lib/src/slack-side-events.js.map +1 -0
  70. package/lib/src/transport-http.js +83 -0
  71. package/lib/src/transport-http.js.map +1 -0
  72. package/lib/src/transport-socket.js +68 -0
  73. package/lib/src/transport-socket.js.map +1 -0
  74. package/lib/src/types.js +5 -0
  75. package/lib/src/types.js.map +1 -0
  76. package/package.json +24 -6
  77. package/src/adapter.ts +28 -7
  78. package/src/endpoint.ts +206 -604
  79. package/src/event-dispatcher.ts +255 -0
  80. package/src/index.ts +31 -239
  81. package/src/markdown-to-mrkdwn.ts +58 -0
  82. package/src/mrkdwn-to-markdown.ts +29 -0
  83. package/src/platform-permit.ts +1 -2
  84. package/src/signing.ts +28 -0
  85. package/src/slack-agent-deps.ts +22 -0
  86. package/src/slack-inbound-filter.ts +60 -0
  87. package/src/slack-inbound.ts +140 -0
  88. package/src/slack-message-ref.ts +18 -0
  89. package/src/slack-outbound.ts +269 -0
  90. package/src/slack-reaction.ts +23 -0
  91. package/src/slack-response-url.ts +26 -0
  92. package/src/slack-side-events.ts +74 -0
  93. package/src/transport-http.ts +95 -0
  94. package/src/transport-socket.ts +77 -0
  95. package/src/types.ts +99 -4
  96. package/lib/adapter.d.ts +0 -19
  97. package/lib/adapter.d.ts.map +0 -1
  98. package/lib/adapter.js.map +0 -1
  99. package/lib/endpoint.d.ts +0 -108
  100. package/lib/endpoint.d.ts.map +0 -1
  101. package/lib/endpoint.js +0 -677
  102. package/lib/endpoint.js.map +0 -1
  103. package/lib/index.d.ts +0 -10
  104. package/lib/index.d.ts.map +0 -1
  105. package/lib/index.js +0 -252
  106. package/lib/index.js.map +0 -1
  107. package/lib/platform-permit.d.ts +0 -17
  108. package/lib/platform-permit.d.ts.map +0 -1
  109. package/lib/platform-permit.js.map +0 -1
  110. package/lib/segment-mapper.d.ts +0 -2
  111. package/lib/segment-mapper.d.ts.map +0 -1
  112. package/lib/segment-mapper.js.map +0 -1
  113. package/lib/types.d.ts +0 -17
  114. package/lib/types.d.ts.map +0 -1
  115. package/lib/types.js +0 -2
  116. package/lib/types.js.map +0 -1
  117. /package/{skills/slack → agent}/PERMITS.md +0 -0
  118. /package/lib/{segment-mapper.js → src/segment-mapper.js} +0 -0
@@ -0,0 +1,95 @@
1
+ /**
2
+ * HTTP 传输 — 在 zhin Router 上注册 /slack/events webhook
3
+ */
4
+ import { verifySlackSignature } from './signing.js';
5
+ import type { SlackEventDispatcher } from './event-dispatcher.js';
6
+ import type { SlackEndpointConfig, SlackEventEnvelope, SlackInteractionPayload, SlackSlashCommand, SlackUrlVerification } from './types.js';
7
+ import type { Logger } from '@zhin.js/logger';
8
+
9
+ export type RouterLike = {
10
+ post: (path: string, ...args: any[]) => void;
11
+ };
12
+
13
+ export class SlackHttpTransport {
14
+ constructor(
15
+ private config: SlackEndpointConfig,
16
+ private dispatcher: SlackEventDispatcher,
17
+ private logger: Logger,
18
+ ) {}
19
+
20
+ registerRoutes(router: RouterLike): void {
21
+ const signingSecret = this.config.signingSecret;
22
+
23
+ router.post('/slack/events', async (ctx: any) => {
24
+ const rawBody = await this.getRawBody(ctx);
25
+ const timestamp = ctx.get?.('X-Slack-Request-Timestamp') ?? ctx.headers?.['x-slack-request-timestamp'] ?? '';
26
+ const signature = ctx.get?.('X-Slack-Signature') ?? ctx.headers?.['x-slack-signature'] ?? '';
27
+
28
+ if (!verifySlackSignature(signingSecret, rawBody, timestamp, signature)) {
29
+ ctx.status = 401;
30
+ ctx.body = 'Invalid signature';
31
+ return;
32
+ }
33
+
34
+ const contentType: string = ctx.get?.('content-type') ?? ctx.headers?.['content-type'] ?? '';
35
+ let body: unknown;
36
+
37
+ if (contentType.includes('application/x-www-form-urlencoded')) {
38
+ const params = new URLSearchParams(rawBody);
39
+ const payloadStr = params.get('payload');
40
+ if (payloadStr) {
41
+ body = JSON.parse(payloadStr);
42
+ ctx.status = 200;
43
+ ctx.body = '';
44
+ this.handleInteraction(body as SlackInteractionPayload);
45
+ return;
46
+ }
47
+ body = Object.fromEntries(params);
48
+ if ((body as any).command) {
49
+ ctx.status = 200;
50
+ ctx.body = '';
51
+ this.dispatcher.routeSlashCommand(body as SlackSlashCommand);
52
+ return;
53
+ }
54
+ } else {
55
+ body = JSON.parse(rawBody);
56
+ }
57
+
58
+ const envelope = body as any;
59
+
60
+ if (envelope.type === 'url_verification') {
61
+ ctx.status = 200;
62
+ ctx.body = { challenge: (envelope as SlackUrlVerification).challenge };
63
+ return;
64
+ }
65
+
66
+ if (envelope.type === 'event_callback' && envelope.event) {
67
+ ctx.status = 200;
68
+ ctx.body = '';
69
+ this.dispatcher.routeEvent((envelope as SlackEventEnvelope).event);
70
+ return;
71
+ }
72
+
73
+ ctx.status = 200;
74
+ ctx.body = '';
75
+ });
76
+ }
77
+
78
+ private async getRawBody(ctx: any): Promise<string> {
79
+ if (ctx.request?.rawBody) return ctx.request.rawBody;
80
+ if (typeof ctx.request?.body === 'string') return ctx.request.body;
81
+ if (ctx.req) {
82
+ return new Promise<string>((resolve, reject) => {
83
+ let data = '';
84
+ ctx.req.on('data', (chunk: Buffer) => { data += chunk.toString(); });
85
+ ctx.req.on('end', () => resolve(data));
86
+ ctx.req.on('error', reject);
87
+ });
88
+ }
89
+ return JSON.stringify(ctx.request?.body ?? {});
90
+ }
91
+
92
+ private handleInteraction(payload: SlackInteractionPayload): void {
93
+ this.dispatcher.routeInteraction(payload);
94
+ }
95
+ }
@@ -0,0 +1,77 @@
1
+ /**
2
+ * Socket Mode 传输 — 包装 @slack/socket-mode SocketModeClient
3
+ */
4
+ import { SocketModeClient } from '@slack/socket-mode';
5
+ import type { SlackEventDispatcher } from './event-dispatcher.js';
6
+ import type { SlackEndpointConfig, SlackEventEnvelope, SlackInteractionPayload, SlackSlashCommand } from './types.js';
7
+ import type { Logger } from '@zhin.js/logger';
8
+
9
+ export class SlackSocketTransport {
10
+ private socketClient: SocketModeClient;
11
+ private connected = false;
12
+
13
+ constructor(
14
+ private config: SlackEndpointConfig,
15
+ private dispatcher: SlackEventDispatcher,
16
+ private logger: Logger,
17
+ ) {
18
+ if (!config.appToken) {
19
+ throw new Error('Socket Mode requires appToken (xapp-...)');
20
+ }
21
+ this.socketClient = new SocketModeClient({
22
+ appToken: config.appToken,
23
+ clientPingTimeout: config.clientPingTimeout ?? 15_000,
24
+ });
25
+ }
26
+
27
+ async connect(): Promise<void> {
28
+ this.socketClient.on('slack_event', async ({ ack, body }) => {
29
+ await ack();
30
+ this.handleEnvelope(body);
31
+ });
32
+
33
+ this.socketClient.on('interactive', async ({ ack, body }) => {
34
+ await ack();
35
+ this.handleInteraction(body);
36
+ });
37
+
38
+ this.socketClient.on('slash_commands', async ({ ack, body }) => {
39
+ await ack();
40
+ this.handleSlashCommand(body);
41
+ });
42
+
43
+ await this.socketClient.start();
44
+ this.connected = true;
45
+ }
46
+
47
+ async disconnect(): Promise<void> {
48
+ if (!this.connected) return;
49
+ try {
50
+ await this.socketClient.disconnect();
51
+ } catch { /* ignore */ }
52
+ this.connected = false;
53
+ }
54
+
55
+ get isConnected(): boolean { return this.connected; }
56
+
57
+ private handleEnvelope(body: unknown): void {
58
+ const envelope = body as SlackEventEnvelope;
59
+ if (envelope?.type === 'event_callback' && envelope.event) {
60
+ this.dispatcher.routeEvent(envelope.event);
61
+ }
62
+ }
63
+
64
+ private handleInteraction(body: unknown): void {
65
+ const payload = body as SlackInteractionPayload;
66
+ if (payload?.type) {
67
+ this.dispatcher.routeInteraction(payload);
68
+ }
69
+ }
70
+
71
+ private handleSlashCommand(body: unknown): void {
72
+ const cmd = body as SlackSlashCommand;
73
+ if (cmd?.command) {
74
+ this.dispatcher.routeSlashCommand(cmd);
75
+ }
76
+ }
77
+ }
package/src/types.ts CHANGED
@@ -1,8 +1,6 @@
1
1
  /**
2
2
  * Slack 适配器类型定义
3
3
  */
4
- import type { LogLevel } from "@slack/bolt";
5
- import type { KnownEventFromType } from "@slack/bolt";
6
4
 
7
5
  export interface SlackEndpointConfig {
8
6
  context: "slack";
@@ -11,8 +9,105 @@ export interface SlackEndpointConfig {
11
9
  signingSecret: string;
12
10
  appToken?: string;
13
11
  socketMode?: boolean;
12
+ /** Socket Mode 客户端 ping 超时(ms),默认 15000 */
13
+ clientPingTimeout?: number;
14
14
  port?: number;
15
- logLevel?: LogLevel;
16
15
  }
17
16
 
18
- export type SlackMessageEvent = KnownEventFromType<"message">;
17
+ /** Slack Events API event_callback 外层包装 */
18
+ export interface SlackEventEnvelope {
19
+ token?: string;
20
+ team_id?: string;
21
+ api_app_id?: string;
22
+ event: SlackEvent;
23
+ type: "event_callback";
24
+ event_id?: string;
25
+ event_time?: number;
26
+ authorizations?: unknown[];
27
+ }
28
+
29
+ /** Slack URL verification challenge */
30
+ export interface SlackUrlVerification {
31
+ type: "url_verification";
32
+ token: string;
33
+ challenge: string;
34
+ }
35
+
36
+ /** Slack interactive payload (block_actions, etc.) */
37
+ export interface SlackInteractionPayload {
38
+ type: "block_actions" | "message_action" | "shortcut" | "view_submission" | "view_closed";
39
+ trigger_id?: string;
40
+ user: { id: string; username?: string; name?: string; team_id?: string };
41
+ channel?: { id: string; name?: string };
42
+ message?: { ts: string; text?: string; [key: string]: unknown };
43
+ actions?: SlackBlockAction[];
44
+ response_url?: string;
45
+ [key: string]: unknown;
46
+ }
47
+
48
+ export interface SlackBlockAction {
49
+ type: string;
50
+ action_id: string;
51
+ block_id: string;
52
+ value?: string;
53
+ text?: { type: string; text: string };
54
+ action_ts?: string;
55
+ [key: string]: unknown;
56
+ }
57
+
58
+ /** Slack slash command payload */
59
+ export interface SlackSlashCommand {
60
+ token: string;
61
+ team_id: string;
62
+ channel_id: string;
63
+ channel_name: string;
64
+ user_id: string;
65
+ user_name: string;
66
+ command: string;
67
+ text: string;
68
+ response_url: string;
69
+ trigger_id: string;
70
+ api_app_id?: string;
71
+ }
72
+
73
+ /** Union of known Slack event shapes */
74
+ export interface SlackEvent {
75
+ type: string;
76
+ ts?: string;
77
+ event_ts?: string;
78
+ user?: string;
79
+ channel?: string;
80
+ channel_type?: string;
81
+ text?: string;
82
+ thread_ts?: string;
83
+ subtype?: string;
84
+ [key: string]: unknown;
85
+ }
86
+
87
+ /** Slack message event (narrowed from SlackEvent) */
88
+ export type SlackMessageEvent = SlackEvent & {
89
+ type: "message" | "app_mention";
90
+ ts: string;
91
+ channel: string;
92
+ };
93
+
94
+ /** Assistant thread events */
95
+ export interface SlackAssistantThreadStarted extends SlackEvent {
96
+ type: "assistant_thread_started";
97
+ assistant_thread: {
98
+ user_id: string;
99
+ context: Record<string, unknown>;
100
+ channel_id: string;
101
+ thread_ts: string;
102
+ };
103
+ }
104
+
105
+ export interface SlackAssistantThreadContextChanged extends SlackEvent {
106
+ type: "assistant_thread_context_changed";
107
+ assistant_thread: {
108
+ user_id: string;
109
+ context: Record<string, unknown>;
110
+ channel_id: string;
111
+ thread_ts: string;
112
+ };
113
+ }
package/lib/adapter.d.ts DELETED
@@ -1,19 +0,0 @@
1
- /**
2
- * Slack 适配器
3
- */
4
- import { Adapter, Plugin } from 'zhin.js';
5
- import { SlackEndpoint } from "./endpoint.js";
6
- import type { SlackEndpointConfig } from "./types.js";
7
- export declare class SlackAdapter extends Adapter<SlackEndpoint> {
8
- static readonly capabilities: readonly ["inbound", "outbound"];
9
- static outboundRichSegmentPolicy: import("zhin.js").OutboundRichSegmentPolicy;
10
- static interactivePolicy: "text";
11
- constructor(plugin: Plugin);
12
- createEndpoint(config: SlackEndpointConfig): SlackEndpoint;
13
- removeMember(endpointId: string, sceneId: string, userId: string): Promise<boolean>;
14
- renameScene(endpointId: string, sceneId: string, name: string): Promise<boolean>;
15
- listMembers(endpointId: string, sceneId: string): Promise<string[]>;
16
- getSceneInfo(endpointId: string, sceneId: string): Promise<any>;
17
- start(): Promise<void>;
18
- }
19
- //# sourceMappingURL=adapter.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"adapter.d.ts","sourceRoot":"","sources":["../src/adapter.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,EAAE,OAAO,EACd,MAAM,EAAwC,MAAM,SAAS,CAAC;AAChE,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAC9C,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AAEtD,qBAAa,YAAa,SAAQ,OAAO,CAAC,aAAa,CAAC;IACtD,gBAAyB,YAAY,mCAAoC;IACzE,OAAgB,yBAAyB,8CAAwC;IACjF,OAAgB,iBAAiB,EAAG,MAAM,CAAU;gBAExC,MAAM,EAAE,MAAM;IAI1B,cAAc,CAAC,MAAM,EAAE,mBAAmB,GAAG,aAAa;IAMpD,YAAY,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM;IAMhE,WAAW,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM;IAM7D,WAAW,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM;IAM/C,YAAY,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM;IAQhD,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;CAI7B"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"adapter.js","sourceRoot":"","sources":["../src/adapter.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,EAAE,OAAO,EACN,oCAAoC,EAAE,MAAM,SAAS,CAAC;AAChE,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAG9C,MAAM,OAAO,YAAa,SAAQ,OAAsB;IACtD,MAAM,CAAmB,YAAY,GAAG,CAAC,SAAS,EAAE,UAAU,CAAU,CAAC;IACzE,MAAM,CAAU,yBAAyB,GAAG,oCAAoC,CAAC;IACjF,MAAM,CAAU,iBAAiB,GAAG,MAAe,CAAC;IAEpD,YAAY,MAAc;QACxB,KAAK,CAAC,MAAM,EAAE,OAAO,EAAE,EAAE,CAAC,CAAC;IAC7B,CAAC;IAED,cAAc,CAAC,MAA2B;QACxC,OAAO,IAAI,aAAa,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IACzC,CAAC;IAED,gEAAgE;IAEhE,KAAK,CAAC,YAAY,CAAC,UAAkB,EAAE,OAAe,EAAE,MAAc;QACpE,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;QAChD,IAAI,CAAC,QAAQ;YAAE,MAAM,IAAI,KAAK,CAAC,YAAY,UAAU,MAAM,CAAC,CAAC;QAC7D,OAAO,QAAQ,CAAC,eAAe,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;IACnD,CAAC;IAED,KAAK,CAAC,WAAW,CAAC,UAAkB,EAAE,OAAe,EAAE,IAAY;QACjE,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;QAChD,IAAI,CAAC,QAAQ;YAAE,MAAM,IAAI,KAAK,CAAC,YAAY,UAAU,MAAM,CAAC,CAAC;QAC7D,OAAO,QAAQ,CAAC,aAAa,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;IAC/C,CAAC;IAED,KAAK,CAAC,WAAW,CAAC,UAAkB,EAAE,OAAe;QACnD,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;QAChD,IAAI,CAAC,QAAQ;YAAE,MAAM,IAAI,KAAK,CAAC,YAAY,UAAU,MAAM,CAAC,CAAC;QAC7D,OAAO,QAAQ,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC;IAC7C,CAAC;IAED,KAAK,CAAC,YAAY,CAAC,UAAkB,EAAE,OAAe;QACpD,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;QAChD,IAAI,CAAC,QAAQ;YAAE,MAAM,IAAI,KAAK,CAAC,YAAY,UAAU,MAAM,CAAC,CAAC;QAC7D,OAAO,QAAQ,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC;IAC1C,CAAC;IAED,kEAAkE;IAElE,KAAK,CAAC,KAAK;QACT,MAAM,KAAK,CAAC,KAAK,EAAE,CAAC;IACtB,CAAC"}
package/lib/endpoint.d.ts DELETED
@@ -1,108 +0,0 @@
1
- import { Endpoint, Message, SendOptions } from 'zhin.js';
2
- import type { SlackEndpointConfig, SlackMessageEvent } from "./types.js";
3
- import type { SlackAdapter } from "./adapter.js";
4
- export declare class SlackEndpoint implements Endpoint<SlackEndpointConfig, SlackMessageEvent> {
5
- #private;
6
- adapter: SlackAdapter;
7
- $config: SlackEndpointConfig;
8
- $connected: boolean;
9
- /** 延迟到 `$connect`,避免子类 mock `$connect` 时仍在构造函数里创建 Bolt/WebClient(会在后台触发 Slack API) */
10
- private app?;
11
- private client?;
12
- get logger(): import("zhin.js").Logger;
13
- get $id(): string;
14
- constructor(adapter: SlackAdapter, $config: SlackEndpointConfig);
15
- $connect(): Promise<void>;
16
- $disconnect(): Promise<void>;
17
- private senderPermitCache;
18
- private enrichChannelSender;
19
- private handleSlackMessage;
20
- $formatMessage(msg: SlackMessageEvent): Message<SlackMessageEvent>;
21
- private parseMessageContent;
22
- private parseSlackText;
23
- $sendMessage(options: SendOptions): Promise<string>;
24
- private sendContentToChannel;
25
- $recallMessage(id: string): Promise<void>;
26
- /**
27
- * 邀请用户到频道
28
- * @param channel 频道 ID
29
- * @param users 用户 ID 列表
30
- */
31
- inviteToChannel(channel: string, users: string[]): Promise<boolean>;
32
- /**
33
- * 从频道踢出用户
34
- * @param channel 频道 ID
35
- * @param user 用户 ID
36
- */
37
- kickFromChannel(channel: string, user: string): Promise<boolean>;
38
- /**
39
- * 设置频道话题
40
- * @param channel 频道 ID
41
- * @param topic 话题
42
- */
43
- setChannelTopic(channel: string, topic: string): Promise<boolean>;
44
- /**
45
- * 设置频道目的
46
- * @param channel 频道 ID
47
- * @param purpose 目的
48
- */
49
- setChannelPurpose(channel: string, purpose: string): Promise<boolean>;
50
- /**
51
- * 归档频道
52
- * @param channel 频道 ID
53
- */
54
- archiveChannel(channel: string): Promise<boolean>;
55
- /**
56
- * 取消归档频道
57
- * @param channel 频道 ID
58
- */
59
- unarchiveChannel(channel: string): Promise<boolean>;
60
- /**
61
- * 重命名频道
62
- * @param channel 频道 ID
63
- * @param name 新名称
64
- */
65
- renameChannel(channel: string, name: string): Promise<boolean>;
66
- /**
67
- * 获取频道成员列表
68
- * @param channel 频道 ID
69
- */
70
- getChannelMembers(channel: string): Promise<string[]>;
71
- /**
72
- * 获取频道信息
73
- * @param channel 频道 ID
74
- */
75
- getChannelInfo(channel: string): Promise<any>;
76
- /**
77
- * 获取用户信息
78
- * @param user 用户 ID
79
- */
80
- getUserInfo(user: string): Promise<any>;
81
- /**
82
- * 添加消息反应
83
- * @param channel 频道 ID
84
- * @param timestamp 消息时间戳
85
- * @param name 表情名称
86
- */
87
- addReaction(channel: string, timestamp: string, name: string): Promise<boolean>;
88
- /**
89
- * 移除消息反应
90
- * @param channel 频道 ID
91
- * @param timestamp 消息时间戳
92
- * @param name 表情名称
93
- */
94
- removeReaction(channel: string, timestamp: string, name: string): Promise<boolean>;
95
- /**
96
- * 置顶消息
97
- * @param channel 频道 ID
98
- * @param timestamp 消息时间戳
99
- */
100
- pinMessage(channel: string, timestamp: string): Promise<boolean>;
101
- /**
102
- * 取消置顶消息
103
- * @param channel 频道 ID
104
- * @param timestamp 消息时间戳
105
- */
106
- unpinMessage(channel: string, timestamp: string): Promise<boolean>;
107
- }
108
- //# sourceMappingURL=endpoint.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"endpoint.d.ts","sourceRoot":"","sources":["../src/endpoint.ts"],"names":[],"mappings":"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"}