@graphext/cuery 0.9.0 → 0.9.2

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 (59) hide show
  1. package/esm/mod.d.ts +4 -0
  2. package/esm/mod.d.ts.map +1 -1
  3. package/esm/mod.js +4 -0
  4. package/esm/src/apis/brightdata/index.d.ts +2 -0
  5. package/esm/src/apis/brightdata/index.d.ts.map +1 -0
  6. package/esm/src/apis/brightdata/index.js +1 -0
  7. package/esm/src/apis/brightdata/scrape.d.ts +30 -0
  8. package/esm/src/apis/brightdata/scrape.d.ts.map +1 -0
  9. package/esm/src/apis/brightdata/scrape.js +93 -0
  10. package/esm/src/apis/hasdata/aim.d.ts +4 -0
  11. package/esm/src/apis/hasdata/aim.d.ts.map +1 -0
  12. package/esm/src/apis/hasdata/aim.js +32 -0
  13. package/esm/src/apis/hasdata/aio.d.ts +4 -0
  14. package/esm/src/apis/hasdata/aio.d.ts.map +1 -0
  15. package/esm/src/apis/hasdata/aio.js +42 -0
  16. package/esm/src/apis/hasdata/helpers.d.ts +55 -0
  17. package/esm/src/apis/hasdata/helpers.d.ts.map +1 -0
  18. package/esm/src/apis/hasdata/helpers.js +182 -0
  19. package/esm/src/apis/hasdata/index.d.ts +6 -0
  20. package/esm/src/apis/hasdata/index.d.ts.map +1 -0
  21. package/esm/src/apis/hasdata/index.js +5 -0
  22. package/esm/src/apis/hasdata/scrape.d.ts +73 -0
  23. package/esm/src/apis/hasdata/scrape.d.ts.map +1 -0
  24. package/esm/src/apis/hasdata/scrape.js +310 -0
  25. package/esm/src/apis/hasdata/serp.d.ts +152 -0
  26. package/esm/src/apis/hasdata/serp.d.ts.map +1 -0
  27. package/esm/src/apis/hasdata/serp.js +133 -0
  28. package/esm/src/schemas/index.d.ts +6 -2
  29. package/esm/src/schemas/index.d.ts.map +1 -1
  30. package/package.json +1 -1
  31. package/script/mod.d.ts +4 -0
  32. package/script/mod.d.ts.map +1 -1
  33. package/script/mod.js +4 -0
  34. package/script/src/apis/brightdata/index.d.ts +2 -0
  35. package/script/src/apis/brightdata/index.d.ts.map +1 -0
  36. package/script/src/apis/brightdata/index.js +17 -0
  37. package/script/src/apis/brightdata/scrape.d.ts +30 -0
  38. package/script/src/apis/brightdata/scrape.d.ts.map +1 -0
  39. package/script/src/apis/brightdata/scrape.js +130 -0
  40. package/script/src/apis/hasdata/aim.d.ts +4 -0
  41. package/script/src/apis/hasdata/aim.d.ts.map +1 -0
  42. package/script/src/apis/hasdata/aim.js +36 -0
  43. package/script/src/apis/hasdata/aio.d.ts +4 -0
  44. package/script/src/apis/hasdata/aio.d.ts.map +1 -0
  45. package/script/src/apis/hasdata/aio.js +46 -0
  46. package/script/src/apis/hasdata/helpers.d.ts +55 -0
  47. package/script/src/apis/hasdata/helpers.d.ts.map +1 -0
  48. package/script/src/apis/hasdata/helpers.js +222 -0
  49. package/script/src/apis/hasdata/index.d.ts +6 -0
  50. package/script/src/apis/hasdata/index.d.ts.map +1 -0
  51. package/script/src/apis/hasdata/index.js +21 -0
  52. package/script/src/apis/hasdata/scrape.d.ts +73 -0
  53. package/script/src/apis/hasdata/scrape.d.ts.map +1 -0
  54. package/script/src/apis/hasdata/scrape.js +352 -0
  55. package/script/src/apis/hasdata/serp.d.ts +152 -0
  56. package/script/src/apis/hasdata/serp.d.ts.map +1 -0
  57. package/script/src/apis/hasdata/serp.js +137 -0
  58. package/script/src/schemas/index.d.ts +6 -2
  59. package/script/src/schemas/index.d.ts.map +1 -1
@@ -0,0 +1,137 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.fetchSerp = fetchSerp;
4
+ exports.fetchSerpBatch = fetchSerpBatch;
5
+ /* eslint no-console: ["warn", { allow: ["log", "warn", "error"] }] */
6
+ const async_js_1 = require("../../helpers/async.js");
7
+ const helpers_js_1 = require("./helpers.js");
8
+ const SEARCH_TYPE_TO_TBM = {
9
+ images: 'isch',
10
+ videos: 'vid',
11
+ news: 'nws',
12
+ shopping: 'shop',
13
+ local: 'lcl'
14
+ };
15
+ const SERP_ENDPOINT = 'https://api.hasdata.com/scrape/google/serp';
16
+ function appendParam(url, key, value) {
17
+ url.searchParams.set(key, String(value));
18
+ }
19
+ function appendOptionalParam(url, key, value) {
20
+ if (value === undefined || value === null) {
21
+ return;
22
+ }
23
+ appendParam(url, key, value);
24
+ }
25
+ function formatBooleanParam(value, trueToken, falseToken) {
26
+ if (typeof value === 'boolean') {
27
+ return value ? trueToken : falseToken;
28
+ }
29
+ return String(value);
30
+ }
31
+ function normalizeLocale(value) {
32
+ return value ? value.toLowerCase() : undefined;
33
+ }
34
+ function normalizeDevice(device) {
35
+ if (!device) {
36
+ return undefined;
37
+ }
38
+ const normalized = device.toLowerCase();
39
+ if (normalized === 'desktop' || normalized === 'mobile' || normalized === 'tablet') {
40
+ return normalized;
41
+ }
42
+ return undefined;
43
+ }
44
+ function normalizeTbs(value) {
45
+ if (!value) {
46
+ return undefined;
47
+ }
48
+ if (Array.isArray(value)) {
49
+ return value.map(entry => entry.trim()).filter(Boolean).join(',');
50
+ }
51
+ return value;
52
+ }
53
+ function normalizeTbm(searchType) {
54
+ if (!searchType || searchType === 'all') {
55
+ return undefined;
56
+ }
57
+ const key = searchType.toLowerCase();
58
+ return SEARCH_TYPE_TO_TBM[key] || searchType;
59
+ }
60
+ function applySerpParams(url, options) {
61
+ appendOptionalParam(url, 'location', options.location);
62
+ appendOptionalParam(url, 'gl', normalizeLocale(options.country));
63
+ appendOptionalParam(url, 'hl', normalizeLocale(options.language));
64
+ appendOptionalParam(url, 'lr', options.contentLanguage);
65
+ appendOptionalParam(url, 'domain', options.domain);
66
+ appendOptionalParam(url, 'uule', options.encodedLocation);
67
+ const tbs = normalizeTbs(options.filters);
68
+ if (tbs) {
69
+ appendParam(url, 'tbs', tbs);
70
+ }
71
+ if (options.safeSearch !== undefined) {
72
+ const safeValue = typeof options.safeSearch === 'boolean'
73
+ ? options.safeSearch
74
+ ? 'active'
75
+ : 'off'
76
+ : options.safeSearch;
77
+ appendParam(url, 'safe', safeValue);
78
+ }
79
+ if (options.filterResults !== undefined) {
80
+ const filterValue = formatBooleanParam(options.filterResults, '1', '0');
81
+ appendParam(url, 'filter', filterValue);
82
+ }
83
+ if (options.preventAutoCorrect !== undefined) {
84
+ const nfprValue = formatBooleanParam(options.preventAutoCorrect, '1', '0');
85
+ appendParam(url, 'nfpr', nfprValue);
86
+ }
87
+ const tbm = normalizeTbm(options.type);
88
+ if (typeof options.offset === 'number' && options.offset >= 0) {
89
+ let start = Math.floor(options.offset);
90
+ if (tbm === 'lcl' && start % 20 !== 0) {
91
+ start = Math.floor(start / 20) * 20;
92
+ }
93
+ appendParam(url, 'start', start);
94
+ }
95
+ if (typeof options.resultsPerPage === 'number' && options.resultsPerPage > 0) {
96
+ const num = Math.min(Math.max(Math.floor(options.resultsPerPage), 10), 100);
97
+ appendParam(url, 'num', num);
98
+ }
99
+ if (tbm) {
100
+ appendParam(url, 'tbm', tbm);
101
+ }
102
+ const device = normalizeDevice(options.device);
103
+ if (device) {
104
+ appendParam(url, 'deviceType', device);
105
+ }
106
+ appendOptionalParam(url, 'ludocid', options.placeId);
107
+ appendOptionalParam(url, 'lsig', options.lsig);
108
+ appendOptionalParam(url, 'kgmid', options.entityId);
109
+ appendOptionalParam(url, 'si', options.searchId);
110
+ }
111
+ async function fetchSerpInternal(url) {
112
+ const response = await (0, helpers_js_1.fetchHasDataWithRetry)(url);
113
+ const content = (await response.json());
114
+ let aio = content.aiOverview;
115
+ if (aio && aio.pageToken && aio.hasdataLink) {
116
+ const aioResponse = await (0, helpers_js_1.fetchHasDataWithRetry)(aio.hasdataLink);
117
+ aio = await aioResponse.json();
118
+ }
119
+ if (aio) {
120
+ content.aiOverview = (0, helpers_js_1.parseAIO)(aio);
121
+ }
122
+ return content;
123
+ }
124
+ async function fetchSerp(query, options) {
125
+ const url = new URL(SERP_ENDPOINT);
126
+ url.searchParams.set('q', query);
127
+ applySerpParams(url, options);
128
+ return fetchSerpInternal(url.toString());
129
+ }
130
+ async function fetchSerpBatch(queries, options, maxConcurrency = helpers_js_1.HASDATA_CONCURRENCY) {
131
+ const url = new URL(SERP_ENDPOINT);
132
+ applySerpParams(url, options);
133
+ return (0, async_js_1.mapParallel)(queries, maxConcurrency, async (query) => {
134
+ url.searchParams.set('q', query);
135
+ return await fetchSerpInternal(url.toString());
136
+ });
137
+ }
@@ -12,11 +12,15 @@
12
12
  */
13
13
  export type * from './persona.schema.js';
14
14
  export type * from './brand.schema.js';
15
+ export type * from './entity.schema.js';
15
16
  export type * from './funnel.schema.js';
16
17
  export type * from './keyword.schema.js';
17
18
  export type * from './models.schema.js';
19
+ export type * from './prompt.schema.js';
20
+ export type * from './search.schema.js';
18
21
  export type * from './seedKeyword.schema.js';
19
- export type * from './topics.schema.js';
22
+ export type * from './sentiment.schema.js';
23
+ export type * from './sources.schema.js';
20
24
  export type * from './summary.schema.js';
21
- export type * from './prompt.schema.js';
25
+ export type * from './topics.schema.js';
22
26
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/src/schemas/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAGH,mBAAmB,qBAAqB,CAAC;AACzC,mBAAmB,mBAAmB,CAAC;AACvC,mBAAmB,oBAAoB,CAAC;AACxC,mBAAmB,qBAAqB,CAAC;AACzC,mBAAmB,oBAAoB,CAAC;AACxC,mBAAmB,yBAAyB,CAAC;AAC7C,mBAAmB,oBAAoB,CAAC;AACxC,mBAAmB,qBAAqB,CAAC;AACzC,mBAAmB,oBAAoB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/src/schemas/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAGH,mBAAmB,qBAAqB,CAAC;AACzC,mBAAmB,mBAAmB,CAAC;AACvC,mBAAmB,oBAAoB,CAAC;AACxC,mBAAmB,oBAAoB,CAAC;AACxC,mBAAmB,qBAAqB,CAAC;AACzC,mBAAmB,oBAAoB,CAAC;AACxC,mBAAmB,oBAAoB,CAAC;AACxC,mBAAmB,oBAAoB,CAAC;AACxC,mBAAmB,yBAAyB,CAAC;AAC7C,mBAAmB,uBAAuB,CAAC;AAC3C,mBAAmB,qBAAqB,CAAC;AACzC,mBAAmB,qBAAqB,CAAC;AACzC,mBAAmB,oBAAoB,CAAC"}