web-access-cli 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +270 -0
- package/README_CN.md +268 -0
- package/THIRD_PARTY_NOTICES.md +48 -0
- package/dist/cli.js +197 -0
- package/dist/cli.js.map +1 -0
- package/dist/config/config.js +463 -0
- package/dist/config/config.js.map +1 -0
- package/dist/config/edit.js +126 -0
- package/dist/config/edit.js.map +1 -0
- package/dist/core/diagnostics.js +94 -0
- package/dist/core/diagnostics.js.map +1 -0
- package/dist/core/errors.js +47 -0
- package/dist/core/errors.js.map +1 -0
- package/dist/core/router.js +320 -0
- package/dist/core/router.js.map +1 -0
- package/dist/core/schema.js +120 -0
- package/dist/core/schema.js.map +1 -0
- package/dist/core/types.js +22 -0
- package/dist/core/types.js.map +1 -0
- package/dist/providers/anysearch.js +225 -0
- package/dist/providers/anysearch.js.map +1 -0
- package/dist/providers/common.js +210 -0
- package/dist/providers/common.js.map +1 -0
- package/dist/providers/extract.js +155 -0
- package/dist/providers/extract.js.map +1 -0
- package/dist/providers/registry.js +31 -0
- package/dist/providers/registry.js.map +1 -0
- package/dist/providers/rsc.js +109 -0
- package/dist/providers/rsc.js.map +1 -0
- package/dist/providers/search.js +178 -0
- package/dist/providers/search.js.map +1 -0
- package/dist/providers/xcrawl.js +170 -0
- package/dist/providers/xcrawl.js.map +1 -0
- package/dist/transport/http.js +175 -0
- package/dist/transport/http.js.map +1 -0
- package/dist/version.js +2 -0
- package/dist/version.js.map +1 -0
- package/package.json +61 -0
- package/schemas/config.schema.json +210 -0
- package/schemas/extractRequest.schema.json +21 -0
- package/schemas/output.schema.json +435 -0
- package/schemas/searchRequest.schema.json +57 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"router.js","sourceRoot":"","sources":["../../src/core/router.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
import { Type } from "typebox";
|
|
2
|
+
import { CAPABILITIES, COMMANDS, FRESHNESS_VALUES, PROVIDER_TYPES, SEARCH_FILTER_MODES, } from "./types.js";
|
|
3
|
+
const literalUnion = (values) => Type.Union(values.map((value) => Type.Literal(value)));
|
|
4
|
+
export const ProviderTypeSchema = literalUnion(PROVIDER_TYPES);
|
|
5
|
+
const NonSearchFilterProviderTypeSchema = literalUnion(PROVIDER_TYPES.filter((value) => value !== "anysearch" && value !== "xcrawl"));
|
|
6
|
+
const SearchFilterProviderTypeSchema = Type.Union([
|
|
7
|
+
Type.Literal("anysearch"),
|
|
8
|
+
Type.Literal("xcrawl"),
|
|
9
|
+
]);
|
|
10
|
+
export const CapabilitySchema = literalUnion(CAPABILITIES);
|
|
11
|
+
export const CommandSchema = literalUnion(COMMANDS);
|
|
12
|
+
export const FreshnessSchema = literalUnion(FRESHNESS_VALUES);
|
|
13
|
+
export const SearchFilterModeSchema = literalUnion(SEARCH_FILTER_MODES);
|
|
14
|
+
const ProviderInstanceFields = {
|
|
15
|
+
id: Type.String({ pattern: "^[a-z][a-z0-9_-]{0,63}$" }),
|
|
16
|
+
apiKey: Type.Optional(Type.String()),
|
|
17
|
+
apiKeyEnv: Type.Optional(Type.String({ pattern: "^[A-Za-z_][A-Za-z0-9_]*$" })),
|
|
18
|
+
baseUrl: Type.Optional(Type.String({ format: "uri" })),
|
|
19
|
+
baseUrlEnv: Type.Optional(Type.String({ pattern: "^[A-Za-z_][A-Za-z0-9_]*$" })),
|
|
20
|
+
headers: Type.Optional(Type.Record(Type.String({ pattern: "^[^\\r\\n]+$" }), Type.String({ pattern: "^[^\\r\\n]*$" }), { additionalProperties: false })),
|
|
21
|
+
};
|
|
22
|
+
export const ProviderInstanceConfigSchema = Type.Union([
|
|
23
|
+
Type.Object({
|
|
24
|
+
...ProviderInstanceFields,
|
|
25
|
+
type: NonSearchFilterProviderTypeSchema,
|
|
26
|
+
}, { additionalProperties: false }),
|
|
27
|
+
Type.Object({
|
|
28
|
+
...ProviderInstanceFields,
|
|
29
|
+
type: SearchFilterProviderTypeSchema,
|
|
30
|
+
searchFilterMode: Type.Optional(SearchFilterModeSchema),
|
|
31
|
+
}, { additionalProperties: false }),
|
|
32
|
+
]);
|
|
33
|
+
export const SearchConfigSchema = Type.Object({
|
|
34
|
+
providers: Type.Optional(Type.Array(Type.String({ pattern: "^[a-z][a-z0-9_-]{0,63}$" }))),
|
|
35
|
+
limit: Type.Optional(Type.Integer({ minimum: 1, maximum: 20 })),
|
|
36
|
+
timeoutMs: Type.Optional(Type.Integer({ minimum: 1 })),
|
|
37
|
+
attemptTimeoutMs: Type.Optional(Type.Integer({ minimum: 1 })),
|
|
38
|
+
maxResponseBytes: Type.Optional(Type.Integer({ minimum: 1 })),
|
|
39
|
+
}, { additionalProperties: false });
|
|
40
|
+
export const ExtractConfigSchema = Type.Object({
|
|
41
|
+
providers: Type.Optional(Type.Array(Type.String({ pattern: "^[a-z][a-z0-9_-]{0,63}$" }))),
|
|
42
|
+
timeoutMs: Type.Optional(Type.Integer({ minimum: 1 })),
|
|
43
|
+
attemptTimeoutMs: Type.Optional(Type.Integer({ minimum: 1 })),
|
|
44
|
+
maxResponseBytes: Type.Optional(Type.Integer({ minimum: 1 })),
|
|
45
|
+
minContentCharacters: Type.Optional(Type.Integer({ minimum: 1 })),
|
|
46
|
+
}, { additionalProperties: false });
|
|
47
|
+
export const AppConfigSchema = Type.Object({
|
|
48
|
+
$schema: Type.Optional(Type.String({ format: "uri-reference" })),
|
|
49
|
+
providers: Type.Optional(Type.Array(ProviderInstanceConfigSchema)),
|
|
50
|
+
search: Type.Optional(SearchConfigSchema),
|
|
51
|
+
extract: Type.Optional(ExtractConfigSchema),
|
|
52
|
+
}, { additionalProperties: false });
|
|
53
|
+
export const SearchRequestSchema = Type.Object({
|
|
54
|
+
query: Type.String({ minLength: 1 }),
|
|
55
|
+
provider: Type.String({ minLength: 1 }),
|
|
56
|
+
limit: Type.Integer({ minimum: 1, maximum: 20 }),
|
|
57
|
+
freshness: Type.Optional(FreshnessSchema),
|
|
58
|
+
includeDomains: Type.Array(Type.String()),
|
|
59
|
+
excludeDomains: Type.Array(Type.String()),
|
|
60
|
+
timeoutMs: Type.Optional(Type.Integer({ minimum: 1 })),
|
|
61
|
+
});
|
|
62
|
+
export const ExtractRequestSchema = Type.Object({
|
|
63
|
+
url: Type.String({ format: "uri" }),
|
|
64
|
+
provider: Type.String({ minLength: 1 }),
|
|
65
|
+
timeoutMs: Type.Optional(Type.Integer({ minimum: 1 })),
|
|
66
|
+
});
|
|
67
|
+
export const ProviderRefSchema = Type.Object({
|
|
68
|
+
id: Type.String(),
|
|
69
|
+
type: ProviderTypeSchema,
|
|
70
|
+
});
|
|
71
|
+
export const SearchHitSchema = Type.Object({
|
|
72
|
+
rank: Type.Integer({ minimum: 1 }),
|
|
73
|
+
title: Type.String(),
|
|
74
|
+
url: Type.String({ format: "uri" }),
|
|
75
|
+
snippet: Type.String(),
|
|
76
|
+
});
|
|
77
|
+
export const DocumentSchema = Type.Object({
|
|
78
|
+
sourceUrl: Type.String({ format: "uri" }),
|
|
79
|
+
title: Type.String(),
|
|
80
|
+
content: Type.String(),
|
|
81
|
+
contentType: Type.Literal("text/markdown"),
|
|
82
|
+
});
|
|
83
|
+
export const ErrorInfoSchema = Type.Object({
|
|
84
|
+
code: Type.String(),
|
|
85
|
+
message: Type.String(),
|
|
86
|
+
retryable: Type.Boolean(),
|
|
87
|
+
provider: Type.Optional(ProviderRefSchema),
|
|
88
|
+
httpStatus: Type.Optional(Type.Integer()),
|
|
89
|
+
details: Type.Optional(Type.Unknown()),
|
|
90
|
+
});
|
|
91
|
+
export const AttemptSchema = Type.Object({
|
|
92
|
+
provider: ProviderRefSchema,
|
|
93
|
+
status: Type.Union([Type.Literal("success"), Type.Literal("failed")]),
|
|
94
|
+
durationMs: Type.Integer({ minimum: 0 }),
|
|
95
|
+
error: Type.Optional(ErrorInfoSchema),
|
|
96
|
+
});
|
|
97
|
+
export const OutputEnvelopeSchema = Type.Object({
|
|
98
|
+
schemaVersion: Type.Literal(1),
|
|
99
|
+
ok: Type.Boolean(),
|
|
100
|
+
command: Type.Union([CommandSchema, Type.Null()]),
|
|
101
|
+
durationMs: Type.Integer({ minimum: 0 }),
|
|
102
|
+
request: Type.Optional(Type.Unknown()),
|
|
103
|
+
provider: Type.Optional(ProviderRefSchema),
|
|
104
|
+
attempts: Type.Optional(Type.Array(AttemptSchema)),
|
|
105
|
+
data: Type.Optional(Type.Unknown()),
|
|
106
|
+
raw: Type.Optional(Type.Unknown()),
|
|
107
|
+
error: Type.Optional(ErrorInfoSchema),
|
|
108
|
+
partial: Type.Optional(Type.Object({
|
|
109
|
+
provider: ProviderRefSchema,
|
|
110
|
+
data: Type.Object({ document: DocumentSchema }),
|
|
111
|
+
raw: Type.Unknown(),
|
|
112
|
+
})),
|
|
113
|
+
});
|
|
114
|
+
export const SchemaDocuments = {
|
|
115
|
+
config: AppConfigSchema,
|
|
116
|
+
output: OutputEnvelopeSchema,
|
|
117
|
+
searchRequest: SearchRequestSchema,
|
|
118
|
+
extractRequest: ExtractRequestSchema,
|
|
119
|
+
};
|
|
120
|
+
//# sourceMappingURL=schema.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"schema.js","sourceRoot":"","sources":["../../src/core/schema.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
export const PROVIDER_TYPES = [
|
|
2
|
+
"tavily",
|
|
3
|
+
"exa",
|
|
4
|
+
"brave",
|
|
5
|
+
"searxng",
|
|
6
|
+
"firecrawl",
|
|
7
|
+
"jina",
|
|
8
|
+
"http",
|
|
9
|
+
"anysearch",
|
|
10
|
+
"xcrawl",
|
|
11
|
+
];
|
|
12
|
+
export const SEARCH_FILTER_MODES = ["strict", "best_effort"];
|
|
13
|
+
export const CAPABILITIES = ["search", "extract"];
|
|
14
|
+
export const COMMANDS = [
|
|
15
|
+
"search",
|
|
16
|
+
"extract",
|
|
17
|
+
"providers",
|
|
18
|
+
"doctor",
|
|
19
|
+
"config.edit",
|
|
20
|
+
];
|
|
21
|
+
export const FRESHNESS_VALUES = ["day", "month", "year"];
|
|
22
|
+
//# sourceMappingURL=types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/core/types.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,cAAc,GAAG;IAC7B,QAAQ;IACR,KAAK;IACL,OAAO;IACP,SAAS;IACT,WAAW;IACX,MAAM;IACN,MAAM;IACN,WAAW;IACX,QAAQ;CACC,CAAC;AAGX,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,QAAQ,EAAE,aAAa,CAAU,CAAC;AAGtE,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,QAAQ,EAAE,SAAS,CAAU,CAAC;AAG3D,MAAM,CAAC,MAAM,QAAQ,GAAG;IACvB,QAAQ;IACR,SAAS;IACT,WAAW;IACX,QAAQ;IACR,aAAa;CACJ,CAAC;AAGX,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,KAAK,EAAE,OAAO,EAAE,MAAM,CAAU,CAAC"}
|
|
@@ -0,0 +1,225 @@
|
|
|
1
|
+
import { redactText, WebAccessError } from "../core/errors.js";
|
|
2
|
+
import { buildEndpoint } from "../transport/http.js";
|
|
3
|
+
import { VERSION } from "../version.js";
|
|
4
|
+
import { freshnessStartDate, normalizeHits, parseJsonResponse, providerHeaders, ref, requireBaseUrl, searchQueryWithDomains, } from "./common.js";
|
|
5
|
+
function requestBody(data) {
|
|
6
|
+
return JSON.stringify(data);
|
|
7
|
+
}
|
|
8
|
+
function queryWithFilters(request) {
|
|
9
|
+
const parts = [
|
|
10
|
+
searchQueryWithDomains(request.query, request.includeDomains, request.excludeDomains),
|
|
11
|
+
];
|
|
12
|
+
if (request.instance.searchFilterMode === "best_effort" && request.freshness)
|
|
13
|
+
parts.push(`after:${freshnessStartDate(request.freshness)}`);
|
|
14
|
+
return parts.join(" ");
|
|
15
|
+
}
|
|
16
|
+
function upstreamMessage(value) {
|
|
17
|
+
if (typeof value === "string")
|
|
18
|
+
return value.slice(0, 500);
|
|
19
|
+
if (value && typeof value === "object" && !Array.isArray(value)) {
|
|
20
|
+
const record = value;
|
|
21
|
+
for (const key of ["message", "error", "msg"]) {
|
|
22
|
+
if (typeof record[key] === "string")
|
|
23
|
+
return record[key].slice(0, 500);
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
return "上游返回错误";
|
|
27
|
+
}
|
|
28
|
+
function sensitiveValues(value) {
|
|
29
|
+
const values = [];
|
|
30
|
+
const sensitive = /^(?:auto[_-]?registered|api[_-]?key|apikey|password|username|user|email|access[_-]?token|accesstoken|refresh[_-]?token|refreshtoken|authorization|cookie|client[_-]?secret|clientsecret)$/i;
|
|
31
|
+
const visit = (current, key = "") => {
|
|
32
|
+
if (typeof current === "string" &&
|
|
33
|
+
sensitive.test(key) &&
|
|
34
|
+
current.length >= 4)
|
|
35
|
+
values.push(current);
|
|
36
|
+
else if (Array.isArray(current)) {
|
|
37
|
+
for (const item of current)
|
|
38
|
+
visit(item, key);
|
|
39
|
+
}
|
|
40
|
+
else if (current && typeof current === "object") {
|
|
41
|
+
for (const [name, item] of Object.entries(current))
|
|
42
|
+
visit(item, name);
|
|
43
|
+
}
|
|
44
|
+
};
|
|
45
|
+
visit(value);
|
|
46
|
+
return values;
|
|
47
|
+
}
|
|
48
|
+
function statusFailure(status, body, request) {
|
|
49
|
+
let parsedBody = body;
|
|
50
|
+
try {
|
|
51
|
+
parsedBody = JSON.parse(body);
|
|
52
|
+
}
|
|
53
|
+
catch {
|
|
54
|
+
// 保留非 JSON 错误文本。
|
|
55
|
+
}
|
|
56
|
+
const message = redactText(upstreamMessage(parsedBody), [
|
|
57
|
+
...sensitiveValues(parsedBody),
|
|
58
|
+
request.instance.apiKey,
|
|
59
|
+
]);
|
|
60
|
+
let code;
|
|
61
|
+
let retryable = false;
|
|
62
|
+
if (status === 401 || status === 403)
|
|
63
|
+
code = "auth_error";
|
|
64
|
+
else if (status === 402) {
|
|
65
|
+
code = "quota_exceeded";
|
|
66
|
+
retryable = true;
|
|
67
|
+
}
|
|
68
|
+
else if (status === 429) {
|
|
69
|
+
code = "rate_limited";
|
|
70
|
+
retryable = true;
|
|
71
|
+
}
|
|
72
|
+
else if (status === 504) {
|
|
73
|
+
code = "timeout";
|
|
74
|
+
retryable = true;
|
|
75
|
+
}
|
|
76
|
+
else if (status === 415)
|
|
77
|
+
code = "unsupported_content";
|
|
78
|
+
else {
|
|
79
|
+
code = "provider_error";
|
|
80
|
+
retryable = status >= 500;
|
|
81
|
+
}
|
|
82
|
+
return new WebAccessError(code, `${request.instance.id} 返回 HTTP ${status}${message ? `: ${message}` : ""}`, {
|
|
83
|
+
provider: ref(request.instance),
|
|
84
|
+
httpStatus: status,
|
|
85
|
+
retryable,
|
|
86
|
+
raw: parsedBody,
|
|
87
|
+
});
|
|
88
|
+
}
|
|
89
|
+
function assertHttp(response, request) {
|
|
90
|
+
if (response.status < 200 || response.status >= 300)
|
|
91
|
+
throw statusFailure(response.status, response.body, request);
|
|
92
|
+
}
|
|
93
|
+
function resultData(parsed, request) {
|
|
94
|
+
const data = parsed.data;
|
|
95
|
+
if (!data || typeof data !== "object" || Array.isArray(data))
|
|
96
|
+
throw new WebAccessError("invalid_response", "AnySearch 返回缺少 data", {
|
|
97
|
+
provider: ref(request.instance),
|
|
98
|
+
retryable: true,
|
|
99
|
+
raw: parsed,
|
|
100
|
+
});
|
|
101
|
+
return data;
|
|
102
|
+
}
|
|
103
|
+
function businessFailure(parsed, request) {
|
|
104
|
+
const codeValue = parsed.code;
|
|
105
|
+
const status = typeof codeValue === "number" ? codeValue : undefined;
|
|
106
|
+
let code = "provider_error";
|
|
107
|
+
let retryable = true;
|
|
108
|
+
if (status === 401 || status === 403) {
|
|
109
|
+
code = "auth_error";
|
|
110
|
+
retryable = false;
|
|
111
|
+
}
|
|
112
|
+
else if (status === 402)
|
|
113
|
+
code = "quota_exceeded";
|
|
114
|
+
else if (status === 429)
|
|
115
|
+
code = "rate_limited";
|
|
116
|
+
else if (status === 504)
|
|
117
|
+
code = "timeout";
|
|
118
|
+
const message = redactText(upstreamMessage(parsed.message ?? parsed.error), [
|
|
119
|
+
...sensitiveValues(parsed),
|
|
120
|
+
request.instance.apiKey,
|
|
121
|
+
]);
|
|
122
|
+
throw new WebAccessError(code, `${request.instance.id} 返回业务错误${status !== undefined ? ` ${status}` : ""}: ${message}`, { provider: ref(request.instance), retryable, raw: parsed });
|
|
123
|
+
}
|
|
124
|
+
const anysearch = {
|
|
125
|
+
type: "anysearch",
|
|
126
|
+
capabilities: ["search", "extract"],
|
|
127
|
+
isConfigured: (instance) => !!instance.baseUrl,
|
|
128
|
+
async search(request) {
|
|
129
|
+
if (request.freshness &&
|
|
130
|
+
(request.instance.searchFilterMode ?? "strict") === "strict")
|
|
131
|
+
throw new WebAccessError("provider_unavailable", "AnySearch 严格模式不支持 freshness", { provider: ref(request.instance), retryable: true });
|
|
132
|
+
const maxResults = request.includeDomains.length || request.excludeDomains.length
|
|
133
|
+
? 20
|
|
134
|
+
: request.limit;
|
|
135
|
+
const headers = providerHeaders(request.instance, {
|
|
136
|
+
"Content-Type": "application/json",
|
|
137
|
+
Accept: "application/json",
|
|
138
|
+
"X-Anysearch-Client": `web-access-cli/${VERSION}`,
|
|
139
|
+
});
|
|
140
|
+
headers["X-Anysearch-Client"] = `web-access-cli/${VERSION}`;
|
|
141
|
+
if (request.instance.apiKey)
|
|
142
|
+
headers.Authorization = `Bearer ${request.instance.apiKey}`;
|
|
143
|
+
const response = await request.transport.request(buildEndpoint(requireBaseUrl(request.instance), "v1/search"), {
|
|
144
|
+
method: "POST",
|
|
145
|
+
headers,
|
|
146
|
+
body: requestBody({
|
|
147
|
+
query: queryWithFilters(request),
|
|
148
|
+
max_results: maxResults,
|
|
149
|
+
format: "json",
|
|
150
|
+
}),
|
|
151
|
+
signal: request.signal,
|
|
152
|
+
maxResponseBytes: request.maxResponseBytes,
|
|
153
|
+
});
|
|
154
|
+
assertHttp(response, request);
|
|
155
|
+
const parsed = parseJsonResponse(response, request.instance);
|
|
156
|
+
if (parsed.code !== 0)
|
|
157
|
+
businessFailure(parsed, request);
|
|
158
|
+
const data = resultData(parsed, request);
|
|
159
|
+
if (!Array.isArray(data.results))
|
|
160
|
+
throw new WebAccessError("invalid_response", "AnySearch 返回缺少 data.results", { provider: ref(request.instance), retryable: true, raw: parsed });
|
|
161
|
+
return {
|
|
162
|
+
data: {
|
|
163
|
+
results: normalizeHits(data.results, request.limit, request.includeDomains, request.excludeDomains),
|
|
164
|
+
},
|
|
165
|
+
raw: parsed,
|
|
166
|
+
};
|
|
167
|
+
},
|
|
168
|
+
async extract(request) {
|
|
169
|
+
const headers = providerHeaders(request.instance, {
|
|
170
|
+
"Content-Type": "application/json",
|
|
171
|
+
Accept: "application/json",
|
|
172
|
+
"X-Anysearch-Client": `web-access-cli/${VERSION}`,
|
|
173
|
+
});
|
|
174
|
+
headers["X-Anysearch-Client"] = `web-access-cli/${VERSION}`;
|
|
175
|
+
if (request.instance.apiKey)
|
|
176
|
+
headers.Authorization = `Bearer ${request.instance.apiKey}`;
|
|
177
|
+
const response = await request.transport.request(buildEndpoint(requireBaseUrl(request.instance), "mcp"), {
|
|
178
|
+
method: "POST",
|
|
179
|
+
headers,
|
|
180
|
+
body: requestBody({
|
|
181
|
+
jsonrpc: "2.0",
|
|
182
|
+
id: 1,
|
|
183
|
+
method: "tools/call",
|
|
184
|
+
params: { name: "extract", arguments: { url: request.url } },
|
|
185
|
+
}),
|
|
186
|
+
signal: request.signal,
|
|
187
|
+
maxResponseBytes: request.maxResponseBytes,
|
|
188
|
+
});
|
|
189
|
+
assertHttp(response, request);
|
|
190
|
+
const parsed = parseJsonResponse(response, request.instance);
|
|
191
|
+
if (parsed.jsonrpc !== "2.0" || parsed.id !== 1)
|
|
192
|
+
throw new WebAccessError("invalid_response", "AnySearch JSON-RPC 响应格式无效", { provider: ref(request.instance), retryable: true, raw: parsed });
|
|
193
|
+
if (parsed.error !== undefined)
|
|
194
|
+
businessFailure(parsed, request);
|
|
195
|
+
const result = parsed.result;
|
|
196
|
+
if (!result || typeof result !== "object" || Array.isArray(result))
|
|
197
|
+
throw new WebAccessError("invalid_response", "AnySearch JSON-RPC 缺少 result", { provider: ref(request.instance), retryable: true, raw: parsed });
|
|
198
|
+
const resultRecord = result;
|
|
199
|
+
if (resultRecord.isError === true)
|
|
200
|
+
throw new WebAccessError("provider_error", `AnySearch extract 工具错误: ${upstreamMessage(resultRecord)}`, { provider: ref(request.instance), retryable: true, raw: parsed });
|
|
201
|
+
if (!Array.isArray(resultRecord.content))
|
|
202
|
+
throw new WebAccessError("invalid_response", "AnySearch JSON-RPC 缺少 content", { provider: ref(request.instance), retryable: true, raw: parsed });
|
|
203
|
+
const content = resultRecord.content
|
|
204
|
+
.filter((block) => !!block && typeof block === "object" && !Array.isArray(block))
|
|
205
|
+
.map((block) => (typeof block.text === "string" ? block.text.trim() : ""))
|
|
206
|
+
.filter(Boolean)
|
|
207
|
+
.join("\n\n");
|
|
208
|
+
if (!content)
|
|
209
|
+
throw new WebAccessError("no_usable_content", "AnySearch extract 没有返回正文", { provider: ref(request.instance), retryable: true, raw: parsed });
|
|
210
|
+
const title = /^#\s+(.+)$/m.exec(content)?.[1]?.trim() ?? "";
|
|
211
|
+
return {
|
|
212
|
+
data: {
|
|
213
|
+
document: {
|
|
214
|
+
sourceUrl: request.url,
|
|
215
|
+
title,
|
|
216
|
+
content,
|
|
217
|
+
contentType: "text/markdown",
|
|
218
|
+
},
|
|
219
|
+
},
|
|
220
|
+
raw: parsed,
|
|
221
|
+
};
|
|
222
|
+
},
|
|
223
|
+
};
|
|
224
|
+
export const ANYSEARCH_ADAPTER = anysearch;
|
|
225
|
+
//# sourceMappingURL=anysearch.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"anysearch.js","sourceRoot":"","sources":["../../src/providers/anysearch.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,210 @@
|
|
|
1
|
+
import { redactText, WebAccessError } from "../core/errors.js";
|
|
2
|
+
export function ref(instance) {
|
|
3
|
+
return { id: instance.id, type: instance.type };
|
|
4
|
+
}
|
|
5
|
+
export function requireCredential(instance) {
|
|
6
|
+
if (!instance.apiKey)
|
|
7
|
+
throw new WebAccessError("provider_unavailable", `${instance.id} 缺少 API key`, { provider: ref(instance) });
|
|
8
|
+
return instance.apiKey;
|
|
9
|
+
}
|
|
10
|
+
export function requireBaseUrl(instance) {
|
|
11
|
+
if (!instance.baseUrl)
|
|
12
|
+
throw new WebAccessError("provider_unavailable", `${instance.id} 缺少 baseUrl`, { provider: ref(instance) });
|
|
13
|
+
return instance.baseUrl;
|
|
14
|
+
}
|
|
15
|
+
export function classifyHttpFailure(response, instance, secrets = []) {
|
|
16
|
+
const status = response.status;
|
|
17
|
+
const body = redactText(response.body.slice(0, 500), secrets);
|
|
18
|
+
if (status === 401 || status === 403) {
|
|
19
|
+
return new WebAccessError("auth_error", `${instance.id} 返回 HTTP ${status}${body ? `: ${body}` : ""}`, {
|
|
20
|
+
provider: ref(instance),
|
|
21
|
+
httpStatus: status,
|
|
22
|
+
raw: parseRawBody(response.body),
|
|
23
|
+
});
|
|
24
|
+
}
|
|
25
|
+
if (status === 402) {
|
|
26
|
+
return new WebAccessError("quota_exceeded", `${instance.id} 返回 HTTP 402${body ? `: ${body}` : ""}`, {
|
|
27
|
+
provider: ref(instance),
|
|
28
|
+
httpStatus: status,
|
|
29
|
+
retryable: true,
|
|
30
|
+
raw: parseRawBody(response.body),
|
|
31
|
+
});
|
|
32
|
+
}
|
|
33
|
+
if (status === 408 || status === 425 || status === 429) {
|
|
34
|
+
return new WebAccessError("rate_limited", `${instance.id} 返回 HTTP ${status}${body ? `: ${body}` : ""}`, {
|
|
35
|
+
provider: ref(instance),
|
|
36
|
+
httpStatus: status,
|
|
37
|
+
retryable: true,
|
|
38
|
+
raw: parseRawBody(response.body),
|
|
39
|
+
});
|
|
40
|
+
}
|
|
41
|
+
return new WebAccessError(status >= 500 ? "provider_error" : "provider_error", `${instance.id} 返回 HTTP ${status}${body ? `: ${body}` : ""}`, {
|
|
42
|
+
provider: ref(instance),
|
|
43
|
+
httpStatus: status,
|
|
44
|
+
retryable: status >= 500,
|
|
45
|
+
raw: parseRawBody(response.body),
|
|
46
|
+
});
|
|
47
|
+
}
|
|
48
|
+
export function parseRawBody(text) {
|
|
49
|
+
try {
|
|
50
|
+
return JSON.parse(text);
|
|
51
|
+
}
|
|
52
|
+
catch {
|
|
53
|
+
return text;
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
export function parseJsonResponse(response, instance) {
|
|
57
|
+
if (!response.body.trim())
|
|
58
|
+
throw new WebAccessError("invalid_response", `${instance.id} 返回空响应`, {
|
|
59
|
+
provider: ref(instance),
|
|
60
|
+
httpStatus: response.status,
|
|
61
|
+
raw: response.body,
|
|
62
|
+
});
|
|
63
|
+
try {
|
|
64
|
+
const value = JSON.parse(response.body);
|
|
65
|
+
if (!value || typeof value !== "object" || Array.isArray(value))
|
|
66
|
+
throw new Error("JSON 根节点必须是对象");
|
|
67
|
+
return value;
|
|
68
|
+
}
|
|
69
|
+
catch (error) {
|
|
70
|
+
throw new WebAccessError("invalid_response", `${instance.id} 返回无效 JSON: ${error instanceof Error ? error.message : String(error)}`, {
|
|
71
|
+
provider: ref(instance),
|
|
72
|
+
httpStatus: response.status,
|
|
73
|
+
retryable: true,
|
|
74
|
+
raw: response.body,
|
|
75
|
+
});
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
export function assertOk(response, instance) {
|
|
79
|
+
if (!response.status || response.status < 200 || response.status >= 300)
|
|
80
|
+
throw classifyHttpFailure(response, instance, instance.apiKey ? [instance.apiKey] : []);
|
|
81
|
+
}
|
|
82
|
+
export function normalizeDomain(raw) {
|
|
83
|
+
let value = raw.trim().toLowerCase();
|
|
84
|
+
if (!value || /\s/.test(value))
|
|
85
|
+
throw new WebAccessError("invalid_input", `域名无效: ${raw}`);
|
|
86
|
+
try {
|
|
87
|
+
value = new URL(value.includes("://") ? value : `https://${value}`).hostname.toLowerCase();
|
|
88
|
+
}
|
|
89
|
+
catch {
|
|
90
|
+
throw new WebAccessError("invalid_input", `域名无效: ${raw}`);
|
|
91
|
+
}
|
|
92
|
+
value = value.replace(/^\.+|\.+$/g, "");
|
|
93
|
+
if (!value || value.includes("/") || value.includes(":"))
|
|
94
|
+
throw new WebAccessError("invalid_input", `域名无效: ${raw}`);
|
|
95
|
+
return value;
|
|
96
|
+
}
|
|
97
|
+
export function normalizeDomains(values) {
|
|
98
|
+
const result = [];
|
|
99
|
+
for (const value of values) {
|
|
100
|
+
const domain = normalizeDomain(value);
|
|
101
|
+
if (!result.includes(domain))
|
|
102
|
+
result.push(domain);
|
|
103
|
+
}
|
|
104
|
+
return result;
|
|
105
|
+
}
|
|
106
|
+
export function searchQueryWithDomains(query, includeDomains, excludeDomains) {
|
|
107
|
+
const parts = [query];
|
|
108
|
+
if (includeDomains.length === 1)
|
|
109
|
+
parts.push(`site:${includeDomains[0]}`);
|
|
110
|
+
else if (includeDomains.length > 1)
|
|
111
|
+
parts.push(`(${includeDomains.map((domain) => `site:${domain}`).join(" OR ")})`);
|
|
112
|
+
for (const domain of excludeDomains)
|
|
113
|
+
parts.push(`-site:${domain}`);
|
|
114
|
+
return parts.join(" ");
|
|
115
|
+
}
|
|
116
|
+
export function hostMatches(hostname, domain) {
|
|
117
|
+
const host = hostname.toLowerCase().replace(/\.$/, "");
|
|
118
|
+
return host === domain || host.endsWith(`.${domain}`);
|
|
119
|
+
}
|
|
120
|
+
export function urlMatchesDomains(url, includeDomains, excludeDomains) {
|
|
121
|
+
let hostname;
|
|
122
|
+
try {
|
|
123
|
+
const parsed = new URL(url);
|
|
124
|
+
if (parsed.protocol !== "http:" && parsed.protocol !== "https:")
|
|
125
|
+
return false;
|
|
126
|
+
hostname = parsed.hostname;
|
|
127
|
+
}
|
|
128
|
+
catch {
|
|
129
|
+
return false;
|
|
130
|
+
}
|
|
131
|
+
if (includeDomains.length > 0 &&
|
|
132
|
+
!includeDomains.some((domain) => hostMatches(hostname, domain)))
|
|
133
|
+
return false;
|
|
134
|
+
return !excludeDomains.some((domain) => hostMatches(hostname, domain));
|
|
135
|
+
}
|
|
136
|
+
export function normalizeHits(items, limit, includeDomains, excludeDomains) {
|
|
137
|
+
if (!Array.isArray(items))
|
|
138
|
+
return [];
|
|
139
|
+
const seen = new Set();
|
|
140
|
+
const result = [];
|
|
141
|
+
for (const item of items) {
|
|
142
|
+
if (!item || typeof item !== "object" || Array.isArray(item))
|
|
143
|
+
continue;
|
|
144
|
+
const raw = item;
|
|
145
|
+
if (typeof raw.url !== "string" ||
|
|
146
|
+
!urlMatchesDomains(raw.url, includeDomains, excludeDomains))
|
|
147
|
+
continue;
|
|
148
|
+
let url;
|
|
149
|
+
try {
|
|
150
|
+
const parsed = new URL(raw.url);
|
|
151
|
+
parsed.hash = "";
|
|
152
|
+
url = parsed.toString();
|
|
153
|
+
}
|
|
154
|
+
catch {
|
|
155
|
+
continue;
|
|
156
|
+
}
|
|
157
|
+
if (seen.has(url))
|
|
158
|
+
continue;
|
|
159
|
+
seen.add(url);
|
|
160
|
+
const title = typeof raw.title === "string" && raw.title.trim()
|
|
161
|
+
? raw.title.trim()
|
|
162
|
+
: url;
|
|
163
|
+
const snippet = typeof raw.snippet === "string"
|
|
164
|
+
? raw.snippet
|
|
165
|
+
: typeof raw.description === "string"
|
|
166
|
+
? raw.description
|
|
167
|
+
: typeof raw.content === "string"
|
|
168
|
+
? raw.content
|
|
169
|
+
: typeof raw.text === "string"
|
|
170
|
+
? raw.text
|
|
171
|
+
: Array.isArray(raw.highlights)
|
|
172
|
+
? raw.highlights
|
|
173
|
+
.filter((value) => typeof value === "string")
|
|
174
|
+
.join(" ")
|
|
175
|
+
: "";
|
|
176
|
+
result.push({
|
|
177
|
+
rank: result.length + 1,
|
|
178
|
+
title,
|
|
179
|
+
url,
|
|
180
|
+
snippet: snippet.replace(/\s+/g, " ").trim(),
|
|
181
|
+
});
|
|
182
|
+
if (result.length >= limit)
|
|
183
|
+
break;
|
|
184
|
+
}
|
|
185
|
+
return result;
|
|
186
|
+
}
|
|
187
|
+
export function freshnessStartDate(value, now = new Date()) {
|
|
188
|
+
const date = new Date(now);
|
|
189
|
+
if (value === "day")
|
|
190
|
+
date.setUTCDate(date.getUTCDate() - 1);
|
|
191
|
+
if (value === "month")
|
|
192
|
+
date.setUTCMonth(date.getUTCMonth() - 1);
|
|
193
|
+
if (value === "year")
|
|
194
|
+
date.setUTCFullYear(date.getUTCFullYear() - 1);
|
|
195
|
+
return date.toISOString().slice(0, 10);
|
|
196
|
+
}
|
|
197
|
+
export function providerHeaders(instance, generated) {
|
|
198
|
+
return { ...generated, ...instance.headers };
|
|
199
|
+
}
|
|
200
|
+
export function providerHeadersWithCredential(instance, generated) {
|
|
201
|
+
const headers = providerHeaders(instance, generated);
|
|
202
|
+
if (instance.apiKey) {
|
|
203
|
+
if (instance.type === "brave")
|
|
204
|
+
headers["X-Subscription-Token"] = instance.apiKey;
|
|
205
|
+
else
|
|
206
|
+
headers.Authorization = `Bearer ${instance.apiKey}`;
|
|
207
|
+
}
|
|
208
|
+
return headers;
|
|
209
|
+
}
|
|
210
|
+
//# sourceMappingURL=common.js.map
|