1688-cli 0.1.31 → 0.1.34
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/AGENTS.md +1 -1
- package/CHANGELOG.md +42 -0
- package/dist/cli.js +32 -3
- package/dist/cli.js.map +1 -1
- package/dist/commands/cart-add.js +8 -4
- package/dist/commands/cart-add.js.map +1 -1
- package/dist/commands/cart-list.js +6 -2
- package/dist/commands/cart-list.js.map +1 -1
- package/dist/commands/cart-remove.js +8 -4
- package/dist/commands/cart-remove.js.map +1 -1
- package/dist/commands/checkout-confirm.js +28 -17
- package/dist/commands/checkout-confirm.js.map +1 -1
- package/dist/commands/checkout-prepare.js +8 -4
- package/dist/commands/checkout-prepare.js.map +1 -1
- package/dist/commands/doctor.js +80 -1
- package/dist/commands/doctor.js.map +1 -1
- package/dist/commands/image-search.js +5 -3
- package/dist/commands/image-search.js.map +1 -1
- package/dist/commands/offer.js +5 -1
- package/dist/commands/offer.js.map +1 -1
- package/dist/commands/order-get.js +6 -2
- package/dist/commands/order-get.js.map +1 -1
- package/dist/commands/order-list.js +4 -0
- package/dist/commands/order-list.js.map +1 -1
- package/dist/commands/order-logistics.js +5 -1
- package/dist/commands/order-logistics.js.map +1 -1
- package/dist/commands/search.js +20 -4
- package/dist/commands/search.js.map +1 -1
- package/dist/commands/seller-chat.js +7 -3
- package/dist/commands/seller-chat.js.map +1 -1
- package/dist/commands/seller-inquire.js +1 -1
- package/dist/commands/seller-inquire.js.map +1 -1
- package/dist/commands/seller-messages.js +8 -1
- package/dist/commands/seller-messages.js.map +1 -1
- package/dist/commands/similar.js +4 -0
- package/dist/commands/similar.js.map +1 -1
- package/dist/commands/skill.js +297 -0
- package/dist/commands/skill.js.map +1 -0
- package/dist/daemon/client.js +22 -11
- package/dist/daemon/client.js.map +1 -1
- package/dist/daemon/manager.js +64 -8
- package/dist/daemon/manager.js.map +1 -1
- package/dist/daemon/protocol.js.map +1 -1
- package/dist/daemon/server.js +96 -3
- package/dist/daemon/server.js.map +1 -1
- package/dist/io/errors.js +7 -1
- package/dist/io/errors.js.map +1 -1
- package/dist/session/artifacts.js +152 -0
- package/dist/session/artifacts.js.map +1 -0
- package/dist/session/context.js +8 -1
- package/dist/session/context.js.map +1 -1
- package/dist/session/dispatch.js +15 -4
- package/dist/session/dispatch.js.map +1 -1
- package/dist/session/page-state.js +78 -0
- package/dist/session/page-state.js.map +1 -0
- package/dist/session/paths.js +6 -0
- package/dist/session/paths.js.map +1 -1
- package/dist/session/recovery.js +422 -0
- package/dist/session/recovery.js.map +1 -0
- package/dist/session/shared.js +37 -2
- package/dist/session/shared.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,422 @@
|
|
|
1
|
+
import { CliError } from '../io/errors.js';
|
|
2
|
+
import { info } from '../io/output.js';
|
|
3
|
+
import { captureFailureArtifact, } from './artifacts.js';
|
|
4
|
+
import { detectPageState } from './page-state.js';
|
|
5
|
+
const MAX_TRACE_ITEMS = 80;
|
|
6
|
+
function pickPage(ctx) {
|
|
7
|
+
const pages = ctx.pages().filter((p) => !p.isClosed());
|
|
8
|
+
return pages.at(-1) ?? null;
|
|
9
|
+
}
|
|
10
|
+
function errorMessage(error) {
|
|
11
|
+
return error instanceof Error ? error.message : String(error);
|
|
12
|
+
}
|
|
13
|
+
function errorCode(error) {
|
|
14
|
+
if (error instanceof CliError)
|
|
15
|
+
return error.code;
|
|
16
|
+
const maybe = error;
|
|
17
|
+
return typeof maybe?.code === 'string' ? maybe.code : undefined;
|
|
18
|
+
}
|
|
19
|
+
function pushBounded(arr, item) {
|
|
20
|
+
arr.push(item);
|
|
21
|
+
if (arr.length > MAX_TRACE_ITEMS)
|
|
22
|
+
arr.shift();
|
|
23
|
+
}
|
|
24
|
+
function requestResourceType(req) {
|
|
25
|
+
try {
|
|
26
|
+
return req.resourceType();
|
|
27
|
+
}
|
|
28
|
+
catch {
|
|
29
|
+
return 'unknown';
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
function requestMethod(req) {
|
|
33
|
+
try {
|
|
34
|
+
return req.method();
|
|
35
|
+
}
|
|
36
|
+
catch {
|
|
37
|
+
return 'GET';
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
function requestUrl(req) {
|
|
41
|
+
try {
|
|
42
|
+
return req.url();
|
|
43
|
+
}
|
|
44
|
+
catch {
|
|
45
|
+
return '';
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
function consoleLocation(msg) {
|
|
49
|
+
try {
|
|
50
|
+
return msg.location();
|
|
51
|
+
}
|
|
52
|
+
catch {
|
|
53
|
+
return undefined;
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
function attachTrace(ctx) {
|
|
57
|
+
const trace = {
|
|
58
|
+
console: [],
|
|
59
|
+
pageErrors: [],
|
|
60
|
+
recent: [],
|
|
61
|
+
failed: [],
|
|
62
|
+
httpErrors: [],
|
|
63
|
+
detach: () => { },
|
|
64
|
+
};
|
|
65
|
+
const pages = new Set();
|
|
66
|
+
const detachPage = new Map();
|
|
67
|
+
const attachPage = (page) => {
|
|
68
|
+
if (pages.has(page))
|
|
69
|
+
return;
|
|
70
|
+
pages.add(page);
|
|
71
|
+
const onConsole = (msg) => {
|
|
72
|
+
if (!['error', 'warning'].includes(msg.type()))
|
|
73
|
+
return;
|
|
74
|
+
pushBounded(trace.console, {
|
|
75
|
+
at: new Date().toISOString(),
|
|
76
|
+
type: msg.type(),
|
|
77
|
+
text: msg.text(),
|
|
78
|
+
location: consoleLocation(msg),
|
|
79
|
+
});
|
|
80
|
+
};
|
|
81
|
+
const onPageError = (err) => {
|
|
82
|
+
pushBounded(trace.pageErrors, {
|
|
83
|
+
at: new Date().toISOString(),
|
|
84
|
+
message: err.message,
|
|
85
|
+
stack: err.stack,
|
|
86
|
+
});
|
|
87
|
+
};
|
|
88
|
+
const onRequest = (req) => {
|
|
89
|
+
pushBounded(trace.recent, {
|
|
90
|
+
at: new Date().toISOString(),
|
|
91
|
+
method: requestMethod(req),
|
|
92
|
+
url: requestUrl(req),
|
|
93
|
+
resourceType: requestResourceType(req),
|
|
94
|
+
});
|
|
95
|
+
};
|
|
96
|
+
const onRequestFailed = (req) => {
|
|
97
|
+
pushBounded(trace.failed, {
|
|
98
|
+
at: new Date().toISOString(),
|
|
99
|
+
method: requestMethod(req),
|
|
100
|
+
url: requestUrl(req),
|
|
101
|
+
resourceType: requestResourceType(req),
|
|
102
|
+
failure: req.failure()?.errorText,
|
|
103
|
+
});
|
|
104
|
+
};
|
|
105
|
+
const onResponse = (resp) => {
|
|
106
|
+
const status = resp.status();
|
|
107
|
+
if (status < 400)
|
|
108
|
+
return;
|
|
109
|
+
const req = resp.request();
|
|
110
|
+
pushBounded(trace.httpErrors, {
|
|
111
|
+
at: new Date().toISOString(),
|
|
112
|
+
status,
|
|
113
|
+
method: requestMethod(req),
|
|
114
|
+
url: resp.url(),
|
|
115
|
+
resourceType: requestResourceType(req),
|
|
116
|
+
});
|
|
117
|
+
};
|
|
118
|
+
page.on('console', onConsole);
|
|
119
|
+
page.on('pageerror', onPageError);
|
|
120
|
+
page.on('request', onRequest);
|
|
121
|
+
page.on('requestfailed', onRequestFailed);
|
|
122
|
+
page.on('response', onResponse);
|
|
123
|
+
detachPage.set(page, () => {
|
|
124
|
+
page.off('console', onConsole);
|
|
125
|
+
page.off('pageerror', onPageError);
|
|
126
|
+
page.off('request', onRequest);
|
|
127
|
+
page.off('requestfailed', onRequestFailed);
|
|
128
|
+
page.off('response', onResponse);
|
|
129
|
+
});
|
|
130
|
+
};
|
|
131
|
+
for (const page of ctx.pages())
|
|
132
|
+
attachPage(page);
|
|
133
|
+
ctx.on('page', attachPage);
|
|
134
|
+
trace.detach = () => {
|
|
135
|
+
ctx.off('page', attachPage);
|
|
136
|
+
for (const detach of detachPage.values())
|
|
137
|
+
detach();
|
|
138
|
+
detachPage.clear();
|
|
139
|
+
};
|
|
140
|
+
return trace;
|
|
141
|
+
}
|
|
142
|
+
function snapshotTrace(trace) {
|
|
143
|
+
return {
|
|
144
|
+
console: [...trace.console],
|
|
145
|
+
pageErrors: [...trace.pageErrors],
|
|
146
|
+
network: {
|
|
147
|
+
recent: [...trace.recent],
|
|
148
|
+
failed: [...trace.failed],
|
|
149
|
+
httpErrors: [...trace.httpErrors],
|
|
150
|
+
},
|
|
151
|
+
};
|
|
152
|
+
}
|
|
153
|
+
export function classifyRecoveryFailure(signals) {
|
|
154
|
+
const { message, code, pageState, trace } = signals;
|
|
155
|
+
const msg = `${code ?? ''}\n${message}`;
|
|
156
|
+
if (pageState?.kind === 'not_logged_in' || code === 'NOT_LOGGED_IN') {
|
|
157
|
+
return 'not_logged_in';
|
|
158
|
+
}
|
|
159
|
+
if (pageState?.kind === 'risk_challenge' || code === 'RISK_CONTROL') {
|
|
160
|
+
return 'risk_challenge';
|
|
161
|
+
}
|
|
162
|
+
if (pageState?.kind === 'rate_limited')
|
|
163
|
+
return 'rate_limited';
|
|
164
|
+
if (/Target page, context or browser has been closed|Browser closed|Target closed|Context closed|page crash/i.test(msg)) {
|
|
165
|
+
return 'browser_context_broken';
|
|
166
|
+
}
|
|
167
|
+
if (/ECONNRESET|ENOTFOUND|ERR_(?:TIMED_OUT|CONNECTION|INTERNET|NETWORK|NAME)|net::|NETWORK_ERROR/i.test(msg)) {
|
|
168
|
+
return 'network_error';
|
|
169
|
+
}
|
|
170
|
+
if (/429|403|访问频繁|请求频繁|操作频繁|稍后再试|系统繁忙/i.test(msg)) {
|
|
171
|
+
return 'rate_limited';
|
|
172
|
+
}
|
|
173
|
+
if (/Timeout .*navigation|Navigation timeout|waiting for .*navigation|waitForLoadState/i.test(msg)) {
|
|
174
|
+
return 'navigation_timeout';
|
|
175
|
+
}
|
|
176
|
+
if (/not visible|not enabled|does not receive pointer events|intercepts pointer events|element is outside|Element is not attached/i.test(msg)) {
|
|
177
|
+
return 'element_blocked';
|
|
178
|
+
}
|
|
179
|
+
if (/locator|selector|waiting for .*visible|No .* found|not found|Could not (?:find|locate).*element|element.*missing/i.test(msg)) {
|
|
180
|
+
return 'element_missing';
|
|
181
|
+
}
|
|
182
|
+
if (trace.network.httpErrors.some((r) => r.status === 429))
|
|
183
|
+
return 'rate_limited';
|
|
184
|
+
if (trace.network.failed.length >= 3 || trace.network.httpErrors.length >= 5) {
|
|
185
|
+
return 'network_error';
|
|
186
|
+
}
|
|
187
|
+
if (pageState?.kind === 'normal_1688_page' && /NO_RESULTS|UPLOAD_FAILED|parse|structure|expected/i.test(msg)) {
|
|
188
|
+
return 'site_changed';
|
|
189
|
+
}
|
|
190
|
+
return 'unknown';
|
|
191
|
+
}
|
|
192
|
+
export function recoveryDecisionFor(kind, headed) {
|
|
193
|
+
switch (kind) {
|
|
194
|
+
case 'not_logged_in':
|
|
195
|
+
return {
|
|
196
|
+
failureKind: kind,
|
|
197
|
+
action: 'pause_for_manual_login',
|
|
198
|
+
retryable: false,
|
|
199
|
+
maxRetries: 0,
|
|
200
|
+
cooldownMs: 0,
|
|
201
|
+
exitCode: 3,
|
|
202
|
+
code: 'NOT_LOGGED_IN',
|
|
203
|
+
message: 'Session expired. Run `1688 login`.',
|
|
204
|
+
recoverHint: 'Session expired. Run `1688 login` and retry.',
|
|
205
|
+
};
|
|
206
|
+
case 'risk_challenge':
|
|
207
|
+
return {
|
|
208
|
+
failureKind: kind,
|
|
209
|
+
action: 'pause_for_manual_challenge',
|
|
210
|
+
retryable: false,
|
|
211
|
+
maxRetries: 0,
|
|
212
|
+
cooldownMs: headed ? 0 : 5 * 60_000,
|
|
213
|
+
exitCode: 4,
|
|
214
|
+
code: 'RISK_CONTROL',
|
|
215
|
+
message: headed
|
|
216
|
+
? 'Slider verification not solved in time. Try again with `--headed`.'
|
|
217
|
+
: 'Aliyun risk control triggered. Run once with `--headed` to solve it manually.',
|
|
218
|
+
recoverHint: '1688 is showing a verification challenge. Retry once with `--headed` and complete the manual check.',
|
|
219
|
+
};
|
|
220
|
+
case 'rate_limited':
|
|
221
|
+
return {
|
|
222
|
+
failureKind: kind,
|
|
223
|
+
action: 'backoff',
|
|
224
|
+
retryable: true,
|
|
225
|
+
maxRetries: 1,
|
|
226
|
+
cooldownMs: 60_000 + Math.floor(Math.random() * 30_000),
|
|
227
|
+
exitCode: 9,
|
|
228
|
+
code: 'RATE_LIMITED',
|
|
229
|
+
message: '1688 is rate-limiting this session. Wait a few minutes, then retry at a slower pace.',
|
|
230
|
+
recoverHint: '1688 is rate-limiting this session. Wait a few minutes, then retry at a slower pace.',
|
|
231
|
+
};
|
|
232
|
+
case 'element_missing':
|
|
233
|
+
return {
|
|
234
|
+
failureKind: kind,
|
|
235
|
+
action: 'retry_after_resnapshot',
|
|
236
|
+
retryable: true,
|
|
237
|
+
maxRetries: 1,
|
|
238
|
+
cooldownMs: 1000,
|
|
239
|
+
exitCode: 1,
|
|
240
|
+
code: 'ELEMENT_MISSING',
|
|
241
|
+
message: 'Expected page element was not found.',
|
|
242
|
+
};
|
|
243
|
+
case 'element_blocked':
|
|
244
|
+
return {
|
|
245
|
+
failureKind: kind,
|
|
246
|
+
action: 'dismiss_overlay_and_retry',
|
|
247
|
+
retryable: true,
|
|
248
|
+
maxRetries: 1,
|
|
249
|
+
cooldownMs: 1000,
|
|
250
|
+
exitCode: 1,
|
|
251
|
+
code: 'ELEMENT_BLOCKED',
|
|
252
|
+
message: 'Expected page element was present but not clickable.',
|
|
253
|
+
};
|
|
254
|
+
case 'navigation_timeout':
|
|
255
|
+
return {
|
|
256
|
+
failureKind: kind,
|
|
257
|
+
action: 'wait_for_business_signal',
|
|
258
|
+
retryable: true,
|
|
259
|
+
maxRetries: 1,
|
|
260
|
+
cooldownMs: 1500,
|
|
261
|
+
exitCode: 9,
|
|
262
|
+
code: 'NAVIGATION_TIMEOUT',
|
|
263
|
+
message: 'Page navigation timed out before the expected business signal appeared.',
|
|
264
|
+
};
|
|
265
|
+
case 'page_unstable':
|
|
266
|
+
return {
|
|
267
|
+
failureKind: kind,
|
|
268
|
+
action: 'stabilize_and_retry',
|
|
269
|
+
retryable: true,
|
|
270
|
+
maxRetries: 1,
|
|
271
|
+
cooldownMs: 1500,
|
|
272
|
+
exitCode: 1,
|
|
273
|
+
code: 'PAGE_UNSTABLE',
|
|
274
|
+
message: 'The page did not become stable enough to operate safely.',
|
|
275
|
+
};
|
|
276
|
+
case 'browser_context_broken':
|
|
277
|
+
return {
|
|
278
|
+
failureKind: kind,
|
|
279
|
+
action: 'recreate_context',
|
|
280
|
+
retryable: true,
|
|
281
|
+
maxRetries: 1,
|
|
282
|
+
cooldownMs: 0,
|
|
283
|
+
exitCode: 130,
|
|
284
|
+
code: 'BROWSER_CONTEXT_BROKEN',
|
|
285
|
+
message: 'Browser context closed or crashed during the operation.',
|
|
286
|
+
};
|
|
287
|
+
case 'network_error':
|
|
288
|
+
return {
|
|
289
|
+
failureKind: kind,
|
|
290
|
+
action: 'retry_after_network_backoff',
|
|
291
|
+
retryable: true,
|
|
292
|
+
maxRetries: 1,
|
|
293
|
+
cooldownMs: 3000,
|
|
294
|
+
exitCode: 9,
|
|
295
|
+
code: 'NETWORK_ERROR',
|
|
296
|
+
message: 'Network error while operating 1688.',
|
|
297
|
+
};
|
|
298
|
+
case 'site_changed':
|
|
299
|
+
return {
|
|
300
|
+
failureKind: kind,
|
|
301
|
+
action: 'fail_with_artifacts',
|
|
302
|
+
retryable: false,
|
|
303
|
+
maxRetries: 0,
|
|
304
|
+
cooldownMs: 0,
|
|
305
|
+
exitCode: 1,
|
|
306
|
+
code: 'SITE_CHANGED',
|
|
307
|
+
message: '1688 page structure may have changed. Inspect the saved artifacts and update the command.',
|
|
308
|
+
};
|
|
309
|
+
case 'unknown':
|
|
310
|
+
return {
|
|
311
|
+
failureKind: kind,
|
|
312
|
+
action: 'retry_once_then_fail',
|
|
313
|
+
retryable: true,
|
|
314
|
+
maxRetries: 1,
|
|
315
|
+
cooldownMs: 1000,
|
|
316
|
+
exitCode: 1,
|
|
317
|
+
code: 'UNKNOWN_RECOVERY_FAILURE',
|
|
318
|
+
message: '1688 operation failed for an unknown reason.',
|
|
319
|
+
};
|
|
320
|
+
}
|
|
321
|
+
}
|
|
322
|
+
async function wait(ms) {
|
|
323
|
+
if (ms <= 0)
|
|
324
|
+
return;
|
|
325
|
+
await new Promise((r) => setTimeout(r, ms));
|
|
326
|
+
}
|
|
327
|
+
async function runRecoveryAction(decision, page) {
|
|
328
|
+
switch (decision.action) {
|
|
329
|
+
case 'dismiss_overlay_and_retry':
|
|
330
|
+
if (page && !page.isClosed()) {
|
|
331
|
+
await page.keyboard.press('Escape').catch(() => { });
|
|
332
|
+
await wait(decision.cooldownMs);
|
|
333
|
+
}
|
|
334
|
+
return;
|
|
335
|
+
case 'backoff':
|
|
336
|
+
info(`1688 rate limit detected; backing off for ${Math.round(decision.cooldownMs / 1000)}s before one retry...`);
|
|
337
|
+
await wait(decision.cooldownMs);
|
|
338
|
+
return;
|
|
339
|
+
case 'retry_after_network_backoff':
|
|
340
|
+
case 'retry_after_resnapshot':
|
|
341
|
+
case 'wait_for_business_signal':
|
|
342
|
+
case 'stabilize_and_retry':
|
|
343
|
+
case 'retry_once_then_fail':
|
|
344
|
+
await wait(decision.cooldownMs);
|
|
345
|
+
return;
|
|
346
|
+
default:
|
|
347
|
+
return;
|
|
348
|
+
}
|
|
349
|
+
}
|
|
350
|
+
function recoveryDetails(decision, artifactDetails) {
|
|
351
|
+
return {
|
|
352
|
+
...artifactDetails,
|
|
353
|
+
category: artifactDetails.category ?? decision.failureKind,
|
|
354
|
+
failureKind: decision.failureKind,
|
|
355
|
+
recoveryAction: decision.action,
|
|
356
|
+
recoverHint: artifactDetails.recoverHint ?? decision.recoverHint,
|
|
357
|
+
retryable: false,
|
|
358
|
+
};
|
|
359
|
+
}
|
|
360
|
+
export async function withRecovery(ctx, meta, operation, options = {}) {
|
|
361
|
+
let lastError = null;
|
|
362
|
+
const configuredRetries = options.maxRetries ?? 1;
|
|
363
|
+
for (let attempt = 0; attempt <= configuredRetries; attempt++) {
|
|
364
|
+
const trace = attachTrace(ctx);
|
|
365
|
+
try {
|
|
366
|
+
return await operation(attempt);
|
|
367
|
+
}
|
|
368
|
+
catch (error) {
|
|
369
|
+
lastError = error;
|
|
370
|
+
trace.detach();
|
|
371
|
+
const currentPage = pickPage(ctx);
|
|
372
|
+
const pageState = currentPage
|
|
373
|
+
? await detectPageState(currentPage).catch(() => null)
|
|
374
|
+
: null;
|
|
375
|
+
const signals = {
|
|
376
|
+
message: errorMessage(error),
|
|
377
|
+
code: errorCode(error),
|
|
378
|
+
pageState,
|
|
379
|
+
trace: snapshotTrace(trace),
|
|
380
|
+
};
|
|
381
|
+
const failureKind = classifyRecoveryFailure(signals);
|
|
382
|
+
const decision = recoveryDecisionFor(failureKind, options.headed === true);
|
|
383
|
+
const allowedRetries = Math.min(configuredRetries, decision.maxRetries);
|
|
384
|
+
const willRetry = decision.retryable && attempt < allowedRetries;
|
|
385
|
+
const artifactDetails = await captureFailureArtifact(ctx, meta, error, {
|
|
386
|
+
pageState,
|
|
387
|
+
trace: signals.trace,
|
|
388
|
+
recovery: {
|
|
389
|
+
attempt,
|
|
390
|
+
willRetry,
|
|
391
|
+
failureKind: decision.failureKind,
|
|
392
|
+
action: decision.action,
|
|
393
|
+
retryable: decision.retryable,
|
|
394
|
+
maxRetries: allowedRetries,
|
|
395
|
+
cooldownMs: decision.cooldownMs,
|
|
396
|
+
},
|
|
397
|
+
}).catch(() => ({}));
|
|
398
|
+
if (!willRetry) {
|
|
399
|
+
if (error instanceof CliError && error.exitCode !== 1) {
|
|
400
|
+
throw error.withDetails(recoveryDetails(decision, artifactDetails));
|
|
401
|
+
}
|
|
402
|
+
throw new CliError(decision.exitCode, decision.code, decision.message, recoveryDetails(decision, artifactDetails));
|
|
403
|
+
}
|
|
404
|
+
await runRecoveryAction(decision, currentPage);
|
|
405
|
+
await options.beforeRetry?.({
|
|
406
|
+
ctx,
|
|
407
|
+
page: currentPage,
|
|
408
|
+
attempt,
|
|
409
|
+
meta,
|
|
410
|
+
pageState,
|
|
411
|
+
failureKind,
|
|
412
|
+
decision,
|
|
413
|
+
});
|
|
414
|
+
}
|
|
415
|
+
finally {
|
|
416
|
+
trace.detach();
|
|
417
|
+
}
|
|
418
|
+
}
|
|
419
|
+
const message = errorMessage(lastError);
|
|
420
|
+
throw new CliError(1, 'RECOVERY_EXHAUSTED', message);
|
|
421
|
+
}
|
|
422
|
+
//# sourceMappingURL=recovery.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"recovery.js","sourceRoot":"","sources":["../../src/session/recovery.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,QAAQ,EAAwB,MAAM,iBAAiB,CAAC;AACjE,OAAO,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAC;AACvC,OAAO,EACL,sBAAsB,GAGvB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,eAAe,EAAkB,MAAM,iBAAiB,CAAC;AAwElE,MAAM,eAAe,GAAG,EAAE,CAAC;AAE3B,SAAS,QAAQ,CAAC,GAAmB;IACnC,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC;IACvD,OAAO,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC;AAC9B,CAAC;AAED,SAAS,YAAY,CAAC,KAAc;IAClC,OAAO,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AAChE,CAAC;AAED,SAAS,SAAS,CAAC,KAAc;IAC/B,IAAI,KAAK,YAAY,QAAQ;QAAE,OAAO,KAAK,CAAC,IAAI,CAAC;IACjD,MAAM,KAAK,GAAG,KAA2B,CAAC;IAC1C,OAAO,OAAO,KAAK,EAAE,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC;AAClE,CAAC;AAED,SAAS,WAAW,CAAC,GAAmC,EAAE,IAA6B;IACrF,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACf,IAAI,GAAG,CAAC,MAAM,GAAG,eAAe;QAAE,GAAG,CAAC,KAAK,EAAE,CAAC;AAChD,CAAC;AAED,SAAS,mBAAmB,CAAC,GAAY;IACvC,IAAI,CAAC;QACH,OAAO,GAAG,CAAC,YAAY,EAAE,CAAC;IAC5B,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,SAAS,CAAC;IACnB,CAAC;AACH,CAAC;AAED,SAAS,aAAa,CAAC,GAAY;IACjC,IAAI,CAAC;QACH,OAAO,GAAG,CAAC,MAAM,EAAE,CAAC;IACtB,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED,SAAS,UAAU,CAAC,GAAY;IAC9B,IAAI,CAAC;QACH,OAAO,GAAG,CAAC,GAAG,EAAE,CAAC;IACnB,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC;AAED,SAAS,eAAe,CAAC,GAAmB;IAC1C,IAAI,CAAC;QACH,OAAO,GAAG,CAAC,QAAQ,EAAE,CAAC;IACxB,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,SAAS,CAAC;IACnB,CAAC;AACH,CAAC;AAED,SAAS,WAAW,CAAC,GAAmB;IACtC,MAAM,KAAK,GAAe;QACxB,OAAO,EAAE,EAAE;QACX,UAAU,EAAE,EAAE;QACd,MAAM,EAAE,EAAE;QACV,MAAM,EAAE,EAAE;QACV,UAAU,EAAE,EAAE;QACd,MAAM,EAAE,GAAG,EAAE,GAAE,CAAC;KACjB,CAAC;IACF,MAAM,KAAK,GAAG,IAAI,GAAG,EAAQ,CAAC;IAC9B,MAAM,UAAU,GAAG,IAAI,GAAG,EAAoB,CAAC;IAE/C,MAAM,UAAU,GAAG,CAAC,IAAU,EAAE,EAAE;QAChC,IAAI,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC;YAAE,OAAO;QAC5B,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAChB,MAAM,SAAS,GAAG,CAAC,GAAmB,EAAE,EAAE;YACxC,IAAI,CAAC,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC;gBAAE,OAAO;YACvD,WAAW,CAAC,KAAK,CAAC,OAAO,EAAE;gBACzB,EAAE,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;gBAC5B,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE;gBAChB,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE;gBAChB,QAAQ,EAAE,eAAe,CAAC,GAAG,CAAC;aAC/B,CAAC,CAAC;QACL,CAAC,CAAC;QACF,MAAM,WAAW,GAAG,CAAC,GAAU,EAAE,EAAE;YACjC,WAAW,CAAC,KAAK,CAAC,UAAU,EAAE;gBAC5B,EAAE,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;gBAC5B,OAAO,EAAE,GAAG,CAAC,OAAO;gBACpB,KAAK,EAAE,GAAG,CAAC,KAAK;aACjB,CAAC,CAAC;QACL,CAAC,CAAC;QACF,MAAM,SAAS,GAAG,CAAC,GAAY,EAAE,EAAE;YACjC,WAAW,CAAC,KAAK,CAAC,MAAM,EAAE;gBACxB,EAAE,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;gBAC5B,MAAM,EAAE,aAAa,CAAC,GAAG,CAAC;gBAC1B,GAAG,EAAE,UAAU,CAAC,GAAG,CAAC;gBACpB,YAAY,EAAE,mBAAmB,CAAC,GAAG,CAAC;aACvC,CAAC,CAAC;QACL,CAAC,CAAC;QACF,MAAM,eAAe,GAAG,CAAC,GAAY,EAAE,EAAE;YACvC,WAAW,CAAC,KAAK,CAAC,MAAM,EAAE;gBACxB,EAAE,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;gBAC5B,MAAM,EAAE,aAAa,CAAC,GAAG,CAAC;gBAC1B,GAAG,EAAE,UAAU,CAAC,GAAG,CAAC;gBACpB,YAAY,EAAE,mBAAmB,CAAC,GAAG,CAAC;gBACtC,OAAO,EAAE,GAAG,CAAC,OAAO,EAAE,EAAE,SAAS;aAClC,CAAC,CAAC;QACL,CAAC,CAAC;QACF,MAAM,UAAU,GAAG,CAAC,IAAc,EAAE,EAAE;YACpC,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;YAC7B,IAAI,MAAM,GAAG,GAAG;gBAAE,OAAO;YACzB,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC;YAC3B,WAAW,CAAC,KAAK,CAAC,UAAU,EAAE;gBAC5B,EAAE,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;gBAC5B,MAAM;gBACN,MAAM,EAAE,aAAa,CAAC,GAAG,CAAC;gBAC1B,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE;gBACf,YAAY,EAAE,mBAAmB,CAAC,GAAG,CAAC;aACvC,CAAC,CAAC;QACL,CAAC,CAAC;QAEF,IAAI,CAAC,EAAE,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;QAC9B,IAAI,CAAC,EAAE,CAAC,WAAW,EAAE,WAAW,CAAC,CAAC;QAClC,IAAI,CAAC,EAAE,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;QAC9B,IAAI,CAAC,EAAE,CAAC,eAAe,EAAE,eAAe,CAAC,CAAC;QAC1C,IAAI,CAAC,EAAE,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC;QAChC,UAAU,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,EAAE;YACxB,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;YAC/B,IAAI,CAAC,GAAG,CAAC,WAAW,EAAE,WAAW,CAAC,CAAC;YACnC,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;YAC/B,IAAI,CAAC,GAAG,CAAC,eAAe,EAAE,eAAe,CAAC,CAAC;YAC3C,IAAI,CAAC,GAAG,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC;QACnC,CAAC,CAAC,CAAC;IACL,CAAC,CAAC;IAEF,KAAK,MAAM,IAAI,IAAI,GAAG,CAAC,KAAK,EAAE;QAAE,UAAU,CAAC,IAAI,CAAC,CAAC;IACjD,GAAG,CAAC,EAAE,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;IAC3B,KAAK,CAAC,MAAM,GAAG,GAAG,EAAE;QAClB,GAAG,CAAC,GAAG,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;QAC5B,KAAK,MAAM,MAAM,IAAI,UAAU,CAAC,MAAM,EAAE;YAAE,MAAM,EAAE,CAAC;QACnD,UAAU,CAAC,KAAK,EAAE,CAAC;IACrB,CAAC,CAAC;IACF,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,aAAa,CAAC,KAAiB;IACtC,OAAO;QACL,OAAO,EAAE,CAAC,GAAG,KAAK,CAAC,OAAO,CAAC;QAC3B,UAAU,EAAE,CAAC,GAAG,KAAK,CAAC,UAAU,CAAC;QACjC,OAAO,EAAE;YACP,MAAM,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC;YACzB,MAAM,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC;YACzB,UAAU,EAAE,CAAC,GAAG,KAAK,CAAC,UAAU,CAAC;SAClC;KACF,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,uBAAuB,CACrC,OAA+B;IAE/B,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,GAAG,OAAO,CAAC;IACpD,MAAM,GAAG,GAAG,GAAG,IAAI,IAAI,EAAE,KAAK,OAAO,EAAE,CAAC;IAExC,IAAI,SAAS,EAAE,IAAI,KAAK,eAAe,IAAI,IAAI,KAAK,eAAe,EAAE,CAAC;QACpE,OAAO,eAAe,CAAC;IACzB,CAAC;IACD,IAAI,SAAS,EAAE,IAAI,KAAK,gBAAgB,IAAI,IAAI,KAAK,cAAc,EAAE,CAAC;QACpE,OAAO,gBAAgB,CAAC;IAC1B,CAAC;IACD,IAAI,SAAS,EAAE,IAAI,KAAK,cAAc;QAAE,OAAO,cAAc,CAAC;IAC9D,IAAI,yGAAyG,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;QACxH,OAAO,wBAAwB,CAAC;IAClC,CAAC;IACD,IAAI,8FAA8F,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;QAC7G,OAAO,eAAe,CAAC;IACzB,CAAC;IACD,IAAI,mCAAmC,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;QAClD,OAAO,cAAc,CAAC;IACxB,CAAC;IACD,IAAI,oFAAoF,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;QACnG,OAAO,oBAAoB,CAAC;IAC9B,CAAC;IACD,IAAI,+HAA+H,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;QAC9I,OAAO,iBAAiB,CAAC;IAC3B,CAAC;IACD,IAAI,mHAAmH,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;QAClI,OAAO,iBAAiB,CAAC;IAC3B,CAAC;IACD,IAAI,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,GAAG,CAAC;QAAE,OAAO,cAAc,CAAC;IAClF,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,IAAI,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,MAAM,IAAI,CAAC,EAAE,CAAC;QAC7E,OAAO,eAAe,CAAC;IACzB,CAAC;IACD,IAAI,SAAS,EAAE,IAAI,KAAK,kBAAkB,IAAI,oDAAoD,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;QAC7G,OAAO,cAAc,CAAC;IACxB,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,MAAM,UAAU,mBAAmB,CACjC,IAAyB,EACzB,MAAe;IAEf,QAAQ,IAAI,EAAE,CAAC;QACb,KAAK,eAAe;YAClB,OAAO;gBACL,WAAW,EAAE,IAAI;gBACjB,MAAM,EAAE,wBAAwB;gBAChC,SAAS,EAAE,KAAK;gBAChB,UAAU,EAAE,CAAC;gBACb,UAAU,EAAE,CAAC;gBACb,QAAQ,EAAE,CAAC;gBACX,IAAI,EAAE,eAAe;gBACrB,OAAO,EAAE,oCAAoC;gBAC7C,WAAW,EAAE,8CAA8C;aAC5D,CAAC;QACJ,KAAK,gBAAgB;YACnB,OAAO;gBACL,WAAW,EAAE,IAAI;gBACjB,MAAM,EAAE,4BAA4B;gBACpC,SAAS,EAAE,KAAK;gBAChB,UAAU,EAAE,CAAC;gBACb,UAAU,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,MAAM;gBACnC,QAAQ,EAAE,CAAC;gBACX,IAAI,EAAE,cAAc;gBACpB,OAAO,EAAE,MAAM;oBACb,CAAC,CAAC,oEAAoE;oBACtE,CAAC,CAAC,+EAA+E;gBACnF,WAAW,EAAE,qGAAqG;aACnH,CAAC;QACJ,KAAK,cAAc;YACjB,OAAO;gBACL,WAAW,EAAE,IAAI;gBACjB,MAAM,EAAE,SAAS;gBACjB,SAAS,EAAE,IAAI;gBACf,UAAU,EAAE,CAAC;gBACb,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,MAAM,CAAC;gBACvD,QAAQ,EAAE,CAAC;gBACX,IAAI,EAAE,cAAc;gBACpB,OAAO,EAAE,sFAAsF;gBAC/F,WAAW,EAAE,sFAAsF;aACpG,CAAC;QACJ,KAAK,iBAAiB;YACpB,OAAO;gBACL,WAAW,EAAE,IAAI;gBACjB,MAAM,EAAE,wBAAwB;gBAChC,SAAS,EAAE,IAAI;gBACf,UAAU,EAAE,CAAC;gBACb,UAAU,EAAE,IAAI;gBAChB,QAAQ,EAAE,CAAC;gBACX,IAAI,EAAE,iBAAiB;gBACvB,OAAO,EAAE,sCAAsC;aAChD,CAAC;QACJ,KAAK,iBAAiB;YACpB,OAAO;gBACL,WAAW,EAAE,IAAI;gBACjB,MAAM,EAAE,2BAA2B;gBACnC,SAAS,EAAE,IAAI;gBACf,UAAU,EAAE,CAAC;gBACb,UAAU,EAAE,IAAI;gBAChB,QAAQ,EAAE,CAAC;gBACX,IAAI,EAAE,iBAAiB;gBACvB,OAAO,EAAE,sDAAsD;aAChE,CAAC;QACJ,KAAK,oBAAoB;YACvB,OAAO;gBACL,WAAW,EAAE,IAAI;gBACjB,MAAM,EAAE,0BAA0B;gBAClC,SAAS,EAAE,IAAI;gBACf,UAAU,EAAE,CAAC;gBACb,UAAU,EAAE,IAAI;gBAChB,QAAQ,EAAE,CAAC;gBACX,IAAI,EAAE,oBAAoB;gBAC1B,OAAO,EAAE,yEAAyE;aACnF,CAAC;QACJ,KAAK,eAAe;YAClB,OAAO;gBACL,WAAW,EAAE,IAAI;gBACjB,MAAM,EAAE,qBAAqB;gBAC7B,SAAS,EAAE,IAAI;gBACf,UAAU,EAAE,CAAC;gBACb,UAAU,EAAE,IAAI;gBAChB,QAAQ,EAAE,CAAC;gBACX,IAAI,EAAE,eAAe;gBACrB,OAAO,EAAE,0DAA0D;aACpE,CAAC;QACJ,KAAK,wBAAwB;YAC3B,OAAO;gBACL,WAAW,EAAE,IAAI;gBACjB,MAAM,EAAE,kBAAkB;gBAC1B,SAAS,EAAE,IAAI;gBACf,UAAU,EAAE,CAAC;gBACb,UAAU,EAAE,CAAC;gBACb,QAAQ,EAAE,GAAG;gBACb,IAAI,EAAE,wBAAwB;gBAC9B,OAAO,EAAE,yDAAyD;aACnE,CAAC;QACJ,KAAK,eAAe;YAClB,OAAO;gBACL,WAAW,EAAE,IAAI;gBACjB,MAAM,EAAE,6BAA6B;gBACrC,SAAS,EAAE,IAAI;gBACf,UAAU,EAAE,CAAC;gBACb,UAAU,EAAE,IAAI;gBAChB,QAAQ,EAAE,CAAC;gBACX,IAAI,EAAE,eAAe;gBACrB,OAAO,EAAE,qCAAqC;aAC/C,CAAC;QACJ,KAAK,cAAc;YACjB,OAAO;gBACL,WAAW,EAAE,IAAI;gBACjB,MAAM,EAAE,qBAAqB;gBAC7B,SAAS,EAAE,KAAK;gBAChB,UAAU,EAAE,CAAC;gBACb,UAAU,EAAE,CAAC;gBACb,QAAQ,EAAE,CAAC;gBACX,IAAI,EAAE,cAAc;gBACpB,OAAO,EAAE,2FAA2F;aACrG,CAAC;QACJ,KAAK,SAAS;YACZ,OAAO;gBACL,WAAW,EAAE,IAAI;gBACjB,MAAM,EAAE,sBAAsB;gBAC9B,SAAS,EAAE,IAAI;gBACf,UAAU,EAAE,CAAC;gBACb,UAAU,EAAE,IAAI;gBAChB,QAAQ,EAAE,CAAC;gBACX,IAAI,EAAE,0BAA0B;gBAChC,OAAO,EAAE,8CAA8C;aACxD,CAAC;IACN,CAAC;AACH,CAAC;AAED,KAAK,UAAU,IAAI,CAAC,EAAU;IAC5B,IAAI,EAAE,IAAI,CAAC;QAAE,OAAO;IACpB,MAAM,IAAI,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;AAC9C,CAAC;AAED,KAAK,UAAU,iBAAiB,CAAC,QAA0B,EAAE,IAAiB;IAC5E,QAAQ,QAAQ,CAAC,MAAM,EAAE,CAAC;QACxB,KAAK,2BAA2B;YAC9B,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,EAAE,CAAC;gBAC7B,MAAM,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;gBACpD,MAAM,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;YAClC,CAAC;YACD,OAAO;QACT,KAAK,SAAS;YACZ,IAAI,CAAC,6CAA6C,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,UAAU,GAAG,IAAI,CAAC,uBAAuB,CAAC,CAAC;YACjH,MAAM,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;YAChC,OAAO;QACT,KAAK,6BAA6B,CAAC;QACnC,KAAK,wBAAwB,CAAC;QAC9B,KAAK,0BAA0B,CAAC;QAChC,KAAK,qBAAqB,CAAC;QAC3B,KAAK,sBAAsB;YACzB,MAAM,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;YAChC,OAAO;QACT;YACE,OAAO;IACX,CAAC;AACH,CAAC;AAED,SAAS,eAAe,CAAC,QAA0B,EAAE,eAAgC;IACnF,OAAO;QACL,GAAG,eAAe;QAClB,QAAQ,EAAE,eAAe,CAAC,QAAQ,IAAI,QAAQ,CAAC,WAAW;QAC1D,WAAW,EAAE,QAAQ,CAAC,WAAW;QACjC,cAAc,EAAE,QAAQ,CAAC,MAAM;QAC/B,WAAW,EAAE,eAAe,CAAC,WAAW,IAAI,QAAQ,CAAC,WAAW;QAChE,SAAS,EAAE,KAAK;KACjB,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,YAAY,CAChC,GAAmB,EACnB,IAAa,EACb,SAA0C,EAC1C,UAA2B,EAAE;IAE7B,IAAI,SAAS,GAAY,IAAI,CAAC;IAC9B,MAAM,iBAAiB,GAAG,OAAO,CAAC,UAAU,IAAI,CAAC,CAAC;IAElD,KAAK,IAAI,OAAO,GAAG,CAAC,EAAE,OAAO,IAAI,iBAAiB,EAAE,OAAO,EAAE,EAAE,CAAC;QAC9D,MAAM,KAAK,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC;QAC/B,IAAI,CAAC;YACH,OAAO,MAAM,SAAS,CAAC,OAAO,CAAC,CAAC;QAClC,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,SAAS,GAAG,KAAK,CAAC;YAClB,KAAK,CAAC,MAAM,EAAE,CAAC;YACf,MAAM,WAAW,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC;YAClC,MAAM,SAAS,GAAG,WAAW;gBAC3B,CAAC,CAAC,MAAM,eAAe,CAAC,WAAW,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC;gBACtD,CAAC,CAAC,IAAI,CAAC;YACT,MAAM,OAAO,GAA2B;gBACtC,OAAO,EAAE,YAAY,CAAC,KAAK,CAAC;gBAC5B,IAAI,EAAE,SAAS,CAAC,KAAK,CAAC;gBACtB,SAAS;gBACT,KAAK,EAAE,aAAa,CAAC,KAAK,CAAC;aAC5B,CAAC;YACF,MAAM,WAAW,GAAG,uBAAuB,CAAC,OAAO,CAAC,CAAC;YACrD,MAAM,QAAQ,GAAG,mBAAmB,CAAC,WAAW,EAAE,OAAO,CAAC,MAAM,KAAK,IAAI,CAAC,CAAC;YAC3E,MAAM,cAAc,GAAG,IAAI,CAAC,GAAG,CAAC,iBAAiB,EAAE,QAAQ,CAAC,UAAU,CAAC,CAAC;YACxE,MAAM,SAAS,GAAG,QAAQ,CAAC,SAAS,IAAI,OAAO,GAAG,cAAc,CAAC;YACjE,MAAM,eAAe,GAAG,MAAM,sBAAsB,CAAC,GAAG,EAAE,IAAI,EAAE,KAAK,EAAE;gBACrE,SAAS;gBACT,KAAK,EAAE,OAAO,CAAC,KAAK;gBACpB,QAAQ,EAAE;oBACR,OAAO;oBACP,SAAS;oBACT,WAAW,EAAE,QAAQ,CAAC,WAAW;oBACjC,MAAM,EAAE,QAAQ,CAAC,MAAM;oBACvB,SAAS,EAAE,QAAQ,CAAC,SAAS;oBAC7B,UAAU,EAAE,cAAc;oBAC1B,UAAU,EAAE,QAAQ,CAAC,UAAU;iBAChC;aACF,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;YAErB,IAAI,CAAC,SAAS,EAAE,CAAC;gBACf,IAAI,KAAK,YAAY,QAAQ,IAAI,KAAK,CAAC,QAAQ,KAAK,CAAC,EAAE,CAAC;oBACtD,MAAM,KAAK,CAAC,WAAW,CAAC,eAAe,CAAC,QAAQ,EAAE,eAAe,CAAC,CAAC,CAAC;gBACtE,CAAC;gBACD,MAAM,IAAI,QAAQ,CAChB,QAAQ,CAAC,QAAQ,EACjB,QAAQ,CAAC,IAAI,EACb,QAAQ,CAAC,OAAO,EAChB,eAAe,CAAC,QAAQ,EAAE,eAAe,CAAC,CAC3C,CAAC;YACJ,CAAC;YAED,MAAM,iBAAiB,CAAC,QAAQ,EAAE,WAAW,CAAC,CAAC;YAC/C,MAAM,OAAO,CAAC,WAAW,EAAE,CAAC;gBAC1B,GAAG;gBACH,IAAI,EAAE,WAAW;gBACjB,OAAO;gBACP,IAAI;gBACJ,SAAS;gBACT,WAAW;gBACX,QAAQ;aACT,CAAC,CAAC;QACL,CAAC;gBAAS,CAAC;YACT,KAAK,CAAC,MAAM,EAAE,CAAC;QACjB,CAAC;IACH,CAAC;IAED,MAAM,OAAO,GAAG,YAAY,CAAC,SAAS,CAAC,CAAC;IACxC,MAAM,IAAI,QAAQ,CAAC,CAAC,EAAE,oBAAoB,EAAE,OAAO,CAAC,CAAC;AACvD,CAAC"}
|
package/dist/session/shared.js
CHANGED
|
@@ -8,6 +8,8 @@ import { profilePath } from './paths.js';
|
|
|
8
8
|
import { acquireLock } from './lock.js';
|
|
9
9
|
import { CliError } from '../io/errors.js';
|
|
10
10
|
import { clearStaleSingleton } from './context.js';
|
|
11
|
+
import { enrichErrorWithArtifact, } from './artifacts.js';
|
|
12
|
+
import { detectPageState } from './page-state.js';
|
|
11
13
|
const stealthPlugin = stealth();
|
|
12
14
|
stealthPlugin.enabledEvasions.delete('iframe.contentWindow');
|
|
13
15
|
stealthPlugin.enabledEvasions.delete('media.codecs');
|
|
@@ -40,7 +42,7 @@ export async function getSharedContext() {
|
|
|
40
42
|
});
|
|
41
43
|
return sharedCtx;
|
|
42
44
|
}
|
|
43
|
-
export async function runOnSharedCtx(fn) {
|
|
45
|
+
export async function runOnSharedCtx(fn, meta) {
|
|
44
46
|
// Append to serial queue. Each op waits for the previous one to finish.
|
|
45
47
|
const prev = opChain;
|
|
46
48
|
let resolveOp;
|
|
@@ -55,11 +57,44 @@ export async function runOnSharedCtx(fn) {
|
|
|
55
57
|
resolveOp(await fn(ctx));
|
|
56
58
|
}
|
|
57
59
|
catch (e) {
|
|
58
|
-
|
|
60
|
+
const ctx = sharedCtx;
|
|
61
|
+
if (ctx && meta) {
|
|
62
|
+
rejectOp(await enrichErrorWithArtifact(ctx, meta, e));
|
|
63
|
+
}
|
|
64
|
+
else {
|
|
65
|
+
rejectOp(e);
|
|
66
|
+
}
|
|
59
67
|
}
|
|
60
68
|
});
|
|
61
69
|
return opPromise;
|
|
62
70
|
}
|
|
71
|
+
export async function getSharedContextStatus() {
|
|
72
|
+
if (!sharedCtx) {
|
|
73
|
+
return {
|
|
74
|
+
browserAlive: false,
|
|
75
|
+
pageCount: 0,
|
|
76
|
+
currentUrl: null,
|
|
77
|
+
pageState: null,
|
|
78
|
+
loggedIn: null,
|
|
79
|
+
};
|
|
80
|
+
}
|
|
81
|
+
const pages = sharedCtx.pages().filter((p) => !p.isClosed());
|
|
82
|
+
const page = pages.at(-1) ?? null;
|
|
83
|
+
const pageState = page ? await detectPageState(page).catch(() => null) : null;
|
|
84
|
+
return {
|
|
85
|
+
browserAlive: true,
|
|
86
|
+
pageCount: pages.length,
|
|
87
|
+
currentUrl: page?.url() ?? null,
|
|
88
|
+
pageState,
|
|
89
|
+
loggedIn: pageState
|
|
90
|
+
? pageState.kind === 'normal_1688_page'
|
|
91
|
+
? true
|
|
92
|
+
: pageState.kind === 'not_logged_in'
|
|
93
|
+
? false
|
|
94
|
+
: null
|
|
95
|
+
: null,
|
|
96
|
+
};
|
|
97
|
+
}
|
|
63
98
|
export async function releaseSharedContext() {
|
|
64
99
|
if (sharedCtx) {
|
|
65
100
|
await sharedCtx.close().catch(() => { });
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"shared.js","sourceRoot":"","sources":["../../src/session/shared.ts"],"names":[],"mappings":"AAAA,6EAA6E;AAC7E,0EAA0E;AAC1E,mCAAmC;AAEnC,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAElC,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,OAAO,MAAM,gCAAgC,CAAC;AACrD,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AACzC,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AACxC,OAAO,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAC3C,OAAO,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"shared.js","sourceRoot":"","sources":["../../src/session/shared.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "1688-cli",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.34",
|
|
4
4
|
"description": "1688.com CLI for humans, Codex, and Claude Code. Sourcing (search / image-search / offer / inquire) and orders (list / detail / logistics / seller chat).",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"author": "nobodyjack",
|