@zhin.js/adapter-napcat 1.0.1 → 1.1.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/CHANGELOG.md +757 -0
- package/{skills/napcat/PERMITS.md → PERMITS.md} +3 -3
- package/README.md +63 -95
- package/adapters/napcat/index.js +47 -0
- package/adapters/napcat/index.ts +64 -0
- package/agents/napcat/agent.json +20 -0
- package/agents/napcat/boundaries.md +3 -0
- package/agents/napcat/conventions.md +3 -0
- package/agents/napcat/skills/napcat-account/SKILL.md +25 -0
- package/agents/napcat/skills/napcat-account/tools/delete_friend/index.js +18 -0
- package/agents/napcat/skills/napcat-account/tools/delete_friend/index.ts +18 -0
- package/agents/napcat/skills/napcat-account/tools/get_user_status/index.js +16 -0
- package/agents/napcat/skills/napcat-account/tools/get_user_status/index.ts +16 -0
- package/agents/napcat/skills/napcat-account/tools/send_like/index.js +18 -0
- package/agents/napcat/skills/napcat-account/tools/send_like/index.ts +18 -0
- package/agents/napcat/skills/napcat-account/tools/set_avatar/index.js +17 -0
- package/agents/napcat/skills/napcat-account/tools/set_avatar/index.ts +17 -0
- package/agents/napcat/skills/napcat-account/tools/set_online_status/index.js +18 -0
- package/agents/napcat/skills/napcat-account/tools/set_online_status/index.ts +18 -0
- package/agents/napcat/skills/napcat-account/tools/set_profile/index.js +21 -0
- package/agents/napcat/skills/napcat-account/tools/set_profile/index.ts +21 -0
- package/agents/napcat/skills/napcat-account/tools/set_signature/index.js +17 -0
- package/agents/napcat/skills/napcat-account/tools/set_signature/index.ts +17 -0
- package/agents/napcat/skills/napcat-files-history/SKILL.md +22 -0
- package/agents/napcat/skills/napcat-files-history/tools/download_file/index.js +17 -0
- package/agents/napcat/skills/napcat-files-history/tools/download_file/index.ts +17 -0
- package/agents/napcat/skills/napcat-files-history/tools/get_friend_msg_history/index.js +18 -0
- package/agents/napcat/skills/napcat-files-history/tools/get_friend_msg_history/index.ts +18 -0
- package/agents/napcat/skills/napcat-files-history/tools/get_group_file_url/index.js +19 -0
- package/agents/napcat/skills/napcat-files-history/tools/get_group_file_url/index.ts +19 -0
- package/agents/napcat/skills/napcat-files-history/tools/get_group_msg_history/index.js +19 -0
- package/agents/napcat/skills/napcat-files-history/tools/get_group_msg_history/index.ts +19 -0
- package/agents/napcat/skills/napcat-files-history/tools/get_group_root_files/index.js +17 -0
- package/agents/napcat/skills/napcat-files-history/tools/get_group_root_files/index.ts +17 -0
- package/agents/napcat/skills/napcat-files-history/tools/upload_group_file/index.js +21 -0
- package/agents/napcat/skills/napcat-files-history/tools/upload_group_file/index.ts +21 -0
- package/agents/napcat/skills/napcat-group-content/SKILL.md +21 -0
- package/agents/napcat/skills/napcat-group-content/tools/del_group_notice/index.js +20 -0
- package/agents/napcat/skills/napcat-group-content/tools/del_group_notice/index.ts +20 -0
- package/agents/napcat/skills/napcat-group-content/tools/delete_essence_msg/index.js +19 -0
- package/agents/napcat/skills/napcat-group-content/tools/delete_essence_msg/index.ts +19 -0
- package/agents/napcat/skills/napcat-group-content/tools/get_essence_list/index.js +17 -0
- package/agents/napcat/skills/napcat-group-content/tools/get_essence_list/index.ts +17 -0
- package/agents/napcat/skills/napcat-group-content/tools/get_group_notice/index.js +17 -0
- package/agents/napcat/skills/napcat-group-content/tools/get_group_notice/index.ts +17 -0
- package/agents/napcat/skills/napcat-group-content/tools/send_group_notice/index.js +21 -0
- package/agents/napcat/skills/napcat-group-content/tools/send_group_notice/index.ts +21 -0
- package/agents/napcat/skills/napcat-group-content/tools/set_essence_msg/index.js +19 -0
- package/agents/napcat/skills/napcat-group-content/tools/set_essence_msg/index.ts +19 -0
- package/agents/napcat/skills/napcat-group-settings/SKILL.md +23 -0
- package/agents/napcat/skills/napcat-group-settings/tools/get_group_info_ex/index.js +17 -0
- package/agents/napcat/skills/napcat-group-settings/tools/get_group_info_ex/index.ts +17 -0
- package/agents/napcat/skills/napcat-group-settings/tools/get_group_shut_list/index.js +17 -0
- package/agents/napcat/skills/napcat-group-settings/tools/get_group_shut_list/index.ts +17 -0
- package/agents/napcat/skills/napcat-group-settings/tools/group_sign/index.js +18 -0
- package/agents/napcat/skills/napcat-group-settings/tools/group_sign/index.ts +18 -0
- package/agents/napcat/skills/napcat-group-settings/tools/set_group_portrait/index.js +20 -0
- package/agents/napcat/skills/napcat-group-settings/tools/set_group_portrait/index.ts +20 -0
- package/agents/napcat/skills/napcat-group-settings/tools/set_title/index.js +21 -0
- package/agents/napcat/skills/napcat-group-settings/tools/set_title/index.ts +21 -0
- package/agents/napcat/skills/napcat-media/SKILL.md +23 -0
- package/agents/napcat/skills/napcat-media/tools/ai_tts/index.js +19 -0
- package/agents/napcat/skills/napcat-media/tools/ai_tts/index.ts +19 -0
- package/agents/napcat/skills/napcat-media/tools/get_ai_characters/index.js +17 -0
- package/agents/napcat/skills/napcat-media/tools/get_ai_characters/index.ts +17 -0
- package/agents/napcat/skills/napcat-media/tools/get_mini_app_ark/index.js +20 -0
- package/agents/napcat/skills/napcat-media/tools/get_mini_app_ark/index.ts +20 -0
- package/agents/napcat/skills/napcat-media/tools/ocr_image/index.js +16 -0
- package/agents/napcat/skills/napcat-media/tools/ocr_image/index.ts +16 -0
- package/agents/napcat/skills/napcat-media/tools/translate/index.js +16 -0
- package/agents/napcat/skills/napcat-media/tools/translate/index.ts +16 -0
- package/agents/napcat/skills/napcat-messaging/SKILL.md +22 -0
- package/agents/napcat/skills/napcat-messaging/tools/forward_single_msg/index.js +22 -0
- package/agents/napcat/skills/napcat-messaging/tools/forward_single_msg/index.ts +28 -0
- package/agents/napcat/skills/napcat-messaging/tools/mark_msg_as_read/index.js +17 -0
- package/agents/napcat/skills/napcat-messaging/tools/mark_msg_as_read/index.ts +17 -0
- package/agents/napcat/skills/napcat-messaging/tools/send_forward_msg/index.js +19 -0
- package/agents/napcat/skills/napcat-messaging/tools/send_forward_msg/index.ts +27 -0
- package/agents/napcat/skills/napcat-messaging/tools/send_poke/index.js +18 -0
- package/agents/napcat/skills/napcat-messaging/tools/send_poke/index.ts +18 -0
- package/agents/napcat/skills/napcat-messaging/tools/set_emoji_reaction/index.js +18 -0
- package/agents/napcat/skills/napcat-messaging/tools/set_emoji_reaction/index.ts +18 -0
- package/agents/napcat/system.md +3 -0
- package/commands/napcat/endpoint/add/[id]/index.js +3 -0
- package/commands/napcat/endpoint/add/[id]/index.ts +3 -0
- package/commands/napcat/endpoint/definition.js +29 -0
- package/commands/napcat/endpoint/definition.ts +26 -0
- package/commands/napcat/endpoint/list/index.js +3 -0
- package/commands/napcat/endpoint/list/index.ts +3 -0
- package/commands/napcat/endpoint/remove/[id]/index.js +3 -0
- package/commands/napcat/endpoint/remove/[id]/index.ts +3 -0
- package/lib/client.d.ts +52 -0
- package/lib/client.js +62 -0
- package/lib/endpoint-management.d.ts +15 -0
- package/lib/endpoint-management.js +47 -0
- package/lib/http-endpoint.d.ts +27 -0
- package/lib/http-endpoint.js +177 -0
- package/lib/index.d.ts +11 -22
- package/lib/index.js +10 -59
- package/lib/napcat-inbound.d.ts +12 -5
- package/lib/napcat-inbound.js +28 -13
- package/lib/napcat-runtime-state.d.ts +1 -0
- package/lib/napcat-runtime-state.js +6 -0
- package/lib/onebot-get-msg.d.ts +16 -3
- package/lib/onebot-get-msg.js +53 -1
- package/lib/protocol.d.ts +147 -0
- package/lib/protocol.js +318 -0
- package/lib/side-event-dispatch.d.ts +7 -0
- package/lib/side-event-dispatch.js +36 -0
- package/lib/webhook.d.ts +2 -0
- package/lib/webhook.js +14 -0
- package/lib/ws-endpoint.d.ts +27 -0
- package/lib/ws-endpoint.js +241 -0
- package/lib/ws-transport.d.ts +13 -0
- package/lib/ws-transport.js +75 -0
- package/lib/ws-types.d.ts +17 -0
- package/lib/ws-types.js +1 -0
- package/lib/wss-auth.d.ts +2 -0
- package/lib/wss-auth.js +16 -0
- package/lib/wss-endpoint.d.ts +29 -0
- package/lib/wss-endpoint.js +196 -0
- package/package.json +76 -34
- package/plugin.js +18 -0
- package/schema.json +131 -0
- package/src/client.ts +79 -0
- package/src/endpoint-management.ts +72 -0
- package/src/http-endpoint.ts +234 -0
- package/src/index.ts +62 -87
- package/src/napcat-inbound.ts +34 -10
- package/src/napcat-runtime-state.ts +7 -0
- package/src/onebot-get-msg.ts +69 -5
- package/src/protocol.ts +465 -0
- package/src/side-event-dispatch.ts +48 -0
- package/src/webhook.ts +16 -0
- package/src/ws-endpoint.ts +301 -0
- package/src/ws-transport.ts +105 -0
- package/src/ws-types.ts +20 -0
- package/src/wss-auth.ts +17 -0
- package/src/wss-endpoint.ts +247 -0
- package/client/NapCatManagement.tsx +0 -113
- package/client/index.tsx +0 -11
- package/client/tsconfig.json +0 -7
- package/client/utils/api.ts +0 -30
- package/dist/index.js +0 -27
- package/lib/adapter.d.ts +0 -28
- package/lib/adapter.d.ts.map +0 -1
- package/lib/adapter.js +0 -94
- package/lib/adapter.js.map +0 -1
- package/lib/agent-prompt.d.ts +0 -3
- package/lib/agent-prompt.d.ts.map +0 -1
- package/lib/agent-prompt.js +0 -105
- package/lib/agent-prompt.js.map +0 -1
- package/lib/endpoint-base.d.ts +0 -143
- package/lib/endpoint-base.d.ts.map +0 -1
- package/lib/endpoint-base.js +0 -334
- package/lib/endpoint-base.js.map +0 -1
- package/lib/endpoint-http.d.ts +0 -18
- package/lib/endpoint-http.d.ts.map +0 -1
- package/lib/endpoint-http.js +0 -119
- package/lib/endpoint-http.js.map +0 -1
- package/lib/endpoint-ws-client.d.ts +0 -21
- package/lib/endpoint-ws-client.d.ts.map +0 -1
- package/lib/endpoint-ws-client.js +0 -165
- package/lib/endpoint-ws-client.js.map +0 -1
- package/lib/endpoint-ws-server.d.ts +0 -21
- package/lib/endpoint-ws-server.d.ts.map +0 -1
- package/lib/endpoint-ws-server.js +0 -150
- package/lib/endpoint-ws-server.js.map +0 -1
- package/lib/index.d.ts.map +0 -1
- package/lib/index.js.map +0 -1
- package/lib/napcat-inbound.d.ts.map +0 -1
- package/lib/napcat-inbound.js.map +0 -1
- package/lib/onebot-get-msg.d.ts.map +0 -1
- package/lib/onebot-get-msg.js.map +0 -1
- package/lib/routes.d.ts +0 -4
- package/lib/routes.d.ts.map +0 -1
- package/lib/routes.js +0 -61
- package/lib/routes.js.map +0 -1
- package/lib/tools.d.ts +0 -8
- package/lib/tools.d.ts.map +0 -1
- package/lib/tools.js +0 -605
- package/lib/tools.js.map +0 -1
- package/lib/types.d.ts +0 -293
- package/lib/types.d.ts.map +0 -1
- package/lib/types.js +0 -6
- package/lib/types.js.map +0 -1
- package/lib/typing-indicator.d.ts +0 -45
- package/lib/typing-indicator.d.ts.map +0 -1
- package/lib/typing-indicator.js +0 -132
- package/lib/typing-indicator.js.map +0 -1
- package/plugin.yml +0 -3
- package/skills/napcat/SKILL.md +0 -311
- package/src/adapter.ts +0 -101
- package/src/agent-prompt.ts +0 -114
- package/src/endpoint-base.ts +0 -376
- package/src/endpoint-http.ts +0 -109
- package/src/endpoint-ws-client.ts +0 -164
- package/src/endpoint-ws-server.ts +0 -150
- package/src/routes.ts +0 -61
- package/src/tools.ts +0 -632
- package/src/types.ts +0 -279
- package/src/typing-indicator.ts +0 -184
|
@@ -1,150 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* NapCat 反向 WebSocket 连接
|
|
3
|
-
*/
|
|
4
|
-
import WebSocket, { WebSocketServer } from 'ws';
|
|
5
|
-
import { formatCompact } from 'zhin.js';
|
|
6
|
-
import type { IncomingMessage } from 'http';
|
|
7
|
-
import { NapCatEndpointBase } from './endpoint-base.js';
|
|
8
|
-
import type { NapCatWsServerConfig, ApiResponse } from './types.js';
|
|
9
|
-
import type { NapCatAdapter } from './adapter.js';
|
|
10
|
-
import type { Router } from '@zhin.js/host-router';
|
|
11
|
-
import { enableTypingIndicator } from './typing-indicator.js';
|
|
12
|
-
|
|
13
|
-
export class NapCatWsServer extends NapCatEndpointBase {
|
|
14
|
-
#wss?: WebSocketServer;
|
|
15
|
-
#clientMap = new Map<string, WebSocket>();
|
|
16
|
-
private heartbeatTimer?: NodeJS.Timeout;
|
|
17
|
-
private requestId = 0;
|
|
18
|
-
private pendingRequests = new Map<string, {
|
|
19
|
-
resolve: (value: any) => void;
|
|
20
|
-
reject: (error: Error) => void;
|
|
21
|
-
timeout: NodeJS.Timeout;
|
|
22
|
-
}>();
|
|
23
|
-
|
|
24
|
-
declare $config: NapCatWsServerConfig;
|
|
25
|
-
|
|
26
|
-
constructor(adapter: NapCatAdapter, public router: Router, config: NapCatWsServerConfig) {
|
|
27
|
-
super(adapter, config);
|
|
28
|
-
}
|
|
29
|
-
|
|
30
|
-
async $connect(): Promise<void> {
|
|
31
|
-
if (!this.$config.access_token) {
|
|
32
|
-
this.logger.warn(formatCompact({ endpoint: this.$id, ok: false, error: 'missing access_token' }));
|
|
33
|
-
}
|
|
34
|
-
this.#wss = this.router.ws(this.$config.path, {
|
|
35
|
-
verifyClient: (info: { origin: string; secure: boolean; req: IncomingMessage }) => {
|
|
36
|
-
const authorization = info.req.headers['authorization'] || '';
|
|
37
|
-
if (this.$config.access_token && authorization !== `Bearer ${this.$config.access_token}`) {
|
|
38
|
-
this.logger.error(`[${this.$id}] auth failed`);
|
|
39
|
-
return false;
|
|
40
|
-
}
|
|
41
|
-
return true;
|
|
42
|
-
},
|
|
43
|
-
});
|
|
44
|
-
this.logger.info(formatCompact( { op: 'listen', endpoint: this.$id, mode: 'wss', path: this.$config.path }));
|
|
45
|
-
|
|
46
|
-
this.#wss.on('connection', (client, req) => {
|
|
47
|
-
this.startHeartbeat();
|
|
48
|
-
this.logger.info(formatCompact({ endpoint: this.$id, peer: req.socket.remoteAddress }));
|
|
49
|
-
|
|
50
|
-
client.on('error', (err) => this.logger.warn(formatCompact( {
|
|
51
|
-
op: 'ws_error',
|
|
52
|
-
endpoint: this.$id,
|
|
53
|
-
ok: false,
|
|
54
|
-
error: err instanceof Error ? err.message : String(err),
|
|
55
|
-
})));
|
|
56
|
-
client.on('close', (code, reason) => {
|
|
57
|
-
const reasonStr = reason?.toString?.() || '';
|
|
58
|
-
this.logger.warn(formatCompact( {
|
|
59
|
-
op: 'disconnect',
|
|
60
|
-
endpoint: this.$id,
|
|
61
|
-
code,
|
|
62
|
-
error: reasonStr || undefined,
|
|
63
|
-
}));
|
|
64
|
-
for (const [key, val] of this.#clientMap) {
|
|
65
|
-
if (val === client) this.#clientMap.delete(key);
|
|
66
|
-
}
|
|
67
|
-
if (this.#clientMap.size === 0) this.$connected = false;
|
|
68
|
-
});
|
|
69
|
-
client.on('message', (data) => {
|
|
70
|
-
try { this.handleWsMessage(client, JSON.parse(data.toString())); } catch (e) { this.emit('error', e); }
|
|
71
|
-
});
|
|
72
|
-
});
|
|
73
|
-
}
|
|
74
|
-
|
|
75
|
-
async $disconnect(): Promise<void> {
|
|
76
|
-
this.#wss?.close();
|
|
77
|
-
if (this.heartbeatTimer) { clearInterval(this.heartbeatTimer); this.heartbeatTimer = undefined; }
|
|
78
|
-
for (const [, req] of this.pendingRequests) { clearTimeout(req.timeout); req.reject(new Error('Connection closed')); }
|
|
79
|
-
this.pendingRequests.clear();
|
|
80
|
-
this.inboundDeduper.clear();
|
|
81
|
-
this.$connected = false;
|
|
82
|
-
}
|
|
83
|
-
|
|
84
|
-
async callApi<T = any>(action: string, params: Record<string, any> = {}): Promise<T> {
|
|
85
|
-
const selfId = this.getFirstSelfId();
|
|
86
|
-
const client = this.#clientMap.get(selfId);
|
|
87
|
-
if (!client || client.readyState !== WebSocket.OPEN) throw new Error('WebSocket is not connected');
|
|
88
|
-
const echo = `req_${++this.requestId}`;
|
|
89
|
-
return new Promise((resolve, reject) => {
|
|
90
|
-
const timeout = setTimeout(() => { this.pendingRequests.delete(echo); reject(new Error(`API call timeout: ${action}`)); }, 30000);
|
|
91
|
-
this.pendingRequests.set(echo, { resolve, reject, timeout });
|
|
92
|
-
client.send(JSON.stringify({ action, params, echo }));
|
|
93
|
-
});
|
|
94
|
-
}
|
|
95
|
-
|
|
96
|
-
private getFirstSelfId(): string {
|
|
97
|
-
const first = this.#clientMap.keys().next().value;
|
|
98
|
-
if (!first) throw new Error('No NapCat client connected to reverse WS');
|
|
99
|
-
return first;
|
|
100
|
-
}
|
|
101
|
-
|
|
102
|
-
private handleWsMessage(client: WebSocket, message: any): void {
|
|
103
|
-
if (message.self_id != null) {
|
|
104
|
-
const selfIdStr = String(message.self_id);
|
|
105
|
-
if (!this.#clientMap.has(selfIdStr) || this.#clientMap.get(selfIdStr) !== client) {
|
|
106
|
-
this.#clientMap.set(selfIdStr, client);
|
|
107
|
-
if (!this.$connected) this.$connected = true;
|
|
108
|
-
}
|
|
109
|
-
}
|
|
110
|
-
if (message.echo && this.pendingRequests.has(message.echo)) {
|
|
111
|
-
const req = this.pendingRequests.get(message.echo)!;
|
|
112
|
-
this.pendingRequests.delete(message.echo);
|
|
113
|
-
clearTimeout(req.timeout);
|
|
114
|
-
const resp = message as ApiResponse;
|
|
115
|
-
if (resp.status === 'ok') return req.resolve(resp.data);
|
|
116
|
-
return req.reject(new Error(`API error [${resp.retcode}]: ${resp.message || resp.wording || 'unknown'}`));
|
|
117
|
-
}
|
|
118
|
-
|
|
119
|
-
if (message.post_type === 'meta_event' && message.sub_type === 'connect') {
|
|
120
|
-
this.#clientMap.set(String(message.self_id), client);
|
|
121
|
-
this.$connected = true;
|
|
122
|
-
this.logger.info(formatCompact({ endpoint: this.$id, self_id: message.self_id }));
|
|
123
|
-
this.initTypingIndicator();
|
|
124
|
-
return;
|
|
125
|
-
}
|
|
126
|
-
this.dispatchEvent(message);
|
|
127
|
-
}
|
|
128
|
-
|
|
129
|
-
private startHeartbeat(): void {
|
|
130
|
-
if (this.heartbeatTimer) return;
|
|
131
|
-
const interval = this.$config.heartbeat_interval || 30000;
|
|
132
|
-
this.heartbeatTimer = setInterval(() => {
|
|
133
|
-
for (const client of this.#wss?.clients || []) {
|
|
134
|
-
if (client.readyState === WebSocket.OPEN) client.ping();
|
|
135
|
-
}
|
|
136
|
-
}, interval);
|
|
137
|
-
}
|
|
138
|
-
|
|
139
|
-
private initTypingIndicator(): void {
|
|
140
|
-
const tiConfig = (this.$config as any).typingIndicator;
|
|
141
|
-
if (tiConfig && tiConfig.enabled !== false) {
|
|
142
|
-
enableTypingIndicator(this, {
|
|
143
|
-
enabled: true,
|
|
144
|
-
defaultEmoji: tiConfig.defaultEmoji || '128516',
|
|
145
|
-
autoRemove: true,
|
|
146
|
-
removeDelay: 5000,
|
|
147
|
-
});
|
|
148
|
-
}
|
|
149
|
-
}
|
|
150
|
-
}
|
package/src/routes.ts
DELETED
|
@@ -1,61 +0,0 @@
|
|
|
1
|
-
import type { Router } from '@zhin.js/host-router';
|
|
2
|
-
import type { NapCatAdapter } from './adapter.js';
|
|
3
|
-
|
|
4
|
-
export function registerRoutes(router: Router, napcat: NapCatAdapter): void {
|
|
5
|
-
router.get('/api/napcat/endpoints', async (ctx) => {
|
|
6
|
-
try {
|
|
7
|
-
const endpoints = Array.from(napcat.endpoints.values());
|
|
8
|
-
if (endpoints.length === 0) {
|
|
9
|
-
ctx.body = { success: true, data: [], message: '暂无 NapCat Endpoint 实例' };
|
|
10
|
-
return;
|
|
11
|
-
}
|
|
12
|
-
const result = await Promise.all(
|
|
13
|
-
endpoints.map(async (endpoint) => {
|
|
14
|
-
try {
|
|
15
|
-
const connection = (endpoint.$config as any).connection ?? 'ws';
|
|
16
|
-
const base: Record<string, unknown> = {
|
|
17
|
-
name: endpoint.$config.name,
|
|
18
|
-
connected: endpoint.$connected || false,
|
|
19
|
-
connection,
|
|
20
|
-
status: endpoint.$connected ? 'online' : 'offline',
|
|
21
|
-
lastActivity: new Date().toISOString(),
|
|
22
|
-
};
|
|
23
|
-
if (endpoint.$connected) {
|
|
24
|
-
try {
|
|
25
|
-
const friends = await endpoint.getFriendList();
|
|
26
|
-
const groups = await endpoint.getGroupList();
|
|
27
|
-
base.friendCount = Array.isArray(friends) ? friends.length : 0;
|
|
28
|
-
base.groupCount = Array.isArray(groups) ? groups.length : 0;
|
|
29
|
-
} catch {
|
|
30
|
-
base.friendCount = 0;
|
|
31
|
-
base.groupCount = 0;
|
|
32
|
-
}
|
|
33
|
-
} else {
|
|
34
|
-
base.friendCount = 0;
|
|
35
|
-
base.groupCount = 0;
|
|
36
|
-
}
|
|
37
|
-
return base;
|
|
38
|
-
} catch {
|
|
39
|
-
return {
|
|
40
|
-
name: endpoint.$config.name,
|
|
41
|
-
connected: false,
|
|
42
|
-
connection: 'unknown',
|
|
43
|
-
status: 'error',
|
|
44
|
-
friendCount: 0,
|
|
45
|
-
groupCount: 0,
|
|
46
|
-
};
|
|
47
|
-
}
|
|
48
|
-
}),
|
|
49
|
-
);
|
|
50
|
-
ctx.body = { success: true, data: result, timestamp: new Date().toISOString() };
|
|
51
|
-
} catch (error) {
|
|
52
|
-
ctx.status = 500;
|
|
53
|
-
ctx.body = {
|
|
54
|
-
success: false,
|
|
55
|
-
error: 'NAPCAT_API_ERROR',
|
|
56
|
-
message: '获取 Endpoint 数据失败',
|
|
57
|
-
details: process.env.NODE_ENV === 'development' ? (error as Error).message : undefined,
|
|
58
|
-
};
|
|
59
|
-
}
|
|
60
|
-
});
|
|
61
|
-
}
|