web-access-cli 0.5.0 → 0.7.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 (50) hide show
  1. package/README.md +104 -207
  2. package/README_CN.md +106 -209
  3. package/THIRD_PARTY_NOTICES.md +0 -13
  4. package/dist/config/config.js +10 -2
  5. package/dist/config/config.js.map +1 -1
  6. package/dist/core/router.js +4 -2
  7. package/dist/core/router.js.map +1 -1
  8. package/dist/core/schema.js +1 -1
  9. package/dist/core/types.js +1 -0
  10. package/dist/core/types.js.map +1 -1
  11. package/dist/gateway/admin.js +670 -0
  12. package/dist/gateway/admin.js.map +1 -0
  13. package/dist/gateway/panel.js +2405 -0
  14. package/dist/gateway/panel.js.map +1 -0
  15. package/dist/gateway/records.js +464 -0
  16. package/dist/gateway/records.js.map +1 -0
  17. package/dist/gateway/schema.js +115 -0
  18. package/dist/gateway/schema.js.map +1 -0
  19. package/dist/gateway/server.js +663 -0
  20. package/dist/gateway/server.js.map +1 -0
  21. package/dist/gateway/service.js +607 -0
  22. package/dist/gateway/service.js.map +1 -0
  23. package/dist/providers/anysearch.js +5 -3
  24. package/dist/providers/anysearch.js.map +1 -1
  25. package/dist/providers/deepseek.js +173 -106
  26. package/dist/providers/deepseek.js.map +1 -1
  27. package/dist/providers/registry.js +2 -0
  28. package/dist/providers/registry.js.map +1 -1
  29. package/dist/providers/search.js +4 -2
  30. package/dist/providers/search.js.map +1 -1
  31. package/dist/providers/xai.js +16 -8
  32. package/dist/providers/xai.js.map +1 -1
  33. package/dist/providers/xcrawl.js +1 -1
  34. package/dist/providers/xcrawl.js.map +1 -1
  35. package/dist/providers/yuanbao.js +214 -0
  36. package/dist/providers/yuanbao.js.map +1 -0
  37. package/dist/server.js +127 -0
  38. package/dist/server.js.map +1 -0
  39. package/dist/transport/http.js +8 -0
  40. package/dist/transport/http.js.map +1 -1
  41. package/dist/version.js +1 -1
  42. package/package.json +4 -2
  43. package/schemas/config.schema.json +4 -0
  44. package/schemas/gatewayError.schema.json +33 -0
  45. package/schemas/gatewayFetchRequest.schema.json +13 -0
  46. package/schemas/gatewayFetchResponse.schema.json +16 -0
  47. package/schemas/gatewaySearchRequest.schema.json +37 -0
  48. package/schemas/gatewaySearchResponse.schema.json +81 -0
  49. package/schemas/output.schema.json +52 -0
  50. package/schemas/searchRequest.schema.json +1 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/gateway/server.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,607 @@
