@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.
- package/CHANGELOG.md +18 -0
- package/README.md +207 -98
- package/{skills/slack/SKILL.md → agent/skills/slack.md} +2 -0
- package/agent/tools/add_reaction.ts +26 -0
- package/agent/tools/archive_channel.ts +24 -0
- package/agent/tools/edit_message.ts +27 -0
- package/agent/tools/invite_to_channel.ts +26 -0
- package/agent/tools/pin_message.ts +26 -0
- package/agent/tools/remove_reaction.ts +26 -0
- package/agent/tools/set_purpose.ts +26 -0
- package/agent/tools/set_topic.ts +26 -0
- package/agent/tools/unarchive.ts +24 -0
- package/agent/tools/unpin_message.ts +26 -0
- package/agent/tools/user_info.ts +31 -0
- package/lib/agent/tools/add_reaction.js +21 -0
- package/lib/agent/tools/add_reaction.js.map +1 -0
- package/lib/agent/tools/archive_channel.js +21 -0
- package/lib/agent/tools/archive_channel.js.map +1 -0
- package/lib/agent/tools/edit_message.js +22 -0
- package/lib/agent/tools/edit_message.js.map +1 -0
- package/lib/agent/tools/invite_to_channel.js +22 -0
- package/lib/agent/tools/invite_to_channel.js.map +1 -0
- package/lib/agent/tools/pin_message.js +22 -0
- package/lib/agent/tools/pin_message.js.map +1 -0
- package/lib/agent/tools/remove_reaction.js +21 -0
- package/lib/agent/tools/remove_reaction.js.map +1 -0
- package/lib/agent/tools/set_purpose.js +22 -0
- package/lib/agent/tools/set_purpose.js.map +1 -0
- package/lib/agent/tools/set_topic.js +22 -0
- package/lib/agent/tools/set_topic.js.map +1 -0
- package/lib/agent/tools/unarchive.js +21 -0
- package/lib/agent/tools/unarchive.js.map +1 -0
- package/lib/agent/tools/unpin_message.js +22 -0
- package/lib/agent/tools/unpin_message.js.map +1 -0
- package/lib/agent/tools/user_info.js +28 -0
- package/lib/agent/tools/user_info.js.map +1 -0
- package/lib/{adapter.js → src/adapter.js} +19 -3
- package/lib/src/adapter.js.map +1 -0
- package/lib/src/endpoint.js +312 -0
- package/lib/src/endpoint.js.map +1 -0
- package/lib/src/event-dispatcher.js +233 -0
- package/lib/src/event-dispatcher.js.map +1 -0
- package/lib/src/index.js +51 -0
- package/lib/src/index.js.map +1 -0
- package/lib/src/markdown-to-mrkdwn.js +61 -0
- package/lib/src/markdown-to-mrkdwn.js.map +1 -0
- package/lib/src/mrkdwn-to-markdown.js +31 -0
- package/lib/src/mrkdwn-to-markdown.js.map +1 -0
- package/lib/{platform-permit.js → src/platform-permit.js} +3 -0
- package/lib/src/platform-permit.js.map +1 -0
- package/lib/src/segment-mapper.js.map +1 -0
- package/lib/src/signing.js +21 -0
- package/lib/src/signing.js.map +1 -0
- package/lib/src/slack-agent-deps.js +10 -0
- package/lib/src/slack-agent-deps.js.map +1 -0
- package/lib/src/slack-inbound-filter.js +47 -0
- package/lib/src/slack-inbound-filter.js.map +1 -0
- package/lib/src/slack-inbound.js +127 -0
- package/lib/src/slack-inbound.js.map +1 -0
- package/lib/src/slack-message-ref.js +18 -0
- package/lib/src/slack-message-ref.js.map +1 -0
- package/lib/src/slack-outbound.js +223 -0
- package/lib/src/slack-outbound.js.map +1 -0
- package/lib/src/slack-reaction.js +27 -0
- package/lib/src/slack-reaction.js.map +1 -0
- package/lib/src/slack-response-url.js +17 -0
- package/lib/src/slack-response-url.js.map +1 -0
- package/lib/src/slack-side-events.js +64 -0
- package/lib/src/slack-side-events.js.map +1 -0
- package/lib/src/transport-http.js +83 -0
- package/lib/src/transport-http.js.map +1 -0
- package/lib/src/transport-socket.js +68 -0
- package/lib/src/transport-socket.js.map +1 -0
- package/lib/src/types.js +5 -0
- package/lib/src/types.js.map +1 -0
- package/package.json +24 -6
- package/src/adapter.ts +28 -7
- package/src/endpoint.ts +206 -604
- package/src/event-dispatcher.ts +255 -0
- package/src/index.ts +31 -239
- package/src/markdown-to-mrkdwn.ts +58 -0
- package/src/mrkdwn-to-markdown.ts +29 -0
- package/src/platform-permit.ts +1 -2
- package/src/signing.ts +28 -0
- package/src/slack-agent-deps.ts +22 -0
- package/src/slack-inbound-filter.ts +60 -0
- package/src/slack-inbound.ts +140 -0
- package/src/slack-message-ref.ts +18 -0
- package/src/slack-outbound.ts +269 -0
- package/src/slack-reaction.ts +23 -0
- package/src/slack-response-url.ts +26 -0
- package/src/slack-side-events.ts +74 -0
- package/src/transport-http.ts +95 -0
- package/src/transport-socket.ts +77 -0
- package/src/types.ts +99 -4
- package/lib/adapter.d.ts +0 -19
- package/lib/adapter.d.ts.map +0 -1
- package/lib/adapter.js.map +0 -1
- package/lib/endpoint.d.ts +0 -108
- package/lib/endpoint.d.ts.map +0 -1
- package/lib/endpoint.js +0 -677
- package/lib/endpoint.js.map +0 -1
- package/lib/index.d.ts +0 -10
- package/lib/index.d.ts.map +0 -1
- package/lib/index.js +0 -252
- package/lib/index.js.map +0 -1
- package/lib/platform-permit.d.ts +0 -17
- package/lib/platform-permit.d.ts.map +0 -1
- package/lib/platform-permit.js.map +0 -1
- package/lib/segment-mapper.d.ts +0 -2
- package/lib/segment-mapper.d.ts.map +0 -1
- package/lib/segment-mapper.js.map +0 -1
- package/lib/types.d.ts +0 -17
- package/lib/types.d.ts.map +0 -1
- package/lib/types.js +0 -2
- package/lib/types.js.map +0 -1
- /package/{skills/slack → agent}/PERMITS.md +0 -0
- /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
|
-
|
|
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
|
package/lib/adapter.d.ts.map
DELETED
|
@@ -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"}
|
package/lib/adapter.js.map
DELETED
|
@@ -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
|
package/lib/endpoint.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"endpoint.d.ts","sourceRoot":"","sources":["../src/endpoint.ts"],"names":[],"mappings":"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"}
|