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.
Files changed (294) hide show
  1. package/README.md +60 -26
  2. package/dist/capabilities/search.d.ts +18 -4
  3. package/dist/capabilities/search.d.ts.map +1 -1
  4. package/dist/commands/config.d.ts.map +1 -1
  5. package/dist/commands/config.js +14 -5
  6. package/dist/commands/config.js.map +1 -1
  7. package/dist/commands/crawl.d.ts.map +1 -1
  8. package/dist/commands/crawl.js +2 -1
  9. package/dist/commands/crawl.js.map +1 -1
  10. package/dist/commands/doctor.d.ts.map +1 -1
  11. package/dist/commands/doctor.js +2 -1
  12. package/dist/commands/doctor.js.map +1 -1
  13. package/dist/commands/init.d.ts +42 -1
  14. package/dist/commands/init.d.ts.map +1 -1
  15. package/dist/commands/init.js +42 -5
  16. package/dist/commands/init.js.map +1 -1
  17. package/dist/commands/map.d.ts.map +1 -1
  18. package/dist/commands/map.js +2 -1
  19. package/dist/commands/map.js.map +1 -1
  20. package/dist/commands/quota.d.ts.map +1 -1
  21. package/dist/commands/quota.js +2 -2
  22. package/dist/commands/quota.js.map +1 -1
  23. package/dist/commands/read.d.ts.map +1 -1
  24. package/dist/commands/read.js +2 -1
  25. package/dist/commands/read.js.map +1 -1
  26. package/dist/commands/repo.js +1 -1
  27. package/dist/commands/research.d.ts.map +1 -1
  28. package/dist/commands/research.js +2 -1
  29. package/dist/commands/research.js.map +1 -1
  30. package/dist/commands/search.d.ts +54 -6
  31. package/dist/commands/search.d.ts.map +1 -1
  32. package/dist/commands/search.js +273 -25
  33. package/dist/commands/search.js.map +1 -1
  34. package/dist/index.d.ts +72 -1
  35. package/dist/index.d.ts.map +1 -1
  36. package/dist/index.js +364 -8
  37. package/dist/index.js.map +1 -1
  38. package/dist/lib/code-mode.d.ts +12 -0
  39. package/dist/lib/code-mode.d.ts.map +1 -1
  40. package/dist/lib/code-mode.js +18 -10
  41. package/dist/lib/code-mode.js.map +1 -1
  42. package/dist/lib/config-store.d.ts +45 -1
  43. package/dist/lib/config-store.d.ts.map +1 -1
  44. package/dist/lib/config-store.js +70 -1
  45. package/dist/lib/config-store.js.map +1 -1
  46. package/dist/lib/config.d.ts.map +1 -1
  47. package/dist/lib/config.js +5 -1
  48. package/dist/lib/config.js.map +1 -1
  49. package/dist/lib/errors.d.ts +7 -1
  50. package/dist/lib/errors.d.ts.map +1 -1
  51. package/dist/lib/errors.js +8 -2
  52. package/dist/lib/errors.js.map +1 -1
  53. package/dist/lib/execution.d.ts +14 -5
  54. package/dist/lib/execution.d.ts.map +1 -1
  55. package/dist/lib/execution.js +25 -6
  56. package/dist/lib/execution.js.map +1 -1
  57. package/dist/lib/mcp-client.d.ts +7 -0
  58. package/dist/lib/mcp-client.d.ts.map +1 -1
  59. package/dist/lib/mcp-client.js +11 -1
  60. package/dist/lib/mcp-client.js.map +1 -1
  61. package/dist/lib/parse-zoned-instant.d.ts +13 -0
  62. package/dist/lib/parse-zoned-instant.d.ts.map +1 -0
  63. package/dist/lib/parse-zoned-instant.js +17 -0
  64. package/dist/lib/parse-zoned-instant.js.map +1 -0
  65. package/dist/lib/quota-mapping.d.ts +4 -2
  66. package/dist/lib/quota-mapping.d.ts.map +1 -1
  67. package/dist/lib/quota-mapping.js +25 -2
  68. package/dist/lib/quota-mapping.js.map +1 -1
  69. package/dist/lib/redact.d.ts +3 -2
  70. package/dist/lib/redact.d.ts.map +1 -1
  71. package/dist/lib/redact.js +90 -24
  72. package/dist/lib/redact.js.map +1 -1
  73. package/dist/lib/timeout.d.ts +28 -0
  74. package/dist/lib/timeout.d.ts.map +1 -0
  75. package/dist/lib/timeout.js +30 -0
  76. package/dist/lib/timeout.js.map +1 -0
  77. package/dist/lib/url.d.ts +10 -4
  78. package/dist/lib/url.d.ts.map +1 -1
  79. package/dist/lib/url.js +21 -6
  80. package/dist/lib/url.js.map +1 -1
  81. package/dist/providers/arxiv/client.d.ts +4 -1
  82. package/dist/providers/arxiv/client.d.ts.map +1 -1
  83. package/dist/providers/arxiv/client.js +11 -3
  84. package/dist/providers/arxiv/client.js.map +1 -1
  85. package/dist/providers/bocha/adapter.d.ts +43 -0
  86. package/dist/providers/bocha/adapter.d.ts.map +1 -0
  87. package/dist/providers/bocha/adapter.js +197 -0
  88. package/dist/providers/bocha/adapter.js.map +1 -0
  89. package/dist/providers/bocha/client.d.ts +51 -0
  90. package/dist/providers/bocha/client.d.ts.map +1 -0
  91. package/dist/providers/bocha/client.js +104 -0
  92. package/dist/providers/bocha/client.js.map +1 -0
  93. package/dist/providers/bocha/credentials.d.ts +12 -0
  94. package/dist/providers/bocha/credentials.d.ts.map +1 -0
  95. package/dist/providers/bocha/credentials.js +29 -0
  96. package/dist/providers/bocha/credentials.js.map +1 -0
  97. package/dist/providers/bocha/diagnostics.d.ts +17 -0
  98. package/dist/providers/bocha/diagnostics.d.ts.map +1 -0
  99. package/dist/providers/bocha/diagnostics.js +33 -0
  100. package/dist/providers/bocha/diagnostics.js.map +1 -0
  101. package/dist/providers/brave/adapter.d.ts.map +1 -1
  102. package/dist/providers/brave/adapter.js +4 -3
  103. package/dist/providers/brave/adapter.js.map +1 -1
  104. package/dist/providers/brave/client.d.ts +1 -0
  105. package/dist/providers/brave/client.d.ts.map +1 -1
  106. package/dist/providers/brave/client.js +4 -6
  107. package/dist/providers/brave/client.js.map +1 -1
  108. package/dist/providers/brave/credentials.d.ts +2 -0
  109. package/dist/providers/brave/credentials.d.ts.map +1 -1
  110. package/dist/providers/brave/credentials.js +2 -0
  111. package/dist/providers/brave/credentials.js.map +1 -1
  112. package/dist/providers/catalog.d.ts +34 -0
  113. package/dist/providers/catalog.d.ts.map +1 -0
  114. package/dist/providers/catalog.js +57 -0
  115. package/dist/providers/catalog.js.map +1 -0
  116. package/dist/providers/crossref/adapter.js +2 -2
  117. package/dist/providers/crossref/adapter.js.map +1 -1
  118. package/dist/providers/crossref/client.d.ts +4 -1
  119. package/dist/providers/crossref/client.d.ts.map +1 -1
  120. package/dist/providers/crossref/client.js +11 -3
  121. package/dist/providers/crossref/client.js.map +1 -1
  122. package/dist/providers/crossref/diagnostics.d.ts +1 -1
  123. package/dist/providers/crossref/diagnostics.js +1 -1
  124. package/dist/providers/crossref/diagnostics.js.map +1 -1
  125. package/dist/providers/europepmc/adapter.js +2 -2
  126. package/dist/providers/europepmc/adapter.js.map +1 -1
  127. package/dist/providers/europepmc/client.d.ts +4 -1
  128. package/dist/providers/europepmc/client.d.ts.map +1 -1
  129. package/dist/providers/europepmc/client.js +11 -3
  130. package/dist/providers/europepmc/client.js.map +1 -1
  131. package/dist/providers/exa/client.d.ts +1 -0
  132. package/dist/providers/exa/client.d.ts.map +1 -1
  133. package/dist/providers/exa/client.js +3 -2
  134. package/dist/providers/exa/client.js.map +1 -1
  135. package/dist/providers/exa/credentials.d.ts +2 -0
  136. package/dist/providers/exa/credentials.d.ts.map +1 -1
  137. package/dist/providers/exa/credentials.js +2 -0
  138. package/dist/providers/exa/credentials.js.map +1 -1
  139. package/dist/providers/firecrawl/adapter.d.ts.map +1 -1
  140. package/dist/providers/firecrawl/adapter.js +2 -1
  141. package/dist/providers/firecrawl/adapter.js.map +1 -1
  142. package/dist/providers/firecrawl/client.d.ts +1 -0
  143. package/dist/providers/firecrawl/client.d.ts.map +1 -1
  144. package/dist/providers/firecrawl/client.js +3 -2
  145. package/dist/providers/firecrawl/client.js.map +1 -1
  146. package/dist/providers/firecrawl/credentials.d.ts +2 -0
  147. package/dist/providers/firecrawl/credentials.d.ts.map +1 -1
  148. package/dist/providers/firecrawl/credentials.js +2 -0
  149. package/dist/providers/firecrawl/credentials.js.map +1 -1
  150. package/dist/providers/firecrawl/quota.d.ts.map +1 -1
  151. package/dist/providers/firecrawl/quota.js +5 -2
  152. package/dist/providers/firecrawl/quota.js.map +1 -1
  153. package/dist/providers/jina/adapter.d.ts.map +1 -1
  154. package/dist/providers/jina/adapter.js +6 -4
  155. package/dist/providers/jina/adapter.js.map +1 -1
  156. package/dist/providers/jina/client.d.ts +2 -0
  157. package/dist/providers/jina/client.d.ts.map +1 -1
  158. package/dist/providers/jina/client.js +6 -5
  159. package/dist/providers/jina/client.js.map +1 -1
  160. package/dist/providers/jina/credentials.d.ts +2 -0
  161. package/dist/providers/jina/credentials.d.ts.map +1 -1
  162. package/dist/providers/jina/credentials.js +2 -0
  163. package/dist/providers/jina/credentials.js.map +1 -1
  164. package/dist/providers/kagi/adapter.d.ts +44 -0
  165. package/dist/providers/kagi/adapter.d.ts.map +1 -0
  166. package/dist/providers/kagi/adapter.js +188 -0
  167. package/dist/providers/kagi/adapter.js.map +1 -0
  168. package/dist/providers/kagi/client.d.ts +41 -0
  169. package/dist/providers/kagi/client.d.ts.map +1 -0
  170. package/dist/providers/kagi/client.js +100 -0
  171. package/dist/providers/kagi/client.js.map +1 -0
  172. package/dist/providers/kagi/credentials.d.ts +15 -0
  173. package/dist/providers/kagi/credentials.d.ts.map +1 -0
  174. package/dist/providers/kagi/credentials.js +35 -0
  175. package/dist/providers/kagi/credentials.js.map +1 -0
  176. package/dist/providers/kagi/diagnostics.d.ts +17 -0
  177. package/dist/providers/kagi/diagnostics.d.ts.map +1 -0
  178. package/dist/providers/kagi/diagnostics.js +33 -0
  179. package/dist/providers/kagi/diagnostics.js.map +1 -0
  180. package/dist/providers/linkup/client.d.ts +1 -0
  181. package/dist/providers/linkup/client.d.ts.map +1 -1
  182. package/dist/providers/linkup/client.js +3 -2
  183. package/dist/providers/linkup/client.js.map +1 -1
  184. package/dist/providers/linkup/credentials.d.ts +2 -0
  185. package/dist/providers/linkup/credentials.d.ts.map +1 -1
  186. package/dist/providers/linkup/credentials.js +2 -0
  187. package/dist/providers/linkup/credentials.js.map +1 -1
  188. package/dist/providers/minimax/adapter.d.ts.map +1 -1
  189. package/dist/providers/minimax/adapter.js +2 -2
  190. package/dist/providers/minimax/adapter.js.map +1 -1
  191. package/dist/providers/minimax/coding-plan-client.d.ts +1 -0
  192. package/dist/providers/minimax/coding-plan-client.d.ts.map +1 -1
  193. package/dist/providers/minimax/coding-plan-client.js +3 -2
  194. package/dist/providers/minimax/coding-plan-client.js.map +1 -1
  195. package/dist/providers/minimax/quota-client.d.ts +1 -0
  196. package/dist/providers/minimax/quota-client.d.ts.map +1 -1
  197. package/dist/providers/minimax/quota-client.js +3 -2
  198. package/dist/providers/minimax/quota-client.js.map +1 -1
  199. package/dist/providers/openalex/client.d.ts +2 -0
  200. package/dist/providers/openalex/client.d.ts.map +1 -1
  201. package/dist/providers/openalex/client.js +10 -3
  202. package/dist/providers/openalex/client.js.map +1 -1
  203. package/dist/providers/openalex/diagnostics.d.ts +1 -1
  204. package/dist/providers/openalex/diagnostics.js +1 -1
  205. package/dist/providers/openalex/diagnostics.js.map +1 -1
  206. package/dist/providers/parallel/client.d.ts +1 -0
  207. package/dist/providers/parallel/client.d.ts.map +1 -1
  208. package/dist/providers/parallel/client.js +3 -2
  209. package/dist/providers/parallel/client.js.map +1 -1
  210. package/dist/providers/parallel/credentials.d.ts +2 -0
  211. package/dist/providers/parallel/credentials.d.ts.map +1 -1
  212. package/dist/providers/parallel/credentials.js +2 -0
  213. package/dist/providers/parallel/credentials.js.map +1 -1
  214. package/dist/providers/perplexity/client.d.ts +2 -0
  215. package/dist/providers/perplexity/client.d.ts.map +1 -1
  216. package/dist/providers/perplexity/client.js +5 -4
  217. package/dist/providers/perplexity/client.js.map +1 -1
  218. package/dist/providers/perplexity/credentials.d.ts +2 -0
  219. package/dist/providers/perplexity/credentials.d.ts.map +1 -1
  220. package/dist/providers/perplexity/credentials.js +2 -0
  221. package/dist/providers/perplexity/credentials.js.map +1 -1
  222. package/dist/providers/pubmed/client.d.ts +2 -0
  223. package/dist/providers/pubmed/client.d.ts.map +1 -1
  224. package/dist/providers/pubmed/client.js +10 -3
  225. package/dist/providers/pubmed/client.js.map +1 -1
  226. package/dist/providers/registry.d.ts.map +1 -1
  227. package/dist/providers/registry.js +6 -0
  228. package/dist/providers/registry.js.map +1 -1
  229. package/dist/providers/searchapi/adapter.d.ts +54 -0
  230. package/dist/providers/searchapi/adapter.d.ts.map +1 -0
  231. package/dist/providers/searchapi/adapter.js +310 -0
  232. package/dist/providers/searchapi/adapter.js.map +1 -0
  233. package/dist/providers/searchapi/client.d.ts +73 -0
  234. package/dist/providers/searchapi/client.d.ts.map +1 -0
  235. package/dist/providers/searchapi/client.js +196 -0
  236. package/dist/providers/searchapi/client.js.map +1 -0
  237. package/dist/providers/searchapi/credentials.d.ts +46 -0
  238. package/dist/providers/searchapi/credentials.d.ts.map +1 -0
  239. package/dist/providers/searchapi/credentials.js +71 -0
  240. package/dist/providers/searchapi/credentials.js.map +1 -0
  241. package/dist/providers/searchapi/diagnostics.d.ts +48 -0
  242. package/dist/providers/searchapi/diagnostics.d.ts.map +1 -0
  243. package/dist/providers/searchapi/diagnostics.js +70 -0
  244. package/dist/providers/searchapi/diagnostics.js.map +1 -0
  245. package/dist/providers/searchapi/quota.d.ts +60 -0
  246. package/dist/providers/searchapi/quota.d.ts.map +1 -0
  247. package/dist/providers/searchapi/quota.js +125 -0
  248. package/dist/providers/searchapi/quota.js.map +1 -0
  249. package/dist/providers/spider/client.d.ts +2 -0
  250. package/dist/providers/spider/client.d.ts.map +1 -1
  251. package/dist/providers/spider/client.js +16 -6
  252. package/dist/providers/spider/client.js.map +1 -1
  253. package/dist/providers/spider/credentials.d.ts +2 -0
  254. package/dist/providers/spider/credentials.d.ts.map +1 -1
  255. package/dist/providers/spider/credentials.js +2 -0
  256. package/dist/providers/spider/credentials.js.map +1 -1
  257. package/dist/providers/tavily/client.d.ts +1 -0
  258. package/dist/providers/tavily/client.d.ts.map +1 -1
  259. package/dist/providers/tavily/client.js +3 -2
  260. package/dist/providers/tavily/client.js.map +1 -1
  261. package/dist/providers/tavily/credentials.d.ts +2 -0
  262. package/dist/providers/tavily/credentials.d.ts.map +1 -1
  263. package/dist/providers/tavily/credentials.js +2 -0
  264. package/dist/providers/tavily/credentials.js.map +1 -1
  265. package/dist/providers/types.d.ts +1 -1
  266. package/dist/providers/types.d.ts.map +1 -1
  267. package/dist/providers/types.js +3 -0
  268. package/dist/providers/types.js.map +1 -1
  269. package/dist/providers/you/client.d.ts +4 -0
  270. package/dist/providers/you/client.d.ts.map +1 -1
  271. package/dist/providers/you/client.js +4 -5
  272. package/dist/providers/you/client.js.map +1 -1
  273. package/dist/providers/you/credentials.d.ts +2 -0
  274. package/dist/providers/you/credentials.d.ts.map +1 -1
  275. package/dist/providers/you/credentials.js +3 -3
  276. package/dist/providers/you/credentials.js.map +1 -1
  277. package/dist/providers/zai/adapter.d.ts.map +1 -1
  278. package/dist/providers/zai/adapter.js +2 -1
  279. package/dist/providers/zai/adapter.js.map +1 -1
  280. package/dist/providers/zai/credentials.d.ts +2 -0
  281. package/dist/providers/zai/credentials.d.ts.map +1 -1
  282. package/dist/providers/zai/credentials.js +2 -0
  283. package/dist/providers/zai/credentials.js.map +1 -1
  284. package/dist/providers/zai/monitor-client.d.ts +1 -0
  285. package/dist/providers/zai/monitor-client.d.ts.map +1 -1
  286. package/dist/providers/zai/monitor-client.js +3 -2
  287. package/dist/providers/zai/monitor-client.js.map +1 -1
  288. package/dist/providers/zai/quota.d.ts +4 -0
  289. package/dist/providers/zai/quota.d.ts.map +1 -1
  290. package/dist/providers/zai/quota.js +16 -1
  291. package/dist/providers/zai/quota.js.map +1 -1
  292. package/package.json +1 -1
  293. package/skills/scoutline/SKILL.md +93 -45
  294. package/skills/scoutline/references/advanced.md +12 -10
@@ -0,0 +1,71 @@
1
+ /**
2
+ * SearchApi credential resolution.
3
+ *
4
+ * Single source of truth for the SearchApi.io API key
5
+ * (`SEARCHAPI_API_KEY`, with the legacy `SERPAPI_API_KEY` accepted as a
6
+ * lower-precedence fallback). Whitespace-only values are treated as
7
+ * absent, matching the descriptor's `isConfigured` contract. Resolved
8
+ * keys are returned trimmed so wire headers never carry stray
9
+ * whitespace.
10
+ *
11
+ * Boundary rules (ARCHITECTURE.md §2):
12
+ * - May import the normalized-error contract only.
13
+ * - Must NOT import transport, command presentation, or another
14
+ * Provider's Adapter.
15
+ *
16
+ * Missing credentials are surfaced as {@link ConfigurationError}
17
+ * (exit 3), distinct from {@link AuthError} (exit 1) which means the
18
+ * Provider REJECTED a presented credential.
19
+ */
20
+ import crypto from "node:crypto";
21
+ import { ConfigurationError } from "../../lib/errors.js";
22
+ /** Credential environment names read by this module (#232 derivation pin). */
23
+ export const ENV_NAMES = ["SEARCHAPI_API_KEY", "SERPAPI_API_KEY"];
24
+ const MISSING_KEY_HELP = 'export SEARCHAPI_API_KEY="your-api-key"';
25
+ /**
26
+ * Pick a non-blank raw value from the environment and trim it. Returns
27
+ * `undefined` when the value is absent, non-string, or all whitespace.
28
+ */
29
+ function pickNonBlank(raw) {
30
+ if (typeof raw !== "string")
31
+ return undefined;
32
+ const trimmed = raw.trim();
33
+ return trimmed.length > 0 ? trimmed : undefined;
34
+ }
35
+ /**
36
+ * Resolve the SearchApi API key without throwing. Returns the trimmed
37
+ * key or `undefined` when no non-blank value is present.
38
+ * `SEARCHAPI_API_KEY` wins over the legacy `SERPAPI_API_KEY`.
39
+ */
40
+ export function getSearchApiKey(env) {
41
+ return pickNonBlank(env.SEARCHAPI_API_KEY) ?? pickNonBlank(env.SERPAPI_API_KEY);
42
+ }
43
+ /**
44
+ * Resolve the SearchApi API key or throw {@link ConfigurationError}
45
+ * (exit 3) when it is missing. Call this at every capability
46
+ * invocation gate.
47
+ */
48
+ export function requireSearchApiKey(env) {
49
+ const key = getSearchApiKey(env);
50
+ if (key === undefined) {
51
+ throw new ConfigurationError("SEARCHAPI_API_KEY environment variable is required", MISSING_KEY_HELP);
52
+ }
53
+ return key;
54
+ }
55
+ /**
56
+ * True when a non-blank SearchApi API key is configured. Metadata-only:
57
+ * performs no transport construction and reads no other Provider's
58
+ * credentials.
59
+ */
60
+ export function isSearchApiConfigured(env) {
61
+ return getSearchApiKey(env) !== undefined;
62
+ }
63
+ /**
64
+ * Lowercase hex SHA-256 fingerprint of the SearchApi API key. Used for
65
+ * partitioned cache identity; the raw key must never appear in cache
66
+ * filenames, errors, or logs.
67
+ */
68
+ export function hashSearchApiKey(key) {
69
+ return crypto.createHash("sha256").update(key).digest("hex");
70
+ }
71
+ //# sourceMappingURL=credentials.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"credentials.js","sourceRoot":"","sources":["../../../src/providers/searchapi/credentials.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAEH,OAAO,MAAM,MAAM,aAAa,CAAC;AAEjC,OAAO,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AAEzD,8EAA8E;AAC9E,MAAM,CAAC,MAAM,SAAS,GAAG,CAAC,mBAAmB,EAAE,iBAAiB,CAAU,CAAC;AAE3E,MAAM,gBAAgB,GAAG,yCAAyC,CAAC;AAEnE;;;GAGG;AACH,SAAS,YAAY,CAAC,GAAY;IAChC,IAAI,OAAO,GAAG,KAAK,QAAQ;QAAE,OAAO,SAAS,CAAC;IAC9C,MAAM,OAAO,GAAG,GAAG,CAAC,IAAI,EAAE,CAAC;IAC3B,OAAO,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC;AAClD,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,eAAe,CAAC,GAAsB;IACpD,OAAO,YAAY,CAAC,GAAG,CAAC,iBAAiB,CAAC,IAAI,YAAY,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC;AAClF,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,mBAAmB,CAAC,GAAsB;IACxD,MAAM,GAAG,GAAG,eAAe,CAAC,GAAG,CAAC,CAAC;IACjC,IAAI,GAAG,KAAK,SAAS,EAAE,CAAC;QACtB,MAAM,IAAI,kBAAkB,CAC1B,oDAAoD,EACpD,gBAAgB,CACjB,CAAC;IACJ,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,qBAAqB,CAAC,GAAsB;IAC1D,OAAO,eAAe,CAAC,GAAG,CAAC,KAAK,SAAS,CAAC;AAC5C,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,gBAAgB,CAAC,GAAW;IAC1C,OAAO,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AAC/D,CAAC"}
@@ -0,0 +1,48 @@
1
+ /**
2
+ * SearchApi.io Diagnostics Capability.
3
+ *
4
+ * Probes SearchApi connectivity with a single, non-destructive GET
5
+ * against `/api/v1/me` — the account/subscription metadata endpoint,
6
+ * NOT a search, so the probe costs no search credit. The doctor command
7
+ * can therefore verify a credential authenticates without consuming a
8
+ * paid request. SearchApi has no `search_depth`-style knob, so no probe
9
+ * params are sent.
10
+ *
11
+ * The probe performs exactly ONE attempt. Shared execution owns the
12
+ * retry policy; this transport never retries. The doctor command
13
+ * catches the throw on failure and records a redacted error entry.
14
+ *
15
+ * When `options.probe` is false, `invoke` resolves immediately without
16
+ * touching the network — the doctor command skips probing unconfigured
17
+ * Providers (passing `probe: false`) before reaching this Capability.
18
+ *
19
+ * Boundary rules (ARCHITECTURE.md §2):
20
+ * - May import the diagnostics capability contract, Adapter-local
21
+ * credentials, Adapter-local quota transport, and normalized errors.
22
+ * - Must NOT import command presentation or another Provider's Adapter.
23
+ */
24
+ import type { DiagnosticsCapability } from "../../capabilities/diagnostics.js";
25
+ import { type SearchApiTransportDeps } from "./client.js";
26
+ /**
27
+ * Options for the SearchApi.io DiagnosticsCapability. The API key is
28
+ * resolved from `env`; transport dependencies (`fetch`, timers) are
29
+ * injectable for deterministic tests through the unified `transport`
30
+ * seam.
31
+ */
32
+ export interface SearchApiDiagnosticsCapabilityOptions {
33
+ readonly env: NodeJS.ProcessEnv;
34
+ readonly transport?: SearchApiTransportDeps;
35
+ }
36
+ /**
37
+ * Build the SearchApi.io DiagnosticsCapability. The probe performs ONE
38
+ * non-destructive `/api/v1/me` request — the cheapest credible probe
39
+ * (it authenticates the Bearer header without spending a search
40
+ * credit). Shared execution owns the retry policy; this transport
41
+ * performs exactly one attempt per invocation.
42
+ *
43
+ * When `options.probe` is false, `invoke` resolves immediately without
44
+ * touching the network — the doctor command skips probing unconfigured
45
+ * Providers before reaching this Capability.
46
+ */
47
+ export declare function createSearchApiDiagnosticsCapability(options: SearchApiDiagnosticsCapabilityOptions): DiagnosticsCapability;
48
+ //# sourceMappingURL=diagnostics.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"diagnostics.d.ts","sourceRoot":"","sources":["../../../src/providers/searchapi/diagnostics.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAEH,OAAO,KAAK,EAAE,qBAAqB,EAAqB,MAAM,mCAAmC,CAAC;AAGlG,OAAO,EAAoB,KAAK,sBAAsB,EAAE,MAAM,aAAa,CAAC;AAuB5E;;;;;GAKG;AACH,MAAM,WAAW,qCAAqC;IACpD,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC,UAAU,CAAC;IAChC,QAAQ,CAAC,SAAS,CAAC,EAAE,sBAAsB,CAAC;CAC7C;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,oCAAoC,CAClD,OAAO,EAAE,qCAAqC,GAC7C,qBAAqB,CAcvB"}
@@ -0,0 +1,70 @@
1
+ /**
2
+ * SearchApi.io Diagnostics Capability.
3
+ *
4
+ * Probes SearchApi connectivity with a single, non-destructive GET
5
+ * against `/api/v1/me` — the account/subscription metadata endpoint,
6
+ * NOT a search, so the probe costs no search credit. The doctor command
7
+ * can therefore verify a credential authenticates without consuming a
8
+ * paid request. SearchApi has no `search_depth`-style knob, so no probe
9
+ * params are sent.
10
+ *
11
+ * The probe performs exactly ONE attempt. Shared execution owns the
12
+ * retry policy; this transport never retries. The doctor command
13
+ * catches the throw on failure and records a redacted error entry.
14
+ *
15
+ * When `options.probe` is false, `invoke` resolves immediately without
16
+ * touching the network — the doctor command skips probing unconfigured
17
+ * Providers (passing `probe: false`) before reaching this Capability.
18
+ *
19
+ * Boundary rules (ARCHITECTURE.md §2):
20
+ * - May import the diagnostics capability contract, Adapter-local
21
+ * credentials, Adapter-local quota transport, and normalized errors.
22
+ * - Must NOT import command presentation or another Provider's Adapter.
23
+ */
24
+ import { createProbeErrorNormalizer, STANDARD_PROBE_PASS_THROUGH } from "../../lib/probe-errors.js";
25
+ import { requireSearchApiKey } from "./credentials.js";
26
+ import { fetchSearchApiMe } from "./client.js";
27
+ // ---------------------------------------------------------------------------
28
+ // Failure normalization (mirror the Adapter's search-path mapping)
29
+ // ---------------------------------------------------------------------------
30
+ /**
31
+ * Probe failure wrapper. Mirrors the Adapter's `normalizeSearchApiError`
32
+ * for the subset of errors the probe can surface. The probe throws on
33
+ * failure; the doctor command catches the throw and records a redacted
34
+ * error entry. The SearchApi transport already drains/discards response
35
+ * bodies, and these typed errors carry only curated messages, so no raw
36
+ * SearchApi body ever crosses this boundary.
37
+ */
38
+ const normalizeProbeError = createProbeErrorNormalizer({
39
+ passThrough: STANDARD_PROBE_PASS_THROUGH,
40
+ fallbackMessage: "SearchApi.io diagnostics probe failed",
41
+ });
42
+ /**
43
+ * Build the SearchApi.io DiagnosticsCapability. The probe performs ONE
44
+ * non-destructive `/api/v1/me` request — the cheapest credible probe
45
+ * (it authenticates the Bearer header without spending a search
46
+ * credit). Shared execution owns the retry policy; this transport
47
+ * performs exactly one attempt per invocation.
48
+ *
49
+ * When `options.probe` is false, `invoke` resolves immediately without
50
+ * touching the network — the doctor command skips probing unconfigured
51
+ * Providers before reaching this Capability.
52
+ */
53
+ export function createSearchApiDiagnosticsCapability(options) {
54
+ const { env, transport } = options;
55
+ return {
56
+ async invoke(diagOptions) {
57
+ if (!diagOptions.probe)
58
+ return;
59
+ const apiKey = requireSearchApiKey(env);
60
+ try {
61
+ // One non-destructive /me GET, no params — costs no search credit.
62
+ await fetchSearchApiMe(apiKey, transport);
63
+ }
64
+ catch (error) {
65
+ throw normalizeProbeError(error);
66
+ }
67
+ },
68
+ };
69
+ }
70
+ //# sourceMappingURL=diagnostics.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"diagnostics.js","sourceRoot":"","sources":["../../../src/providers/searchapi/diagnostics.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAGH,OAAO,EAAE,0BAA0B,EAAE,2BAA2B,EAAE,MAAM,2BAA2B,CAAC;AACpG,OAAO,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AACvD,OAAO,EAAE,gBAAgB,EAA+B,MAAM,aAAa,CAAC;AAE5E,8EAA8E;AAC9E,mEAAmE;AACnE,8EAA8E;AAE9E;;;;;;;GAOG;AACH,MAAM,mBAAmB,GAAG,0BAA0B,CAAC;IACrD,WAAW,EAAE,2BAA2B;IACxC,eAAe,EAAE,uCAAuC;CACzD,CAAC,CAAC;AAiBH;;;;;;;;;;GAUG;AACH,MAAM,UAAU,oCAAoC,CAClD,OAA8C;IAE9C,MAAM,EAAE,GAAG,EAAE,SAAS,EAAE,GAAG,OAAO,CAAC;IACnC,OAAO;QACL,KAAK,CAAC,MAAM,CAAC,WAA8B;YACzC,IAAI,CAAC,WAAW,CAAC,KAAK;gBAAE,OAAO;YAC/B,MAAM,MAAM,GAAG,mBAAmB,CAAC,GAAG,CAAC,CAAC;YACxC,IAAI,CAAC;gBACH,mEAAmE;gBACnE,MAAM,gBAAgB,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;YAC5C,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,MAAM,mBAAmB,CAAC,KAAK,CAAC,CAAC;YACnC,CAAC;QACH,CAAC;KACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,60 @@
1
+ /**
2
+ * SearchApi.io Quota Capability.
3
+ *
4
+ * Maps the SearchApi.io `GET /api/v1/me` response into the normalized
5
+ * Provider-quota interface. SearchApi is credit-based: `account`
6
+ * carries the current-month usage, the monthly allowance, and the
7
+ * remaining credits. The single "searches" category (unit `"credits"`)
8
+ * is built from `used = current_month_usage` and
9
+ * `limit = monthly_allowance`, with `resetsAt` derived from
10
+ * `subscription.period_end` when it parses. `remaining_credits` is
11
+ * required by the wire contract but is not re-published verbatim —
12
+ * `buildQuotaWindow` derives the honest `remaining` from the counts.
13
+ *
14
+ * Structurally cloned from the Linkup quota pattern (non-destructive
15
+ * GET, IMPLEMENTATION-CONTRACT analog-adapter table): one direct GET
16
+ * per invoke, shared execution owns retry policy, quota never uses the
17
+ * response cache.
18
+ *
19
+ * Boundary rules (ARCHITECTURE.md §2):
20
+ * - May import the quota capability contract, Adapter-local
21
+ * credentials, Adapter-local quota transport, and normalized
22
+ * errors.
23
+ * - Must NOT import command presentation or another Provider's
24
+ * Adapter.
25
+ */
26
+ import type { ProviderQuotaSuccess, QuotaCapability } from "../../capabilities/quota.js";
27
+ import { type SearchApiTransportDeps } from "./client.js";
28
+ /**
29
+ * Normalize a raw SearchApi.io `/api/v1/me` payload into the shared
30
+ * quota interface.
31
+ *
32
+ * The `account` object must carry finite `current_month_usage`,
33
+ * `monthly_allowance`, and `remaining_credits`; a missing/non-object
34
+ * root or account, or any non-finite count, is a malformed response and
35
+ * throws `ApiError` 500. On success a single `"searches"` category
36
+ * (`unit: "credits"`) is built through
37
+ * `buildQuotaWindow({ used, limit, resetsAtEpochMs })`, where
38
+ * `resetsAtEpochMs` is `parseZonedInstant(subscription.period_end)` when
39
+ * that parses (a zone-less form is anchored to UTC) and is omitted
40
+ * otherwise.
41
+ */
42
+ export declare function normalizeSearchApiQuota(raw: unknown): ProviderQuotaSuccess;
43
+ /**
44
+ * Options for the SearchApi.io QuotaCapability. The API key is resolved
45
+ * from `env`; transport dependencies (`fetch`, timers) are injectable
46
+ * for deterministic tests through the unified `transport` seam.
47
+ */
48
+ export interface SearchApiQuotaCapabilityOptions {
49
+ readonly env: NodeJS.ProcessEnv;
50
+ readonly transport?: SearchApiTransportDeps;
51
+ }
52
+ /**
53
+ * Build the SearchApi.io QuotaCapability. `invoke` resolves the API key,
54
+ * performs one non-destructive GET against `/api/v1/me` (not a search —
55
+ * costs no credit), and normalizes the account counts into the shared
56
+ * interface. Shared execution wraps this in the retry policy; quota
57
+ * never uses the response cache.
58
+ */
59
+ export declare function createSearchApiQuotaCapability(options: SearchApiQuotaCapabilityOptions): QuotaCapability;
60
+ //# sourceMappingURL=quota.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"quota.d.ts","sourceRoot":"","sources":["../../../src/providers/searchapi/quota.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AAEH,OAAO,KAAK,EACV,oBAAoB,EACpB,eAAe,EAEhB,MAAM,6BAA6B,CAAC;AAKrC,OAAO,EAAoB,KAAK,sBAAsB,EAAE,MAAM,aAAa,CAAC;AAgB5E;;;;;;;;;;;;;GAaG;AACH,wBAAgB,uBAAuB,CAAC,GAAG,EAAE,OAAO,GAAG,oBAAoB,CAmC1E;AAoBD;;;;GAIG;AACH,MAAM,WAAW,+BAA+B;IAC9C,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC,UAAU,CAAC;IAChC,QAAQ,CAAC,SAAS,CAAC,EAAE,sBAAsB,CAAC;CAC7C;AAED;;;;;;GAMG;AACH,wBAAgB,8BAA8B,CAC5C,OAAO,EAAE,+BAA+B,GACvC,eAAe,CAajB"}
@@ -0,0 +1,125 @@
1
+ /**
2
+ * SearchApi.io Quota Capability.
3
+ *
4
+ * Maps the SearchApi.io `GET /api/v1/me` response into the normalized
5
+ * Provider-quota interface. SearchApi is credit-based: `account`
6
+ * carries the current-month usage, the monthly allowance, and the
7
+ * remaining credits. The single "searches" category (unit `"credits"`)
8
+ * is built from `used = current_month_usage` and
9
+ * `limit = monthly_allowance`, with `resetsAt` derived from
10
+ * `subscription.period_end` when it parses. `remaining_credits` is
11
+ * required by the wire contract but is not re-published verbatim —
12
+ * `buildQuotaWindow` derives the honest `remaining` from the counts.
13
+ *
14
+ * Structurally cloned from the Linkup quota pattern (non-destructive
15
+ * GET, IMPLEMENTATION-CONTRACT analog-adapter table): one direct GET
16
+ * per invoke, shared execution owns retry policy, quota never uses the
17
+ * response cache.
18
+ *
19
+ * Boundary rules (ARCHITECTURE.md §2):
20
+ * - May import the quota capability contract, Adapter-local
21
+ * credentials, Adapter-local quota transport, and normalized
22
+ * errors.
23
+ * - Must NOT import command presentation or another Provider's
24
+ * Adapter.
25
+ */
26
+ import { buildQuotaWindow } from "../../capabilities/quota.js";
27
+ import { ApiError, ScoutlineError } from "../../lib/errors.js";
28
+ import { parseZonedInstant } from "../../lib/parse-zoned-instant.js";
29
+ import { requireSearchApiKey } from "./credentials.js";
30
+ import { fetchSearchApiMe } from "./client.js";
31
+ function isPlainObject(value) {
32
+ return typeof value === "object" && value !== null && !Array.isArray(value);
33
+ }
34
+ /** Read a finite NONNEGATIVE number, or `undefined` for anything else. */
35
+ function readFiniteNumber(value) {
36
+ return typeof value === "number" && Number.isFinite(value) && value >= 0 ? value : undefined;
37
+ }
38
+ // ---------------------------------------------------------------------------
39
+ // Normalizer
40
+ // ---------------------------------------------------------------------------
41
+ /**
42
+ * Normalize a raw SearchApi.io `/api/v1/me` payload into the shared
43
+ * quota interface.
44
+ *
45
+ * The `account` object must carry finite `current_month_usage`,
46
+ * `monthly_allowance`, and `remaining_credits`; a missing/non-object
47
+ * root or account, or any non-finite count, is a malformed response and
48
+ * throws `ApiError` 500. On success a single `"searches"` category
49
+ * (`unit: "credits"`) is built through
50
+ * `buildQuotaWindow({ used, limit, resetsAtEpochMs })`, where
51
+ * `resetsAtEpochMs` is `parseZonedInstant(subscription.period_end)` when
52
+ * that parses (a zone-less form is anchored to UTC) and is omitted
53
+ * otherwise.
54
+ */
55
+ export function normalizeSearchApiQuota(raw) {
56
+ if (!isPlainObject(raw)) {
57
+ throw new ApiError("SearchApi.io quota returned a malformed response", 500);
58
+ }
59
+ const account = raw.account;
60
+ if (!isPlainObject(account)) {
61
+ throw new ApiError("SearchApi.io quota returned a malformed response", 500);
62
+ }
63
+ const used = readFiniteNumber(account.current_month_usage);
64
+ const limit = readFiniteNumber(account.monthly_allowance);
65
+ const remainingCredits = readFiniteNumber(account.remaining_credits);
66
+ if (used === undefined || limit === undefined || remainingCredits === undefined) {
67
+ throw new ApiError("SearchApi.io quota returned a malformed response", 500);
68
+ }
69
+ const subscription = isPlainObject(raw.subscription) ? raw.subscription : undefined;
70
+ const periodEnd = subscription ? subscription.period_end : undefined;
71
+ const resetsAtEpochMs = typeof periodEnd === "string" ? parseZonedInstant(periodEnd) : NaN;
72
+ const inputs = { used, limit };
73
+ if (Number.isFinite(resetsAtEpochMs)) {
74
+ inputs.resetsAtEpochMs = resetsAtEpochMs;
75
+ }
76
+ const category = {
77
+ name: "searches",
78
+ unit: "credits",
79
+ current: buildQuotaWindow(inputs),
80
+ };
81
+ return {
82
+ provider: "searchapi",
83
+ status: "ok",
84
+ categories: [category],
85
+ };
86
+ }
87
+ // ---------------------------------------------------------------------------
88
+ // Capability factory
89
+ // ---------------------------------------------------------------------------
90
+ /**
91
+ * Map a thrown error into a normalized SearchApi.io quota error. Every
92
+ * typed transport error (ConfigurationError, QuotaError, ApiError,
93
+ * TimeoutError, NetworkError) extends {@link ScoutlineError}, so the
94
+ * single guard passes them through verbatim; anything else is wrapped
95
+ * as a generic `ApiError`.
96
+ */
97
+ function normalizeSearchApiQuotaError(error) {
98
+ if (error instanceof ScoutlineError) {
99
+ return error;
100
+ }
101
+ return new ApiError("SearchApi.io quota request failed", 500);
102
+ }
103
+ /**
104
+ * Build the SearchApi.io QuotaCapability. `invoke` resolves the API key,
105
+ * performs one non-destructive GET against `/api/v1/me` (not a search —
106
+ * costs no credit), and normalizes the account counts into the shared
107
+ * interface. Shared execution wraps this in the retry policy; quota
108
+ * never uses the response cache.
109
+ */
110
+ export function createSearchApiQuotaCapability(options) {
111
+ const { env, transport } = options;
112
+ return {
113
+ async invoke() {
114
+ const apiKey = requireSearchApiKey(env);
115
+ try {
116
+ const raw = await fetchSearchApiMe(apiKey, transport);
117
+ return normalizeSearchApiQuota(raw);
118
+ }
119
+ catch (error) {
120
+ throw normalizeSearchApiQuotaError(error);
121
+ }
122
+ },
123
+ };
124
+ }
125
+ //# sourceMappingURL=quota.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"quota.js","sourceRoot":"","sources":["../../../src/providers/searchapi/quota.ts"],"names":[],"mappings":"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"}
@@ -28,6 +28,8 @@ export interface SpiderSearchParams {
28
28
  /** Domain allowlist mapped from `controls.domain`. */
29
29
  readonly whitelist?: readonly string[];
30
30
  }
31
+ /** `SPIDER_TIMEOUT` override, clamped through the shared seam (#234). */
32
+ export declare function resolveTimeoutMs(env: NodeJS.ProcessEnv): number;
31
33
  /**
32
34
  * Perform ONE POST against the Spider.cloud /search endpoint. No retry;
33
35
  * no response body in public errors. Returns the parsed JSON value (raw;
@@ -1 +1 @@
1
- {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../../src/providers/spider/client.ts"],"names":[],"mappings":"AAyBA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AActD,8DAA8D;AAC9D,MAAM,WAAW,mBAAmB;IAClC,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;;;;;;;GAOG;AACH,MAAM,WAAW,kBAAkB;IACjC,wDAAwD;IACxD,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,kEAAkE;IAClE,QAAQ,CAAC,aAAa,CAAC,EAAE,UAAU,GAAG,KAAK,GAAG,MAAM,CAAC;IACrD,yEAAyE;IACzE,QAAQ,CAAC,QAAQ,CAAC,EAAE,OAAO,CAAC;IAC5B,oDAAoD;IACpD,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC;IAC/B,kEAAkE;IAClE,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC;IACtB,sDAAsD;IACtD,QAAQ,CAAC,SAAS,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;CACxC;AAyGD;;;;;;;GAOG;AACH,wBAAsB,iBAAiB,CACrC,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,kBAAkB,EAC1B,IAAI,GAAE,mBAAwB,GAC7B,OAAO,CAAC,OAAO,CAAC,CAkBlB;AAED;;;;;;;GAOG;AACH,MAAM,WAAW,kBAAkB;IACjC,0BAA0B;IAC1B,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,sEAAsE;IACtE,QAAQ,CAAC,aAAa,EAAE,UAAU,GAAG,MAAM,CAAC;IAC5C,wDAAwD;IACxD,QAAQ,CAAC,uBAAuB,EAAE,IAAI,CAAC;IACvC,uDAAuD;IACvD,QAAQ,CAAC,OAAO,EAAE,IAAI,CAAC;CACxB;AAED;;;;;;;GAOG;AACH,wBAAsB,iBAAiB,CACrC,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,kBAAkB,EAC1B,IAAI,GAAE,mBAAwB,EAC9B,MAAM,CAAC,EAAE,WAAW,GACnB,OAAO,CAAC,OAAO,CAAC,CAQlB;AAED;;;;;;;;;GASG;AACH,MAAM,WAAW,iBAAiB;IAChC,yBAAyB;IACzB,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,mDAAmD;IACnD,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB,wCAAwC;IACxC,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB,sEAAsE;IACtE,QAAQ,CAAC,aAAa,EAAE,UAAU,GAAG,MAAM,CAAC;CAC7C;AAED;;;;;GAKG;AACH,wBAAsB,gBAAgB,CACpC,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,iBAAiB,EACzB,IAAI,GAAE,mBAAwB,GAC7B,OAAO,CAAC,OAAO,CAAC,CAYlB;AAED;;;;;;GAMG;AACH,MAAM,WAAW,iBAAiB;IAChC,uBAAuB;IACvB,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,mDAAmD;IACnD,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;CACzB;AAED;;;;GAIG;AACH,wBAAsB,gBAAgB,CACpC,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,iBAAiB,EACzB,IAAI,GAAE,mBAAwB,GAC7B,OAAO,CAAC,OAAO,CAAC,CAMlB;AAmDD;;;;;;;GAOG;AACH,wBAAsB,kBAAkB,CACtC,MAAM,EAAE,MAAM,EACd,IAAI,GAAE,mBAAwB,GAC7B,OAAO,CAAC,OAAO,CAAC,CAElB"}
1
+ {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../../src/providers/spider/client.ts"],"names":[],"mappings":"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"}
@@ -24,6 +24,7 @@
24
24
  import pkg from "../../../package.json" with { type: "json" };
25
25
  import { ApiError, AuthError, NetworkError, TimeoutError } from "../../lib/errors.js";
26
26
  import { getGlobalFetch } from "../types.js";
27
+ import { clampTimeoutMs } from "../../lib/timeout.js";
27
28
  const { version: VERSION } = pkg;
28
29
  const BASE_URL = "https://api.spider.cloud";
29
30
  const SEARCH_PATH = "/search";
@@ -33,6 +34,11 @@ const LINKS_PATH = "/links";
33
34
  const CREDITS_PATH = "/data/credits";
34
35
  const DEFAULT_TIMEOUT_MS = 30000;
35
36
  const USER_AGENT = `scoutline/${VERSION}`;
37
+ /** `SPIDER_TIMEOUT` override, clamped through the shared seam (#234). */
38
+ export function resolveTimeoutMs(env) {
39
+ const raw = parseInt(env.SPIDER_TIMEOUT || String(DEFAULT_TIMEOUT_MS), 10);
40
+ return clampTimeoutMs(raw, DEFAULT_TIMEOUT_MS);
41
+ }
36
42
  /**
37
43
  * Layer 1 — HTTP-status mapping. Runs BEFORE the body is parsed; on a
38
44
  * non-2xx response we discard the body and throw a typed error.
@@ -81,9 +87,11 @@ async function postSpiderJson(apiKey, path, body, deps, endpointLabel, signal) {
81
87
  const f = deps.fetch ?? getGlobalFetch();
82
88
  const setT = deps.setTimeout ?? setTimeout;
83
89
  const clearT = deps.clearTimeout ?? clearTimeout;
90
+ const env = deps.env ?? process.env;
91
+ const timeoutMs = resolveTimeoutMs(env);
84
92
  const url = `${BASE_URL}${path}`;
85
93
  const controller = new AbortController();
86
- const timeoutId = setT(() => controller.abort(), DEFAULT_TIMEOUT_MS);
94
+ const timeoutId = setT(() => controller.abort(), timeoutMs);
87
95
  const abortWithExternal = () => controller.abort();
88
96
  if (signal !== undefined) {
89
97
  if (signal.aborted) {
@@ -106,7 +114,7 @@ async function postSpiderJson(apiKey, path, body, deps, endpointLabel, signal) {
106
114
  });
107
115
  if (!res.ok) {
108
116
  await res.text().catch(() => { });
109
- throw mapStatusError(res.status, DEFAULT_TIMEOUT_MS);
117
+ throw mapStatusError(res.status, timeoutMs);
110
118
  }
111
119
  try {
112
120
  return await res.json();
@@ -121,7 +129,7 @@ async function postSpiderJson(apiKey, path, body, deps, endpointLabel, signal) {
121
129
  }
122
130
  }
123
131
  catch (err) {
124
- throw normalizeTransportError(err, DEFAULT_TIMEOUT_MS);
132
+ throw normalizeTransportError(err, timeoutMs);
125
133
  }
126
134
  finally {
127
135
  if (signal !== undefined) {
@@ -217,9 +225,11 @@ async function getSpiderJson(apiKey, path, deps, endpointLabel) {
217
225
  const f = deps.fetch ?? getGlobalFetch();
218
226
  const setT = deps.setTimeout ?? setTimeout;
219
227
  const clearT = deps.clearTimeout ?? clearTimeout;
228
+ const env = deps.env ?? process.env;
229
+ const timeoutMs = resolveTimeoutMs(env);
220
230
  const url = `${BASE_URL}${path}`;
221
231
  const controller = new AbortController();
222
- const timeoutId = setT(() => controller.abort(), DEFAULT_TIMEOUT_MS);
232
+ const timeoutId = setT(() => controller.abort(), timeoutMs);
223
233
  try {
224
234
  const res = await f(url, {
225
235
  method: "GET",
@@ -231,7 +241,7 @@ async function getSpiderJson(apiKey, path, deps, endpointLabel) {
231
241
  });
232
242
  if (!res.ok) {
233
243
  await res.text().catch(() => { });
234
- throw mapStatusError(res.status, DEFAULT_TIMEOUT_MS);
244
+ throw mapStatusError(res.status, timeoutMs);
235
245
  }
236
246
  try {
237
247
  return await res.json();
@@ -246,7 +256,7 @@ async function getSpiderJson(apiKey, path, deps, endpointLabel) {
246
256
  }
247
257
  }
248
258
  catch (err) {
249
- throw normalizeTransportError(err, DEFAULT_TIMEOUT_MS);
259
+ throw normalizeTransportError(err, timeoutMs);
250
260
  }
251
261
  finally {
252
262
  clearT(timeoutId);
@@ -1 +1 @@
1
- {"version":3,"file":"client.js","sourceRoot":"","sources":["../../../src/providers/spider/client.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"client.js","sourceRoot":"","sources":["../../../src/providers/spider/client.ts"],"names":[],"mappings":"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"}
@@ -17,6 +17,8 @@
17
17
  * (exit 3), distinct from {@link AuthError} (exit 1) which means the
18
18
  * Provider REJECTED a presented credential.
19
19
  */
20
+ /** Credential environment names read by this module (#232 derivation pin). */
21
+ export declare const ENV_NAMES: readonly ["SPIDER_API_KEY"];
20
22
  /**
21
23
  * Resolve the Spider.cloud API key without throwing. Returns the
22
24
  * trimmed key, or `undefined` when no non-blank value is present.
@@ -1 +1 @@
1
- {"version":3,"file":"credentials.d.ts","sourceRoot":"","sources":["../../../src/providers/spider/credentials.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAiBH;;;GAGG;AACH,wBAAgB,eAAe,CAAC,GAAG,EAAE,MAAM,CAAC,UAAU,GAAG,MAAM,GAAG,SAAS,CAE1E;AAED;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,MAAM,CAAC,UAAU,GAAG,MAAM,CASlE"}
1
+ {"version":3,"file":"credentials.d.ts","sourceRoot":"","sources":["../../../src/providers/spider/credentials.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAIH,8EAA8E;AAC9E,eAAO,MAAM,SAAS,YAAI,gBAAgB,CAAU,CAAC;AAerD;;;GAGG;AACH,wBAAgB,eAAe,CAAC,GAAG,EAAE,MAAM,CAAC,UAAU,GAAG,MAAM,GAAG,SAAS,CAE1E;AAED;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,MAAM,CAAC,UAAU,GAAG,MAAM,CASlE"}
@@ -18,6 +18,8 @@
18
18
  * Provider REJECTED a presented credential.
19
19
  */
20
20
  import { ConfigurationError } from "../../lib/errors.js";
21
+ /** Credential environment names read by this module (#232 derivation pin). */
22
+ export const ENV_NAMES = ["SPIDER_API_KEY"];
21
23
  const MISSING_KEY_HELP = 'export SPIDER_API_KEY="your-api-key"';
22
24
  /**
23
25
  * Pick a non-blank value from the environment. Returns the trimmed
@@ -1 +1 @@
1
- {"version":3,"file":"credentials.js","sourceRoot":"","sources":["../../../src/providers/spider/credentials.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAEH,OAAO,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AAEzD,MAAM,gBAAgB,GAAG,sCAAsC,CAAC;AAEhE;;;;GAIG;AACH,SAAS,YAAY,CAAC,GAAY;IAChC,IAAI,OAAO,GAAG,KAAK,QAAQ;QAAE,OAAO,SAAS,CAAC;IAC9C,MAAM,OAAO,GAAG,GAAG,CAAC,IAAI,EAAE,CAAC;IAC3B,OAAO,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC;AAClD,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,eAAe,CAAC,GAAsB;IACpD,OAAO,YAAY,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;AAC1C,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,mBAAmB,CAAC,GAAsB;IACxD,MAAM,GAAG,GAAG,eAAe,CAAC,GAAG,CAAC,CAAC;IACjC,IAAI,GAAG,KAAK,SAAS,EAAE,CAAC;QACtB,MAAM,IAAI,kBAAkB,CAC1B,iDAAiD,EACjD,gBAAgB,CACjB,CAAC;IACJ,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC"}
1
+ {"version":3,"file":"credentials.js","sourceRoot":"","sources":["../../../src/providers/spider/credentials.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAEH,OAAO,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AAEzD,8EAA8E;AAC9E,MAAM,CAAC,MAAM,SAAS,GAAG,CAAC,gBAAgB,CAAU,CAAC;AAErD,MAAM,gBAAgB,GAAG,sCAAsC,CAAC;AAEhE;;;;GAIG;AACH,SAAS,YAAY,CAAC,GAAY;IAChC,IAAI,OAAO,GAAG,KAAK,QAAQ;QAAE,OAAO,SAAS,CAAC;IAC9C,MAAM,OAAO,GAAG,GAAG,CAAC,IAAI,EAAE,CAAC;IAC3B,OAAO,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC;AAClD,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,eAAe,CAAC,GAAsB;IACpD,OAAO,YAAY,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;AAC1C,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,mBAAmB,CAAC,GAAsB;IACxD,MAAM,GAAG,GAAG,eAAe,CAAC,GAAG,CAAC,CAAC;IACjC,IAAI,GAAG,KAAK,SAAS,EAAE,CAAC;QACtB,MAAM,IAAI,kBAAkB,CAC1B,iDAAiD,EACjD,gBAAgB,CACjB,CAAC;IACJ,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC"}
@@ -133,6 +133,7 @@ export interface TavilyResearchPollSource {
133
133
  readonly title?: string;
134
134
  readonly url?: string;
135
135
  }
136
+ export declare function resolveTimeoutMs(env: NodeJS.ProcessEnv): number;
136
137
  /**
137
138
  * Perform ONE POST against the Tavily /search endpoint. No retry; no
138
139
  * response body in public errors. Returns the parsed JSON body (raw;
@@ -1 +1 @@
1
- {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../../src/providers/tavily/client.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../../src/providers/tavily/client.ts"],"names":[],"mappings":"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"}
@@ -25,6 +25,7 @@
25
25
  */
26
26
  import pkg from "../../../package.json" with { type: "json" };
27
27
  import { ApiError, AuthError, NetworkError, TimeoutError } from "../../lib/errors.js";
28
+ import { clampTimeoutMs } from "../../lib/timeout.js";
28
29
  import { getGlobalFetch } from "../types.js";
29
30
  const { version: VERSION } = pkg;
30
31
  const BASE_URL = "https://api.tavily.com";
@@ -37,9 +38,9 @@ const USAGE_PATH = "/usage";
37
38
  const DEFAULT_TIMEOUT_MS = 30000;
38
39
  const USER_AGENT = `scoutline/${VERSION}`;
39
40
  const TIMEOUT_HELP_TEXT = "Try again or increase timeout with TAVILY_TIMEOUT env var";
40
- function resolveTimeoutMs(env) {
41
+ export function resolveTimeoutMs(env) {
41
42
  const raw = parseInt(env.TAVILY_TIMEOUT || String(DEFAULT_TIMEOUT_MS), 10);
42
- return Number.isFinite(raw) && raw > 0 ? raw : DEFAULT_TIMEOUT_MS;
43
+ return clampTimeoutMs(raw, DEFAULT_TIMEOUT_MS);
43
44
  }
44
45
  /**
45
46
  * Layer 1 — HTTP-status mapping. Runs BEFORE the body is parsed; on a