aboutsummaryrefslogtreecommitdiff
path: root/castle-search/src/extract.ts
diff options
context:
space:
mode:
authorIgor Soarez <igor@soarez.org>2026-11-06 03:18:21 +0000
committerIgor Soarez <igor@soarez.org>2026-11-06 03:18:21 +0000
commit147b3b1507ebcdf5912fbd4c474c9dfb35265148 (patch)
tree804ab62ee7266e450482e00d40a5c9c467a1ef69 /castle-search/src/extract.ts
parent74ff9fdcb8b49a021b63ac2e6b0191e29754d0f3 (diff)
castle-search: read Brave again, and report genuine zero-hit searches as such
Brave: #results no longer exists on the live page; fall back to #main/main. It was reported as 'no results area at all', i.e. a rate limit. DuckDuckGo: its 'No results found' notice is itself a .result, so an empty search looked like broken markup. emptyMarker lets the probe say the engine itself reported no matches, and the error tells the caller to loosen the query instead of switching engines.
Diffstat (limited to 'castle-search/src/extract.ts')
-rw-r--r--castle-search/src/extract.ts9
1 files changed, 9 insertions, 0 deletions
diff --git a/castle-search/src/extract.ts b/castle-search/src/extract.ts
index 653942b..0284bb7 100644
--- a/castle-search/src/extract.ts
+++ b/castle-search/src/extract.ts
@@ -65,6 +65,8 @@ export type PageProbe = {
* and worth telling apart when diagnosing a zero-hit search.
*/
container: "found" | "none";
+ /** True when the engine's own "no matches" marker is on the page. */
+ empty: boolean;
results: SearchResult[];
};
@@ -279,6 +281,12 @@ export const buildProbeScript = (config: ExtractionConfig): string => String.raw
var challenge = null;
var results = [];
var container = "none";
+ var empty = false;
+ try {
+ empty = !!(CFG.emptyMarker && document.querySelector(CFG.emptyMarker));
+ } catch (e) {
+ empty = false;
+ }
try {
challenge = detectChallenge();
} catch (e) {
@@ -298,6 +306,7 @@ export const buildProbeScript = (config: ExtractionConfig): string => String.raw
readyState: document.readyState,
challenge: challenge,
container: container,
+ empty: empty,
results: results,
};
})()`;