1
+ import { executeExtract, executeSearch, } from "../core/router.js";
2
+ import { getAdapter } from "../providers/registry.js";
3
+ export const GATEWAY_DEFAULT_LIMITS = {
4
+ /** Total wall-clock budget for filling `content` on a search response. */
5
+ contentBudgetMs: 30_000,
6
+ /** Per-result extraction deadline. */
7
+ contentItemTimeoutMs: 10_000,
8
+ /** Per-provider attempt cap during backfill, so fallback still gets a turn. */
9
+ contentAttemptTimeoutMs: 3_000,
10
+ /** Source Markdown probe cap during backfill and Fetch. */
11
+ contentPreflightTimeoutMs: 1_000,
12
+ /** Minimum probe body size; short soft-404 pages must not win. */
13
+ contentPreflightMinCharacters: 500,
14
+ };
15
+ /** An error that maps onto the official `{error:{message,type,param,code}}`. */
16
+ export class GatewayHttpError extends Error {
17
+ status;
18
+ type;
19
+ code;
20
+ retryAfterSeconds;
21
+ /** Last provider that actually failed, filled by `classifyFailure` for the panel. */
22
+ provider;
23
+ /** Detailed provider attempts captured before the failure. */
24
+ trace;
25
+ constructor(options) {
26
+ super(options.message);
27
+ this.name = "GatewayHttpError";
28
+ this.status = options.status;
29
+ this.type = options.type;
30
+ this.code = options.code;
31
+ this.retryAfterSeconds = options.retryAfterSeconds;
32
+ }
33
+ }
34
+ /** The client went away; no response should be written. */
35
+ export class GatewayClientAbort extends Error {
36
+ constructor() {
37
+ super("客户端已断开");
38
+ this.name = "GatewayClientAbort";
39
+ }
40
+ }
41
+ const ERROR_MESSAGES = {
42
+ insufficient_quota: "上游 provider 额度不足。",
43
+ rate_limit_exceeded: "请求过于频繁,请稍后重试。",
44
+ upstream_timeout: "下游请求超时。",
45
+ no_usable_content: "未能获取可用的网页正文。",
46
+ provider_auth_error: "上游 provider 凭据无效。",
47
+ provider_config_error: "上游 provider 配置无效。",
48
+ no_provider_available: "没有可用的 provider。",
49
+ provider_error: "上游 provider 请求失败。",
50
+ };
51
+ function serverError(code, message) {
52
+ return new GatewayHttpError({
53
+ status: 500,
54
+ type: "server_error",
55
+ code,
56
+ message: message ?? ERROR_MESSAGES[code] ?? "网关内部错误。",
57
+ });
58
+ }
59
+ function quotaError() {
60
+ return new GatewayHttpError({
61
+ status: 402,
62
+ type: "insufficient_quota",
63
+ code: "insufficient_quota",
64
+ message: ERROR_MESSAGES.insufficient_quota,
65
+ });
66
+ }
67
+ function rateLimitError() {
68
+ return new GatewayHttpError({
69
+ status: 429,
70
+ type: "rate_limit_error",
71
+ code: "rate_limit_exceeded",
72
+ message: ERROR_MESSAGES.rate_limit_exceeded,
73
+ retryAfterSeconds: 1,
74
+ });
75
+ }
76
+ function timeoutError() {
77
+ return new GatewayHttpError({
78
+ status: 504,
79
+ type: "timeout_error",
80
+ code: "upstream_timeout",
81
+ message: ERROR_MESSAGES.upstream_timeout,
82
+ });
83
+ }
84
+ function notFoundError() {
85
+ return new GatewayHttpError({
86
+ status: 404,
87
+ type: "not_found_error",
88
+ code: "no_usable_content",
89
+ message: ERROR_MESSAGES.no_usable_content,
90
+ });
91
+ }
92
+ function deriveExtractConfig(loaded, limits) {
93
+ const original = loaded.app.extract;
94
+ return {
95
+ ...loaded,
96
+ app: {
97
+ ...loaded.app,
98
+ extract: {
99
+ ...original,
100
+ minContentCharacters: 1,
101
+ attemptTimeoutMs: Math.min(original.attemptTimeoutMs, limits.contentAttemptTimeoutMs),
102
+ },
103
+ },
104
+ };
105
+ }
106
+ function preflightOverride(loaded, limits) {
107
+ return {
108
+ timeoutMs: limits.contentPreflightTimeoutMs,
109
+ minContentCharacters: Math.max(limits.contentPreflightMinCharacters, loaded.app.extract.minContentCharacters),
110
+ };
111
+ }
112
+ export function checkGatewayReadiness(loaded) {
113
+ const byId = new Map(loaded.instances.map((instance) => [instance.id, instance]));
114
+ for (const capability of ["search", "extract"]) {
115
+ const route = capability === "search"
116
+ ? [
117
+ ...loaded.app.search.providers,
118
+ ...loaded.app.search.providers_fallback,
119
+ ]
120
+ : [
121
+ ...loaded.app.extract.providers,
122
+ ...loaded.app.extract.providers_fallback,
123
+ ];
124
+ const configured = route.some((id) => {
125
+ const instance = byId.get(id);
126
+ if (!instance)
127
+ return false;
128
+ const adapter = getAdapter(instance.type, capability);
129
+ return !!adapter?.isConfigured(instance);
130
+ });
131
+ if (!configured)
132
+ return { ready: false, reason: `${capability}_route_unconfigured` };
133
+ }
134
+ return { ready: true };
135
+ }
136
+ function redactSecrets(text, loaded) {
137
+ let output = text;
138
+ for (const instance of loaded.instances) {
139
+ const secret = instance.apiKey?.trim();
140
+ if (secret) {
141
+ output = output.split(secret).join("[REDACTED]");
142
+ }
143
+ }
144
+ return output;
145
+ }
146
+ function extractAttempts(loaded, envelope) {
147
+ const debugAttempts = envelope.debug?.attempts;
148
+ if (Array.isArray(debugAttempts) && debugAttempts.length > 0) {
149
+ return debugAttempts.map((item) => {
150
+ const record = {
151
+ provider: item.provider.id,
152
+ providerType: item.provider.type,
153
+ status: item.status === "success" ? "ok" : "failed",
154
+ durationMs: Math.max(0, Math.round(item.durationMs)),
155
+ };
156
+ if (item.error?.code)
157
+ record.errorCode = item.error.code;
158
+ if (item.error?.message) {
159
+ record.errorMessage = redactSecrets(item.error.message, loaded);
160
+ }
161
+ if (item.error?.httpStatus !== undefined) {
162
+ record.httpStatus = item.error.httpStatus;
163
+ }
164
+ return record;
165
+ });
166
+ }
167
+ if (!envelope.ok &&
168
+ "attempts" in envelope &&
169
+ Array.isArray(envelope.attempts)) {
170
+ const byId = new Map(loaded.instances.map((instance) => [instance.id, instance]));
171
+ return envelope.attempts.map((item) => {
172
+ const instance = byId.get(item.provider);
173
+ const skipped = item.code === "provider_unavailable";
174
+ const record = {
175
+ provider: item.provider,
176
+ ...(instance ? { providerType: instance.type } : {}),
177
+ status: skipped ? "skipped" : "failed",
178
+ durationMs: 0,
179
+ errorCode: item.code,
180
+ };
181
+ if (item.httpStatus !== undefined) {
182
+ record.httpStatus = item.httpStatus;
183
+ }
184
+ return record;
185
+ });
186
+ }
187
+ if (envelope.ok && "provider" in envelope) {
188
+ const instance = loaded.instances.find((candidate) => candidate.id === envelope.provider);
189
+ return [
190
+ {
191
+ provider: envelope.provider,
192
+ ...(instance ? { providerType: instance.type } : {}),
193
+ status: "ok",
194
+ durationMs: 0,
195
+ },
196
+ ];
197
+ }
198
+ return [];
199
+ }
200
+ function classifyFailure(loaded, failure, capability) {
201
+ const attempts = failure.attempts ?? [];
202
+ let chosen;
203
+ for (let index = attempts.length - 1; index >= 0; index--) {
204
+ const attempt = attempts[index];
205
+ if (!attempt || attempt.code === "provider_unavailable")
206
+ continue;
207
+ chosen = attempt;
208
+ break;
209
+ }
210
+ const instance = chosen
211
+ ? loaded.instances.find((candidate) => candidate.id === chosen.provider)
212
+ : undefined;
213
+ const directHttp = instance?.type === "http";
214
+ const classified = chosen
215
+ ? { code: chosen.code, httpStatus: chosen.httpStatus }
216
+ : { code: failure.code };
217
+ const { code, httpStatus } = classified;
218
+ if (code === "quota_exceeded" || httpStatus === 402)
219
+ return quotaError();
220
+ if (code === "rate_limited" || httpStatus === 429 || httpStatus === 425)
221
+ return rateLimitError();
222
+ if (code === "timeout" ||
223
+ code === "aborted" ||
224
+ httpStatus === 408 ||
225
+ httpStatus === 504)
226
+ return timeoutError();
227
+ if (directHttp) {
228
+ // Direct target failures are page-level unavailability, never gateway auth.
229
+ return notFoundError();
230
+ }
231
+ if (code === "no_usable_content" ||
232
+ code === "unsupported_content" ||
233
+ code === "response_too_large")
234
+ return notFoundError();
235
+ if (code === "auth_error")
236
+ return serverError("provider_auth_error");
237
+ if (code === "config_error" || code === "invalid_input")
238
+ return serverError("provider_config_error");
239
+ // A cloud extract provider reporting a page-level 4xx means there is no
240
+ // usable document for the target, not a gateway or credential failure.
241
+ if (capability === "extract" &&
242
+ httpStatus !== undefined &&
243
+ httpStatus >= 400 &&
244
+ httpStatus < 500)
245
+ return notFoundError();
246
+ if (code === "provider_unavailable" ||
247
+ code === "provider_exhausted" ||
248
+ code === "provider_unknown" ||
249
+ code === "provider_disabled")
250
+ return serverError("no_provider_available");
251
+ if (code === "network_error" || code === "provider_error")
252
+ return serverError("provider_error");
253
+ return serverError("provider_error");
254
+ }
255
+ function successData(envelope) {
256
+ if (!envelope.ok || !("data" in envelope))
257
+ return undefined;
258
+ return envelope.data;
259
+ }
260
+ function failureOf(envelope) {
261
+ if (envelope.ok)
262
+ return { code: "provider_error" };
263
+ return {
264
+ code: envelope.error.code,
265
+ attempts: "attempts" in envelope
266
+ ? envelope.attempts
267
+ : undefined,
268
+ };
269
+ }
270
+ function lastAttemptProvider(failure) {
271
+ const attempts = failure.attempts ?? [];
272
+ for (let index = attempts.length - 1; index >= 0; index--) {
273
+ const attempt = attempts[index];
274
+ if (!attempt || attempt.code === "provider_unavailable")
275
+ continue;
276
+ return attempt.provider;
277
+ }
278
+ return undefined;
279
+ }
280
+ function mapHit(hit) {
281
+ return {
282
+ rerank_score: 0,
283
+ title: hit.title,
284
+ url: hit.url,
285
+ snippet: hit.snippet,
286
+ summary: hit.snippet,
287
+ content: "",
288
+ site_name: null,
289
+ site_icon: null,
290
+ date: null,
291
+ authority: -1,
292
+ };
293
+ }
294
+ export function createGatewayService(options) {
295
+ const transport = options.transport;
296
+ const now = options.now ?? (() => performance.now());
297
+ const limits = {
298
+ ...GATEWAY_DEFAULT_LIMITS,
299
+ ...(options.limits ?? {}),
300
+ };
301
+ let currentLoaded = options.loaded;
302
+ let currentExtractLoaded = deriveExtractConfig(currentLoaded, limits);
303
+ let currentPreflight = preflightOverride(currentLoaded, limits);
304
+ let currentReadiness = checkGatewayReadiness(currentLoaded);
305
+ function fail(loaded, envelope, capability) {
306
+ const failure = failureOf(envelope);
307
+ const error = classifyFailure(loaded, failure, capability);
308
+ const provider = lastAttemptProvider(failure);
309
+ error.provider = provider;
310
+ error.trace = {
311
+ ...(provider ? { provider } : {}),
312
+ attempts: extractAttempts(loaded, envelope),
313
+ };
314
+ throw error;
315
+ }
316
+ async function readContent(loaded, extractLoaded, preflight, hits, clientSignal, deadline, signal) {
317
+ const backfillStartedAt = now();
318
+ const contents = new Array(hits.length).fill("");
319
+ const items = hits.map((hit, index) => ({
320
+ rank: index + 1,
321
+ url: hit.url,
322
+ status: "skipped",
323
+ durationMs: 0,
324
+ }));
325
+ let nextIndex = 0;
326
+ const worker = async () => {
327
+ while (!signal.aborted) {
328
+ const index = nextIndex++;
329
+ const hit = hits[index];
330
+ if (!hit)
331
+ return;
332
+ const remaining = deadline - now();
333
+ if (remaining <= 0)
334
+ return;
335
+ const itemStartedAt = now();
336
+ const itemTimeoutMs = Math.min(limits.contentItemTimeoutMs, remaining);
337
+ const itemTimeout = new AbortController();
338
+ const timer = setTimeout(() => itemTimeout.abort(), Math.max(1, itemTimeoutMs));
339
+ try {
340
+ const envelope = await executeExtract({ url: hit.url, provider: "auto", timeoutMs: itemTimeoutMs }, {
341
+ loaded: extractLoaded,
342
+ transport,
343
+ now,
344
+ debug: true,
345
+ signal: AbortSignal.any([signal, itemTimeout.signal]),
346
+ extractPreflight: preflight,
347
+ });
348
+ const itemDurationMs = Math.max(0, Math.round(now() - itemStartedAt));
349
+ const itemAttempts = extractAttempts(loaded, envelope);
350
+ // A late success that races the item deadline, the backfill budget
351
+ // or cancellation must not be written back; the core success path
352
+ // does not re-check cancellation after an await.
353
+ const document = successData(envelope)?.document;
354
+ const timedOut = signal.aborted ||
355
+ itemTimeout.signal.aborted ||
356
+ clientSignal.aborted ||
357
+ now() >= deadline;
358
+ if (timedOut || !document) {
359
+ const failure = failureOf(envelope);
360
+ const failedProvider = lastAttemptProvider(failure) ??
361
+ (envelope.ok && "provider" in envelope
362
+ ? envelope.provider
363
+ : undefined);
364
+ items[index] = {
365
+ rank: index + 1,
366
+ url: hit.url,
367
+ status: "failed",
368
+ durationMs: itemDurationMs,
369
+ ...(failedProvider ? { provider: failedProvider } : {}),
370
+ errorCode: timedOut ? "timeout" : failure.code,
371
+ ...(itemAttempts.length > 0 ? { attempts: itemAttempts } : {}),
372
+ };
373
+ continue;
374
+ }
375
+ const content = document.content;
376
+ contents[index] = content;
377
+ const provider = envelope.ok && "provider" in envelope
378
+ ? envelope.provider
379
+ : undefined;
380
+ items[index] = {
381
+ rank: index + 1,
382
+ url: hit.url,
383
+ status: "ok",
384
+ durationMs: itemDurationMs,
385
+ contentChars: Array.from(content).length,
386
+ ...(provider ? { provider } : {}),
387
+ ...(itemAttempts.length > 0 ? { attempts: itemAttempts } : {}),
388
+ };
389
+ }
390
+ catch {
391
+ // Best-effort backfill: failures leave the content empty.
392
+ const itemDurationMs = Math.max(0, Math.round(now() - itemStartedAt));
393
+ items[index] = {
394
+ rank: index + 1,
395
+ url: hit.url,
396
+ status: "failed",
397
+ durationMs: itemDurationMs,
398
+ errorCode: "provider_error",
399
+ };
400
+ }
401
+ finally {
402
+ clearTimeout(timer);
403
+ }
404
+ }
405
+ };
406
+ await Promise.all([worker(), worker()]);
407
+ let attemptedCount = 0;
408
+ let succeededCount = 0;
409
+ let failedCount = 0;
410
+ let skippedCount = 0;
411
+ for (const item of items) {
412
+ if (item.status === "ok") {
413
+ attemptedCount += 1;
414
+ succeededCount += 1;
415
+ }
416
+ else if (item.status === "failed") {
417
+ attemptedCount += 1;
418
+ failedCount += 1;
419
+ }
420
+ else {
421
+ skippedCount += 1;
422
+ }
423
+ }
424
+ return {
425
+ contents,
426
+ summary: {
427
+ requestedCount: hits.length,
428
+ attemptedCount,
429
+ succeededCount,
430
+ failedCount,
431
+ skippedCount,
432
+ durationMs: Math.max(0, Math.round(now() - backfillStartedAt)),
433
+ items,
434
+ },
435
+ };
436
+ }
437
+ return {
438
+ readiness: () => currentReadiness,
439
+ getLoaded: () => currentLoaded,
440
+ setLoaded(next) {
441
+ currentLoaded = next;
442
+ currentExtractLoaded = deriveExtractConfig(next, limits);
443
+ currentPreflight = preflightOverride(next, limits);
444
+ currentReadiness = checkGatewayReadiness(next);
445
+ return currentReadiness;
446
+ },
447
+ async search(request, clientSignal, observer) {
448
+ if (clientSignal.aborted)
449
+ throw new GatewayClientAbort();
450
+ const loaded = currentLoaded;
451
+ const extractLoaded = currentExtractLoaded;
452
+ const preflight = currentPreflight;
453
+ const stageTimeoutMs = loaded.app.search.timeoutMs;
454
+ const deadline = now() + stageTimeoutMs;
455
+ const stageTimeout = new AbortController();
456
+ const stageTimer = setTimeout(() => stageTimeout.abort(), Math.max(1, stageTimeoutMs));
457
+ let envelope;
458
+ try {
459
+ envelope = await executeSearch({
460
+ query: request.query,
461
+ provider: "auto",
462
+ limit: request.count,
463
+ includeDomains: [],
464
+ excludeDomains: [],
465
+ }, {
466
+ loaded,
467
+ transport,
468
+ now,
469
+ debug: true,
470
+ signal: AbortSignal.any([clientSignal, stageTimeout.signal]),
471
+ });
472
+ }
473
+ finally {
474
+ clearTimeout(stageTimer);
475
+ }
476
+ if (clientSignal.aborted)
477
+ throw new GatewayClientAbort();
478
+ const searchAttempts = extractAttempts(loaded, envelope);
479
+ if (stageTimeout.signal.aborted || now() >= deadline) {
480
+ const err = timeoutError();
481
+ const provider = lastAttemptProvider(failureOf(envelope));
482
+ err.provider = provider;
483
+ err.trace = {
484
+ ...(provider ? { provider } : {}),
485
+ attempts: searchAttempts,
486
+ };
487
+ throw err;
488
+ }
489
+ const data = successData(envelope);
490
+ if (!data)
491
+ fail(loaded, envelope, "search");
492
+ const provider = envelope.ok && "provider" in envelope ? envelope.provider : "";
493
+ const hits = data.results;
494
+ const results = hits.map(mapHit);
495
+ if (!request.need_content || results.length === 0) {
496
+ if (provider) {
497
+ observer?.onSuccess?.({
498
+ provider,
499
+ trace: {
500
+ provider,
501
+ attempts: searchAttempts,
502
+ ...(request.need_content
503
+ ? {
504
+ contentBackfill: {
505
+ requestedCount: 0,
506
+ attemptedCount: 0,
507
+ succeededCount: 0,
508
+ failedCount: 0,
509
+ skippedCount: 0,
510
+ durationMs: 0,
511
+ items: [],
512
+ },
513
+ }
514
+ : {}),
515
+ },
516
+ });
517
+ }
518
+ return { results };
519
+ }
520
+ if (clientSignal.aborted)
521
+ throw new GatewayClientAbort();
522
+ const backfillDeadline = now() + limits.contentBudgetMs;
523
+ const backfillTimeout = new AbortController();
524
+ const backfillTimer = setTimeout(() => backfillTimeout.abort(), Math.max(1, limits.contentBudgetMs));
525
+ let backfillResult;
526
+ try {
527
+ backfillResult = await readContent(loaded, extractLoaded, preflight, hits, clientSignal, backfillDeadline, AbortSignal.any([clientSignal, backfillTimeout.signal]));
528
+ }
529
+ finally {
530
+ clearTimeout(backfillTimer);
531
+ }
532
+ if (clientSignal.aborted)
533
+ throw new GatewayClientAbort();
534
+ // The search deadline is intentionally not a parent of the backfill
535
+ // budget; it must not expire the independent backfill window.
536
+ for (const [index, result] of results.entries())
537
+ result.content = backfillResult.contents[index] ?? "";
538
+ if (provider) {
539
+ observer?.onSuccess?.({
540
+ provider,
541
+ trace: {
542
+ provider,
543
+ attempts: searchAttempts,
544
+ contentBackfill: backfillResult.summary,
545
+ },
546
+ });
547
+ }
548
+ return { results };
549
+ },
550
+ async fetch(request, clientSignal, observer) {
551
+ if (clientSignal.aborted)
552
+ throw new GatewayClientAbort();
553
+ const loaded = currentLoaded;
554
+ const extractLoaded = currentExtractLoaded;
555
+ const preflight = currentPreflight;
556
+ const stageTimeoutMs = loaded.app.extract.timeoutMs;
557
+ const deadline = now() + stageTimeoutMs;
558
+ const stageTimeout = new AbortController();
559
+ const stageTimer = setTimeout(() => stageTimeout.abort(), Math.max(1, stageTimeoutMs));
560
+ let envelope;
561
+ try {
562
+ envelope = await executeExtract({ url: request.url, provider: "auto" }, {
563
+ loaded: extractLoaded,
564
+ transport,
565
+ now,
566
+ debug: true,
567
+ signal: AbortSignal.any([clientSignal, stageTimeout.signal]),
568
+ extractPreflight: preflight,
569
+ });
570
+ }
571
+ finally {
572
+ clearTimeout(stageTimer);
573
+ }
574
+ if (clientSignal.aborted)
575
+ throw new GatewayClientAbort();
576
+ const fetchAttempts = extractAttempts(loaded, envelope);
577
+ if (stageTimeout.signal.aborted || now() >= deadline) {
578
+ const err = timeoutError();
579
+ const provider = lastAttemptProvider(failureOf(envelope));
580
+ err.provider = provider;
581
+ err.trace = {
582
+ ...(provider ? { provider } : {}),
583
+ attempts: fetchAttempts,
584
+ };
585
+ throw err;
586
+ }
587
+ const document = successData(envelope)?.document;
588
+ if (!document)
589
+ fail(loaded, envelope, "extract");
590
+ if (envelope.ok && "provider" in envelope) {
591
+ observer?.onSuccess?.({
592
+ provider: envelope.provider,
593
+ trace: {
594
+ provider: envelope.provider,
595
+ attempts: fetchAttempts,
596
+ },
597
+ });
598
+ }
599
+ const response = {
600
+ title: document.title ?? "",
601
+ content: document.content,
602
+ };
603
+ return response;
604
+ },
605
+ };
606
+ }
607
+ //# sourceMappingURL=service.js.map