scoutline 0.22.0 → 0.23.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 +60 -26
- package/dist/capabilities/search.d.ts +18 -4
- package/dist/capabilities/search.d.ts.map +1 -1
- package/dist/commands/config.d.ts.map +1 -1
- package/dist/commands/config.js +14 -5
- package/dist/commands/config.js.map +1 -1
- package/dist/commands/crawl.d.ts.map +1 -1
- package/dist/commands/crawl.js +2 -1
- package/dist/commands/crawl.js.map +1 -1
- package/dist/commands/doctor.d.ts.map +1 -1
- package/dist/commands/doctor.js +2 -1
- package/dist/commands/doctor.js.map +1 -1
- package/dist/commands/init.d.ts +42 -1
- package/dist/commands/init.d.ts.map +1 -1
- package/dist/commands/init.js +42 -5
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/map.d.ts.map +1 -1
- package/dist/commands/map.js +2 -1
- package/dist/commands/map.js.map +1 -1
- package/dist/commands/quota.d.ts.map +1 -1
- package/dist/commands/quota.js +2 -2
- package/dist/commands/quota.js.map +1 -1
- package/dist/commands/read.d.ts.map +1 -1
- package/dist/commands/read.js +2 -1
- package/dist/commands/read.js.map +1 -1
- package/dist/commands/repo.js +1 -1
- package/dist/commands/research.d.ts.map +1 -1
- package/dist/commands/research.js +2 -1
- package/dist/commands/research.js.map +1 -1
- package/dist/commands/search.d.ts +54 -6
- package/dist/commands/search.d.ts.map +1 -1
- package/dist/commands/search.js +273 -25
- package/dist/commands/search.js.map +1 -1
- package/dist/index.d.ts +72 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +364 -8
- package/dist/index.js.map +1 -1
- package/dist/lib/code-mode.d.ts +12 -0
- package/dist/lib/code-mode.d.ts.map +1 -1
- package/dist/lib/code-mode.js +18 -10
- package/dist/lib/code-mode.js.map +1 -1
- package/dist/lib/config-store.d.ts +45 -1
- package/dist/lib/config-store.d.ts.map +1 -1
- package/dist/lib/config-store.js +70 -1
- package/dist/lib/config-store.js.map +1 -1
- package/dist/lib/config.d.ts.map +1 -1
- package/dist/lib/config.js +5 -1
- package/dist/lib/config.js.map +1 -1
- package/dist/lib/errors.d.ts +7 -1
- package/dist/lib/errors.d.ts.map +1 -1
- package/dist/lib/errors.js +8 -2
- package/dist/lib/errors.js.map +1 -1
- package/dist/lib/execution.d.ts +14 -5
- package/dist/lib/execution.d.ts.map +1 -1
- package/dist/lib/execution.js +25 -6
- package/dist/lib/execution.js.map +1 -1
- package/dist/lib/mcp-client.d.ts +7 -0
- package/dist/lib/mcp-client.d.ts.map +1 -1
- package/dist/lib/mcp-client.js +11 -1
- package/dist/lib/mcp-client.js.map +1 -1
- package/dist/lib/parse-zoned-instant.d.ts +13 -0
- package/dist/lib/parse-zoned-instant.d.ts.map +1 -0
- package/dist/lib/parse-zoned-instant.js +17 -0
- package/dist/lib/parse-zoned-instant.js.map +1 -0
- package/dist/lib/quota-mapping.d.ts +4 -2
- package/dist/lib/quota-mapping.d.ts.map +1 -1
- package/dist/lib/quota-mapping.js +25 -2
- package/dist/lib/quota-mapping.js.map +1 -1
- package/dist/lib/redact.d.ts +3 -2
- package/dist/lib/redact.d.ts.map +1 -1
- package/dist/lib/redact.js +90 -24
- package/dist/lib/redact.js.map +1 -1
- package/dist/lib/timeout.d.ts +28 -0
- package/dist/lib/timeout.d.ts.map +1 -0
- package/dist/lib/timeout.js +30 -0
- package/dist/lib/timeout.js.map +1 -0
- package/dist/lib/url.d.ts +10 -4
- package/dist/lib/url.d.ts.map +1 -1
- package/dist/lib/url.js +21 -6
- package/dist/lib/url.js.map +1 -1
- package/dist/providers/arxiv/client.d.ts +4 -1
- package/dist/providers/arxiv/client.d.ts.map +1 -1
- package/dist/providers/arxiv/client.js +11 -3
- package/dist/providers/arxiv/client.js.map +1 -1
- package/dist/providers/bocha/adapter.d.ts +43 -0
- package/dist/providers/bocha/adapter.d.ts.map +1 -0
- package/dist/providers/bocha/adapter.js +197 -0
- package/dist/providers/bocha/adapter.js.map +1 -0
- package/dist/providers/bocha/client.d.ts +51 -0
- package/dist/providers/bocha/client.d.ts.map +1 -0
- package/dist/providers/bocha/client.js +104 -0
- package/dist/providers/bocha/client.js.map +1 -0
- package/dist/providers/bocha/credentials.d.ts +12 -0
- package/dist/providers/bocha/credentials.d.ts.map +1 -0
- package/dist/providers/bocha/credentials.js +29 -0
- package/dist/providers/bocha/credentials.js.map +1 -0
- package/dist/providers/bocha/diagnostics.d.ts +17 -0
- package/dist/providers/bocha/diagnostics.d.ts.map +1 -0
- package/dist/providers/bocha/diagnostics.js +33 -0
- package/dist/providers/bocha/diagnostics.js.map +1 -0
- package/dist/providers/brave/adapter.d.ts.map +1 -1
- package/dist/providers/brave/adapter.js +4 -3
- package/dist/providers/brave/adapter.js.map +1 -1
- package/dist/providers/brave/client.d.ts +1 -0
- package/dist/providers/brave/client.d.ts.map +1 -1
- package/dist/providers/brave/client.js +4 -6
- package/dist/providers/brave/client.js.map +1 -1
- package/dist/providers/brave/credentials.d.ts +2 -0
- package/dist/providers/brave/credentials.d.ts.map +1 -1
- package/dist/providers/brave/credentials.js +2 -0
- package/dist/providers/brave/credentials.js.map +1 -1
- package/dist/providers/catalog.d.ts +34 -0
- package/dist/providers/catalog.d.ts.map +1 -0
- package/dist/providers/catalog.js +57 -0
- package/dist/providers/catalog.js.map +1 -0
- package/dist/providers/crossref/adapter.js +2 -2
- package/dist/providers/crossref/adapter.js.map +1 -1
- package/dist/providers/crossref/client.d.ts +4 -1
- package/dist/providers/crossref/client.d.ts.map +1 -1
- package/dist/providers/crossref/client.js +11 -3
- package/dist/providers/crossref/client.js.map +1 -1
- package/dist/providers/crossref/diagnostics.d.ts +1 -1
- package/dist/providers/crossref/diagnostics.js +1 -1
- package/dist/providers/crossref/diagnostics.js.map +1 -1
- package/dist/providers/europepmc/adapter.js +2 -2
- package/dist/providers/europepmc/adapter.js.map +1 -1
- package/dist/providers/europepmc/client.d.ts +4 -1
- package/dist/providers/europepmc/client.d.ts.map +1 -1
- package/dist/providers/europepmc/client.js +11 -3
- package/dist/providers/europepmc/client.js.map +1 -1
- package/dist/providers/exa/client.d.ts +1 -0
- package/dist/providers/exa/client.d.ts.map +1 -1
- package/dist/providers/exa/client.js +3 -2
- package/dist/providers/exa/client.js.map +1 -1
- package/dist/providers/exa/credentials.d.ts +2 -0
- package/dist/providers/exa/credentials.d.ts.map +1 -1
- package/dist/providers/exa/credentials.js +2 -0
- package/dist/providers/exa/credentials.js.map +1 -1
- package/dist/providers/firecrawl/adapter.d.ts.map +1 -1
- package/dist/providers/firecrawl/adapter.js +2 -1
- package/dist/providers/firecrawl/adapter.js.map +1 -1
- package/dist/providers/firecrawl/client.d.ts +1 -0
- package/dist/providers/firecrawl/client.d.ts.map +1 -1
- package/dist/providers/firecrawl/client.js +3 -2
- package/dist/providers/firecrawl/client.js.map +1 -1
- package/dist/providers/firecrawl/credentials.d.ts +2 -0
- package/dist/providers/firecrawl/credentials.d.ts.map +1 -1
- package/dist/providers/firecrawl/credentials.js +2 -0
- package/dist/providers/firecrawl/credentials.js.map +1 -1
- package/dist/providers/firecrawl/quota.d.ts.map +1 -1
- package/dist/providers/firecrawl/quota.js +5 -2
- package/dist/providers/firecrawl/quota.js.map +1 -1
- package/dist/providers/jina/adapter.d.ts.map +1 -1
- package/dist/providers/jina/adapter.js +6 -4
- package/dist/providers/jina/adapter.js.map +1 -1
- package/dist/providers/jina/client.d.ts +2 -0
- package/dist/providers/jina/client.d.ts.map +1 -1
- package/dist/providers/jina/client.js +6 -5
- package/dist/providers/jina/client.js.map +1 -1
- package/dist/providers/jina/credentials.d.ts +2 -0
- package/dist/providers/jina/credentials.d.ts.map +1 -1
- package/dist/providers/jina/credentials.js +2 -0
- package/dist/providers/jina/credentials.js.map +1 -1
- package/dist/providers/kagi/adapter.d.ts +44 -0
- package/dist/providers/kagi/adapter.d.ts.map +1 -0
- package/dist/providers/kagi/adapter.js +188 -0
- package/dist/providers/kagi/adapter.js.map +1 -0
- package/dist/providers/kagi/client.d.ts +41 -0
- package/dist/providers/kagi/client.d.ts.map +1 -0
- package/dist/providers/kagi/client.js +100 -0
- package/dist/providers/kagi/client.js.map +1 -0
- package/dist/providers/kagi/credentials.d.ts +15 -0
- package/dist/providers/kagi/credentials.d.ts.map +1 -0
- package/dist/providers/kagi/credentials.js +35 -0
- package/dist/providers/kagi/credentials.js.map +1 -0
- package/dist/providers/kagi/diagnostics.d.ts +17 -0
- package/dist/providers/kagi/diagnostics.d.ts.map +1 -0
- package/dist/providers/kagi/diagnostics.js +33 -0
- package/dist/providers/kagi/diagnostics.js.map +1 -0
- package/dist/providers/linkup/client.d.ts +1 -0
- package/dist/providers/linkup/client.d.ts.map +1 -1
- package/dist/providers/linkup/client.js +3 -2
- package/dist/providers/linkup/client.js.map +1 -1
- package/dist/providers/linkup/credentials.d.ts +2 -0
- package/dist/providers/linkup/credentials.d.ts.map +1 -1
- package/dist/providers/linkup/credentials.js +2 -0
- package/dist/providers/linkup/credentials.js.map +1 -1
- package/dist/providers/minimax/adapter.d.ts.map +1 -1
- package/dist/providers/minimax/adapter.js +2 -2
- package/dist/providers/minimax/adapter.js.map +1 -1
- package/dist/providers/minimax/coding-plan-client.d.ts +1 -0
- package/dist/providers/minimax/coding-plan-client.d.ts.map +1 -1
- package/dist/providers/minimax/coding-plan-client.js +3 -2
- package/dist/providers/minimax/coding-plan-client.js.map +1 -1
- package/dist/providers/minimax/quota-client.d.ts +1 -0
- package/dist/providers/minimax/quota-client.d.ts.map +1 -1
- package/dist/providers/minimax/quota-client.js +3 -2
- package/dist/providers/minimax/quota-client.js.map +1 -1
- package/dist/providers/openalex/client.d.ts +2 -0
- package/dist/providers/openalex/client.d.ts.map +1 -1
- package/dist/providers/openalex/client.js +10 -3
- package/dist/providers/openalex/client.js.map +1 -1
- package/dist/providers/openalex/diagnostics.d.ts +1 -1
- package/dist/providers/openalex/diagnostics.js +1 -1
- package/dist/providers/openalex/diagnostics.js.map +1 -1
- package/dist/providers/parallel/client.d.ts +1 -0
- package/dist/providers/parallel/client.d.ts.map +1 -1
- package/dist/providers/parallel/client.js +3 -2
- package/dist/providers/parallel/client.js.map +1 -1
- package/dist/providers/parallel/credentials.d.ts +2 -0
- package/dist/providers/parallel/credentials.d.ts.map +1 -1
- package/dist/providers/parallel/credentials.js +2 -0
- package/dist/providers/parallel/credentials.js.map +1 -1
- package/dist/providers/perplexity/client.d.ts +2 -0
- package/dist/providers/perplexity/client.d.ts.map +1 -1
- package/dist/providers/perplexity/client.js +5 -4
- package/dist/providers/perplexity/client.js.map +1 -1
- package/dist/providers/perplexity/credentials.d.ts +2 -0
- package/dist/providers/perplexity/credentials.d.ts.map +1 -1
- package/dist/providers/perplexity/credentials.js +2 -0
- package/dist/providers/perplexity/credentials.js.map +1 -1
- package/dist/providers/pubmed/client.d.ts +2 -0
- package/dist/providers/pubmed/client.d.ts.map +1 -1
- package/dist/providers/pubmed/client.js +10 -3
- package/dist/providers/pubmed/client.js.map +1 -1
- package/dist/providers/registry.d.ts.map +1 -1
- package/dist/providers/registry.js +6 -0
- package/dist/providers/registry.js.map +1 -1
- package/dist/providers/searchapi/adapter.d.ts +54 -0
- package/dist/providers/searchapi/adapter.d.ts.map +1 -0
- package/dist/providers/searchapi/adapter.js +310 -0
- package/dist/providers/searchapi/adapter.js.map +1 -0
- package/dist/providers/searchapi/client.d.ts +73 -0
- package/dist/providers/searchapi/client.d.ts.map +1 -0
- package/dist/providers/searchapi/client.js +196 -0
- package/dist/providers/searchapi/client.js.map +1 -0
- package/dist/providers/searchapi/credentials.d.ts +46 -0
- package/dist/providers/searchapi/credentials.d.ts.map +1 -0
- package/dist/providers/searchapi/credentials.js +71 -0
- package/dist/providers/searchapi/credentials.js.map +1 -0
- package/dist/providers/searchapi/diagnostics.d.ts +48 -0
- package/dist/providers/searchapi/diagnostics.d.ts.map +1 -0
- package/dist/providers/searchapi/diagnostics.js +70 -0
- package/dist/providers/searchapi/diagnostics.js.map +1 -0
- package/dist/providers/searchapi/quota.d.ts +60 -0
- package/dist/providers/searchapi/quota.d.ts.map +1 -0
- package/dist/providers/searchapi/quota.js +125 -0
- package/dist/providers/searchapi/quota.js.map +1 -0
- package/dist/providers/spider/client.d.ts +2 -0
- package/dist/providers/spider/client.d.ts.map +1 -1
- package/dist/providers/spider/client.js +16 -6
- package/dist/providers/spider/client.js.map +1 -1
- package/dist/providers/spider/credentials.d.ts +2 -0
- package/dist/providers/spider/credentials.d.ts.map +1 -1
- package/dist/providers/spider/credentials.js +2 -0
- package/dist/providers/spider/credentials.js.map +1 -1
- package/dist/providers/tavily/client.d.ts +1 -0
- package/dist/providers/tavily/client.d.ts.map +1 -1
- package/dist/providers/tavily/client.js +3 -2
- package/dist/providers/tavily/client.js.map +1 -1
- package/dist/providers/tavily/credentials.d.ts +2 -0
- package/dist/providers/tavily/credentials.d.ts.map +1 -1
- package/dist/providers/tavily/credentials.js +2 -0
- package/dist/providers/tavily/credentials.js.map +1 -1
- package/dist/providers/types.d.ts +1 -1
- package/dist/providers/types.d.ts.map +1 -1
- package/dist/providers/types.js +3 -0
- package/dist/providers/types.js.map +1 -1
- package/dist/providers/you/client.d.ts +4 -0
- package/dist/providers/you/client.d.ts.map +1 -1
- package/dist/providers/you/client.js +4 -5
- package/dist/providers/you/client.js.map +1 -1
- package/dist/providers/you/credentials.d.ts +2 -0
- package/dist/providers/you/credentials.d.ts.map +1 -1
- package/dist/providers/you/credentials.js +3 -3
- package/dist/providers/you/credentials.js.map +1 -1
- package/dist/providers/zai/adapter.d.ts.map +1 -1
- package/dist/providers/zai/adapter.js +2 -1
- package/dist/providers/zai/adapter.js.map +1 -1
- package/dist/providers/zai/credentials.d.ts +2 -0
- package/dist/providers/zai/credentials.d.ts.map +1 -1
- package/dist/providers/zai/credentials.js +2 -0
- package/dist/providers/zai/credentials.js.map +1 -1
- package/dist/providers/zai/monitor-client.d.ts +1 -0
- package/dist/providers/zai/monitor-client.d.ts.map +1 -1
- package/dist/providers/zai/monitor-client.js +3 -2
- package/dist/providers/zai/monitor-client.js.map +1 -1
- package/dist/providers/zai/quota.d.ts +4 -0
- package/dist/providers/zai/quota.d.ts.map +1 -1
- package/dist/providers/zai/quota.js +16 -1
- package/dist/providers/zai/quota.js.map +1 -1
- package/package.json +1 -1
- package/skills/scoutline/SKILL.md +93 -45
- package/skills/scoutline/references/advanced.md +12 -10
package/dist/lib/redact.js
CHANGED
|
@@ -41,6 +41,20 @@ const CREDENTIAL_KEYS = new Set([
|
|
|
41
41
|
"parallel_api_key",
|
|
42
42
|
"perplexity_api_key",
|
|
43
43
|
"jina_api_key",
|
|
44
|
+
"bocha_api_key",
|
|
45
|
+
// #232: the v3 provider env names their credentials modules read —
|
|
46
|
+
// the key-set surface had missed all four (only the [=:] rows and the
|
|
47
|
+
// env scan carried them).
|
|
48
|
+
"linkup_api_key",
|
|
49
|
+
"spider_api_key",
|
|
50
|
+
"ydc_api_key",
|
|
51
|
+
"you_api_key",
|
|
52
|
+
"searchapi_api_key",
|
|
53
|
+
"serpapi_api_key",
|
|
54
|
+
"kagi_api_key",
|
|
55
|
+
"kagi_token",
|
|
56
|
+
"ncbi_api_key",
|
|
57
|
+
"openalex_api_key",
|
|
44
58
|
]);
|
|
45
59
|
const REDACTED = "[REDACTED]";
|
|
46
60
|
/**
|
|
@@ -59,8 +73,9 @@ const REDACTED = "[REDACTED]";
|
|
|
59
73
|
* `x-api-key value`).
|
|
60
74
|
* - Z_AI_API_KEY, ZAI_API_KEY, MINIMAX_API_KEY, TAVILY_API_KEY,
|
|
61
75
|
* EXA_API_KEY, BRAVE_SEARCH_API_KEY, FIRECRAWL_API_KEY,
|
|
62
|
-
* YDC_API_KEY, YOU_API_KEY, LINKUP_API_KEY, SPIDER_API_KEY
|
|
63
|
-
*
|
|
76
|
+
* YDC_API_KEY, YOU_API_KEY, LINKUP_API_KEY, SPIDER_API_KEY,
|
|
77
|
+
* BOCHA_API_KEY, SEARCHAPI_API_KEY, SERPAPI_API_KEY,
|
|
78
|
+
* KAGI_API_KEY, KAGI_TOKEN assignments.
|
|
64
79
|
* - The literal credentials passed in `extraSecrets` (each value is
|
|
65
80
|
* replaced wherever it appears; empty strings are skipped).
|
|
66
81
|
*
|
|
@@ -104,7 +119,10 @@ export function redactCredentialString(input, extraSecrets) {
|
|
|
104
119
|
// pass, trailing punctuation is stripped before the CREDENTIAL_CHAR check
|
|
105
120
|
// so prose like "Token subscription," or "token context..." survives.
|
|
106
121
|
result = result.replace(/(Authorization\s*:\s*)(?:Bearer|Token|ApiKey)\s+[^\s"]{8,}/gi, (_match, prefix) => prefix + REDACTED);
|
|
107
|
-
|
|
122
|
+
// The lookbehind keeps a bare scheme match from starting mid-identifier
|
|
123
|
+
// (KAGI_TOKEN abc123 must not become KAGI_[REDACTED]); an env-var-name
|
|
124
|
+
// form is handled by the key-specific rows below.
|
|
125
|
+
result = result.replace(/(?<![A-Za-z0-9_])(?:Bearer|Token|ApiKey)\s+([^\s"]{8,})/gi, (match, value) => {
|
|
108
126
|
// ponytail: quote cut defensive since regex excludes ", upgrade to AST parser if complex grammar needed
|
|
109
127
|
const quoteIdx = value.indexOf('"');
|
|
110
128
|
const candidate = (quoteIdx === -1 ? value : value.slice(0, quoteIdx)).replace(/[",.;:)\]]+$/, "");
|
|
@@ -118,7 +136,7 @@ export function redactCredentialString(input, extraSecrets) {
|
|
|
118
136
|
// protects quoted prose.
|
|
119
137
|
// ponytail: M4b escape-spanning omitted — RFC 6750 token68 and standard
|
|
120
138
|
// credentials never embed escaped quotes mid-token; upgrade if exotic token grammar arises.
|
|
121
|
-
result = result.replace(/(?:Bearer|Token|ApiKey)\s+\\?"([^"\\\s]{8,})\\?"/gi, (match, value) => {
|
|
139
|
+
result = result.replace(/(?<![A-Za-z0-9_])(?:Bearer|Token|ApiKey)\s+\\?"([^"\\\s]{8,})\\?"/gi, (match, value) => {
|
|
122
140
|
const candidate = value.replace(/[",.;:)\]]+$/, "");
|
|
123
141
|
return CREDENTIAL_CHAR.test(candidate) ? REDACTED : match;
|
|
124
142
|
});
|
|
@@ -168,7 +186,7 @@ export function redactCredentialString(input, extraSecrets) {
|
|
|
168
186
|
// as the key/value separator. The trailing `\S+` consumes the secret
|
|
169
187
|
// value; the entire `key + separator + value` span is replaced with
|
|
170
188
|
// the redaction marker.
|
|
171
|
-
result = result.replace(/x-api-key[\s=:]+[^\s,;"'`]+/gi, REDACTED);
|
|
189
|
+
result = result.replace(/(?<![A-Za-z0-9_])x-api-key[\s=:]+[^\s,;"'`]+/gi, REDACTED);
|
|
172
190
|
// F5 (code-review-baseline): add `:` as a separator so the JSON/YAML/
|
|
173
191
|
// HTTP-header form `Z_AI_API_KEY: sk-foo` is redacted, not just the
|
|
174
192
|
// `=` shell form. Bare whitespace is intentionally NOT a separator
|
|
@@ -177,35 +195,68 @@ export function redactCredentialString(input, extraSecrets) {
|
|
|
177
195
|
// required") and a whitespace separator would over-redact that prose.
|
|
178
196
|
// The `\s*[=:]\s*` class is a strict superset of the prior `\s*=\s*`.
|
|
179
197
|
// Value span `[^\s"]+` terminates at `"` to preserve JSON string boundaries.
|
|
180
|
-
result = result.replace(/Z_AI_API_KEY\s*[=:]\s*[^\s"]+/gi, REDACTED);
|
|
181
|
-
result = result.replace(/ZAI_API_KEY\s*[=:]\s*[^\s"]+/gi, REDACTED);
|
|
182
|
-
result = result.replace(/MINIMAX_API_KEY\s*[=:]\s*[^\s"]+/gi, REDACTED);
|
|
183
|
-
result = result.replace(/TAVILY_API_KEY\s*[=:]\s*[^\s"]+/gi, REDACTED);
|
|
184
|
-
result = result.replace(/EXA_API_KEY\s*[=:]\s*[^\s"]+/gi, REDACTED);
|
|
185
|
-
result = result.replace(/BRAVE_SEARCH_API_KEY\s*[=:]\s*[^\s"]+/gi, REDACTED);
|
|
186
|
-
result = result.replace(/FIRECRAWL_API_KEY\s*[=:]\s*[^\s"]+/gi, REDACTED);
|
|
187
|
-
result = result.replace(/PARALLEL_API_KEY\s*[=:]\s*[^\s"]+/gi, REDACTED);
|
|
188
|
-
result = result.replace(/PERPLEXITY_API_KEY\s*[=:]\s*[^\s"]+/gi, REDACTED);
|
|
189
|
-
result = result.replace(/JINA_API_KEY\s*[=:]\s*[^\s"]+/gi, REDACTED);
|
|
198
|
+
result = result.replace(/(?<![A-Za-z0-9_])Z_AI_API_KEY\s*[=:]\s*[^\s"]+/gi, REDACTED);
|
|
199
|
+
result = result.replace(/(?<![A-Za-z0-9_])ZAI_API_KEY\s*[=:]\s*[^\s"]+/gi, REDACTED);
|
|
200
|
+
result = result.replace(/(?<![A-Za-z0-9_])MINIMAX_API_KEY\s*[=:]\s*[^\s"]+/gi, REDACTED);
|
|
201
|
+
result = result.replace(/(?<![A-Za-z0-9_])TAVILY_API_KEY\s*[=:]\s*[^\s"]+/gi, REDACTED);
|
|
202
|
+
result = result.replace(/(?<![A-Za-z0-9_])EXA_API_KEY\s*[=:]\s*[^\s"]+/gi, REDACTED);
|
|
203
|
+
result = result.replace(/(?<![A-Za-z0-9_])BRAVE_SEARCH_API_KEY\s*[=:]\s*[^\s"]+/gi, REDACTED);
|
|
204
|
+
result = result.replace(/(?<![A-Za-z0-9_])FIRECRAWL_API_KEY\s*[=:]\s*[^\s"]+/gi, REDACTED);
|
|
205
|
+
result = result.replace(/(?<![A-Za-z0-9_])PARALLEL_API_KEY\s*[=:]\s*[^\s"]+/gi, REDACTED);
|
|
206
|
+
result = result.replace(/(?<![A-Za-z0-9_])PERPLEXITY_API_KEY\s*[=:]\s*[^\s"]+/gi, REDACTED);
|
|
207
|
+
result = result.replace(/(?<![A-Za-z0-9_])JINA_API_KEY\s*[=:]\s*[^\s"]+/gi, REDACTED);
|
|
190
208
|
// v3 providers (#78): incumbent [=:] shape plus the x-api-key
|
|
191
209
|
// whitespace-separator convention, guarded by the #44 true-credential
|
|
192
210
|
// bar (8+ chars containing both a letter and a digit) so ordinary
|
|
193
211
|
// prose naming the variable ("LINKUP_API_KEY is not set") stays intact.
|
|
194
212
|
// Value span `[^\s"]{8,}` terminates at `"` to preserve JSON string boundaries (#174).
|
|
195
|
-
result = result.replace(/YDC_API_KEY\s*[=:]\s*[^\s"]+/gi, REDACTED);
|
|
196
|
-
result = result.replace(/YOU_API_KEY\s*[=:]\s*[^\s"]+/gi, REDACTED);
|
|
197
|
-
result = result.replace(/LINKUP_API_KEY\s*[=:]\s*[^\s"]+/gi, REDACTED);
|
|
198
|
-
result = result.replace(/SPIDER_API_KEY\s*[=:]\s*[^\s"]+/gi, REDACTED);
|
|
213
|
+
result = result.replace(/(?<![A-Za-z0-9_])YDC_API_KEY\s*[=:]\s*[^\s"]+/gi, REDACTED);
|
|
214
|
+
result = result.replace(/(?<![A-Za-z0-9_])YOU_API_KEY\s*[=:]\s*[^\s"]+/gi, REDACTED);
|
|
215
|
+
result = result.replace(/(?<![A-Za-z0-9_])LINKUP_API_KEY\s*[=:]\s*[^\s"]+/gi, REDACTED);
|
|
216
|
+
result = result.replace(/(?<![A-Za-z0-9_])SPIDER_API_KEY\s*[=:]\s*[^\s"]+/gi, REDACTED);
|
|
217
|
+
result = result.replace(/(?<![A-Za-z0-9_])BOCHA_API_KEY\s*[=:]\s*[^\s"]+/gi, REDACTED);
|
|
218
|
+
result = result.replace(/(?<![A-Za-z0-9_])SEARCHAPI_API_KEY\s*[=:]\s*[^\s"]+/gi, REDACTED);
|
|
219
|
+
result = result.replace(/(?<![A-Za-z0-9_])SERPAPI_API_KEY\s*[=:]\s*[^\s"]+/gi, REDACTED);
|
|
220
|
+
// Kagi (#215): canonical KAGI_API_KEY plus the legacy KAGI_TOKEN
|
|
221
|
+
// alias accepted by providers/kagi/credentials.ts.
|
|
222
|
+
result = result.replace(/(?<![A-Za-z0-9_])KAGI_API_KEY\s*[=:]\s*[^\s"]+/gi, REDACTED);
|
|
223
|
+
result = result.replace(/(?<![A-Za-z0-9_])KAGI_TOKEN\s*[=:]\s*[^\s"]+/gi, REDACTED);
|
|
224
|
+
// Science credential env vars (#208): PubMed (NCBI_API_KEY) and
|
|
225
|
+
// OpenAlex (OPENALEX_API_KEY) rate-tier keys are optional but real
|
|
226
|
+
// credentials — same [=:] assignment shape as the Provider keys.
|
|
227
|
+
result = result.replace(/(?<![A-Za-z0-9_])NCBI_API_KEY\s*[=:]\s*[^\s"]+/gi, REDACTED);
|
|
228
|
+
result = result.replace(/(?<![A-Za-z0-9_])OPENALEX_API_KEY\s*[=:]\s*[^\s"]+/gi, REDACTED);
|
|
199
229
|
// #180 gap 2: the lookaheads are scoped to the value token (`[^\s"]*`)
|
|
200
230
|
// rather than to a bare non-space run. `\S` includes the JSON quote, so
|
|
201
231
|
// `{"h":"YDC_API_KEY abcdefgh","n":1}` saw the sibling `1` across the
|
|
202
232
|
// closing quote and redacted a value carrying no digit of its own. The
|
|
203
233
|
// capture below already terminated at `"` (#174); only the lookaheads
|
|
204
234
|
// still crossed it.
|
|
205
|
-
// #185 review: one guarded pattern,
|
|
206
|
-
// the lookahead/capture boundary can never
|
|
207
|
-
|
|
208
|
-
|
|
235
|
+
// #185 review: one guarded pattern, every provider credential env
|
|
236
|
+
// name — kept as a loop so the lookahead/capture boundary can never
|
|
237
|
+
// drift between rows again. #232 widened the list from nine rows to
|
|
238
|
+
// cover the incumbent providers alongside the v3/searchapi/kagi rows.
|
|
239
|
+
for (const key of [
|
|
240
|
+
"YDC_API_KEY",
|
|
241
|
+
"YOU_API_KEY",
|
|
242
|
+
"LINKUP_API_KEY",
|
|
243
|
+
"SPIDER_API_KEY",
|
|
244
|
+
"BOCHA_API_KEY",
|
|
245
|
+
"SEARCHAPI_API_KEY",
|
|
246
|
+
"SERPAPI_API_KEY",
|
|
247
|
+
"KAGI_API_KEY",
|
|
248
|
+
"KAGI_TOKEN",
|
|
249
|
+
"Z_AI_API_KEY",
|
|
250
|
+
"ZAI_API_KEY",
|
|
251
|
+
"TAVILY_API_KEY",
|
|
252
|
+
"EXA_API_KEY",
|
|
253
|
+
"BRAVE_SEARCH_API_KEY",
|
|
254
|
+
"FIRECRAWL_API_KEY",
|
|
255
|
+
"PARALLEL_API_KEY",
|
|
256
|
+
"PERPLEXITY_API_KEY",
|
|
257
|
+
"JINA_API_KEY",
|
|
258
|
+
]) {
|
|
259
|
+
result = result.replace(new RegExp(`(?<![A-Za-z0-9_])${key}\\s+(?=[^\\s"]*\\d)(?=[^\\s"]*[A-Za-z])[^\\s"]{8,}`, "gi"), REDACTED);
|
|
209
260
|
}
|
|
210
261
|
// Embedded credential substrings inside URLs, e.g.
|
|
211
262
|
// `https://user:secret@host/path`. Catches both `https://` and
|
|
@@ -225,7 +276,7 @@ export function redactCredentialString(input, extraSecrets) {
|
|
|
225
276
|
}
|
|
226
277
|
/**
|
|
227
278
|
* Normalise the `secrets` argument to a deduplicated array of
|
|
228
|
-
* non-empty strings. A `undefined` argument yields an empty list;
|
|
279
|
+
* non-empty strings. Whitespace-only entries are dropped (#222). A `undefined` argument yields an empty list;
|
|
229
280
|
* a single string yields `[string]`; an array yields the filtered
|
|
230
281
|
* list.
|
|
231
282
|
*/
|
|
@@ -239,6 +290,12 @@ function normalizeSecrets(secrets) {
|
|
|
239
290
|
if (typeof item !== "string")
|
|
240
291
|
continue;
|
|
241
292
|
if (item.length === 0)
|
|
293
|
+
continue; // empty string is never a token
|
|
294
|
+
// #222: drop-only — a whitespace-only value (e.g. a credential env
|
|
295
|
+
// var set to " ") must not become a whitespace replacement token
|
|
296
|
+
// that mangles any matching gap in output. Never trim-to-match: a
|
|
297
|
+
// secret with meaningful edge spaces matches only its exact literal.
|
|
298
|
+
if (item.trim().length === 0)
|
|
242
299
|
continue;
|
|
243
300
|
if (seen.has(item))
|
|
244
301
|
continue;
|
|
@@ -270,8 +327,17 @@ export function configuredSecrets(env = process.env) {
|
|
|
270
327
|
// URLs must not reach the always-on journal unredacted.
|
|
271
328
|
env.LINKUP_API_KEY,
|
|
272
329
|
env.SPIDER_API_KEY,
|
|
330
|
+
env.BOCHA_API_KEY,
|
|
273
331
|
env.YDC_API_KEY,
|
|
274
332
|
env.YOU_API_KEY,
|
|
333
|
+
env.SEARCHAPI_API_KEY,
|
|
334
|
+
env.SERPAPI_API_KEY,
|
|
335
|
+
env.KAGI_API_KEY,
|
|
336
|
+
env.KAGI_TOKEN,
|
|
337
|
+
// #208: science supplier rate-tier credentials ride the same
|
|
338
|
+
// literal-value pass as the Provider credentials.
|
|
339
|
+
env.NCBI_API_KEY,
|
|
340
|
+
env.OPENALEX_API_KEY,
|
|
275
341
|
];
|
|
276
342
|
return normalizeSecrets(candidates.filter((c) => typeof c === "string"));
|
|
277
343
|
}
|
package/dist/lib/redact.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"redact.js","sourceRoot":"","sources":["../../src/lib/redact.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAIH;;;;GAIG;AACH,MAAM,eAAe,GAAwB,IAAI,GAAG,CAAC;IACnD,eAAe;IACf,WAAW;IACX,SAAS;IACT,QAAQ;IACR,cAAc;IACd,OAAO;IACP,cAAc;IACd,aAAa;IACb,iBAAiB;IACjB,gBAAgB;IAChB,aAAa;IACb,sBAAsB;IACtB,mBAAmB;IACnB,kBAAkB;IAClB,oBAAoB;IACpB,cAAc;
|
|
1
|
+
{"version":3,"file":"redact.js","sourceRoot":"","sources":["../../src/lib/redact.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared timeout upper clamp (#214).
|
|
3
|
+
*
|
|
4
|
+
* Node's `setTimeout` treats delays above the 32-bit signed maximum
|
|
5
|
+
* (2,147,483,647 ms ≈ 24.8 days) as an immediate-fire 1 ms timer, so a
|
|
6
|
+
* user-supplied `*_TIMEOUT` env override beyond that bound would silently
|
|
7
|
+
* turn a long timeout into a near-instant one. Every provider client's
|
|
8
|
+
* `*_TIMEOUT` env resolver therefore clamps the parsed value to
|
|
9
|
+
* {@link TIMEOUT_MS_MAX} through this helper — the uniform rule Linkup
|
|
10
|
+
* pioneered inline (`providers/linkup/client.ts`).
|
|
11
|
+
*
|
|
12
|
+
* Invalid input (NaN, zero, negative, non-finite) falls to the caller's
|
|
13
|
+
* provider default, preserving each resolver's pre-#214 fallback
|
|
14
|
+
* behavior. Cross-provider conformance is pinned by
|
|
15
|
+
* `tests/timeout-clamp.test.js` — a client that ships its own ad-hoc
|
|
16
|
+
* unclamped parse fails its row there.
|
|
17
|
+
*/
|
|
18
|
+
/** The largest delay `setTimeout` accepts before wrapping to 1 ms. */
|
|
19
|
+
export declare const TIMEOUT_MS_MAX = 2147483647;
|
|
20
|
+
/**
|
|
21
|
+
* Validate and upper-clamp a parsed `*_TIMEOUT` override.
|
|
22
|
+
*
|
|
23
|
+
* @param raw - The parsed env value (`parseInt(..., 10)`)
|
|
24
|
+
* @param defaultMs - The provider default returned for invalid input
|
|
25
|
+
* @returns `raw` clamped to `[1, TIMEOUT_MS_MAX]`, or `defaultMs`
|
|
26
|
+
*/
|
|
27
|
+
export declare function clampTimeoutMs(raw: number, defaultMs: number): number;
|
|
28
|
+
//# sourceMappingURL=timeout.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"timeout.d.ts","sourceRoot":"","sources":["../../src/lib/timeout.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,sEAAsE;AACtE,eAAO,MAAM,cAAc,aAAa,CAAC;AAEzC;;;;;;GAMG;AACH,wBAAgB,cAAc,CAAC,GAAG,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,CAErE"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared timeout upper clamp (#214).
|
|
3
|
+
*
|
|
4
|
+
* Node's `setTimeout` treats delays above the 32-bit signed maximum
|
|
5
|
+
* (2,147,483,647 ms ≈ 24.8 days) as an immediate-fire 1 ms timer, so a
|
|
6
|
+
* user-supplied `*_TIMEOUT` env override beyond that bound would silently
|
|
7
|
+
* turn a long timeout into a near-instant one. Every provider client's
|
|
8
|
+
* `*_TIMEOUT` env resolver therefore clamps the parsed value to
|
|
9
|
+
* {@link TIMEOUT_MS_MAX} through this helper — the uniform rule Linkup
|
|
10
|
+
* pioneered inline (`providers/linkup/client.ts`).
|
|
11
|
+
*
|
|
12
|
+
* Invalid input (NaN, zero, negative, non-finite) falls to the caller's
|
|
13
|
+
* provider default, preserving each resolver's pre-#214 fallback
|
|
14
|
+
* behavior. Cross-provider conformance is pinned by
|
|
15
|
+
* `tests/timeout-clamp.test.js` — a client that ships its own ad-hoc
|
|
16
|
+
* unclamped parse fails its row there.
|
|
17
|
+
*/
|
|
18
|
+
/** The largest delay `setTimeout` accepts before wrapping to 1 ms. */
|
|
19
|
+
export const TIMEOUT_MS_MAX = 2147483647;
|
|
20
|
+
/**
|
|
21
|
+
* Validate and upper-clamp a parsed `*_TIMEOUT` override.
|
|
22
|
+
*
|
|
23
|
+
* @param raw - The parsed env value (`parseInt(..., 10)`)
|
|
24
|
+
* @param defaultMs - The provider default returned for invalid input
|
|
25
|
+
* @returns `raw` clamped to `[1, TIMEOUT_MS_MAX]`, or `defaultMs`
|
|
26
|
+
*/
|
|
27
|
+
export function clampTimeoutMs(raw, defaultMs) {
|
|
28
|
+
return Number.isFinite(raw) && raw > 0 ? Math.min(raw, TIMEOUT_MS_MAX) : defaultMs;
|
|
29
|
+
}
|
|
30
|
+
//# sourceMappingURL=timeout.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"timeout.js","sourceRoot":"","sources":["../../src/lib/timeout.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,sEAAsE;AACtE,MAAM,CAAC,MAAM,cAAc,GAAG,UAAU,CAAC;AAEzC;;;;;;GAMG;AACH,MAAM,UAAU,cAAc,CAAC,GAAW,EAAE,SAAiB;IAC3D,OAAO,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,cAAc,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;AACrF,CAAC"}
|
package/dist/lib/url.d.ts
CHANGED
|
@@ -34,10 +34,16 @@
|
|
|
34
34
|
* `https:///host/p`, `https:/\host/p`, `https:host/p` — collapse to a
|
|
35
35
|
* single identity without duplicating host text or inventing userinfo.
|
|
36
36
|
*
|
|
37
|
-
*
|
|
38
|
-
*
|
|
39
|
-
*
|
|
40
|
-
*
|
|
37
|
+
* One widening beyond the parser (fusion plan D3, resolving the gate
|
|
38
|
+
* formerly recorded here): the identity KEY collapses the direct www
|
|
39
|
+
* alias of a two-label apex host — `www.example.com` keys as
|
|
40
|
+
* `example.com`. The emitted `url` stays verbatim; only the Map key
|
|
41
|
+
* changes. Deeper subdomains stay distinct by the two-label rule:
|
|
42
|
+
* `www.blog.example.com`, `blog.example.com`, and `www.bbc.co.uk`
|
|
43
|
+
* keep their own keys (deterministic, no public-suffix-list
|
|
44
|
+
* dependency). Single-label remainders (`www.localhost`) do not
|
|
45
|
+
* strip. Origin semantics for every other consumer of these URLs are
|
|
46
|
+
* unchanged — this rule lives in `canonicalUrl` only.
|
|
41
47
|
*/
|
|
42
48
|
export declare function canonicalUrl(input: string): string;
|
|
43
49
|
//# sourceMappingURL=url.d.ts.map
|
package/dist/lib/url.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"url.d.ts","sourceRoot":"","sources":["../../src/lib/url.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"url.d.ts","sourceRoot":"","sources":["../../src/lib/url.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8CG;AAYH,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAqIlD"}
|
package/dist/lib/url.js
CHANGED
|
@@ -34,10 +34,16 @@
|
|
|
34
34
|
* `https:///host/p`, `https:/\host/p`, `https:host/p` — collapse to a
|
|
35
35
|
* single identity without duplicating host text or inventing userinfo.
|
|
36
36
|
*
|
|
37
|
-
*
|
|
38
|
-
*
|
|
39
|
-
*
|
|
40
|
-
*
|
|
37
|
+
* One widening beyond the parser (fusion plan D3, resolving the gate
|
|
38
|
+
* formerly recorded here): the identity KEY collapses the direct www
|
|
39
|
+
* alias of a two-label apex host — `www.example.com` keys as
|
|
40
|
+
* `example.com`. The emitted `url` stays verbatim; only the Map key
|
|
41
|
+
* changes. Deeper subdomains stay distinct by the two-label rule:
|
|
42
|
+
* `www.blog.example.com`, `blog.example.com`, and `www.bbc.co.uk`
|
|
43
|
+
* keep their own keys (deterministic, no public-suffix-list
|
|
44
|
+
* dependency). Single-label remainders (`www.localhost`) do not
|
|
45
|
+
* strip. Origin semantics for every other consumer of these URLs are
|
|
46
|
+
* unchanged — this rule lives in `canonicalUrl` only.
|
|
41
47
|
*/
|
|
42
48
|
/**
|
|
43
49
|
* WHATWG "special" schemes (URL Standard §special scheme): the parser
|
|
@@ -75,8 +81,17 @@ export function canonicalUrl(input) {
|
|
|
75
81
|
// WHATWG already lowercased the scheme+host and stripped an explicit
|
|
76
82
|
// default port (`:443` on https, `:80` on http) from `host`, so the
|
|
77
83
|
// canonical host is `parsed.host` as-is; only non-default ports
|
|
78
|
-
// survive the parser.
|
|
79
|
-
|
|
84
|
+
// survive the parser. Sole exception (fusion plan D3): strip a
|
|
85
|
+
// leading `www.` when the remainder is exactly two dot-separated
|
|
86
|
+
// labels — the `www.<sld>.<tld>` form — keeping any explicit
|
|
87
|
+
// non-default port. Three-label remainders (`www.blog.example.com`,
|
|
88
|
+
// `www.bbc.co.uk`) and single-label remainders (`www.localhost`)
|
|
89
|
+
// keep `parsed.host` byte-identically.
|
|
90
|
+
let host = parsed.host;
|
|
91
|
+
const hn = parsed.hostname;
|
|
92
|
+
if (/^www\.[^.\s]+\.[^.\s]+$/.test(hn)) {
|
|
93
|
+
host = hn.slice(4) + (parsed.port ? ":" + parsed.port : "");
|
|
94
|
+
}
|
|
80
95
|
// Raw userinfo + path, re-sliced from the input between the
|
|
81
96
|
// authority and the query/fragment. WHATWG normalization (dot-segment
|
|
82
97
|
// collapsing, userinfo dropping, non-ASCII percent-encoding) is NOT
|
package/dist/lib/url.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"url.js","sourceRoot":"","sources":["../../src/lib/url.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"url.js","sourceRoot":"","sources":["../../src/lib/url.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,11 +1,14 @@
|
|
|
1
1
|
import type { ProviderQuotaFetch } from "../types.js";
|
|
2
2
|
export declare const ARXIV_QUERY_URL = "https://export.arxiv.org/api/query";
|
|
3
|
-
/** Injectable transport dependencies (fetch, timers). */
|
|
3
|
+
/** Injectable transport dependencies (fetch, timers, env). */
|
|
4
4
|
export interface ArxivTransportDeps {
|
|
5
5
|
readonly fetch?: ProviderQuotaFetch;
|
|
6
6
|
readonly setTimeout?: typeof setTimeout;
|
|
7
7
|
readonly clearTimeout?: typeof clearTimeout;
|
|
8
|
+
readonly env?: NodeJS.ProcessEnv;
|
|
8
9
|
}
|
|
10
|
+
/** `ARXIV_TIMEOUT` override, clamped through the shared seam (#234). */
|
|
11
|
+
export declare function resolveTimeoutMs(env: NodeJS.ProcessEnv): number;
|
|
9
12
|
/**
|
|
10
13
|
* arXiv-native query params (API field names). The Adapter maps the
|
|
11
14
|
* Provider-neutral science requests into these before calling
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../../src/providers/arxiv/client.ts"],"names":[],"mappings":"AAkCA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../../src/providers/arxiv/client.ts"],"names":[],"mappings":"AAkCA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAMtD,eAAO,MAAM,eAAe,uCAAuC,CAAC;AAIpE,8DAA8D;AAC9D,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,KAAK,CAAC,EAAE,kBAAkB,CAAC;IACpC,QAAQ,CAAC,UAAU,CAAC,EAAE,OAAO,UAAU,CAAC;IACxC,QAAQ,CAAC,YAAY,CAAC,EAAE,OAAO,YAAY,CAAC;IAC5C,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC;CAClC;AAED,wEAAwE;AACxE,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,MAAM,CAAC,UAAU,GAAG,MAAM,CAG/D;AAED;;;;;GAKG;AACH,MAAM,WAAW,gBAAgB;IAC/B,yDAAyD;IACzD,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC;IAC/B,sEAAsE;IACtE,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAC1B,sCAAsC;IACtC,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB,6DAA6D;IAC7D,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;CAC/B;AAgED;;;;;;GAMG;AACH,wBAAsB,eAAe,CACnC,MAAM,EAAE,gBAAgB,EACxB,IAAI,GAAE,kBAAuB,EAC7B,MAAM,CAAC,EAAE,WAAW,GACnB,OAAO,CAAC,MAAM,CAAC,CAuHjB"}
|
|
@@ -20,10 +20,16 @@ import { readBoundedResponseBody, MAX_BUFFERED_RESPONSE_BYTES, } from "../../lib
|
|
|
20
20
|
import { parseRetryAfterHintMs, retryHintOptions, } from "../../lib/retry-after.js";
|
|
21
21
|
import { ApiError, AuthError, NetworkError, QuotaError, TimeoutError, ValidationError, } from "../../lib/errors.js";
|
|
22
22
|
import { getGlobalFetch } from "../types.js";
|
|
23
|
+
import { clampTimeoutMs } from "../../lib/timeout.js";
|
|
23
24
|
const { version: VERSION } = pkg;
|
|
24
25
|
export const ARXIV_QUERY_URL = "https://export.arxiv.org/api/query";
|
|
25
26
|
const DEFAULT_TIMEOUT_MS = 30000;
|
|
26
27
|
const USER_AGENT = `scoutline/${VERSION}`;
|
|
28
|
+
/** `ARXIV_TIMEOUT` override, clamped through the shared seam (#234). */
|
|
29
|
+
export function resolveTimeoutMs(env) {
|
|
30
|
+
const raw = parseInt(env.ARXIV_TIMEOUT || String(DEFAULT_TIMEOUT_MS), 10);
|
|
31
|
+
return clampTimeoutMs(raw, DEFAULT_TIMEOUT_MS);
|
|
32
|
+
}
|
|
27
33
|
/**
|
|
28
34
|
* Layer 1 — HTTP-status mapping. Runs BEFORE the body is consumed; on
|
|
29
35
|
* a non-2xx response the body is discarded and a typed error thrown.
|
|
@@ -78,6 +84,8 @@ export async function fetchArxivQuery(params, deps = {}, signal) {
|
|
|
78
84
|
const f = deps.fetch ?? getGlobalFetch();
|
|
79
85
|
const setT = deps.setTimeout ?? setTimeout;
|
|
80
86
|
const clearT = deps.clearTimeout ?? clearTimeout;
|
|
87
|
+
const env = deps.env ?? process.env;
|
|
88
|
+
const timeoutMs = resolveTimeoutMs(env);
|
|
81
89
|
const url = new URL(ARXIV_QUERY_URL);
|
|
82
90
|
if (params.search_query !== undefined)
|
|
83
91
|
url.searchParams.set("search_query", params.search_query);
|
|
@@ -98,7 +106,7 @@ export async function fetchArxivQuery(params, deps = {}, signal) {
|
|
|
98
106
|
const timeoutId = setT(() => {
|
|
99
107
|
timedOut = true;
|
|
100
108
|
controller.abort();
|
|
101
|
-
},
|
|
109
|
+
}, timeoutMs);
|
|
102
110
|
const abortWithExternal = () => controller.abort();
|
|
103
111
|
if (signal !== undefined) {
|
|
104
112
|
if (signal.aborted) {
|
|
@@ -116,7 +124,7 @@ export async function fetchArxivQuery(params, deps = {}, signal) {
|
|
|
116
124
|
}));
|
|
117
125
|
if (!res.ok) {
|
|
118
126
|
await res.body?.cancel().catch(() => { });
|
|
119
|
-
throw mapStatusError(res.status,
|
|
127
|
+
throw mapStatusError(res.status, timeoutMs, parseRetryAfterHintMs(res.headers));
|
|
120
128
|
}
|
|
121
129
|
const contentLengthHeader = res.headers?.get?.("content-length");
|
|
122
130
|
if (contentLengthHeader && Number(contentLengthHeader) > MAX_BUFFERED_RESPONSE_BYTES) {
|
|
@@ -162,7 +170,7 @@ export async function fetchArxivQuery(params, deps = {}, signal) {
|
|
|
162
170
|
}
|
|
163
171
|
}
|
|
164
172
|
catch (err) {
|
|
165
|
-
throw normalizeTransportError(err,
|
|
173
|
+
throw normalizeTransportError(err, timeoutMs, timedOut, signal);
|
|
166
174
|
}
|
|
167
175
|
finally {
|
|
168
176
|
if (signal !== undefined) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.js","sourceRoot":"","sources":["../../../src/providers/arxiv/client.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AACH,OAAO,GAAG,MAAM,uBAAuB,CAAC,OAAO,IAAI,EAAE,MAAM,EAAE,CAAC;AAC9D,OAAO,EACL,uBAAuB,EACvB,2BAA2B,GAC5B,MAAM,2BAA2B,CAAC;AACnC,OAAO,EACL,qBAAqB,EACrB,gBAAgB,GACjB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EACL,QAAQ,EACR,SAAS,EACT,YAAY,EACZ,UAAU,EACV,YAAY,EACZ,eAAe,GAChB,MAAM,qBAAqB,CAAC;AAE7B,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"client.js","sourceRoot":"","sources":["../../../src/providers/arxiv/client.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Bocha AI Provider Adapter.
|
|
3
|
+
*
|
|
4
|
+
* Implements Search (and Diagnostics in T4) for the Bocha AI API
|
|
5
|
+
* (POST /v1/web-search).
|
|
6
|
+
*
|
|
7
|
+
* The wire response is a Bing-compatible wrapped envelope: results
|
|
8
|
+
* live at `data.webPages.value[]` — never the JSON root (SCHEMA.md).
|
|
9
|
+
* Application-level envelope codes are checked here: success only when
|
|
10
|
+
* HTTP 2xx AND (`code` undefined or `code === 200`); any other code is
|
|
11
|
+
* an error with a curated message (the raw `msg` never surfaces).
|
|
12
|
+
*
|
|
13
|
+
* Field mapping:
|
|
14
|
+
* value[].name -> title
|
|
15
|
+
* value[].url -> url (rows without url are dropped)
|
|
16
|
+
* value[].summary|snippet -> summary (summary preferred)
|
|
17
|
+
* value[].dateLastCrawled -> date
|
|
18
|
+
* value[].siteName -> source ("bocha (<siteName>|web)")
|
|
19
|
+
*
|
|
20
|
+
* Control mapping (SearchControls → wire body):
|
|
21
|
+
* domain -> `site:<domain> ` query prefix
|
|
22
|
+
* recency -> freshness (Scoutline enum passes through 1:1)
|
|
23
|
+
* contentSize -> summary: true (always pinned on the body)
|
|
24
|
+
* topic -> appended to query via applySearchTopic
|
|
25
|
+
* type -> REJECTED (UnsupportedOptionError)
|
|
26
|
+
* location -> REJECTED (UnsupportedOptionError)
|
|
27
|
+
*/
|
|
28
|
+
import type { ProviderAdapter, ProviderContext, ProviderDescriptor, ProviderId } from "../types.js";
|
|
29
|
+
import type { SearchCapability } from "../../capabilities/search.js";
|
|
30
|
+
import type { DiagnosticsCapability } from "../../capabilities/diagnostics.js";
|
|
31
|
+
import { type BochaTransportDeps } from "./client.js";
|
|
32
|
+
export interface BochaAdapterDependencies {
|
|
33
|
+
readonly transport?: BochaTransportDeps;
|
|
34
|
+
}
|
|
35
|
+
export declare class BochaAdapter implements ProviderAdapter {
|
|
36
|
+
private readonly context;
|
|
37
|
+
readonly id: ProviderId;
|
|
38
|
+
readonly search: SearchCapability;
|
|
39
|
+
readonly diagnostics: DiagnosticsCapability;
|
|
40
|
+
constructor(context: ProviderContext, deps?: BochaAdapterDependencies);
|
|
41
|
+
}
|
|
42
|
+
export declare function createBochaDescriptor(deps?: BochaAdapterDependencies): ProviderDescriptor;
|
|
43
|
+
//# sourceMappingURL=adapter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"adapter.d.ts","sourceRoot":"","sources":["../../../src/providers/bocha/adapter.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AAGH,OAAO,KAAK,EAAE,eAAe,EAAE,eAAe,EAAE,kBAAkB,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACpG,OAAO,KAAK,EAEV,gBAAgB,EAGjB,MAAM,8BAA8B,CAAC;AACtC,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,mCAAmC,CAAC;AAc/E,OAAO,EAIL,KAAK,kBAAkB,EACxB,MAAM,aAAa,CAAC;AAoBrB,MAAM,WAAW,wBAAwB;IACvC,QAAQ,CAAC,SAAS,CAAC,EAAE,kBAAkB,CAAC;CACzC;AAsED,qBAAa,YAAa,YAAW,eAAe;IAMhD,OAAO,CAAC,QAAQ,CAAC,OAAO;IAL1B,QAAQ,CAAC,EAAE,EAAE,UAAU,CAAqB;IAC5C,QAAQ,CAAC,MAAM,EAAE,gBAAgB,CAAC;IAClC,QAAQ,CAAC,WAAW,EAAE,qBAAqB,CAAC;IAE5C,YACmB,OAAO,EAAE,eAAe,EACzC,IAAI,GAAE,wBAA6B,EA+EpC;CACF;AAED,wBAAgB,qBAAqB,CAAC,IAAI,GAAE,wBAA6B,GAAG,kBAAkB,CAU7F"}
|