rynkai 0.2.0 → 0.2.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/README.md +82 -1
- package/dist/core/Backoff.d.ts +32 -0
- package/dist/core/Backoff.d.ts.map +1 -0
- package/dist/core/Backoff.js +41 -0
- package/dist/core/Backoff.js.map +1 -0
- package/dist/core/Backoff.test.d.ts +2 -0
- package/dist/core/Backoff.test.d.ts.map +1 -0
- package/dist/core/Backoff.test.js +57 -0
- package/dist/core/Backoff.test.js.map +1 -0
- package/dist/core/Client.d.ts +32 -0
- package/dist/core/Client.d.ts.map +1 -1
- package/dist/core/Client.js +57 -7
- package/dist/core/Client.js.map +1 -1
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -1
- package/dist/index.js.map +1 -1
- package/dist/types/index.d.ts +9 -0
- package/dist/types/index.d.ts.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -40,6 +40,8 @@ await bot.connect();
|
|
|
40
40
|
|
|
41
41
|
## Plugin system
|
|
42
42
|
|
|
43
|
+
Plugin format-nya sengaja mirip gaya rynk4: `{ name, command, category, execute() }`.
|
|
44
|
+
|
|
43
45
|
```ts
|
|
44
46
|
// plugins/hello.ts
|
|
45
47
|
import type { Plugin } from 'rynkai';
|
|
@@ -62,6 +64,38 @@ await bot.plugins.loadFromDirectory('./plugins');
|
|
|
62
64
|
await bot.connect();
|
|
63
65
|
```
|
|
64
66
|
|
|
67
|
+
## Reconnect backoff & graceful shutdown
|
|
68
|
+
|
|
69
|
+
Kalau koneksi putus (bukan karena logout), rynkai otomatis reconnect dengan **exponential backoff** (jeda 1 detik → 2 → 4 → ... sampai maksimal 30 detik, plus sedikit jitter acak) — bukan reconnect instan yang bisa bikin WA curiga.
|
|
70
|
+
|
|
71
|
+
```ts
|
|
72
|
+
const bot = new Client({
|
|
73
|
+
sessionName: 'my-bot',
|
|
74
|
+
reconnect: {
|
|
75
|
+
initialDelayMs: 1000, // jeda awal
|
|
76
|
+
maxDelayMs: 30_000, // jeda maksimum
|
|
77
|
+
maxRetries: 10, // opsional, default tidak terbatas
|
|
78
|
+
},
|
|
79
|
+
});
|
|
80
|
+
|
|
81
|
+
bot.on('reconnecting', ({ attempt, delayMs }) => {
|
|
82
|
+
console.log(`Reconnect percobaan ke-${attempt}, tunggu ${delayMs}ms...`);
|
|
83
|
+
});
|
|
84
|
+
|
|
85
|
+
bot.on('reconnect-failed', () => {
|
|
86
|
+
console.log('Menyerah reconnect, cek koneksi internet/server.');
|
|
87
|
+
});
|
|
88
|
+
```
|
|
89
|
+
|
|
90
|
+
Buat graceful shutdown (misal saat proses mau dimatikan), pakai `disconnect()` — beda dari `logout()`, ini **tidak menghapus sesi tersimpan**, jadi bisa `connect()` lagi tanpa scan QR ulang:
|
|
91
|
+
|
|
92
|
+
```ts
|
|
93
|
+
process.on('SIGINT', async () => {
|
|
94
|
+
await bot.disconnect();
|
|
95
|
+
process.exit(0);
|
|
96
|
+
});
|
|
97
|
+
```
|
|
98
|
+
|
|
65
99
|
## Reactions & read receipt
|
|
66
100
|
|
|
67
101
|
```ts
|
|
@@ -212,6 +246,8 @@ Kalau user kelebihan limit, bot otomatis reply pemberitahuan dan command tidak d
|
|
|
212
246
|
|
|
213
247
|
## Session store custom
|
|
214
248
|
|
|
249
|
+
Default-nya pakai `FileSessionStore` (simpan sesi sebagai file di disk). Kalau butuh store lain (MongoDB, Redis, dll), tinggal implement interface `SessionStore`:
|
|
250
|
+
|
|
215
251
|
```ts
|
|
216
252
|
import type { SessionStore } from 'rynkai';
|
|
217
253
|
|
|
@@ -238,6 +274,28 @@ const bot = new Client({
|
|
|
238
274
|
bot.on('pairingCode', (code) => console.log('Kode pairing:', code));
|
|
239
275
|
```
|
|
240
276
|
|
|
277
|
+
## Error handling
|
|
278
|
+
|
|
279
|
+
Kalau ada plugin/middleware yang throw error, rynkai **tidak akan crash** — errornya diisolasi per-pesan, jadi pesan lain tetap diproses normal.
|
|
280
|
+
|
|
281
|
+
```ts
|
|
282
|
+
bot.on('error', (err, { source, message }) => {
|
|
283
|
+
console.error(`Error dari ${source}:`, err);
|
|
284
|
+
// kirim ke Sentry/logging eksternal di sini kalau perlu
|
|
285
|
+
});
|
|
286
|
+
```
|
|
287
|
+
|
|
288
|
+
## Hal yang perlu diperhatikan sebelum produksi
|
|
289
|
+
|
|
290
|
+
rynkai membungkus Baileys dan menambah fitur di atasnya, tapi ada beberapa hal di luar kendali library ini yang tetap perlu kamu pertimbangkan sendiri:
|
|
291
|
+
|
|
292
|
+
- **Baileys itu unofficial API** — bukan API resmi Meta/WhatsApp. Risiko akun kena banned/flag selalu ada terlepas library apapun yang dipakai di atasnya, terutama kalau kirim pesan masif/spam ke banyak nomor asing.
|
|
293
|
+
- **`FileSessionStore` menyimpan kredensial sesi sebagai file JSON polos di disk**, tidak dienkripsi. Kalau server/device kamu diakses orang lain, sesi WA bisa dicuri. Untuk deployment produksi, pastikan folder `.rynkai-sessions/` dijaga (permission file, tidak masuk backup publik, dst), atau implement `SessionStore` custom yang enkripsi datanya.
|
|
294
|
+
- **Plugin loader pakai `require()` dinamis** — kalau folder plugin bisa diisi orang lain (misal upload file dari user tanpa validasi), itu sama saja dengan remote code execution. Jangan expose folder plugin ke input yang tidak terpercaya.
|
|
295
|
+
- **Belum ada integration test** terhadap koneksi WhatsApp asli (test suite yang ada murni unit test logic internal seperti parser/plugin loader/rate limiter) — karena butuh akun WA aktif buat testing end-to-end.
|
|
296
|
+
|
|
297
|
+
Ini normal untuk semua project di atas Baileys, bukan hal yang bisa "diselesaikan" library — tapi penting untuk disadari sebelum menganggap sesuatu "aman" secara menyeluruh.
|
|
298
|
+
|
|
241
299
|
## Testing
|
|
242
300
|
|
|
243
301
|
```bash
|
|
@@ -245,4 +303,27 @@ npm test # run sekali
|
|
|
245
303
|
npm run test:watch # mode watch
|
|
246
304
|
```
|
|
247
305
|
|
|
248
|
-
Test coverage saat ini: `MessageParser`, `PluginLoader` (termasuk cooldown), `RateLimiter`, `Middleware` (compose/onion), `SendQueue`.
|
|
306
|
+
Test coverage saat ini: `MessageParser`, `PluginLoader` (termasuk cooldown), `RateLimiter`, `Middleware` (compose/onion), `SendQueue`.
|
|
307
|
+
|
|
308
|
+
## Status
|
|
309
|
+
|
|
310
|
+
Masih tahap awal (0.1.0). Yang sudah ada:
|
|
311
|
+
- [x] Core client (connect, reconnect, QR/pairing code)
|
|
312
|
+
- [x] Normalized message parsing (text, media, quoted)
|
|
313
|
+
- [x] Plugin loader + cooldown
|
|
314
|
+
- [x] FileSessionStore default
|
|
315
|
+
- [x] MessageBuilder helper
|
|
316
|
+
- [x] Middleware/hooks sebelum plugin dieksekusi
|
|
317
|
+
- [x] Rate limiter global (terpisah dari cooldown per-plugin)
|
|
318
|
+
- [x] Media downloader helper (`client.downloadMedia()`)
|
|
319
|
+
- [x] Message send queue dengan throttle (anti rate-limit WA)
|
|
320
|
+
- [x] Presence helper (`sendTyping`, `sendPresence`)
|
|
321
|
+
- [x] Group helpers (metadata, add/remove/promote/demote, join-leave event)
|
|
322
|
+
- [x] Interactive messages (button, list, poll)
|
|
323
|
+
- [x] Test suite (MessageParser, PluginLoader, RateLimiter, Middleware, SendQueue)
|
|
324
|
+
- [x] GitHub Actions CI (auto build+test tiap push/PR, matrix Node 20 & 22)
|
|
325
|
+
- [x] Message reactions (`react`, `removeReaction`) & read receipt (`markAsRead`, `autoRead`)
|
|
326
|
+
- [x] Graceful shutdown (`disconnect()`) + reconnect exponential backoff dengan jitter
|
|
327
|
+
|
|
328
|
+
Belum ada (rencana selanjutnya):
|
|
329
|
+
- [ ] CLI scaffold (`npx create-rynkai-bot`)
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
export interface BackoffConfig {
|
|
2
|
+
/** Jeda awal dalam ms sebelum percobaan reconnect pertama. Default: 1000 */
|
|
3
|
+
initialDelayMs?: number;
|
|
4
|
+
/** Jeda maksimum dalam ms, backoff tidak akan melebihi ini. Default: 30000 */
|
|
5
|
+
maxDelayMs?: number;
|
|
6
|
+
/** Maksimal jumlah percobaan reconnect sebelum menyerah. Default: Infinity (tidak pernah menyerah) */
|
|
7
|
+
maxRetries?: number;
|
|
8
|
+
}
|
|
9
|
+
/**
|
|
10
|
+
* Hitung jeda exponential backoff dengan sedikit jitter (variasi acak),
|
|
11
|
+
* biar reconnect tidak instan beruntun (yang bisa bikin WA curiga/flag akun)
|
|
12
|
+
* dan tidak "thundering herd" kalau banyak instance reconnect bareng.
|
|
13
|
+
*/
|
|
14
|
+
export declare class Backoff {
|
|
15
|
+
private attempt;
|
|
16
|
+
private readonly initialDelayMs;
|
|
17
|
+
private readonly maxDelayMs;
|
|
18
|
+
private readonly maxRetries;
|
|
19
|
+
constructor(config?: BackoffConfig);
|
|
20
|
+
/** Apakah masih boleh mencoba reconnect lagi. */
|
|
21
|
+
canRetry(): boolean;
|
|
22
|
+
/** Jumlah percobaan yang sudah dilakukan sejauh ini. */
|
|
23
|
+
get attemptCount(): number;
|
|
24
|
+
/**
|
|
25
|
+
* Hitung jeda berikutnya (ms) dan naikkan counter percobaan.
|
|
26
|
+
* Rumus: min(initialDelay * 2^attempt, maxDelay) + jitter acak 0-30%.
|
|
27
|
+
*/
|
|
28
|
+
next(): number;
|
|
29
|
+
/** Reset counter percobaan ke 0, dipanggil setelah koneksi berhasil lagi. */
|
|
30
|
+
reset(): void;
|
|
31
|
+
}
|
|
32
|
+
//# sourceMappingURL=Backoff.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Backoff.d.ts","sourceRoot":"","sources":["../../src/core/Backoff.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,aAAa;IAC5B,4EAA4E;IAC5E,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,8EAA8E;IAC9E,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,sGAAsG;IACtG,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED;;;;GAIG;AACH,qBAAa,OAAO;IAClB,OAAO,CAAC,OAAO,CAAK;IACpB,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAS;IACxC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAS;IACpC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAS;gBAExB,MAAM,GAAE,aAAkB;IAMtC,iDAAiD;IACjD,QAAQ,IAAI,OAAO;IAInB,wDAAwD;IACxD,IAAI,YAAY,IAAI,MAAM,CAEzB;IAED;;;OAGG;IACH,IAAI,IAAI,MAAM;IAQd,6EAA6E;IAC7E,KAAK,IAAI,IAAI;CAGd"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.Backoff = void 0;
|
|
4
|
+
/**
|
|
5
|
+
* Hitung jeda exponential backoff dengan sedikit jitter (variasi acak),
|
|
6
|
+
* biar reconnect tidak instan beruntun (yang bisa bikin WA curiga/flag akun)
|
|
7
|
+
* dan tidak "thundering herd" kalau banyak instance reconnect bareng.
|
|
8
|
+
*/
|
|
9
|
+
class Backoff {
|
|
10
|
+
constructor(config = {}) {
|
|
11
|
+
this.attempt = 0;
|
|
12
|
+
this.initialDelayMs = config.initialDelayMs ?? 1000;
|
|
13
|
+
this.maxDelayMs = config.maxDelayMs ?? 30_000;
|
|
14
|
+
this.maxRetries = config.maxRetries ?? Infinity;
|
|
15
|
+
}
|
|
16
|
+
/** Apakah masih boleh mencoba reconnect lagi. */
|
|
17
|
+
canRetry() {
|
|
18
|
+
return this.attempt < this.maxRetries;
|
|
19
|
+
}
|
|
20
|
+
/** Jumlah percobaan yang sudah dilakukan sejauh ini. */
|
|
21
|
+
get attemptCount() {
|
|
22
|
+
return this.attempt;
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Hitung jeda berikutnya (ms) dan naikkan counter percobaan.
|
|
26
|
+
* Rumus: min(initialDelay * 2^attempt, maxDelay) + jitter acak 0-30%.
|
|
27
|
+
*/
|
|
28
|
+
next() {
|
|
29
|
+
const exponential = this.initialDelayMs * Math.pow(2, this.attempt);
|
|
30
|
+
const capped = Math.min(exponential, this.maxDelayMs);
|
|
31
|
+
const jitter = capped * 0.3 * Math.random();
|
|
32
|
+
this.attempt++;
|
|
33
|
+
return Math.round(capped + jitter);
|
|
34
|
+
}
|
|
35
|
+
/** Reset counter percobaan ke 0, dipanggil setelah koneksi berhasil lagi. */
|
|
36
|
+
reset() {
|
|
37
|
+
this.attempt = 0;
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
exports.Backoff = Backoff;
|
|
41
|
+
//# sourceMappingURL=Backoff.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Backoff.js","sourceRoot":"","sources":["../../src/core/Backoff.ts"],"names":[],"mappings":";;;AASA;;;;GAIG;AACH,MAAa,OAAO;IAMlB,YAAY,SAAwB,EAAE;QAL9B,YAAO,GAAG,CAAC,CAAC;QAMlB,IAAI,CAAC,cAAc,GAAG,MAAM,CAAC,cAAc,IAAI,IAAI,CAAC;QACpD,IAAI,CAAC,UAAU,GAAG,MAAM,CAAC,UAAU,IAAI,MAAM,CAAC;QAC9C,IAAI,CAAC,UAAU,GAAG,MAAM,CAAC,UAAU,IAAI,QAAQ,CAAC;IAClD,CAAC;IAED,iDAAiD;IACjD,QAAQ;QACN,OAAO,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,UAAU,CAAC;IACxC,CAAC;IAED,wDAAwD;IACxD,IAAI,YAAY;QACd,OAAO,IAAI,CAAC,OAAO,CAAC;IACtB,CAAC;IAED;;;OAGG;IACH,IAAI;QACF,MAAM,WAAW,GAAG,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;QACpE,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,WAAW,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;QACtD,MAAM,MAAM,GAAG,MAAM,GAAG,GAAG,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;QAC5C,IAAI,CAAC,OAAO,EAAE,CAAC;QACf,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,MAAM,CAAC,CAAC;IACrC,CAAC;IAED,6EAA6E;IAC7E,KAAK;QACH,IAAI,CAAC,OAAO,GAAG,CAAC,CAAC;IACnB,CAAC;CACF;AAtCD,0BAsCC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Backoff.test.d.ts","sourceRoot":"","sources":["../../src/core/Backoff.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const vitest_1 = require("vitest");
|
|
4
|
+
const Backoff_1 = require("./Backoff");
|
|
5
|
+
(0, vitest_1.describe)('Backoff', () => {
|
|
6
|
+
(0, vitest_1.afterEach)(() => {
|
|
7
|
+
vitest_1.vi.restoreAllMocks();
|
|
8
|
+
});
|
|
9
|
+
(0, vitest_1.it)('jeda naik secara exponential tiap percobaan', () => {
|
|
10
|
+
// Matikan jitter biar hasil deterministik
|
|
11
|
+
vitest_1.vi.spyOn(Math, 'random').mockReturnValue(0);
|
|
12
|
+
const backoff = new Backoff_1.Backoff({ initialDelayMs: 1000, maxDelayMs: 60_000 });
|
|
13
|
+
(0, vitest_1.expect)(backoff.next()).toBe(1000); // 1000 * 2^0
|
|
14
|
+
(0, vitest_1.expect)(backoff.next()).toBe(2000); // 1000 * 2^1
|
|
15
|
+
(0, vitest_1.expect)(backoff.next()).toBe(4000); // 1000 * 2^2
|
|
16
|
+
(0, vitest_1.expect)(backoff.next()).toBe(8000); // 1000 * 2^3
|
|
17
|
+
});
|
|
18
|
+
(0, vitest_1.it)('tidak melebihi maxDelayMs walau attempt terus naik', () => {
|
|
19
|
+
vitest_1.vi.spyOn(Math, 'random').mockReturnValue(0);
|
|
20
|
+
const backoff = new Backoff_1.Backoff({ initialDelayMs: 1000, maxDelayMs: 5000 });
|
|
21
|
+
for (let i = 0; i < 10; i++)
|
|
22
|
+
backoff.next();
|
|
23
|
+
(0, vitest_1.expect)(backoff.next()).toBe(5000);
|
|
24
|
+
});
|
|
25
|
+
(0, vitest_1.it)('menambahkan jitter sehingga hasil bisa sedikit lebih besar dari nilai dasar', () => {
|
|
26
|
+
vitest_1.vi.spyOn(Math, 'random').mockReturnValue(1); // jitter maksimum
|
|
27
|
+
const backoff = new Backoff_1.Backoff({ initialDelayMs: 1000, maxDelayMs: 60_000 });
|
|
28
|
+
const delay = backoff.next();
|
|
29
|
+
// base 1000 + jitter maksimum 30% = 1300
|
|
30
|
+
(0, vitest_1.expect)(delay).toBe(1300);
|
|
31
|
+
});
|
|
32
|
+
(0, vitest_1.it)('canRetry() false setelah maxRetries tercapai', () => {
|
|
33
|
+
const backoff = new Backoff_1.Backoff({ maxRetries: 2 });
|
|
34
|
+
(0, vitest_1.expect)(backoff.canRetry()).toBe(true);
|
|
35
|
+
backoff.next();
|
|
36
|
+
(0, vitest_1.expect)(backoff.canRetry()).toBe(true);
|
|
37
|
+
backoff.next();
|
|
38
|
+
(0, vitest_1.expect)(backoff.canRetry()).toBe(false);
|
|
39
|
+
});
|
|
40
|
+
(0, vitest_1.it)('canRetry() selalu true kalau maxRetries tidak diset', () => {
|
|
41
|
+
const backoff = new Backoff_1.Backoff();
|
|
42
|
+
for (let i = 0; i < 100; i++)
|
|
43
|
+
backoff.next();
|
|
44
|
+
(0, vitest_1.expect)(backoff.canRetry()).toBe(true);
|
|
45
|
+
});
|
|
46
|
+
(0, vitest_1.it)('reset() mengembalikan attemptCount ke 0', () => {
|
|
47
|
+
vitest_1.vi.spyOn(Math, 'random').mockReturnValue(0);
|
|
48
|
+
const backoff = new Backoff_1.Backoff({ initialDelayMs: 1000 });
|
|
49
|
+
backoff.next();
|
|
50
|
+
backoff.next();
|
|
51
|
+
(0, vitest_1.expect)(backoff.attemptCount).toBe(2);
|
|
52
|
+
backoff.reset();
|
|
53
|
+
(0, vitest_1.expect)(backoff.attemptCount).toBe(0);
|
|
54
|
+
(0, vitest_1.expect)(backoff.next()).toBe(1000); // balik ke percobaan pertama
|
|
55
|
+
});
|
|
56
|
+
});
|
|
57
|
+
//# sourceMappingURL=Backoff.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Backoff.test.js","sourceRoot":"","sources":["../../src/core/Backoff.test.ts"],"names":[],"mappings":"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"}
|
package/dist/core/Client.d.ts
CHANGED
|
@@ -15,6 +15,24 @@ export interface RynkaiEvents {
|
|
|
15
15
|
qr: (qr: string) => void;
|
|
16
16
|
pairingCode: (code: string) => void;
|
|
17
17
|
'group-participants-update': (event: GroupParticipantsEvent) => void;
|
|
18
|
+
/** Ditembak setiap kali mau mencoba reconnect, sebelum jeda backoff dimulai. */
|
|
19
|
+
reconnecting: (info: {
|
|
20
|
+
attempt: number;
|
|
21
|
+
delayMs: number;
|
|
22
|
+
}) => void;
|
|
23
|
+
/** Ditembak kalau maxRetries reconnect sudah tercapai dan client menyerah. */
|
|
24
|
+
'reconnect-failed': () => void;
|
|
25
|
+
/**
|
|
26
|
+
* Ditembak kalau ada error tak tertangani dari plugin, middleware, atau
|
|
27
|
+
* internal handler (autoRead, dsb). Bot TIDAK crash karena error ini —
|
|
28
|
+
* sudah diisolasi per-pesan — tapi kalau tidak ada listener, error tetap
|
|
29
|
+
* di-log via pino internal. Pasang listener ini kalau mau reporting sendiri
|
|
30
|
+
* (misal kirim ke Sentry/log eksternal).
|
|
31
|
+
*/
|
|
32
|
+
error: (err: unknown, context: {
|
|
33
|
+
source: string;
|
|
34
|
+
message?: NormalizedMessage;
|
|
35
|
+
}) => void;
|
|
18
36
|
}
|
|
19
37
|
/**
|
|
20
38
|
* Client utama rynkai. Bungkus WASocket Baileys dan expose API yang lebih
|
|
@@ -30,6 +48,9 @@ export declare class Client extends EventEmitter {
|
|
|
30
48
|
private middlewares;
|
|
31
49
|
private rateLimiter;
|
|
32
50
|
private sendQueue;
|
|
51
|
+
private backoff;
|
|
52
|
+
private manualClose;
|
|
53
|
+
private reconnectTimer;
|
|
33
54
|
constructor(config: RynkaiConfig);
|
|
34
55
|
/**
|
|
35
56
|
* Daftarkan middleware yang jalan sebelum (dan bisa membungkus) eksekusi plugin.
|
|
@@ -75,6 +96,17 @@ export declare class Client extends EventEmitter {
|
|
|
75
96
|
demoteParticipants(groupId: string, participants: string[]): Promise<void>;
|
|
76
97
|
/** Logout & bersihkan sesi tersimpan. */
|
|
77
98
|
logout(): Promise<void>;
|
|
99
|
+
/**
|
|
100
|
+
* Tutup koneksi secara graceful tanpa menghapus sesi tersimpan (beda dari logout()).
|
|
101
|
+
* Tidak akan memicu auto-reconnect. Cocok dipanggil saat proses mau di-shutdown,
|
|
102
|
+
* misal di handler SIGINT/SIGTERM:
|
|
103
|
+
*
|
|
104
|
+
* process.on('SIGINT', async () => {
|
|
105
|
+
* await bot.disconnect();
|
|
106
|
+
* process.exit(0);
|
|
107
|
+
* });
|
|
108
|
+
*/
|
|
109
|
+
disconnect(): Promise<void>;
|
|
78
110
|
on<K extends keyof RynkaiEvents>(event: K, listener: RynkaiEvents[K]): this;
|
|
79
111
|
emit<K extends keyof RynkaiEvents>(event: K, ...args: Parameters<RynkaiEvents[K]>): boolean;
|
|
80
112
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Client.d.ts","sourceRoot":"","sources":["../../src/core/Client.ts"],"names":[],"mappings":"AAAA,OAAqB,EAGnB,KAAK,QAAQ,EACb,KAAK,iBAAiB,EACtB,KAAK,UAAU,EACf,KAAK,aAAa,EAClB,KAAK,iBAAiB,EACvB,MAAM,yBAAyB,CAAC;AAEjC,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AAGtC,OAAO,KAAK,EAAE,iBAAiB,EAAE,YAAY,EAAiB,MAAM,UAAU,CAAC;AAG/E,OAAO,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AACtD,OAAO,EAAW,KAAK,UAAU,EAAE,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"Client.d.ts","sourceRoot":"","sources":["../../src/core/Client.ts"],"names":[],"mappings":"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"}
|
package/dist/core/Client.js
CHANGED
|
@@ -46,6 +46,7 @@ const PluginLoader_1 = require("../plugin/PluginLoader");
|
|
|
46
46
|
const Middleware_1 = require("./Middleware");
|
|
47
47
|
const RateLimiter_1 = require("./RateLimiter");
|
|
48
48
|
const SendQueue_1 = require("./SendQueue");
|
|
49
|
+
const Backoff_1 = require("./Backoff");
|
|
49
50
|
const downloadMedia_1 = require("../media/downloadMedia");
|
|
50
51
|
/**
|
|
51
52
|
* Client utama rynkai. Bungkus WASocket Baileys dan expose API yang lebih
|
|
@@ -58,6 +59,8 @@ class Client extends events_1.EventEmitter {
|
|
|
58
59
|
this.sock = null;
|
|
59
60
|
this.plugins = new PluginLoader_1.PluginLoader();
|
|
60
61
|
this.middlewares = [];
|
|
62
|
+
this.manualClose = false;
|
|
63
|
+
this.reconnectTimer = null;
|
|
61
64
|
this.config = {
|
|
62
65
|
prefix: '.',
|
|
63
66
|
printQR: !config.pairingCode,
|
|
@@ -68,11 +71,13 @@ class Client extends events_1.EventEmitter {
|
|
|
68
71
|
rateLimit: config.rateLimit,
|
|
69
72
|
sendQueue: config.sendQueue,
|
|
70
73
|
autoRead: config.autoRead ?? false,
|
|
74
|
+
reconnect: config.reconnect,
|
|
71
75
|
};
|
|
72
76
|
this.sessionStore = config.sessionStore ?? new FileSessionStore_1.FileSessionStore(config.sessionName);
|
|
73
77
|
this.logger = (0, pino_1.default)({ level: this.config.logLevel });
|
|
74
78
|
this.rateLimiter = config.rateLimit ? new RateLimiter_1.RateLimiter(config.rateLimit) : null;
|
|
75
79
|
this.sendQueue = new SendQueue_1.SendQueue(config.sendQueue);
|
|
80
|
+
this.backoff = new Backoff_1.Backoff(config.reconnect);
|
|
76
81
|
}
|
|
77
82
|
/**
|
|
78
83
|
* Daftarkan middleware yang jalan sebelum (dan bisa membungkus) eksekusi plugin.
|
|
@@ -85,6 +90,7 @@ class Client extends events_1.EventEmitter {
|
|
|
85
90
|
}
|
|
86
91
|
/** Konek ke WhatsApp. Resolve setelah koneksi berhasil "open". */
|
|
87
92
|
async connect() {
|
|
93
|
+
this.manualClose = false;
|
|
88
94
|
const state = await this.sessionStore.load();
|
|
89
95
|
if (!state) {
|
|
90
96
|
throw new Error('SessionStore.load() mengembalikan null — pastikan implementasinya benar.');
|
|
@@ -109,15 +115,28 @@ class Client extends events_1.EventEmitter {
|
|
|
109
115
|
this.emit('qr', qr);
|
|
110
116
|
}
|
|
111
117
|
if (connection === 'open') {
|
|
118
|
+
this.backoff.reset();
|
|
112
119
|
this.emit('ready');
|
|
113
120
|
}
|
|
114
121
|
if (connection === 'close') {
|
|
115
122
|
const statusCode = lastDisconnect?.error?.output?.statusCode;
|
|
116
|
-
const
|
|
123
|
+
const loggedOut = statusCode === baileys_1.DisconnectReason.loggedOut;
|
|
117
124
|
this.emit('disconnected', String(statusCode ?? 'unknown'));
|
|
118
|
-
|
|
119
|
-
|
|
125
|
+
// Tidak reconnect kalau ditutup manual (client.disconnect()) atau logout beneran.
|
|
126
|
+
if (this.manualClose || loggedOut) {
|
|
127
|
+
return;
|
|
128
|
+
}
|
|
129
|
+
if (!this.backoff.canRetry()) {
|
|
130
|
+
this.logger.error('Batas maksimal reconnect tercapai, menyerah.');
|
|
131
|
+
this.emit('reconnect-failed');
|
|
132
|
+
return;
|
|
120
133
|
}
|
|
134
|
+
const attempt = this.backoff.attemptCount + 1;
|
|
135
|
+
const delayMs = this.backoff.next();
|
|
136
|
+
this.emit('reconnecting', { attempt, delayMs });
|
|
137
|
+
this.reconnectTimer = setTimeout(() => {
|
|
138
|
+
this.connect().catch((err) => this.logger.error(err, 'gagal reconnect'));
|
|
139
|
+
}, delayMs);
|
|
121
140
|
}
|
|
122
141
|
});
|
|
123
142
|
this.sock.ev.on('messages.upsert', async ({ messages, type }) => {
|
|
@@ -127,11 +146,23 @@ class Client extends events_1.EventEmitter {
|
|
|
127
146
|
if (!raw.message)
|
|
128
147
|
continue;
|
|
129
148
|
const message = (0, MessageParser_1.parseMessage)(raw);
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
149
|
+
// Setiap pesan diisolasi try/catch-nya sendiri: kalau satu pesan
|
|
150
|
+
// gagal diproses (plugin/middleware/autoRead error), pesan lain
|
|
151
|
+
// di batch yang sama tetap lanjut diproses, dan proses bot tidak crash.
|
|
152
|
+
try {
|
|
153
|
+
this.emit('message', message);
|
|
154
|
+
if (this.config.autoRead && !message.fromMe) {
|
|
155
|
+
await this.markAsRead(message).catch((err) => {
|
|
156
|
+
this.logger.error(err, 'gagal markAsRead');
|
|
157
|
+
this.emit('error', err, { source: 'autoRead', message });
|
|
158
|
+
});
|
|
159
|
+
}
|
|
160
|
+
await this.dispatchPlugin(message);
|
|
161
|
+
}
|
|
162
|
+
catch (err) {
|
|
163
|
+
this.logger.error(err, 'error tak tertangani saat memproses pesan');
|
|
164
|
+
this.emit('error', err, { source: 'dispatchPlugin', message });
|
|
133
165
|
}
|
|
134
|
-
await this.dispatchPlugin(message);
|
|
135
166
|
}
|
|
136
167
|
});
|
|
137
168
|
this.sock.ev.on('group-participants.update', (event) => {
|
|
@@ -259,9 +290,28 @@ class Client extends events_1.EventEmitter {
|
|
|
259
290
|
}
|
|
260
291
|
/** Logout & bersihkan sesi tersimpan. */
|
|
261
292
|
async logout() {
|
|
293
|
+
this.manualClose = true;
|
|
294
|
+
if (this.reconnectTimer)
|
|
295
|
+
clearTimeout(this.reconnectTimer);
|
|
262
296
|
await this.sock?.logout();
|
|
263
297
|
await this.sessionStore.clear();
|
|
264
298
|
}
|
|
299
|
+
/**
|
|
300
|
+
* Tutup koneksi secara graceful tanpa menghapus sesi tersimpan (beda dari logout()).
|
|
301
|
+
* Tidak akan memicu auto-reconnect. Cocok dipanggil saat proses mau di-shutdown,
|
|
302
|
+
* misal di handler SIGINT/SIGTERM:
|
|
303
|
+
*
|
|
304
|
+
* process.on('SIGINT', async () => {
|
|
305
|
+
* await bot.disconnect();
|
|
306
|
+
* process.exit(0);
|
|
307
|
+
* });
|
|
308
|
+
*/
|
|
309
|
+
async disconnect() {
|
|
310
|
+
this.manualClose = true;
|
|
311
|
+
if (this.reconnectTimer)
|
|
312
|
+
clearTimeout(this.reconnectTimer);
|
|
313
|
+
this.sock?.end(undefined);
|
|
314
|
+
}
|
|
265
315
|
// Type-safe event emitter overrides
|
|
266
316
|
on(event, listener) {
|
|
267
317
|
return super.on(event, listener);
|
package/dist/core/Client.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Client.js","sourceRoot":"","sources":["../../src/core/Client.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,mEAQiC;AAEjC,mCAAsC;AACtC,gDAAwB;AAGxB,kEAA+D;AAC/D,4DAAwD;AACxD,yDAAsD;AACtD,6CAAwD;AACxD,+CAA4C;AAC5C,2CAAwC;AACxC,0DAAuD;
|
|
1
|
+
{"version":3,"file":"Client.js","sourceRoot":"","sources":["../../src/core/Client.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -5,10 +5,12 @@ export { PluginLoader } from './plugin/PluginLoader';
|
|
|
5
5
|
export { RateLimiter } from './core/RateLimiter';
|
|
6
6
|
export { compose } from './core/Middleware';
|
|
7
7
|
export { SendQueue } from './core/SendQueue';
|
|
8
|
+
export { Backoff } from './core/Backoff';
|
|
8
9
|
export { downloadMedia } from './media/downloadMedia';
|
|
9
10
|
export type { NormalizedMessage, NormalizedMessageType, SessionStore, Plugin, PluginContext, RynkaiConfig, } from './types';
|
|
10
11
|
export type { Middleware, NextFunction } from './core/Middleware';
|
|
11
12
|
export type { RateLimitConfig } from './core/RateLimiter';
|
|
12
13
|
export type { SendQueueConfig } from './core/SendQueue';
|
|
14
|
+
export type { BackoffConfig } from './core/Backoff';
|
|
13
15
|
export type { GroupParticipantsEvent, RynkaiEvents } from './core/Client';
|
|
14
16
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AACvC,OAAO,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AAC9D,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAC1D,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AACrD,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AAC5C,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC7C,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAEtD,YAAY,EACV,iBAAiB,EACjB,qBAAqB,EACrB,YAAY,EACZ,MAAM,EACN,aAAa,EACb,YAAY,GACb,MAAM,SAAS,CAAC;AACjB,YAAY,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAClE,YAAY,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAC1D,YAAY,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AACxD,YAAY,EAAE,sBAAsB,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AACvC,OAAO,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AAC9D,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAC1D,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AACrD,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AAC5C,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC7C,OAAO,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AACzC,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAEtD,YAAY,EACV,iBAAiB,EACjB,qBAAqB,EACrB,YAAY,EACZ,MAAM,EACN,aAAa,EACb,YAAY,GACb,MAAM,SAAS,CAAC;AACjB,YAAY,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAClE,YAAY,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAC1D,YAAY,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AACxD,YAAY,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AACpD,YAAY,EAAE,sBAAsB,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.downloadMedia = exports.SendQueue = exports.compose = exports.RateLimiter = exports.PluginLoader = exports.MessageBuilder = exports.FileSessionStore = exports.Client = void 0;
|
|
3
|
+
exports.downloadMedia = exports.Backoff = exports.SendQueue = exports.compose = exports.RateLimiter = exports.PluginLoader = exports.MessageBuilder = exports.FileSessionStore = exports.Client = void 0;
|
|
4
4
|
var Client_1 = require("./core/Client");
|
|
5
5
|
Object.defineProperty(exports, "Client", { enumerable: true, get: function () { return Client_1.Client; } });
|
|
6
6
|
var FileSessionStore_1 = require("./session/FileSessionStore");
|
|
@@ -15,6 +15,8 @@ var Middleware_1 = require("./core/Middleware");
|
|
|
15
15
|
Object.defineProperty(exports, "compose", { enumerable: true, get: function () { return Middleware_1.compose; } });
|
|
16
16
|
var SendQueue_1 = require("./core/SendQueue");
|
|
17
17
|
Object.defineProperty(exports, "SendQueue", { enumerable: true, get: function () { return SendQueue_1.SendQueue; } });
|
|
18
|
+
var Backoff_1 = require("./core/Backoff");
|
|
19
|
+
Object.defineProperty(exports, "Backoff", { enumerable: true, get: function () { return Backoff_1.Backoff; } });
|
|
18
20
|
var downloadMedia_1 = require("./media/downloadMedia");
|
|
19
21
|
Object.defineProperty(exports, "downloadMedia", { enumerable: true, get: function () { return downloadMedia_1.downloadMedia; } });
|
|
20
22
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AAAA,wCAAuC;AAA9B,gGAAA,MAAM,OAAA;AACf,+DAA8D;AAArD,oHAAA,gBAAgB,OAAA;AACzB,2DAA0D;AAAjD,gHAAA,cAAc,OAAA;AACvB,sDAAqD;AAA5C,4GAAA,YAAY,OAAA;AACrB,kDAAiD;AAAxC,0GAAA,WAAW,OAAA;AACpB,gDAA4C;AAAnC,qGAAA,OAAO,OAAA;AAChB,8CAA6C;AAApC,sGAAA,SAAS,OAAA;AAClB,uDAAsD;AAA7C,8GAAA,aAAa,OAAA"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AAAA,wCAAuC;AAA9B,gGAAA,MAAM,OAAA;AACf,+DAA8D;AAArD,oHAAA,gBAAgB,OAAA;AACzB,2DAA0D;AAAjD,gHAAA,cAAc,OAAA;AACvB,sDAAqD;AAA5C,4GAAA,YAAY,OAAA;AACrB,kDAAiD;AAAxC,0GAAA,WAAW,OAAA;AACpB,gDAA4C;AAAnC,qGAAA,OAAO,OAAA;AAChB,8CAA6C;AAApC,sGAAA,SAAS,OAAA;AAClB,0CAAyC;AAAhC,kGAAA,OAAO,OAAA;AAChB,uDAAsD;AAA7C,8GAAA,aAAa,OAAA"}
|
package/dist/types/index.d.ts
CHANGED
|
@@ -83,5 +83,14 @@ export interface RynkaiConfig {
|
|
|
83
83
|
};
|
|
84
84
|
/** Otomatis tandai setiap pesan masuk sebagai sudah dibaca (centang biru). Default: false. */
|
|
85
85
|
autoRead?: boolean;
|
|
86
|
+
/**
|
|
87
|
+
* Konfigurasi backoff untuk auto-reconnect saat koneksi putus (bukan karena logout manual).
|
|
88
|
+
* Default: jeda mulai 1 detik, naik exponential sampai maksimal 30 detik, tidak ada batas percobaan.
|
|
89
|
+
*/
|
|
90
|
+
reconnect?: {
|
|
91
|
+
initialDelayMs?: number;
|
|
92
|
+
maxDelayMs?: number;
|
|
93
|
+
maxRetries?: number;
|
|
94
|
+
};
|
|
86
95
|
}
|
|
87
96
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,mBAAmB,EAAE,KAAK,EAAE,MAAM,yBAAyB,CAAC;AAEpF,iGAAiG;AACjG,MAAM,MAAM,qBAAqB,GAC7B,MAAM,GACN,OAAO,GACP,OAAO,GACP,OAAO,GACP,SAAS,GACT,UAAU,GACV,UAAU,GACV,SAAS,GACT,UAAU,GACV,MAAM,GACN,SAAS,CAAC;AAEd,MAAM,WAAW,iBAAiB;IAChC,kCAAkC;IAClC,EAAE,EAAE,MAAM,CAAC;IACX,wDAAwD;IACxD,MAAM,EAAE,MAAM,CAAC;IACf,gDAAgD;IAChD,MAAM,EAAE,MAAM,CAAC;IACf,wCAAwC;IACxC,OAAO,EAAE,OAAO,CAAC;IACjB,2CAA2C;IAC3C,IAAI,EAAE,qBAAqB,CAAC;IAC5B,sDAAsD;IACtD,IAAI,EAAE,MAAM,CAAC;IACb,4CAA4C;IAC5C,MAAM,EAAE,OAAO,CAAC;IAChB,6BAA6B;IAC7B,SAAS,EAAE,MAAM,CAAC;IAClB,uGAAuG;IACvG,MAAM,EAAE,IAAI,CAAC,iBAAiB,EAAE,QAAQ,CAAC,GAAG,IAAI,CAAC;IACjD,gGAAgG;IAChG,QAAQ,EAAE;QAAE,eAAe,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC;IAC5D,iFAAiF;IACjF,GAAG,EAAE,KAAK,CAAC,eAAe,CAAC;CAC5B;AAED,MAAM,WAAW,YAAY;IAC3B,mEAAmE;IACnE,IAAI,IAAI,OAAO,CAAC,mBAAmB,GAAG,IAAI,CAAC,CAAC;IAC5C,8EAA8E;IAC9E,IAAI,CAAC,KAAK,EAAE,mBAAmB,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAChD,mDAAmD;IACnD,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACxB;AAED,MAAM,WAAW,aAAa;IAC5B,MAAM,EAAE,QAAQ,CAAC;IACjB,OAAO,EAAE,iBAAiB,CAAC;IAC3B,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,uEAAuE;IACvE,KAAK,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CACxC;AAED,MAAM,WAAW,MAAM;IACrB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IAC3B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,8CAA8C;IAC9C,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,CAAC,GAAG,EAAE,aAAa,KAAK,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;CACvD;AAED,MAAM,WAAW,YAAY;IAC3B,gEAAgE;IAChE,WAAW,EAAE,MAAM,CAAC;IACpB,sDAAsD;IACtD,YAAY,CAAC,EAAE,YAAY,CAAC;IAC5B,+CAA+C;IAC/C,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,iDAAiD;IACjD,WAAW,CAAC,EAAE;QACZ,WAAW,EAAE,MAAM,CAAC;KACrB,CAAC;IACF,uEAAuE;IACvE,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,+CAA+C;IAC/C,QAAQ,CAAC,EAAE,QAAQ,GAAG,OAAO,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,OAAO,CAAC;IACpE;;;OAGG;IACH,SAAS,CAAC,EAAE;QACV,yCAAyC;QACzC,GAAG,EAAE,MAAM,CAAC;QACZ,qCAAqC;QACrC,QAAQ,EAAE,MAAM,CAAC;KAClB,CAAC;IACF,2FAA2F;IAC3F,SAAS,CAAC,EAAE;QACV,UAAU,CAAC,EAAE,MAAM,CAAC;KACrB,CAAC;IACF,8FAA8F;IAC9F,QAAQ,CAAC,EAAE,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED