@snowluma/sdk 0.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 (120) hide show
  1. package/CHANGELOG.md +8 -0
  2. package/README.md +259 -0
  3. package/VERSIONING.md +43 -0
  4. package/dist/actions.d.ts +4 -0
  5. package/dist/actions.d.ts.map +1 -0
  6. package/dist/actions.js +121 -0
  7. package/dist/actions.js.map +1 -0
  8. package/dist/client/api-client.d.ts +151 -0
  9. package/dist/client/api-client.d.ts.map +1 -0
  10. package/dist/client/api-client.js +331 -0
  11. package/dist/client/api-client.js.map +1 -0
  12. package/dist/client/http-client.d.ts +25 -0
  13. package/dist/client/http-client.d.ts.map +1 -0
  14. package/dist/client/http-client.js +81 -0
  15. package/dist/client/http-client.js.map +1 -0
  16. package/dist/client/index.d.ts +6 -0
  17. package/dist/client/index.d.ts.map +1 -0
  18. package/dist/client/index.js +4 -0
  19. package/dist/client/index.js.map +1 -0
  20. package/dist/client/websocket-client.d.ts +65 -0
  21. package/dist/client/websocket-client.d.ts.map +1 -0
  22. package/dist/client/websocket-client.js +309 -0
  23. package/dist/client/websocket-client.js.map +1 -0
  24. package/dist/client/websocket-types.d.ts +53 -0
  25. package/dist/client/websocket-types.d.ts.map +1 -0
  26. package/dist/client/websocket-types.js +2 -0
  27. package/dist/client/websocket-types.js.map +1 -0
  28. package/dist/client/websocket-utils.d.ts +10 -0
  29. package/dist/client/websocket-utils.d.ts.map +1 -0
  30. package/dist/client/websocket-utils.js +68 -0
  31. package/dist/client/websocket-utils.js.map +1 -0
  32. package/dist/emitter.d.ts +11 -0
  33. package/dist/emitter.d.ts.map +1 -0
  34. package/dist/emitter.js +34 -0
  35. package/dist/emitter.js.map +1 -0
  36. package/dist/errors.d.ts +39 -0
  37. package/dist/errors.d.ts.map +1 -0
  38. package/dist/errors.js +71 -0
  39. package/dist/errors.js.map +1 -0
  40. package/dist/events/command.d.ts +4 -0
  41. package/dist/events/command.d.ts.map +1 -0
  42. package/dist/events/command.js +46 -0
  43. package/dist/events/command.js.map +1 -0
  44. package/dist/events/context.d.ts +6 -0
  45. package/dist/events/context.d.ts.map +1 -0
  46. package/dist/events/context.js +65 -0
  47. package/dist/events/context.js.map +1 -0
  48. package/dist/events/guards.d.ts +11 -0
  49. package/dist/events/guards.d.ts.map +1 -0
  50. package/dist/events/guards.js +26 -0
  51. package/dist/events/guards.js.map +1 -0
  52. package/dist/events/index.d.ts +5 -0
  53. package/dist/events/index.d.ts.map +1 -0
  54. package/dist/events/index.js +5 -0
  55. package/dist/events/index.js.map +1 -0
  56. package/dist/events/types.d.ts +52 -0
  57. package/dist/events/types.d.ts.map +1 -0
  58. package/dist/events/types.js +2 -0
  59. package/dist/events/types.js.map +1 -0
  60. package/dist/index.d.ts +13 -0
  61. package/dist/index.d.ts.map +1 -0
  62. package/dist/index.js +8 -0
  63. package/dist/index.js.map +1 -0
  64. package/dist/internal/abort.d.ts +11 -0
  65. package/dist/internal/abort.d.ts.map +1 -0
  66. package/dist/internal/abort.js +62 -0
  67. package/dist/internal/abort.js.map +1 -0
  68. package/dist/internal/json.d.ts +8 -0
  69. package/dist/internal/json.d.ts.map +1 -0
  70. package/dist/internal/json.js +60 -0
  71. package/dist/internal/json.js.map +1 -0
  72. package/dist/messages/chain.d.ts +100 -0
  73. package/dist/messages/chain.d.ts.map +1 -0
  74. package/dist/messages/chain.js +220 -0
  75. package/dist/messages/chain.js.map +1 -0
  76. package/dist/messages/cq-format.d.ts +5 -0
  77. package/dist/messages/cq-format.d.ts.map +1 -0
  78. package/dist/messages/cq-format.js +23 -0
  79. package/dist/messages/cq-format.js.map +1 -0
  80. package/dist/messages/cq.d.ts +5 -0
  81. package/dist/messages/cq.d.ts.map +1 -0
  82. package/dist/messages/cq.js +98 -0
  83. package/dist/messages/cq.js.map +1 -0
  84. package/dist/messages/index.d.ts +29 -0
  85. package/dist/messages/index.d.ts.map +1 -0
  86. package/dist/messages/index.js +10 -0
  87. package/dist/messages/index.js.map +1 -0
  88. package/dist/messages/segments.d.ts +24 -0
  89. package/dist/messages/segments.d.ts.map +1 -0
  90. package/dist/messages/segments.js +65 -0
  91. package/dist/messages/segments.js.map +1 -0
  92. package/dist/types/actions.d.ts +474 -0
  93. package/dist/types/actions.d.ts.map +1 -0
  94. package/dist/types/actions.js +2 -0
  95. package/dist/types/actions.js.map +1 -0
  96. package/dist/types/events.d.ts +60 -0
  97. package/dist/types/events.d.ts.map +1 -0
  98. package/dist/types/events.js +2 -0
  99. package/dist/types/events.js.map +1 -0
  100. package/dist/types/index.d.ts +7 -0
  101. package/dist/types/index.d.ts.map +1 -0
  102. package/dist/types/index.js +7 -0
  103. package/dist/types/index.js.map +1 -0
  104. package/dist/types/json.d.ts +37 -0
  105. package/dist/types/json.d.ts.map +1 -0
  106. package/dist/types/json.js +2 -0
  107. package/dist/types/json.js.map +1 -0
  108. package/dist/types/messages.d.ts +90 -0
  109. package/dist/types/messages.d.ts.map +1 -0
  110. package/dist/types/messages.js +2 -0
  111. package/dist/types/messages.js.map +1 -0
  112. package/dist/types/params.d.ts +228 -0
  113. package/dist/types/params.d.ts.map +1 -0
  114. package/dist/types/params.js +2 -0
  115. package/dist/types/params.js.map +1 -0
  116. package/dist/types/results.d.ts +83 -0
  117. package/dist/types/results.d.ts.map +1 -0
  118. package/dist/types/results.js +2 -0
  119. package/dist/types/results.js.map +1 -0
  120. package/package.json +95 -0
