@graphext/cuery 0.10.5 → 0.10.6
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/esm/src/apis/hasdata/aio.d.ts.map +1 -1
- package/esm/src/apis/hasdata/aio.js +7 -29
- package/esm/src/apis/hasdata/serp.d.ts +40 -5
- package/esm/src/apis/hasdata/serp.d.ts.map +1 -1
- package/esm/src/apis/hasdata/serp.js +4 -6
- package/package.json +1 -1
- package/script/src/apis/hasdata/aio.d.ts.map +1 -1
- package/script/src/apis/hasdata/aio.js +6 -28
- package/script/src/apis/hasdata/serp.d.ts +40 -5
- package/script/src/apis/hasdata/serp.d.ts.map +1 -1
- package/script/src/apis/hasdata/serp.js +4 -6
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"aio.d.ts","sourceRoot":"","sources":["../../../../src/src/apis/hasdata/aio.ts"],"names":[],"mappings":"AAGA,OAAO,
|
|
1
|
+
{"version":3,"file":"aio.d.ts","sourceRoot":"","sources":["../../../../src/src/apis/hasdata/aio.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,KAAK,SAAS,EAAuB,MAAM,cAAc,CAAC;AAGnE,wBAAsB,QAAQ,CAC7B,MAAM,EAAE,MAAM,EACd,OAAO,GAAE,MAAM,GAAG,IAAW,EAC7B,QAAQ,GAAE,MAAM,GAAG,IAAW,GAC5B,OAAO,CAAC,SAAS,CAAC,CAWpB;AAED,wBAAsB,aAAa,CAClC,OAAO,EAAE,KAAK,CAAC,MAAM,CAAC,EACtB,OAAO,GAAE,MAAM,GAAG,IAAW,EAC7B,QAAQ,GAAE,MAAM,GAAG,IAAW,EAC9B,cAAc,GAAE,MAA4B,GAC1C,OAAO,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAM3B"}
|
|
@@ -1,36 +1,14 @@
|
|
|
1
1
|
/* eslint no-console: ["warn", { allow: ["log", "warn", "error"] }] */
|
|
2
2
|
import { mapParallel } from '../../helpers/async.js';
|
|
3
|
-
import {
|
|
4
|
-
|
|
5
|
-
if (aio.pageToken && aio.hasdataLink) {
|
|
6
|
-
return aio.hasdataLink;
|
|
7
|
-
}
|
|
8
|
-
return null;
|
|
9
|
-
}
|
|
3
|
+
import { HASDATA_CONCURRENCY } from './helpers.js';
|
|
4
|
+
import { fetchSerp } from './serp.js';
|
|
10
5
|
export async function fetchAIO(prompt, country = null, language = null) {
|
|
11
|
-
const serpEndpoint = 'https://api.hasdata.com/scrape/google/serp';
|
|
12
|
-
const params = { q: prompt };
|
|
13
|
-
if (country) {
|
|
14
|
-
params.gl = country.toLowerCase();
|
|
15
|
-
}
|
|
16
|
-
if (language) {
|
|
17
|
-
params.hl = language.toLowerCase();
|
|
18
|
-
}
|
|
19
|
-
const url = new URL(serpEndpoint);
|
|
20
|
-
for (const [key, value] of Object.entries(params)) {
|
|
21
|
-
url.searchParams.set(key, value);
|
|
22
|
-
}
|
|
23
6
|
try {
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
response = await fetchHasDataWithRetry(aioUrlString);
|
|
30
|
-
content = await response.json();
|
|
31
|
-
aio = content.aiOverview || {};
|
|
32
|
-
}
|
|
33
|
-
return parseAIO(aio);
|
|
7
|
+
const serp = await fetchSerp(prompt, {
|
|
8
|
+
country: country || undefined,
|
|
9
|
+
language: language || undefined,
|
|
10
|
+
});
|
|
11
|
+
return serp.aiOverview || { answer: '', sources: [] };
|
|
34
12
|
}
|
|
35
13
|
catch (error) {
|
|
36
14
|
console.error('HasData API error:', error);
|
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
import { type
|
|
1
|
+
import { type AIOParsed, type AIOverview } from './helpers.js';
|
|
2
2
|
type SerpSearchType = 'all' | 'images' | 'videos' | 'news' | 'shopping' | 'local';
|
|
3
3
|
export interface SerpRequestOptions {
|
|
4
|
-
location
|
|
5
|
-
country
|
|
6
|
-
language
|
|
4
|
+
location?: string;
|
|
5
|
+
country?: string;
|
|
6
|
+
language?: string;
|
|
7
7
|
contentLanguage?: string;
|
|
8
8
|
domain?: string;
|
|
9
9
|
filters?: string | Array<string>;
|
|
@@ -49,14 +49,19 @@ export interface SerpOrganicResult {
|
|
|
49
49
|
source?: string;
|
|
50
50
|
snippet?: string;
|
|
51
51
|
snippetHighlitedWords?: Array<string>;
|
|
52
|
+
date?: string;
|
|
52
53
|
images?: Array<string>;
|
|
53
54
|
richSnippet?: SerpRichSnippet;
|
|
54
55
|
sitelinks?: SerpSiteLinks;
|
|
55
56
|
}
|
|
57
|
+
export interface SerpAnswerBox extends SerpOrganicResult {
|
|
58
|
+
type?: string;
|
|
59
|
+
}
|
|
56
60
|
export interface SerpRequestMetadata {
|
|
57
61
|
id?: string;
|
|
58
62
|
status?: string;
|
|
59
63
|
html?: string;
|
|
64
|
+
json?: string;
|
|
60
65
|
url?: string;
|
|
61
66
|
}
|
|
62
67
|
export interface SerpSearchInformation {
|
|
@@ -64,6 +69,8 @@ export interface SerpSearchInformation {
|
|
|
64
69
|
formattedTotalResults?: string;
|
|
65
70
|
timeTaken?: number;
|
|
66
71
|
searchTime?: number;
|
|
72
|
+
queryDisplayed?: string;
|
|
73
|
+
organicResultsState?: string;
|
|
67
74
|
}
|
|
68
75
|
export interface SerpLocalPlace {
|
|
69
76
|
position?: number;
|
|
@@ -71,10 +78,13 @@ export interface SerpLocalPlace {
|
|
|
71
78
|
rating?: number;
|
|
72
79
|
reviews?: number;
|
|
73
80
|
reviewsOriginal?: string;
|
|
81
|
+
phone?: string;
|
|
74
82
|
address?: string;
|
|
75
83
|
hours?: string;
|
|
76
84
|
placeId?: string;
|
|
77
85
|
description?: string;
|
|
86
|
+
type?: string;
|
|
87
|
+
links?: Record<string, string>;
|
|
78
88
|
}
|
|
79
89
|
export interface SerpLocalResults {
|
|
80
90
|
places?: Array<SerpLocalPlace>;
|
|
@@ -95,6 +105,28 @@ export interface SerpRelatedQuestion {
|
|
|
95
105
|
table?: Array<Array<string>>;
|
|
96
106
|
aiOverview?: AIOverview;
|
|
97
107
|
}
|
|
108
|
+
export interface SerpDiscussionReply {
|
|
109
|
+
title?: string;
|
|
110
|
+
link?: string;
|
|
111
|
+
extensions?: Array<string>;
|
|
112
|
+
}
|
|
113
|
+
export interface SerpDiscussion {
|
|
114
|
+
title?: string;
|
|
115
|
+
link?: string;
|
|
116
|
+
date?: string;
|
|
117
|
+
extensions?: Array<string>;
|
|
118
|
+
source?: string;
|
|
119
|
+
replies?: Array<SerpDiscussionReply>;
|
|
120
|
+
}
|
|
121
|
+
export interface SerpInlineVideo {
|
|
122
|
+
position?: number;
|
|
123
|
+
title?: string;
|
|
124
|
+
link?: string;
|
|
125
|
+
duration?: string;
|
|
126
|
+
platform?: string;
|
|
127
|
+
channel?: string;
|
|
128
|
+
date?: string;
|
|
129
|
+
}
|
|
98
130
|
export interface SerpPerspective {
|
|
99
131
|
index?: number;
|
|
100
132
|
author?: string;
|
|
@@ -131,6 +163,7 @@ export interface SerpResponse {
|
|
|
131
163
|
searchMetadata?: Record<string, unknown>;
|
|
132
164
|
searchParameters?: Record<string, unknown>;
|
|
133
165
|
searchInformation?: SerpSearchInformation;
|
|
166
|
+
answerBox?: SerpAnswerBox;
|
|
134
167
|
organicResults?: Array<SerpOrganicResult>;
|
|
135
168
|
adsResults?: Array<Record<string, unknown>>;
|
|
136
169
|
localResults?: SerpLocalResults;
|
|
@@ -141,12 +174,14 @@ export interface SerpResponse {
|
|
|
141
174
|
relatedQuestions?: Array<SerpRelatedQuestion>;
|
|
142
175
|
imagesResults?: Array<Record<string, unknown>>;
|
|
143
176
|
videosResults?: Array<Record<string, unknown>>;
|
|
177
|
+
inlineVideos?: Array<SerpInlineVideo>;
|
|
144
178
|
perspectives?: Array<SerpPerspective>;
|
|
179
|
+
discussionsAndForums?: Array<SerpDiscussion>;
|
|
145
180
|
immersiveProducts?: Array<SerpImmersiveProduct>;
|
|
146
181
|
pagination?: SerpPagination;
|
|
147
182
|
aiOverview?: AIOParsed;
|
|
148
183
|
}
|
|
149
184
|
export declare function fetchSerp(query: string, options: SerpRequestOptions): Promise<SerpResponse>;
|
|
150
|
-
export declare function fetchSerpBatch(queries: Array<string>, options
|
|
185
|
+
export declare function fetchSerpBatch(queries: Array<string>, options?: SerpRequestOptions, maxConcurrency?: number): Promise<Array<SerpResponse>>;
|
|
151
186
|
export {};
|
|
152
187
|
//# sourceMappingURL=serp.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"serp.d.ts","sourceRoot":"","sources":["../../../../src/src/apis/hasdata/serp.ts"],"names":[],"mappings":"AAGA,OAAO,
|
|
1
|
+
{"version":3,"file":"serp.d.ts","sourceRoot":"","sources":["../../../../src/src/apis/hasdata/serp.ts"],"names":[],"mappings":"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"}
|
|
@@ -6,7 +6,7 @@ const SEARCH_TYPE_TO_TBM = {
|
|
|
6
6
|
videos: 'vid',
|
|
7
7
|
news: 'nws',
|
|
8
8
|
shopping: 'shop',
|
|
9
|
-
local: 'lcl'
|
|
9
|
+
local: 'lcl',
|
|
10
10
|
};
|
|
11
11
|
const SERP_ENDPOINT = 'https://api.hasdata.com/scrape/google/serp';
|
|
12
12
|
function appendParam(url, key, value) {
|
|
@@ -42,7 +42,7 @@ function normalizeTbs(value) {
|
|
|
42
42
|
return undefined;
|
|
43
43
|
}
|
|
44
44
|
if (Array.isArray(value)) {
|
|
45
|
-
return value.map(entry => entry.trim()).filter(Boolean).join(',');
|
|
45
|
+
return value.map((entry) => entry.trim()).filter(Boolean).join(',');
|
|
46
46
|
}
|
|
47
47
|
return value;
|
|
48
48
|
}
|
|
@@ -66,9 +66,7 @@ function applySerpParams(url, options) {
|
|
|
66
66
|
}
|
|
67
67
|
if (options.safeSearch !== undefined) {
|
|
68
68
|
const safeValue = typeof options.safeSearch === 'boolean'
|
|
69
|
-
? options.safeSearch
|
|
70
|
-
? 'active'
|
|
71
|
-
: 'off'
|
|
69
|
+
? options.safeSearch ? 'active' : 'off'
|
|
72
70
|
: options.safeSearch;
|
|
73
71
|
appendParam(url, 'safe', safeValue);
|
|
74
72
|
}
|
|
@@ -123,7 +121,7 @@ export async function fetchSerp(query, options) {
|
|
|
123
121
|
applySerpParams(url, options);
|
|
124
122
|
return fetchSerpInternal(url.toString());
|
|
125
123
|
}
|
|
126
|
-
export async function fetchSerpBatch(queries, options, maxConcurrency = HASDATA_CONCURRENCY) {
|
|
124
|
+
export async function fetchSerpBatch(queries, options = {}, maxConcurrency = HASDATA_CONCURRENCY) {
|
|
127
125
|
const url = new URL(SERP_ENDPOINT);
|
|
128
126
|
applySerpParams(url, options);
|
|
129
127
|
return mapParallel(queries, maxConcurrency, async (query) => {
|
package/package.json
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"aio.d.ts","sourceRoot":"","sources":["../../../../src/src/apis/hasdata/aio.ts"],"names":[],"mappings":"AAGA,OAAO,
|
|
1
|
+
{"version":3,"file":"aio.d.ts","sourceRoot":"","sources":["../../../../src/src/apis/hasdata/aio.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,KAAK,SAAS,EAAuB,MAAM,cAAc,CAAC;AAGnE,wBAAsB,QAAQ,CAC7B,MAAM,EAAE,MAAM,EACd,OAAO,GAAE,MAAM,GAAG,IAAW,EAC7B,QAAQ,GAAE,MAAM,GAAG,IAAW,GAC5B,OAAO,CAAC,SAAS,CAAC,CAWpB;AAED,wBAAsB,aAAa,CAClC,OAAO,EAAE,KAAK,CAAC,MAAM,CAAC,EACtB,OAAO,GAAE,MAAM,GAAG,IAAW,EAC7B,QAAQ,GAAE,MAAM,GAAG,IAAW,EAC9B,cAAc,GAAE,MAA4B,GAC1C,OAAO,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAM3B"}
|
|
@@ -5,36 +5,14 @@ exports.fetchAIOBatch = fetchAIOBatch;
|
|
|
5
5
|
/* eslint no-console: ["warn", { allow: ["log", "warn", "error"] }] */
|
|
6
6
|
const async_js_1 = require("../../helpers/async.js");
|
|
7
7
|
const helpers_js_1 = require("./helpers.js");
|
|
8
|
-
|
|
9
|
-
if (aio.pageToken && aio.hasdataLink) {
|
|
10
|
-
return aio.hasdataLink;
|
|
11
|
-
}
|
|
12
|
-
return null;
|
|
13
|
-
}
|
|
8
|
+
const serp_js_1 = require("./serp.js");
|
|
14
9
|
async function fetchAIO(prompt, country = null, language = null) {
|
|
15
|
-
const serpEndpoint = 'https://api.hasdata.com/scrape/google/serp';
|
|
16
|
-
const params = { q: prompt };
|
|
17
|
-
if (country) {
|
|
18
|
-
params.gl = country.toLowerCase();
|
|
19
|
-
}
|
|
20
|
-
if (language) {
|
|
21
|
-
params.hl = language.toLowerCase();
|
|
22
|
-
}
|
|
23
|
-
const url = new URL(serpEndpoint);
|
|
24
|
-
for (const [key, value] of Object.entries(params)) {
|
|
25
|
-
url.searchParams.set(key, value);
|
|
26
|
-
}
|
|
27
10
|
try {
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
response = await (0, helpers_js_1.fetchHasDataWithRetry)(aioUrlString);
|
|
34
|
-
content = await response.json();
|
|
35
|
-
aio = content.aiOverview || {};
|
|
36
|
-
}
|
|
37
|
-
return (0, helpers_js_1.parseAIO)(aio);
|
|
11
|
+
const serp = await (0, serp_js_1.fetchSerp)(prompt, {
|
|
12
|
+
country: country || undefined,
|
|
13
|
+
language: language || undefined,
|
|
14
|
+
});
|
|
15
|
+
return serp.aiOverview || { answer: '', sources: [] };
|
|
38
16
|
}
|
|
39
17
|
catch (error) {
|
|
40
18
|
console.error('HasData API error:', error);
|
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
import { type
|
|
1
|
+
import { type AIOParsed, type AIOverview } from './helpers.js';
|
|
2
2
|
type SerpSearchType = 'all' | 'images' | 'videos' | 'news' | 'shopping' | 'local';
|
|
3
3
|
export interface SerpRequestOptions {
|
|
4
|
-
location
|
|
5
|
-
country
|
|
6
|
-
language
|
|
4
|
+
location?: string;
|
|
5
|
+
country?: string;
|
|
6
|
+
language?: string;
|
|
7
7
|
contentLanguage?: string;
|
|
8
8
|
domain?: string;
|
|
9
9
|
filters?: string | Array<string>;
|
|
@@ -49,14 +49,19 @@ export interface SerpOrganicResult {
|
|
|
49
49
|
source?: string;
|
|
50
50
|
snippet?: string;
|
|
51
51
|
snippetHighlitedWords?: Array<string>;
|
|
52
|
+
date?: string;
|
|
52
53
|
images?: Array<string>;
|
|
53
54
|
richSnippet?: SerpRichSnippet;
|
|
54
55
|
sitelinks?: SerpSiteLinks;
|
|
55
56
|
}
|
|
57
|
+
export interface SerpAnswerBox extends SerpOrganicResult {
|
|
58
|
+
type?: string;
|
|
59
|
+
}
|
|
56
60
|
export interface SerpRequestMetadata {
|
|
57
61
|
id?: string;
|
|
58
62
|
status?: string;
|
|
59
63
|
html?: string;
|
|
64
|
+
json?: string;
|
|
60
65
|
url?: string;
|
|
61
66
|
}
|
|
62
67
|
export interface SerpSearchInformation {
|
|
@@ -64,6 +69,8 @@ export interface SerpSearchInformation {
|
|
|
64
69
|
formattedTotalResults?: string;
|
|
65
70
|
timeTaken?: number;
|
|
66
71
|
searchTime?: number;
|
|
72
|
+
queryDisplayed?: string;
|
|
73
|
+
organicResultsState?: string;
|
|
67
74
|
}
|
|
68
75
|
export interface SerpLocalPlace {
|
|
69
76
|
position?: number;
|
|
@@ -71,10 +78,13 @@ export interface SerpLocalPlace {
|
|
|
71
78
|
rating?: number;
|
|
72
79
|
reviews?: number;
|
|
73
80
|
reviewsOriginal?: string;
|
|
81
|
+
phone?: string;
|
|
74
82
|
address?: string;
|
|
75
83
|
hours?: string;
|
|
76
84
|
placeId?: string;
|
|
77
85
|
description?: string;
|
|
86
|
+
type?: string;
|
|
87
|
+
links?: Record<string, string>;
|
|
78
88
|
}
|
|
79
89
|
export interface SerpLocalResults {
|
|
80
90
|
places?: Array<SerpLocalPlace>;
|
|
@@ -95,6 +105,28 @@ export interface SerpRelatedQuestion {
|
|
|
95
105
|
table?: Array<Array<string>>;
|
|
96
106
|
aiOverview?: AIOverview;
|
|
97
107
|
}
|
|
108
|
+
export interface SerpDiscussionReply {
|
|
109
|
+
title?: string;
|
|
110
|
+
link?: string;
|
|
111
|
+
extensions?: Array<string>;
|
|
112
|
+
}
|
|
113
|
+
export interface SerpDiscussion {
|
|
114
|
+
title?: string;
|
|
115
|
+
link?: string;
|
|
116
|
+
date?: string;
|
|
117
|
+
extensions?: Array<string>;
|
|
118
|
+
source?: string;
|
|
119
|
+
replies?: Array<SerpDiscussionReply>;
|
|
120
|
+
}
|
|
121
|
+
export interface SerpInlineVideo {
|
|
122
|
+
position?: number;
|
|
123
|
+
title?: string;
|
|
124
|
+
link?: string;
|
|
125
|
+
duration?: string;
|
|
126
|
+
platform?: string;
|
|
127
|
+
channel?: string;
|
|
128
|
+
date?: string;
|
|
129
|
+
}
|
|
98
130
|
export interface SerpPerspective {
|
|
99
131
|
index?: number;
|
|
100
132
|
author?: string;
|
|
@@ -131,6 +163,7 @@ export interface SerpResponse {
|
|
|
131
163
|
searchMetadata?: Record<string, unknown>;
|
|
132
164
|
searchParameters?: Record<string, unknown>;
|
|
133
165
|
searchInformation?: SerpSearchInformation;
|
|
166
|
+
answerBox?: SerpAnswerBox;
|
|
134
167
|
organicResults?: Array<SerpOrganicResult>;
|
|
135
168
|
adsResults?: Array<Record<string, unknown>>;
|
|
136
169
|
localResults?: SerpLocalResults;
|
|
@@ -141,12 +174,14 @@ export interface SerpResponse {
|
|
|
141
174
|
relatedQuestions?: Array<SerpRelatedQuestion>;
|
|
142
175
|
imagesResults?: Array<Record<string, unknown>>;
|
|
143
176
|
videosResults?: Array<Record<string, unknown>>;
|
|
177
|
+
inlineVideos?: Array<SerpInlineVideo>;
|
|
144
178
|
perspectives?: Array<SerpPerspective>;
|
|
179
|
+
discussionsAndForums?: Array<SerpDiscussion>;
|
|
145
180
|
immersiveProducts?: Array<SerpImmersiveProduct>;
|
|
146
181
|
pagination?: SerpPagination;
|
|
147
182
|
aiOverview?: AIOParsed;
|
|
148
183
|
}
|
|
149
184
|
export declare function fetchSerp(query: string, options: SerpRequestOptions): Promise<SerpResponse>;
|
|
150
|
-
export declare function fetchSerpBatch(queries: Array<string>, options
|
|
185
|
+
export declare function fetchSerpBatch(queries: Array<string>, options?: SerpRequestOptions, maxConcurrency?: number): Promise<Array<SerpResponse>>;
|
|
151
186
|
export {};
|
|
152
187
|
//# sourceMappingURL=serp.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"serp.d.ts","sourceRoot":"","sources":["../../../../src/src/apis/hasdata/serp.ts"],"names":[],"mappings":"AAGA,OAAO,
|
|
1
|
+
{"version":3,"file":"serp.d.ts","sourceRoot":"","sources":["../../../../src/src/apis/hasdata/serp.ts"],"names":[],"mappings":"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"}
|
|
@@ -10,7 +10,7 @@ const SEARCH_TYPE_TO_TBM = {
|
|
|
10
10
|
videos: 'vid',
|
|
11
11
|
news: 'nws',
|
|
12
12
|
shopping: 'shop',
|
|
13
|
-
local: 'lcl'
|
|
13
|
+
local: 'lcl',
|
|
14
14
|
};
|
|
15
15
|
const SERP_ENDPOINT = 'https://api.hasdata.com/scrape/google/serp';
|
|
16
16
|
function appendParam(url, key, value) {
|
|
@@ -46,7 +46,7 @@ function normalizeTbs(value) {
|
|
|
46
46
|
return undefined;
|
|
47
47
|
}
|
|
48
48
|
if (Array.isArray(value)) {
|
|
49
|
-
return value.map(entry => entry.trim()).filter(Boolean).join(',');
|
|
49
|
+
return value.map((entry) => entry.trim()).filter(Boolean).join(',');
|
|
50
50
|
}
|
|
51
51
|
return value;
|
|
52
52
|
}
|
|
@@ -70,9 +70,7 @@ function applySerpParams(url, options) {
|
|
|
70
70
|
}
|
|
71
71
|
if (options.safeSearch !== undefined) {
|
|
72
72
|
const safeValue = typeof options.safeSearch === 'boolean'
|
|
73
|
-
? options.safeSearch
|
|
74
|
-
? 'active'
|
|
75
|
-
: 'off'
|
|
73
|
+
? options.safeSearch ? 'active' : 'off'
|
|
76
74
|
: options.safeSearch;
|
|
77
75
|
appendParam(url, 'safe', safeValue);
|
|
78
76
|
}
|
|
@@ -127,7 +125,7 @@ async function fetchSerp(query, options) {
|
|
|
127
125
|
applySerpParams(url, options);
|
|
128
126
|
return fetchSerpInternal(url.toString());
|
|
129
127
|
}
|
|
130
|
-
async function fetchSerpBatch(queries, options, maxConcurrency = helpers_js_1.HASDATA_CONCURRENCY) {
|
|
128
|
+
async function fetchSerpBatch(queries, options = {}, maxConcurrency = helpers_js_1.HASDATA_CONCURRENCY) {
|
|
131
129
|
const url = new URL(SERP_ENDPOINT);
|
|
132
130
|
applySerpParams(url, options);
|
|
133
131
|
return (0, async_js_1.mapParallel)(queries, maxConcurrency, async (query) => {
|