harvester_sdk 1.0.28 → 1.0.30
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/dist/sdk.js +2 -2
- package/package.json +1 -1
- package/sdk.ts +90 -62
package/dist/sdk.js
CHANGED
|
@@ -127,7 +127,7 @@ class HarvesterSDK {
|
|
|
127
127
|
const response = await this.client.get('/data', {
|
|
128
128
|
params: queryParams,
|
|
129
129
|
});
|
|
130
|
-
return response.data;
|
|
130
|
+
return response.data.data;
|
|
131
131
|
}
|
|
132
132
|
/**
|
|
133
133
|
* Get data by region ID
|
|
@@ -208,7 +208,7 @@ class HarvesterSDK {
|
|
|
208
208
|
const response = await this.client.get('/data/count', {
|
|
209
209
|
params: queryParams,
|
|
210
210
|
});
|
|
211
|
-
return response.data.data
|
|
211
|
+
return response.data.data;
|
|
212
212
|
}
|
|
213
213
|
/**
|
|
214
214
|
* Get data aggregated by a field
|
package/package.json
CHANGED
package/sdk.ts
CHANGED
|
@@ -1,10 +1,5 @@
|
|
|
1
1
|
import axios, { AxiosInstance, AxiosRequestConfig } from 'axios';
|
|
2
|
-
import {
|
|
3
|
-
RegionType,
|
|
4
|
-
GeoType,
|
|
5
|
-
DataType,
|
|
6
|
-
platformsList,
|
|
7
|
-
} from './types';
|
|
2
|
+
import { RegionType, GeoType, DataType, platformsList } from './types';
|
|
8
3
|
|
|
9
4
|
// SDK Configuration
|
|
10
5
|
export interface HarvesterSDKConfig {
|
|
@@ -50,35 +45,35 @@ export interface GetDataParams extends PaginationParams {
|
|
|
50
45
|
// Region filters
|
|
51
46
|
region_id?: string;
|
|
52
47
|
region_ids?: string[];
|
|
53
|
-
|
|
48
|
+
|
|
54
49
|
// Time filters
|
|
55
50
|
time_range?: TimeRange;
|
|
56
51
|
relative_time?: RelativeTimeRange;
|
|
57
|
-
|
|
52
|
+
|
|
58
53
|
// Platform filters
|
|
59
54
|
platform?: Platform;
|
|
60
55
|
platforms?: Platform[];
|
|
61
|
-
|
|
56
|
+
|
|
62
57
|
// Source filters
|
|
63
58
|
source_id?: string;
|
|
64
59
|
source_ids?: string[];
|
|
65
60
|
source_group_id?: string;
|
|
66
|
-
|
|
61
|
+
|
|
67
62
|
// Geo filters
|
|
68
63
|
data_geo?: string[];
|
|
69
64
|
source_dominant_geos?: string[];
|
|
70
|
-
|
|
65
|
+
|
|
71
66
|
// Content filters
|
|
72
67
|
data_original_type?: string;
|
|
73
68
|
data_language?: string;
|
|
74
69
|
data_sentiment?: 'positive' | 'negative' | 'neutral' | 'mixed';
|
|
75
|
-
|
|
70
|
+
|
|
76
71
|
// Text search
|
|
77
72
|
search?: string;
|
|
78
|
-
|
|
73
|
+
|
|
79
74
|
// Processing status
|
|
80
75
|
processing_status?: 'raw' | 'processed' | 'analyzed' | 'error';
|
|
81
|
-
|
|
76
|
+
|
|
82
77
|
// Include/exclude fields
|
|
83
78
|
fields?: string[];
|
|
84
79
|
exclude_fields?: string[];
|
|
@@ -106,20 +101,20 @@ export interface SDKResponse<T> {
|
|
|
106
101
|
|
|
107
102
|
/**
|
|
108
103
|
* Harvester SDK - Client for interacting with the Harvester API
|
|
109
|
-
*
|
|
104
|
+
*
|
|
110
105
|
* @example
|
|
111
106
|
* ```typescript
|
|
112
107
|
* const harvester = new HarvesterSDK({
|
|
113
108
|
* baseUrl: 'https://api.harvester.io',
|
|
114
109
|
* apiKey: 'your-api-key'
|
|
115
110
|
* });
|
|
116
|
-
*
|
|
111
|
+
*
|
|
117
112
|
* // Get all regions
|
|
118
113
|
* const regions = await harvester.getRegions();
|
|
119
|
-
*
|
|
114
|
+
*
|
|
120
115
|
* // Get geos by region
|
|
121
116
|
* const geos = await harvester.getGeosByRegion('region-id');
|
|
122
|
-
*
|
|
117
|
+
*
|
|
123
118
|
* // Get data with filters
|
|
124
119
|
* const data = await harvester.getData({
|
|
125
120
|
* region_id: 'region-id',
|
|
@@ -149,7 +144,11 @@ export class HarvesterSDK {
|
|
|
149
144
|
(response) => response,
|
|
150
145
|
(error) => {
|
|
151
146
|
const message = error.response?.data?.message || error.message;
|
|
152
|
-
throw new HarvesterSDKError(
|
|
147
|
+
throw new HarvesterSDKError(
|
|
148
|
+
message,
|
|
149
|
+
error.response?.status,
|
|
150
|
+
error.response?.data
|
|
151
|
+
);
|
|
153
152
|
}
|
|
154
153
|
);
|
|
155
154
|
}
|
|
@@ -176,19 +175,24 @@ export class HarvesterSDK {
|
|
|
176
175
|
|
|
177
176
|
/**
|
|
178
177
|
* Get all regions
|
|
179
|
-
*
|
|
178
|
+
*
|
|
180
179
|
* @param params - Optional filter and pagination parameters
|
|
181
180
|
* @returns Paginated list of regions
|
|
182
|
-
*
|
|
181
|
+
*
|
|
183
182
|
* @example
|
|
184
183
|
* ```typescript
|
|
185
184
|
* const regions = await harvester.getRegions({ status: 'active' });
|
|
186
185
|
* ```
|
|
187
186
|
*/
|
|
188
|
-
async getRegions(
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
187
|
+
async getRegions(
|
|
188
|
+
params?: GetRegionsParams
|
|
189
|
+
): Promise<PaginatedResponse<RegionType>> {
|
|
190
|
+
const response = await this.client.get<PaginatedResponse<RegionType>>(
|
|
191
|
+
'/regions',
|
|
192
|
+
{
|
|
193
|
+
params: this.buildQueryParams(params),
|
|
194
|
+
}
|
|
195
|
+
);
|
|
192
196
|
return response.data;
|
|
193
197
|
}
|
|
194
198
|
|
|
@@ -198,34 +202,39 @@ export class HarvesterSDK {
|
|
|
198
202
|
|
|
199
203
|
/**
|
|
200
204
|
* Get geographies by region ID
|
|
201
|
-
*
|
|
205
|
+
*
|
|
202
206
|
* @param regionId - The region ID
|
|
203
207
|
* @param params - Optional pagination parameters
|
|
204
208
|
* @returns Paginated list of geographies in the region
|
|
205
|
-
*
|
|
209
|
+
*
|
|
206
210
|
* @example
|
|
207
211
|
* ```typescript
|
|
208
212
|
* const geos = await harvester.getGeosByRegion('region-id', { limit: 50 });
|
|
209
213
|
* ```
|
|
210
214
|
*/
|
|
211
|
-
async getGeosByRegion(
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
+
async getGeosByRegion(
|
|
216
|
+
regionId: string,
|
|
217
|
+
params?: PaginationParams
|
|
218
|
+
): Promise<PaginatedResponse<GeoType>> {
|
|
219
|
+
const response = await this.client.get<PaginatedResponse<GeoType>>(
|
|
220
|
+
`/geo-selections/${regionId}`,
|
|
221
|
+
{
|
|
222
|
+
params: this.buildQueryParams(params),
|
|
223
|
+
}
|
|
224
|
+
);
|
|
215
225
|
return response.data;
|
|
216
226
|
}
|
|
217
227
|
|
|
218
|
-
|
|
219
228
|
// ============================================
|
|
220
229
|
// DATA
|
|
221
230
|
// ============================================
|
|
222
231
|
|
|
223
232
|
/**
|
|
224
233
|
* Get data with filters
|
|
225
|
-
*
|
|
234
|
+
*
|
|
226
235
|
* @param params - Filter and pagination parameters
|
|
227
236
|
* @returns Paginated list of data items
|
|
228
|
-
*
|
|
237
|
+
*
|
|
229
238
|
* @example
|
|
230
239
|
* ```typescript
|
|
231
240
|
* // Get telegram data from a specific region in the last 24 hours
|
|
@@ -238,52 +247,64 @@ export class HarvesterSDK {
|
|
|
238
247
|
*/
|
|
239
248
|
async getData(params?: GetDataParams): Promise<PaginatedResponse<DataType>> {
|
|
240
249
|
const queryParams = this.buildDataQueryParams(params);
|
|
241
|
-
const response = await this.client.get<PaginatedResponse<DataType
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
250
|
+
const response = await this.client.get<{data: PaginatedResponse<DataType>}>(
|
|
251
|
+
'/data',
|
|
252
|
+
{
|
|
253
|
+
params: queryParams,
|
|
254
|
+
}
|
|
255
|
+
);
|
|
256
|
+
return response.data.data;
|
|
245
257
|
}
|
|
246
258
|
|
|
247
259
|
/**
|
|
248
260
|
* Get data by region ID
|
|
249
|
-
*
|
|
261
|
+
*
|
|
250
262
|
* @param regionId - The region ID
|
|
251
263
|
* @param params - Optional filter parameters
|
|
252
264
|
* @returns Paginated list of data items from the region
|
|
253
265
|
*/
|
|
254
|
-
async getDataByRegion(
|
|
266
|
+
async getDataByRegion(
|
|
267
|
+
regionId: string,
|
|
268
|
+
params?: Omit<GetDataParams, 'region_id'>
|
|
269
|
+
): Promise<PaginatedResponse<DataType>> {
|
|
255
270
|
return this.getData({ ...params, region_id: regionId });
|
|
256
271
|
}
|
|
257
272
|
|
|
258
273
|
/**
|
|
259
274
|
* Get data by platform
|
|
260
|
-
*
|
|
275
|
+
*
|
|
261
276
|
* @param platform - The platform to filter by
|
|
262
277
|
* @param params - Optional filter parameters
|
|
263
278
|
* @returns Paginated list of data items from the platform
|
|
264
279
|
*/
|
|
265
|
-
async getDataByPlatform(
|
|
280
|
+
async getDataByPlatform(
|
|
281
|
+
platform: Platform,
|
|
282
|
+
params?: Omit<GetDataParams, 'platform'>
|
|
283
|
+
): Promise<PaginatedResponse<DataType>> {
|
|
266
284
|
return this.getData({ ...params, platform });
|
|
267
285
|
}
|
|
268
286
|
|
|
269
287
|
/**
|
|
270
288
|
* Get data within a time range
|
|
271
|
-
*
|
|
289
|
+
*
|
|
272
290
|
* @param timeRange - The time range (start and end timestamps)
|
|
273
291
|
* @param params - Optional filter parameters
|
|
274
292
|
* @returns Paginated list of data items within the time range
|
|
275
293
|
*/
|
|
276
|
-
async getDataByTimeRange(
|
|
294
|
+
async getDataByTimeRange(
|
|
295
|
+
timeRange: TimeRange,
|
|
296
|
+
params?: Omit<GetDataParams, 'time_range'>
|
|
297
|
+
): Promise<PaginatedResponse<DataType>> {
|
|
277
298
|
return this.getData({ ...params, time_range: timeRange });
|
|
278
299
|
}
|
|
279
300
|
|
|
280
301
|
/**
|
|
281
302
|
* Get data from relative time (e.g., last 24 hours)
|
|
282
|
-
*
|
|
303
|
+
*
|
|
283
304
|
* @param relativeTime - Relative time specification
|
|
284
305
|
* @param params - Optional filter parameters
|
|
285
306
|
* @returns Paginated list of data items
|
|
286
|
-
*
|
|
307
|
+
*
|
|
287
308
|
* @example
|
|
288
309
|
* ```typescript
|
|
289
310
|
* const data = await harvester.getDataFromRelativeTime(
|
|
@@ -292,49 +313,57 @@ export class HarvesterSDK {
|
|
|
292
313
|
* );
|
|
293
314
|
* ```
|
|
294
315
|
*/
|
|
295
|
-
async getDataFromRelativeTime(
|
|
316
|
+
async getDataFromRelativeTime(
|
|
317
|
+
relativeTime: RelativeTimeRange,
|
|
318
|
+
params?: Omit<GetDataParams, 'relative_time'>
|
|
319
|
+
): Promise<PaginatedResponse<DataType>> {
|
|
296
320
|
return this.getData({ ...params, relative_time: relativeTime });
|
|
297
321
|
}
|
|
298
322
|
|
|
299
323
|
/**
|
|
300
324
|
* Get a single data item by ID
|
|
301
|
-
*
|
|
325
|
+
*
|
|
302
326
|
* @param dataId - The data item ID
|
|
303
327
|
* @returns The data object
|
|
304
328
|
*/
|
|
305
329
|
async getDataById(dataId: string): Promise<DataType> {
|
|
306
|
-
const response = await this.client.get<SDKResponse<DataType>>(
|
|
330
|
+
const response = await this.client.get<SDKResponse<DataType>>(
|
|
331
|
+
`/data/${dataId}`
|
|
332
|
+
);
|
|
307
333
|
return response.data.data;
|
|
308
334
|
}
|
|
309
335
|
|
|
310
336
|
/**
|
|
311
337
|
* Search data by text content
|
|
312
|
-
*
|
|
338
|
+
*
|
|
313
339
|
* @param query - Search query
|
|
314
340
|
* @param params - Optional filter parameters
|
|
315
341
|
* @returns Paginated list of matching data items
|
|
316
342
|
*/
|
|
317
|
-
async searchData(
|
|
343
|
+
async searchData(
|
|
344
|
+
query: string,
|
|
345
|
+
params?: GetDataParams
|
|
346
|
+
): Promise<PaginatedResponse<DataType>> {
|
|
318
347
|
return this.getData({ ...params, search: query });
|
|
319
348
|
}
|
|
320
349
|
|
|
321
350
|
/**
|
|
322
351
|
* Get data count by filters (without fetching all data)
|
|
323
|
-
*
|
|
352
|
+
*
|
|
324
353
|
* @param params - Filter parameters
|
|
325
354
|
* @returns Count of matching data items
|
|
326
355
|
*/
|
|
327
356
|
async getDataCount(params?: GetDataParams): Promise<number> {
|
|
328
357
|
const queryParams = this.buildDataQueryParams(params);
|
|
329
|
-
const response = await this.client.get<
|
|
358
|
+
const response = await this.client.get<{ data: number }>('/data/count', {
|
|
330
359
|
params: queryParams,
|
|
331
360
|
});
|
|
332
|
-
return response.data.data
|
|
361
|
+
return response.data.data;
|
|
333
362
|
}
|
|
334
363
|
|
|
335
364
|
/**
|
|
336
365
|
* Get data aggregated by a field
|
|
337
|
-
*
|
|
366
|
+
*
|
|
338
367
|
* @param field - Field to aggregate by (e.g., 'platform', 'source_region_id')
|
|
339
368
|
* @param params - Optional filter parameters
|
|
340
369
|
* @returns Aggregation results
|
|
@@ -344,10 +373,9 @@ export class HarvesterSDK {
|
|
|
344
373
|
params?: GetDataParams
|
|
345
374
|
): Promise<{ _id: string; count: number }[]> {
|
|
346
375
|
const queryParams = this.buildDataQueryParams(params);
|
|
347
|
-
const response = await this.client.get<{
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
);
|
|
376
|
+
const response = await this.client.get<{
|
|
377
|
+
data: { _id: string; count: number }[];
|
|
378
|
+
}>(`/data/aggregate/${field}`, { params: queryParams });
|
|
351
379
|
return response.data.data;
|
|
352
380
|
}
|
|
353
381
|
|
|
@@ -379,7 +407,7 @@ export class HarvesterSDK {
|
|
|
379
407
|
*/
|
|
380
408
|
private buildQueryParams(params?: Record<string, any>): Record<string, any> {
|
|
381
409
|
if (!params) return {};
|
|
382
|
-
|
|
410
|
+
|
|
383
411
|
const cleaned: Record<string, any> = {};
|
|
384
412
|
for (const [key, value] of Object.entries(params)) {
|
|
385
413
|
if (value !== undefined && value !== null) {
|
|
@@ -480,10 +508,10 @@ export class HarvesterSDKError extends Error {
|
|
|
480
508
|
|
|
481
509
|
/**
|
|
482
510
|
* Create a new Harvester SDK instance
|
|
483
|
-
*
|
|
511
|
+
*
|
|
484
512
|
* @param config - SDK configuration
|
|
485
513
|
* @returns HarvesterSDK instance
|
|
486
|
-
*
|
|
514
|
+
*
|
|
487
515
|
* @example
|
|
488
516
|
* ```typescript
|
|
489
517
|
* const harvester = createHarvesterSDK({
|