@@ -0,0 +1,309 @@
1
+ import { SnowLumaAbortError, SnowLumaConnectionError, SnowLumaParseError, SnowLumaTimeoutError, } from '../errors';
2
+ import { Emitter } from '../emitter';
3
+ import { createEventContext, isGroupMessageEvent, isMessageEvent, isMetaEvent, isNoticeEvent, isPrivateMessageEvent, isRequestEvent, matchCommand, noticeType, requestType, } from '../events/index';
4
+ import { SnowLumaApiClient, toJsonObject } from './api-client';
5
+ import { raceWithAbort, throwIfAborted } from '../internal/abort';
6
+ import { appendAccessToken, assertApiResponse, createEcho, echoKey, isJsonObject } from '../internal/json';
7
+ import { addSocketListener, closeInfo, normalizeReconnect, rawToString, unwrapEventPayload, unwrapMessagePayload, WEBSOCKET_CLOSED, WEBSOCKET_OPEN, } from './websocket-utils';
8
+ /** OneBot WebSocket client for SnowLuma APIs and realtime events. */
9
+ export class SnowLumaWebSocketClient extends SnowLumaApiClient {
10
+ url;
11
+ accessToken;
12
+ requestTimeoutMs;
13
+ role;
14
+ protocols;
15
+ WebSocketCtor;
16
+ reconnect;
17
+ emitter = new Emitter();
18
+ pending = new Map();
19
+ middlewares = [];
20
+ socket = null;
21
+ connectPromise = null;
22
+ reconnectTimer = null;
23
+ reconnectAttempts = 0;
24
+ closedByUser = false;
25
+ constructor(options = {}) {
26
+ super();
27
+ this.url = options.url ?? 'ws://127.0.0.1:3001/';
28
+ this.accessToken = options.accessToken;
29
+ this.requestTimeoutMs = options.requestTimeoutMs ?? 30_000;
30
+ this.role = options.role ?? 'Universal';
31
+ this.protocols = options.protocols;
32
+ this.WebSocketCtor = options.webSocket ?? globalThis.WebSocket;
33
+ this.reconnect = normalizeReconnect(options.reconnect);
34
+ if (!this.WebSocketCtor) {
35
+ throw new SnowLumaConnectionError('No WebSocket implementation is available');
36
+ }
37
+ }
38
+ /** True when the underlying WebSocket is currently open. */
39
+ get isConnected() {
40
+ return this.socket?.readyState === WEBSOCKET_OPEN;
41
+ }
42
+ /** Subscribes to low-level client events. Returns an unsubscribe function. */
43
+ on(event, listener) {
44
+ return this.emitter.on(event, listener);
45
+ }
46
+ /** Subscribes to one low-level client event, then automatically unsubscribes. */
47
+ once(event, listener) {
48
+ return this.emitter.once(event, listener);
49
+ }
50
+ /** Removes a previously registered low-level client event listener. */
51
+ off(event, listener) {
52
+ this.emitter.off(event, listener);
53
+ }
54
+ /** Subscribes to every SnowLuma event packet. */
55
+ onEvent(listener) {
56
+ return this.on('event', listener);
57
+ }
58
+ /** Adds event middleware to the dispatch pipeline. */
59
+ use(middleware) {
60
+ this.middlewares.push(middleware);
61
+ return () => {
62
+ const index = this.middlewares.indexOf(middleware);
63
+ if (index >= 0)
64
+ this.middlewares.splice(index, 1);
65
+ };
66
+ }
67
+ /** Runs a handler when a type guard or predicate matches an event. */
68
+ when(predicate, handler) {
69
+ return this.use(async (event, context, next) => {
70
+ if (predicate(event)) {
71
+ await handler(event, context);
72
+ }
73
+ if (!context.stopped)
74
+ await next();
75
+ });
76
+ }
77
+ onMessage(handler) {
78
+ return this.when(isMessageEvent, handler);
79
+ }
80
+ onPrivateMessage(handler) {
81
+ return this.when(isPrivateMessageEvent, handler);
82
+ }
83
+ onGroupMessage(handler) {
84
+ return this.when(isGroupMessageEvent, handler);
85
+ }
86
+ onNotice(typeOrHandler, handler) {
87
+ if (typeof typeOrHandler === 'string') {
88
+ if (!handler)
89
+ throw new TypeError('onNotice(type, handler) requires a handler');
90
+ return this.when(noticeType(typeOrHandler), handler);
91
+ }
92
+ return this.when(isNoticeEvent, typeOrHandler);
93
+ }
94
+ onRequest(typeOrHandler, handler) {
95
+ if (typeof typeOrHandler === 'string') {
96
+ if (!handler)
97
+ throw new TypeError('onRequest(type, handler) requires a handler');
98
+ return this.when(requestType(typeOrHandler), handler);
99
+ }
100
+ return this.when(isRequestEvent, typeOrHandler);
101
+ }
102
+ onMetaEvent(handler) {
103
+ return this.when(isMetaEvent, handler);
104
+ }
105
+ command(command, handler, options) {
106
+ return this.onMessage(async (event, context) => {
107
+ const matched = matchCommand(event, command, options);
108
+ if (!matched)
109
+ return;
110
+ await handler(event, Object.assign(context, { command: matched }), matched);
111
+ });
112
+ }
113
+ /** Connects to SnowLuma's OneBot WebSocket endpoint. */
114
+ async connect() {
115
+ if (this.isConnected)
116
+ return;
117
+ if (this.connectPromise)
118
+ return this.connectPromise;
119
+ this.closedByUser = false;
120
+ this.connectPromise = new Promise((resolve, reject) => {
121
+ const url = appendAccessToken(this.url, this.accessToken);
122
+ const socket = new this.WebSocketCtor(url, this.protocols);
123
+ this.socket = socket;
124
+ const cleanup = [
125
+ addSocketListener(socket, 'open', () => {
126
+ cleanup.forEach((off) => off());
127
+ this.bindSocket(socket);
128
+ this.reconnectAttempts = 0;
129
+ this.connectPromise = null;
130
+ this.emitter.emit('open', undefined);
131
+ resolve();
132
+ }),
133
+ addSocketListener(socket, 'error', (error) => {
134
+ this.emitter.emit('error', unwrapEventPayload(error));
135
+ }),
136
+ addSocketListener(socket, 'close', (...args) => {
137
+ cleanup.forEach((off) => off());
138
+ this.connectPromise = null;
139
+ this.socket = null;
140
+ reject(new SnowLumaConnectionError('SnowLuma WebSocket closed before opening'));
141
+ this.handleClose(args);
142
+ }),
143
+ ];
144
+ });
145
+ return this.connectPromise;
146
+ }
147
+ /** Closes the socket and rejects all pending API requests. */
148
+ close(code = 1000, reason = 'normal') {
149
+ this.closedByUser = true;
150
+ if (this.reconnectTimer) {
151
+ clearTimeout(this.reconnectTimer);
152
+ this.reconnectTimer = null;
153
+ }
154
+ this.rejectPending(new SnowLumaConnectionError('SnowLuma WebSocket client closed'));
155
+ if (this.socket && this.socket.readyState !== WEBSOCKET_CLOSED) {
156
+ this.socket.close(code, reason);
157
+ }
158
+ this.socket = null;
159
+ this.connectPromise = null;
160
+ }
161
+ /** Sends one OneBot action over WebSocket and returns the raw response envelope. */
162
+ async request(action, params, options) {
163
+ throwIfAborted(options?.signal);
164
+ await raceWithAbort(this.connect(), options?.signal, 'SnowLuma WebSocket request aborted before connection opened');
165
+ throwIfAborted(options?.signal);
166
+ const socket = this.socket;
167
+ if (!socket || socket.readyState !== WEBSOCKET_OPEN) {
168
+ throw new SnowLumaConnectionError('SnowLuma WebSocket is not open');
169
+ }
170
+ const echo = options?.echo ?? createEcho();
171
+ const key = echoKey(echo);
172
+ const timeoutMs = options?.timeoutMs ?? this.requestTimeoutMs;
173
+ const promise = new Promise((resolve, reject) => {
174
+ let timer = null;
175
+ let abortListener;
176
+ const cleanup = () => {
177
+ if (timer)
178
+ clearTimeout(timer);
179
+ if (abortListener)
180
+ options?.signal?.removeEventListener('abort', abortListener);
181
+ };
182
+ timer = timeoutMs > 0
183
+ ? setTimeout(() => {
184
+ this.pending.delete(key);
185
+ cleanup();
186
+ reject(new SnowLumaTimeoutError(`SnowLuma WebSocket request timed out after ${timeoutMs}ms`, timeoutMs));
187
+ }, timeoutMs)
188
+ : null;
189
+ abortListener = () => {
190
+ this.pending.delete(key);
191
+ cleanup();
192
+ reject(new SnowLumaAbortError('SnowLuma WebSocket request aborted', { cause: options?.signal?.reason }));
193
+ };
194
+ options?.signal?.addEventListener('abort', abortListener, { once: true });
195
+ this.pending.set(key, { resolve, reject, timer, cleanup });
196
+ });
197
+ try {
198
+ socket.send(JSON.stringify({
199
+ action,
200
+ params: toJsonObject(params),
201
+ echo,
202
+ }));
203
+ }
204
+ catch (error) {
205
+ const pending = this.pending.get(key);
206
+ pending?.cleanup?.();
207
+ this.pending.delete(key);
208
+ throw new SnowLumaConnectionError('Failed to send SnowLuma WebSocket request', { cause: error });
209
+ }
210
+ return promise;
211
+ }
212
+ bindSocket(socket) {
213
+ addSocketListener(socket, 'message', (...args) => this.handleMessage(args));
214
+ addSocketListener(socket, 'error', (error) => this.emitter.emit('error', unwrapEventPayload(error)));
215
+ addSocketListener(socket, 'close', (...args) => this.handleClose(args));
216
+ }
217
+ handleMessage(args) {
218
+ const raw = unwrapMessagePayload(args[0]);
219
+ this.emitter.emit('raw', raw);
220
+ let parsed;
221
+ try {
222
+ parsed = JSON.parse(rawToString(raw));
223
+ }
224
+ catch (error) {
225
+ this.emitter.emit('error', new SnowLumaParseError('SnowLuma WebSocket returned non-JSON message', { cause: error }));
226
+ return;
227
+ }
228
+ if (isJsonObject(parsed) && parsed.echo !== undefined) {
229
+ const key = echoKey(parsed.echo);
230
+ const pending = this.pending.get(key);
231
+ if (pending) {
232
+ this.pending.delete(key);
233
+ pending.cleanup?.();
234
+ try {
235
+ const response = assertApiResponse(parsed);
236
+ pending.resolve(response);
237
+ this.emitter.emit('response', response);
238
+ }
239
+ catch (error) {
240
+ pending.reject(new SnowLumaParseError('SnowLuma WebSocket response is invalid', { cause: error }));
241
+ }
242
+ return;
243
+ }
244
+ }
245
+ if (isJsonObject(parsed) && typeof parsed.post_type === 'string') {
246
+ void this.dispatchEvent(parsed).catch((error) => {
247
+ this.emitter.emit('error', error);
248
+ });
249
+ }
250
+ }
251
+ async dispatchEvent(event) {
252
+ const context = createEventContext(event, this);
253
+ let index = -1;
254
+ const next = async () => {
255
+ index += 1;
256
+ const middleware = this.middlewares[index];
257
+ if (!middleware || context.stopped)
258
+ return;
259
+ await middleware(event, context, next);
260
+ };
261
+ await next();
262
+ if (!context.stopped && index >= this.middlewares.length - 1) {
263
+ this.emitter.emit('event', event);
264
+ }
265
+ }
266
+ handleClose(args) {
267
+ const info = closeInfo(args);
268
+ this.socket = null;
269
+ this.connectPromise = null;
270
+ this.rejectPending(new SnowLumaConnectionError('SnowLuma WebSocket closed'));
271
+ this.emitter.emit('close', info);
272
+ if (!this.closedByUser && this.reconnect) {
273
+ this.scheduleReconnect();
274
+ }
275
+ }
276
+ scheduleReconnect() {
277
+ if (this.reconnectTimer)
278
+ return;
279
+ const reconnect = this.reconnect;
280
+ if (!reconnect)
281
+ return;
282
+ const retries = reconnect.retries ?? Number.POSITIVE_INFINITY;
283
+ if (this.reconnectAttempts >= retries)
284
+ return;
285
+ const minDelay = reconnect.minDelayMs ?? 1000;
286
+ const maxDelay = reconnect.maxDelayMs ?? 30_000;
287
+ const delay = Math.min(maxDelay, minDelay * 2 ** this.reconnectAttempts);
288
+ this.reconnectAttempts += 1;
289
+ this.reconnectTimer = setTimeout(() => {
290
+ this.reconnectTimer = null;
291
+ void this.connect().catch((error) => {
292
+ this.emitter.emit('error', error);
293
+ if (!this.closedByUser)
294
+ this.scheduleReconnect();
295
+ });
296
+ }, delay);
297
+ }
298
+ rejectPending(error) {
299
+ for (const pending of this.pending.values()) {
300
+ pending.cleanup?.();
301
+ pending.reject(error);
302
+ }
303
+ this.pending.clear();
304
+ }
305
+ }
306
+ export function createWebSocketClient(options) {
307
+ return new SnowLumaWebSocketClient(options);
308
+ }
309
+ //# sourceMappingURL=websocket-client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"websocket-client.js","sourceRoot":"","sources":["../../src/client/websocket-client.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,53 @@
1
+ import type { ApiResponse, SnowLumaClientOptions, SnowLumaEvent, WsRole } from '../types/index';
2
+ export interface WebSocketLike {
3
+ readyState: number;
4
+ send(data: string): void;
5
+ close(code?: number, reason?: string): void;
6
+ addEventListener?: (event: string, listener: (...args: unknown[]) => void) => void;
7
+ removeEventListener?: (event: string, listener: (...args: unknown[]) => void) => void;
8
+ on?: (event: string, listener: (...args: unknown[]) => void) => void;
9
+ off?: (event: string, listener: (...args: unknown[]) => void) => void;
10
+ removeListener?: (event: string, listener: (...args: unknown[]) => void) => void;
11
+ }
12
+ export type WebSocketConstructor = new (url: string, protocols?: string | string[]) => WebSocketLike;
13
+ /** Reconnect policy for the WebSocket client. */
14
+ export interface ReconnectOptions {
15
+ /** Maximum reconnect attempts. Omit for unlimited retries. */
16
+ retries?: number;
17
+ /** Initial reconnect delay in milliseconds. Defaults to 1000. */
18
+ minDelayMs?: number;
19
+ /** Maximum reconnect delay in milliseconds. Defaults to 30000. */
20
+ maxDelayMs?: number;
21
+ }
22
+ /** Options for the WebSocket transport client. */
23
+ export interface SnowLumaWebSocketClientOptions extends SnowLumaClientOptions {
24
+ /** OneBot WebSocket endpoint. Defaults to ws://127.0.0.1:3001/. */
25
+ url?: string;
26
+ /** OneBot WebSocket role advertised by the client. */
27
+ role?: WsRole;
28
+ /** Optional WebSocket protocols argument. */
29
+ protocols?: string | string[];
30
+ /** Custom WebSocket constructor for Node runtimes or tests. */
31
+ webSocket?: WebSocketConstructor;
32
+ /** Enables or configures automatic reconnect after unexpected close. */
33
+ reconnect?: boolean | ReconnectOptions;
34
+ }
35
+ export interface WebSocketCloseInfo {
36
+ code?: number;
37
+ reason?: string;
38
+ }
39
+ export interface SnowLumaWebSocketEvents {
40
+ open: undefined;
41
+ close: WebSocketCloseInfo;
42
+ error: unknown;
43
+ event: SnowLumaEvent;
44
+ response: ApiResponse;
45
+ raw: unknown;
46
+ }
47
+ export interface PendingRequest {
48
+ resolve: (response: ApiResponse) => void;
49
+ reject: (error: Error) => void;
50
+ timer: ReturnType<typeof setTimeout> | null;
51
+ cleanup?: () => void;
52
+ }
53
+ //# sourceMappingURL=websocket-types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"websocket-types.d.ts","sourceRoot":"","sources":["../../src/client/websocket-types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,WAAW,EACX,qBAAqB,EACrB,aAAa,EACb,MAAM,EACP,MAAM,gBAAgB,CAAC;AAExB,MAAM,WAAW,aAAa;IAC5B,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5C,gBAAgB,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,IAAI,KAAK,IAAI,CAAC;IACnF,mBAAmB,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,IAAI,KAAK,IAAI,CAAC;IACtF,EAAE,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,IAAI,KAAK,IAAI,CAAC;IACrE,GAAG,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,IAAI,KAAK,IAAI,CAAC;IACtE,cAAc,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,IAAI,KAAK,IAAI,CAAC;CAClF;AAED,MAAM,MAAM,oBAAoB,GAAG,KAAK,GAAG,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,KAAK,aAAa,CAAC;AAErG,iDAAiD;AACjD,MAAM,WAAW,gBAAgB;IAC/B,8DAA8D;IAC9D,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,iEAAiE;IACjE,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,kEAAkE;IAClE,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,kDAAkD;AAClD,MAAM,WAAW,8BAA+B,SAAQ,qBAAqB;IAC3E,mEAAmE;IACnE,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,sDAAsD;IACtD,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,6CAA6C;IAC7C,SAAS,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IAC9B,+DAA+D;IAC/D,SAAS,CAAC,EAAE,oBAAoB,CAAC;IACjC,wEAAwE;IACxE,SAAS,CAAC,EAAE,OAAO,GAAG,gBAAgB,CAAC;CACxC;AAED,MAAM,WAAW,kBAAkB;IACjC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,uBAAuB;IACtC,IAAI,EAAE,SAAS,CAAC;IAChB,KAAK,EAAE,kBAAkB,CAAC;IAC1B,KAAK,EAAE,OAAO,CAAC;IACf,KAAK,EAAE,aAAa,CAAC;IACrB,QAAQ,EAAE,WAAW,CAAC;IACtB,GAAG,EAAE,OAAO,CAAC;CACd;AAED,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,CAAC,QAAQ,EAAE,WAAW,KAAK,IAAI,CAAC;IACzC,MAAM,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;IAC/B,KAAK,EAAE,UAAU,CAAC,OAAO,UAAU,CAAC,GAAG,IAAI,CAAC;IAC5C,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;CACtB"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=websocket-types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"websocket-types.js","sourceRoot":"","sources":["../../src/client/websocket-types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,10 @@
1
+ import type { ReconnectOptions, WebSocketCloseInfo, WebSocketLike } from './websocket-types';
2
+ export declare const WEBSOCKET_OPEN = 1;
3
+ export declare const WEBSOCKET_CLOSED = 3;
4
+ export declare function normalizeReconnect(value: boolean | ReconnectOptions | undefined): ReconnectOptions | null;
5
+ export declare function addSocketListener(socket: WebSocketLike, event: string, listener: (...args: unknown[]) => void): () => void;
6
+ export declare function unwrapMessagePayload(value: unknown): unknown;
7
+ export declare function unwrapEventPayload(value: unknown): unknown;
8
+ export declare function rawToString(value: unknown): string;
9
+ export declare function closeInfo(args: unknown[]): WebSocketCloseInfo;
10
+ //# sourceMappingURL=websocket-utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"websocket-utils.d.ts","sourceRoot":"","sources":["../../src/client/websocket-utils.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,gBAAgB,EAChB,kBAAkB,EAClB,aAAa,EACd,MAAM,mBAAmB,CAAC;AAE3B,eAAO,MAAM,cAAc,IAAI,CAAC;AAChC,eAAO,MAAM,gBAAgB,IAAI,CAAC;AAElC,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,OAAO,GAAG,gBAAgB,GAAG,SAAS,GAAG,gBAAgB,GAAG,IAAI,CAIzG;AAED,wBAAgB,iBAAiB,CAC/B,MAAM,EAAE,aAAa,EACrB,KAAK,EAAE,MAAM,EACb,QAAQ,EAAE,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,IAAI,GACrC,MAAM,IAAI,CAaZ;AAED,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAK5D;AAED,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAK1D;AAED,wBAAgB,WAAW,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAalD;AAED,wBAAgB,SAAS,CAAC,IAAI,EAAE,OAAO,EAAE,GAAG,kBAAkB,CAY7D"}
@@ -0,0 +1,68 @@
1
+ import { isJsonObject } from '../internal/json';
2
+ export const WEBSOCKET_OPEN = 1;
3
+ export const WEBSOCKET_CLOSED = 3;
4
+ export function normalizeReconnect(value) {
5
+ if (!value)
6
+ return null;
7
+ if (value === true)
8
+ return {};
9
+ return value;
10
+ }
11
+ export function addSocketListener(socket, event, listener) {
12
+ if (socket.addEventListener) {
13
+ socket.addEventListener(event, listener);
14
+ return () => socket.removeEventListener?.(event, listener);
15
+ }
16
+ if (socket.on) {
17
+ socket.on(event, listener);
18
+ return () => {
19
+ if (socket.off)
20
+ socket.off(event, listener);
21
+ else
22
+ socket.removeListener?.(event, listener);
23
+ };
24
+ }
25
+ return () => undefined;
26
+ }
27
+ export function unwrapMessagePayload(value) {
28
+ if (isJsonObject(value) && 'data' in value) {
29
+ return value.data;
30
+ }
31
+ return value;
32
+ }
33
+ export function unwrapEventPayload(value) {
34
+ if (isJsonObject(value) && 'error' in value) {
35
+ return value.error;
36
+ }
37
+ return value;
38
+ }
39
+ export function rawToString(value) {
40
+ if (typeof value === 'string')
41
+ return value;
42
+ if (value instanceof ArrayBuffer)
43
+ return new TextDecoder().decode(value);
44
+ if (ArrayBuffer.isView(value)) {
45
+ return new TextDecoder().decode(value);
46
+ }
47
+ if (value instanceof Blob) {
48
+ throw new Error('Blob WebSocket messages are not supported synchronously');
49
+ }
50
+ if (value && typeof value === 'object' && 'toString' in value && typeof value.toString === 'function') {
51
+ return value.toString();
52
+ }
53
+ return String(value);
54
+ }
55
+ export function closeInfo(args) {
56
+ const first = args[0];
57
+ if (isJsonObject(first)) {
58
+ return {
59
+ code: typeof first.code === 'number' ? first.code : undefined,
60
+ reason: typeof first.reason === 'string' ? first.reason : undefined,
61
+ };
62
+ }
63
+ return {
64
+ code: typeof args[0] === 'number' ? args[0] : undefined,
65
+ reason: typeof args[1] === 'string' ? args[1] : undefined,
66
+ };
67
+ }
68
+ //# sourceMappingURL=websocket-utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"websocket-utils.js","sourceRoot":"","sources":["../../src/client/websocket-utils.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ type Listener<TPayload> = (payload: TPayload) => void;
2
+ export declare class Emitter<TEvents extends object> {
3
+ private readonly listeners;
4
+ on<TKey extends keyof TEvents>(event: TKey, listener: Listener<TEvents[TKey]>): () => void;
5
+ once<TKey extends keyof TEvents>(event: TKey, listener: Listener<TEvents[TKey]>): () => void;
6
+ off<TKey extends keyof TEvents>(event: TKey, listener: Listener<TEvents[TKey]>): void;
7
+ emit<TKey extends keyof TEvents>(event: TKey, payload: TEvents[TKey]): void;
8
+ clear(): void;
9
+ }
10
+ export {};
11
+ //# sourceMappingURL=emitter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"emitter.d.ts","sourceRoot":"","sources":["../src/emitter.ts"],"names":[],"mappings":"AAAA,KAAK,QAAQ,CAAC,QAAQ,IAAI,CAAC,OAAO,EAAE,QAAQ,KAAK,IAAI,CAAC;AAEtD,qBAAa,OAAO,CAAC,OAAO,SAAS,MAAM;IACzC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAkD;IAE5E,EAAE,CAAC,IAAI,SAAS,MAAM,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,GAAG,MAAM,IAAI;IAU1F,IAAI,CAAC,IAAI,SAAS,MAAM,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,GAAG,MAAM,IAAI;IAQ5F,GAAG,CAAC,IAAI,SAAS,MAAM,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,GAAG,IAAI;IAIrF,IAAI,CAAC,IAAI,SAAS,MAAM,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI;IAQ3E,KAAK,IAAI,IAAI;CAGd"}
@@ -0,0 +1,34 @@
1
+ export class Emitter {
2
+ listeners = new Map();
3
+ on(event, listener) {
4
+ let set = this.listeners.get(event);
5
+ if (!set) {
6
+ set = new Set();
7
+ this.listeners.set(event, set);
8
+ }
9
+ set.add(listener);
10
+ return () => this.off(event, listener);
11
+ }
12
+ once(event, listener) {
13
+ const off = this.on(event, (payload) => {
14
+ off();
15
+ listener(payload);
16
+ });
17
+ return off;
18
+ }
19
+ off(event, listener) {
20
+ this.listeners.get(event)?.delete(listener);
21
+ }
22
+ emit(event, payload) {
23
+ const set = this.listeners.get(event);
24
+ if (!set)
25
+ return;
26
+ for (const listener of [...set]) {
27
+ listener(payload);
28
+ }
29
+ }
30
+ clear() {
31
+ this.listeners.clear();
32
+ }
33
+ }
34
+ //# sourceMappingURL=emitter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"emitter.js","sourceRoot":"","sources":["../src/emitter.ts"],"names":[],"mappings":"AAEA,MAAM,OAAO,OAAO;IACD,SAAS,GAAG,IAAI,GAAG,EAAuC,CAAC;IAE5E,EAAE,CAA6B,KAAW,EAAE,QAAiC;QAC3E,IAAI,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QACpC,IAAI,CAAC,GAAG,EAAE,CAAC;YACT,GAAG,GAAG,IAAI,GAAG,EAAE,CAAC;YAChB,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;QACjC,CAAC;QACD,GAAG,CAAC,GAAG,CAAC,QAA2B,CAAC,CAAC;QACrC,OAAO,GAAG,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;IACzC,CAAC;IAED,IAAI,CAA6B,KAAW,EAAE,QAAiC;QAC7E,MAAM,GAAG,GAAG,IAAI,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC,OAAO,EAAE,EAAE;YACrC,GAAG,EAAE,CAAC;YACN,QAAQ,CAAC,OAAO,CAAC,CAAC;QACpB,CAAC,CAAC,CAAC;QACH,OAAO,GAAG,CAAC;IACb,CAAC;IAED,GAAG,CAA6B,KAAW,EAAE,QAAiC;QAC5E,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC,QAA2B,CAAC,CAAC;IACjE,CAAC;IAED,IAAI,CAA6B,KAAW,EAAE,OAAsB;QAClE,MAAM,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QACtC,IAAI,CAAC,GAAG;YAAE,OAAO;QACjB,KAAK,MAAM,QAAQ,IAAI,CAAC,GAAG,GAAG,CAAC,EAAE,CAAC;YAChC,QAAQ,CAAC,OAAgB,CAAC,CAAC;QAC7B,CAAC;IACH,CAAC;IAED,KAAK;QACH,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC;IACzB,CAAC;CACF"}
@@ -0,0 +1,39 @@
1
+ import type { ApiResponse } from './types/index';
2
+ /** Base error for every exception intentionally thrown by the SnowLuma SDK. */
3
+ export declare class SnowLumaError extends Error {
4
+ constructor(message: string, options?: ErrorOptions);
5
+ }
6
+ /** Transport-layer failures before a valid OneBot API response is available. */
7
+ export declare class SnowLumaTransportError extends SnowLumaError {
8
+ constructor(message: string, options?: ErrorOptions);
9
+ }
10
+ /** The request was cancelled by the caller's AbortSignal. */
11
+ export declare class SnowLumaAbortError extends SnowLumaTransportError {
12
+ constructor(message?: string, options?: ErrorOptions);
13
+ }
14
+ /** The request exceeded the configured timeout. */
15
+ export declare class SnowLumaTimeoutError extends SnowLumaTransportError {
16
+ readonly timeoutMs: number;
17
+ constructor(message: string, timeoutMs: number, options?: ErrorOptions);
18
+ }
19
+ /** The SDK could not establish or keep a connection to SnowLuma. */
20
+ export declare class SnowLumaConnectionError extends SnowLumaTransportError {
21
+ constructor(message: string, options?: ErrorOptions);
22
+ }
23
+ /** SnowLuma returned a payload that could not be parsed as the expected protocol shape. */
24
+ export declare class SnowLumaParseError extends SnowLumaTransportError {
25
+ constructor(message: string, options?: ErrorOptions);
26
+ }
27
+ /** A OneBot API response with status failed or a non-zero retcode. */
28
+ export declare class SnowLumaApiError<TData = unknown> extends SnowLumaError {
29
+ readonly response: ApiResponse<TData>;
30
+ readonly retcode: number;
31
+ readonly wording?: string;
32
+ constructor(response: ApiResponse<TData>);
33
+ }
34
+ /** Authentication or authorization failure returned by SnowLuma. */
35
+ export declare class SnowLumaAuthError<TData = unknown> extends SnowLumaApiError<TData> {
36
+ constructor(response: ApiResponse<TData>);
37
+ }
38
+ export declare function createSnowLumaApiError<TData>(response: ApiResponse<TData>): SnowLumaApiError<TData>;
39
+ //# sourceMappingURL=errors.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAEjD,+EAA+E;AAC/E,qBAAa,aAAc,SAAQ,KAAK;gBAC1B,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,YAAY;CAIpD;AAED,gFAAgF;AAChF,qBAAa,sBAAuB,SAAQ,aAAa;gBAC3C,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,YAAY;CAIpD;AAED,6DAA6D;AAC7D,qBAAa,kBAAmB,SAAQ,sBAAsB;gBAChD,OAAO,SAA6B,EAAE,OAAO,CAAC,EAAE,YAAY;CAIzE;AAED,mDAAmD;AACnD,qBAAa,oBAAqB,SAAQ,sBAAsB;IAC9D,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;gBAEf,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,YAAY;CAKvE;AAED,oEAAoE;AACpE,qBAAa,uBAAwB,SAAQ,sBAAsB;gBACrD,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,YAAY;CAIpD;AAED,2FAA2F;AAC3F,qBAAa,kBAAmB,SAAQ,sBAAsB;gBAChD,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,YAAY;CAIpD;AAED,sEAAsE;AACtE,qBAAa,gBAAgB,CAAC,KAAK,GAAG,OAAO,CAAE,SAAQ,aAAa;IAClE,QAAQ,CAAC,QAAQ,EAAE,WAAW,CAAC,KAAK,CAAC,CAAC;IACtC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;gBAEd,QAAQ,EAAE,WAAW,CAAC,KAAK,CAAC;CAOzC;AAED,oEAAoE;AACpE,qBAAa,iBAAiB,CAAC,KAAK,GAAG,OAAO,CAAE,SAAQ,gBAAgB,CAAC,KAAK,CAAC;gBACjE,QAAQ,EAAE,WAAW,CAAC,KAAK,CAAC;CAIzC;AAED,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,QAAQ,EAAE,WAAW,CAAC,KAAK,CAAC,GAAG,gBAAgB,CAAC,KAAK,CAAC,CAEnG"}