kiri-mcp-server 0.22.4 → 0.24.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/README.md +1 -1
- package/dist/package.json +1 -1
- package/dist/src/client/connection-manager.d.ts +151 -0
- package/dist/src/client/connection-manager.d.ts.map +1 -0
- package/dist/src/client/connection-manager.js +375 -0
- package/dist/src/client/connection-manager.js.map +1 -0
- package/dist/src/client/proxy.d.ts +3 -0
- package/dist/src/client/proxy.d.ts.map +1 -1
- package/dist/src/client/proxy.js +237 -37
- package/dist/src/client/proxy.js.map +1 -1
- package/dist/src/client/request-queue.d.ts +103 -0
- package/dist/src/client/request-queue.d.ts.map +1 -0
- package/dist/src/client/request-queue.js +203 -0
- package/dist/src/client/request-queue.js.map +1 -0
- package/dist/src/client/start-daemon.d.ts +4 -1
- package/dist/src/client/start-daemon.d.ts.map +1 -1
- package/dist/src/client/start-daemon.js +5 -2
- package/dist/src/client/start-daemon.js.map +1 -1
- package/dist/src/shared/utils/retry.d.ts +16 -1
- package/dist/src/shared/utils/retry.d.ts.map +1 -1
- package/dist/src/shared/utils/retry.js +23 -3
- package/dist/src/shared/utils/retry.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,203 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* RequestQueue - 再接続中のリクエストをバッファリングし、再接続後に再送信する
|
|
3
|
+
*
|
|
4
|
+
* @see Issue #156: MCP接続がデーモン再起動時に切断され、自動再接続しない問題への対応
|
|
5
|
+
*/
|
|
6
|
+
/**
|
|
7
|
+
* JSON-RPCリクエストからIDを抽出するユーティリティ
|
|
8
|
+
*/
|
|
9
|
+
export function extractRequestId(data) {
|
|
10
|
+
try {
|
|
11
|
+
const parsed = JSON.parse(data);
|
|
12
|
+
// JSON-RPC 2.0のidフィールドを取得
|
|
13
|
+
// idがない場合はnotificationなのでキューイング不要
|
|
14
|
+
if (parsed.id !== undefined && parsed.id !== null) {
|
|
15
|
+
return parsed.id;
|
|
16
|
+
}
|
|
17
|
+
return null;
|
|
18
|
+
}
|
|
19
|
+
catch {
|
|
20
|
+
return null;
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* リクエストキュー
|
|
25
|
+
*
|
|
26
|
+
* 再接続中のリクエストをバッファリングし、再接続後に再送信する。
|
|
27
|
+
* タイムアウト管理とリトライ制限を提供する。
|
|
28
|
+
*/
|
|
29
|
+
export class RequestQueue {
|
|
30
|
+
queue = new Map();
|
|
31
|
+
requestTimeoutMs;
|
|
32
|
+
maxPendingRequests;
|
|
33
|
+
maxRetryCount;
|
|
34
|
+
onTimeout;
|
|
35
|
+
onQueueFull;
|
|
36
|
+
constructor(options = {}) {
|
|
37
|
+
this.requestTimeoutMs = options.requestTimeoutMs ?? 30000;
|
|
38
|
+
this.maxPendingRequests = options.maxPendingRequests ?? 100;
|
|
39
|
+
this.maxRetryCount = options.maxRetryCount ?? 3;
|
|
40
|
+
this.onTimeout = options.onTimeout ?? undefined;
|
|
41
|
+
this.onQueueFull = options.onQueueFull ?? undefined;
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* リクエストをキューに追加
|
|
45
|
+
*
|
|
46
|
+
* @param data - JSON-RPC リクエスト文字列
|
|
47
|
+
* @returns 追加されたリクエスト情報、またはnull(notificationの場合やキュー満杯の場合)
|
|
48
|
+
*/
|
|
49
|
+
enqueue(data) {
|
|
50
|
+
const id = extractRequestId(data);
|
|
51
|
+
// idがない場合はnotification(応答不要)なのでキューイング不要
|
|
52
|
+
if (id === null) {
|
|
53
|
+
return null;
|
|
54
|
+
}
|
|
55
|
+
// キュー満杯チェック
|
|
56
|
+
if (this.queue.size >= this.maxPendingRequests) {
|
|
57
|
+
const request = {
|
|
58
|
+
id,
|
|
59
|
+
data,
|
|
60
|
+
timestamp: Date.now(),
|
|
61
|
+
timeoutMs: this.requestTimeoutMs,
|
|
62
|
+
retryCount: 0,
|
|
63
|
+
};
|
|
64
|
+
this.onQueueFull?.(request);
|
|
65
|
+
return null;
|
|
66
|
+
}
|
|
67
|
+
// 既存のリクエストがある場合は上書き(同じIDのリクエストは最新のみ保持)
|
|
68
|
+
const existing = this.queue.get(id);
|
|
69
|
+
if (existing?.timeoutTimer) {
|
|
70
|
+
clearTimeout(existing.timeoutTimer);
|
|
71
|
+
}
|
|
72
|
+
const request = {
|
|
73
|
+
id,
|
|
74
|
+
data,
|
|
75
|
+
timestamp: Date.now(),
|
|
76
|
+
timeoutMs: this.requestTimeoutMs,
|
|
77
|
+
retryCount: existing?.retryCount ?? 0,
|
|
78
|
+
};
|
|
79
|
+
// タイムアウトタイマーを設定
|
|
80
|
+
request.timeoutTimer = setTimeout(() => {
|
|
81
|
+
this.handleTimeout(id);
|
|
82
|
+
}, this.requestTimeoutMs);
|
|
83
|
+
this.queue.set(id, request);
|
|
84
|
+
return request;
|
|
85
|
+
}
|
|
86
|
+
/**
|
|
87
|
+
* レスポンス受信時にキューからリクエストを削除
|
|
88
|
+
*
|
|
89
|
+
* @param id - JSON-RPC リクエストID
|
|
90
|
+
* @returns 削除されたリクエスト情報、またはundefined
|
|
91
|
+
*/
|
|
92
|
+
dequeue(id) {
|
|
93
|
+
const request = this.queue.get(id);
|
|
94
|
+
if (request) {
|
|
95
|
+
if (request.timeoutTimer) {
|
|
96
|
+
clearTimeout(request.timeoutTimer);
|
|
97
|
+
}
|
|
98
|
+
this.queue.delete(id);
|
|
99
|
+
}
|
|
100
|
+
return request;
|
|
101
|
+
}
|
|
102
|
+
/**
|
|
103
|
+
* 再接続後に保留中のリクエストを再送信
|
|
104
|
+
*
|
|
105
|
+
* @param socket - 再接続後のソケット
|
|
106
|
+
* @returns 再送信されたリクエスト数
|
|
107
|
+
*/
|
|
108
|
+
async replayAll(socket) {
|
|
109
|
+
let replayedCount = 0;
|
|
110
|
+
const toRemove = [];
|
|
111
|
+
for (const [id, request] of this.queue) {
|
|
112
|
+
// リトライ上限チェック
|
|
113
|
+
if (request.retryCount >= this.maxRetryCount) {
|
|
114
|
+
toRemove.push(id);
|
|
115
|
+
continue;
|
|
116
|
+
}
|
|
117
|
+
// リトライ回数を増加
|
|
118
|
+
request.retryCount++;
|
|
119
|
+
// タイムアウトタイマーをリセット
|
|
120
|
+
if (request.timeoutTimer) {
|
|
121
|
+
clearTimeout(request.timeoutTimer);
|
|
122
|
+
}
|
|
123
|
+
request.timeoutTimer = setTimeout(() => {
|
|
124
|
+
this.handleTimeout(id);
|
|
125
|
+
}, this.requestTimeoutMs);
|
|
126
|
+
// ソケットに再送信
|
|
127
|
+
try {
|
|
128
|
+
await this.writeToSocket(socket, request.data);
|
|
129
|
+
replayedCount++;
|
|
130
|
+
}
|
|
131
|
+
catch {
|
|
132
|
+
// 書き込みエラーは無視(次の再接続で再試行)
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
// リトライ上限に達したリクエストを削除
|
|
136
|
+
for (const id of toRemove) {
|
|
137
|
+
const request = this.queue.get(id);
|
|
138
|
+
if (request?.timeoutTimer) {
|
|
139
|
+
clearTimeout(request.timeoutTimer);
|
|
140
|
+
}
|
|
141
|
+
this.queue.delete(id);
|
|
142
|
+
if (request) {
|
|
143
|
+
this.onTimeout?.(request);
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
return replayedCount;
|
|
147
|
+
}
|
|
148
|
+
/**
|
|
149
|
+
* キュー内のリクエスト数を取得
|
|
150
|
+
*/
|
|
151
|
+
size() {
|
|
152
|
+
return this.queue.size;
|
|
153
|
+
}
|
|
154
|
+
/**
|
|
155
|
+
* キューをクリア(全リクエストのタイムアウトタイマーも解除)
|
|
156
|
+
*/
|
|
157
|
+
clear() {
|
|
158
|
+
for (const request of this.queue.values()) {
|
|
159
|
+
if (request.timeoutTimer) {
|
|
160
|
+
clearTimeout(request.timeoutTimer);
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
this.queue.clear();
|
|
164
|
+
}
|
|
165
|
+
/**
|
|
166
|
+
* 全ての保留中リクエストを取得(デバッグ用)
|
|
167
|
+
*/
|
|
168
|
+
getAll() {
|
|
169
|
+
return Array.from(this.queue.values());
|
|
170
|
+
}
|
|
171
|
+
/**
|
|
172
|
+
* 特定のリクエストを取得
|
|
173
|
+
*/
|
|
174
|
+
get(id) {
|
|
175
|
+
return this.queue.get(id);
|
|
176
|
+
}
|
|
177
|
+
/**
|
|
178
|
+
* タイムアウト処理
|
|
179
|
+
*/
|
|
180
|
+
handleTimeout(id) {
|
|
181
|
+
const request = this.queue.get(id);
|
|
182
|
+
if (request) {
|
|
183
|
+
this.queue.delete(id);
|
|
184
|
+
this.onTimeout?.(request);
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
/**
|
|
188
|
+
* ソケットへの書き込み(Promise化)
|
|
189
|
+
*/
|
|
190
|
+
writeToSocket(socket, data) {
|
|
191
|
+
return new Promise((resolve, reject) => {
|
|
192
|
+
socket.write(data + "\n", (err) => {
|
|
193
|
+
if (err) {
|
|
194
|
+
reject(err);
|
|
195
|
+
}
|
|
196
|
+
else {
|
|
197
|
+
resolve();
|
|
198
|
+
}
|
|
199
|
+
});
|
|
200
|
+
});
|
|
201
|
+
}
|
|
202
|
+
}
|
|
203
|
+
//# sourceMappingURL=request-queue.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"request-queue.js","sourceRoot":"","sources":["../../../src/client/request-queue.ts"],"names":[],"mappings":"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"}
|
|
@@ -21,8 +21,11 @@ export interface StartDaemonOptions {
|
|
|
21
21
|
* デーモンが実行中かチェック
|
|
22
22
|
*
|
|
23
23
|
* PIDファイルの存在とプロセスの存在、ソケット接続可能性を確認
|
|
24
|
+
*
|
|
25
|
+
* @param databasePath - データベースパス(PIDファイルのパス導出に使用)
|
|
26
|
+
* @param customSocketPath - カスタムソケットパス(指定された場合はデフォルトを上書き)
|
|
24
27
|
*/
|
|
25
|
-
export declare function isDaemonRunning(databasePath: string): Promise<boolean>;
|
|
28
|
+
export declare function isDaemonRunning(databasePath: string, customSocketPath?: string): Promise<boolean>;
|
|
26
29
|
/**
|
|
27
30
|
* デーモンプロセスを停止
|
|
28
31
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"start-daemon.d.ts","sourceRoot":"","sources":["../../../src/client/start-daemon.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAUH;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,OAAO,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAChC,YAAY,EAAE,OAAO,CAAC;IACtB,kBAAkB,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACxC,gBAAgB,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACtC,cAAc,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CACrC;AAED
|
|
1
|
+
{"version":3,"file":"start-daemon.d.ts","sourceRoot":"","sources":["../../../src/client/start-daemon.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAUH;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,OAAO,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAChC,YAAY,EAAE,OAAO,CAAC;IACtB,kBAAkB,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACxC,gBAAgB,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACtC,cAAc,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CACrC;AAED;;;;;;;GAOG;AACH,wBAAsB,eAAe,CACnC,YAAY,EAAE,MAAM,EACpB,gBAAgB,CAAC,EAAE,MAAM,GACxB,OAAO,CAAC,OAAO,CAAC,CAsFlB;AAED;;;;GAIG;AACH,wBAAsB,UAAU,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAqDpE;AAED;;;;GAIG;AACH,wBAAsB,WAAW,CAAC,OAAO,EAAE,kBAAkB,GAAG,OAAO,CAAC,IAAI,CAAC,CA8G5E"}
|
|
@@ -13,10 +13,13 @@ import { getSocketPath } from "../shared/utils/socket.js";
|
|
|
13
13
|
* デーモンが実行中かチェック
|
|
14
14
|
*
|
|
15
15
|
* PIDファイルの存在とプロセスの存在、ソケット接続可能性を確認
|
|
16
|
+
*
|
|
17
|
+
* @param databasePath - データベースパス(PIDファイルのパス導出に使用)
|
|
18
|
+
* @param customSocketPath - カスタムソケットパス(指定された場合はデフォルトを上書き)
|
|
16
19
|
*/
|
|
17
|
-
export async function isDaemonRunning(databasePath) {
|
|
20
|
+
export async function isDaemonRunning(databasePath, customSocketPath) {
|
|
18
21
|
const pidFilePath = `${databasePath}.daemon.pid`;
|
|
19
|
-
const socketPath = getSocketPath(databasePath);
|
|
22
|
+
const socketPath = customSocketPath ?? getSocketPath(databasePath);
|
|
20
23
|
try {
|
|
21
24
|
// PIDファイルが存在するかチェック
|
|
22
25
|
const pidStr = await fs.readFile(pidFilePath, "utf-8");
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"start-daemon.js","sourceRoot":"","sources":["../../../src/client/start-daemon.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC;AACtC,OAAO,KAAK,EAAE,MAAM,aAAa,CAAC;AAClC,OAAO,KAAK,GAAG,MAAM,KAAK,CAAC;AAC3B,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAC7B,OAAO,EAAE,aAAa,EAAE,MAAM,KAAK,CAAC;AAEpC,OAAO,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAiB1D
|
|
1
|
+
{"version":3,"file":"start-daemon.js","sourceRoot":"","sources":["../../../src/client/start-daemon.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,7 +2,22 @@ export interface RetryOptions {
|
|
|
2
2
|
maxAttempts: number;
|
|
3
3
|
delayMs: number;
|
|
4
4
|
jitterMs?: number;
|
|
5
|
+
/** 最大遅延時間(ミリ秒)。指数バックオフの上限を設定 */
|
|
6
|
+
maxDelayMs?: number;
|
|
7
|
+
/** バックオフ倍率。指定時は指数バックオフを使用(デフォルト: 1 = 線形) */
|
|
8
|
+
backoffMultiplier?: number;
|
|
5
9
|
isRetriable?: (error: unknown) => boolean;
|
|
6
10
|
}
|
|
7
|
-
|
|
11
|
+
/**
|
|
12
|
+
* 指数バックオフ付きの遅延時間を計算
|
|
13
|
+
*
|
|
14
|
+
* @param baseDelayMs - 基本遅延時間
|
|
15
|
+
* @param attempt - 現在の試行回数(1から始まる)
|
|
16
|
+
* @param backoffMultiplier - バックオフ倍率(デフォルト: 1 = 線形)
|
|
17
|
+
* @param maxDelayMs - 最大遅延時間(上限)
|
|
18
|
+
* @param jitterMs - ジッター(ランダムな追加遅延)
|
|
19
|
+
* @returns 計算された遅延時間(ミリ秒)
|
|
20
|
+
*/
|
|
21
|
+
export declare function calculateBackoffDelay(baseDelayMs: number, attempt: number, backoffMultiplier?: number, maxDelayMs?: number, jitterMs?: number): number;
|
|
22
|
+
export declare function withRetry<T>(operation: () => Promise<T>, { maxAttempts, delayMs, jitterMs, maxDelayMs, backoffMultiplier, isRetriable, }: RetryOptions): Promise<T>;
|
|
8
23
|
//# sourceMappingURL=retry.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"retry.d.ts","sourceRoot":"","sources":["../../../../src/shared/utils/retry.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,YAAY;IAC3B,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,OAAO,CAAC;CAC3C;AAED,wBAAsB,SAAS,CAAC,CAAC,EAC/B,SAAS,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,EAC3B,
|
|
1
|
+
{"version":3,"file":"retry.d.ts","sourceRoot":"","sources":["../../../../src/shared/utils/retry.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,YAAY;IAC3B,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,gCAAgC;IAChC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,4CAA4C;IAC5C,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,WAAW,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,OAAO,CAAC;CAC3C;AAED;;;;;;;;;GASG;AACH,wBAAgB,qBAAqB,CACnC,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE,MAAM,EACf,iBAAiB,GAAE,MAAU,EAC7B,UAAU,CAAC,EAAE,MAAM,EACnB,QAAQ,GAAE,MAAU,GACnB,MAAM,CAaR;AAED,wBAAsB,SAAS,CAAC,CAAC,EAC/B,SAAS,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,EAC3B,EACE,WAAW,EACX,OAAO,EACP,QAAY,EACZ,UAAU,EACV,iBAAqB,EACrB,WAAW,GACZ,EAAE,YAAY,GACd,OAAO,CAAC,CAAC,CAAC,CAyBZ"}
|
|
@@ -1,4 +1,24 @@
|
|
|
1
|
-
|
|
1
|
+
/**
|
|
2
|
+
* 指数バックオフ付きの遅延時間を計算
|
|
3
|
+
*
|
|
4
|
+
* @param baseDelayMs - 基本遅延時間
|
|
5
|
+
* @param attempt - 現在の試行回数(1から始まる)
|
|
6
|
+
* @param backoffMultiplier - バックオフ倍率(デフォルト: 1 = 線形)
|
|
7
|
+
* @param maxDelayMs - 最大遅延時間(上限)
|
|
8
|
+
* @param jitterMs - ジッター(ランダムな追加遅延)
|
|
9
|
+
* @returns 計算された遅延時間(ミリ秒)
|
|
10
|
+
*/
|
|
11
|
+
export function calculateBackoffDelay(baseDelayMs, attempt, backoffMultiplier = 1, maxDelayMs, jitterMs = 0) {
|
|
12
|
+
// 指数バックオフ: baseDelay * (multiplier ^ (attempt - 1))
|
|
13
|
+
// attempt=1 では baseDelay、attempt=2 では baseDelay * multiplier、...
|
|
14
|
+
const exponentialDelay = baseDelayMs * Math.pow(backoffMultiplier, attempt - 1);
|
|
15
|
+
// 最大遅延を適用
|
|
16
|
+
const cappedDelay = maxDelayMs !== undefined ? Math.min(exponentialDelay, maxDelayMs) : exponentialDelay;
|
|
17
|
+
// ジッターを追加
|
|
18
|
+
const jitter = jitterMs > 0 ? Math.random() * jitterMs : 0;
|
|
19
|
+
return cappedDelay + jitter;
|
|
20
|
+
}
|
|
21
|
+
export async function withRetry(operation, { maxAttempts, delayMs, jitterMs = 0, maxDelayMs, backoffMultiplier = 1, isRetriable, }) {
|
|
2
22
|
if (maxAttempts < 1) {
|
|
3
23
|
throw new Error("maxAttempts must be >= 1");
|
|
4
24
|
}
|
|
@@ -11,8 +31,8 @@ export async function withRetry(operation, { maxAttempts, delayMs, jitterMs = 0,
|
|
|
11
31
|
if (!shouldRetry) {
|
|
12
32
|
throw error;
|
|
13
33
|
}
|
|
14
|
-
const
|
|
15
|
-
await new Promise((resolve) => setTimeout(resolve,
|
|
34
|
+
const delay = calculateBackoffDelay(delayMs, attempt, backoffMultiplier, maxDelayMs, jitterMs);
|
|
35
|
+
await new Promise((resolve) => setTimeout(resolve, delay));
|
|
16
36
|
}
|
|
17
37
|
}
|
|
18
38
|
throw new Error("Retry attempts exhausted");
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"retry.js","sourceRoot":"","sources":["../../../../src/shared/utils/retry.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"retry.js","sourceRoot":"","sources":["../../../../src/shared/utils/retry.ts"],"names":[],"mappings":"AAWA;;;;;;;;;GASG;AACH,MAAM,UAAU,qBAAqB,CACnC,WAAmB,EACnB,OAAe,EACf,oBAA4B,CAAC,EAC7B,UAAmB,EACnB,WAAmB,CAAC;IAEpB,oDAAoD;IACpD,iEAAiE;IACjE,MAAM,gBAAgB,GAAG,WAAW,GAAG,IAAI,CAAC,GAAG,CAAC,iBAAiB,EAAE,OAAO,GAAG,CAAC,CAAC,CAAC;IAEhF,UAAU;IACV,MAAM,WAAW,GACf,UAAU,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,gBAAgB,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC,gBAAgB,CAAC;IAEvF,UAAU;IACV,MAAM,MAAM,GAAG,QAAQ,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;IAE3D,OAAO,WAAW,GAAG,MAAM,CAAC;AAC9B,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,SAAS,CAC7B,SAA2B,EAC3B,EACE,WAAW,EACX,OAAO,EACP,QAAQ,GAAG,CAAC,EACZ,UAAU,EACV,iBAAiB,GAAG,CAAC,EACrB,WAAW,GACE;IAEf,IAAI,WAAW,GAAG,CAAC,EAAE,CAAC;QACpB,MAAM,IAAI,KAAK,CAAC,0BAA0B,CAAC,CAAC;IAC9C,CAAC;IAED,KAAK,IAAI,OAAO,GAAG,CAAC,EAAE,OAAO,IAAI,WAAW,EAAE,OAAO,EAAE,EAAE,CAAC;QACxD,IAAI,CAAC;YACH,OAAO,MAAM,SAAS,EAAE,CAAC;QAC3B,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,WAAW,GAAG,OAAO,GAAG,WAAW,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;YACvF,IAAI,CAAC,WAAW,EAAE,CAAC;gBACjB,MAAM,KAAK,CAAC;YACd,CAAC;YACD,MAAM,KAAK,GAAG,qBAAqB,CACjC,OAAO,EACP,OAAO,EACP,iBAAiB,EACjB,UAAU,EACV,QAAQ,CACT,CAAC;YACF,MAAM,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC;QAC7D,CAAC;IACH,CAAC;IAED,MAAM,IAAI,KAAK,CAAC,0BAA0B,CAAC,CAAC;AAC9C,CAAC"}
|