gdelt-ts-client 1.0.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.
- package/README.md +455 -0
- package/dist/client.d.ts +228 -0
- package/dist/client.d.ts.map +1 -0
- package/dist/client.js +478 -0
- package/dist/client.js.map +1 -0
- package/dist/constants/index.d.ts +184 -0
- package/dist/constants/index.d.ts.map +1 -0
- package/dist/constants/index.js +193 -0
- package/dist/constants/index.js.map +1 -0
- package/dist/index.d.ts +14 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +40 -0
- package/dist/index.js.map +1 -0
- package/dist/interfaces/api-parameters.d.ts +201 -0
- package/dist/interfaces/api-parameters.d.ts.map +1 -0
- package/dist/interfaces/api-parameters.js +3 -0
- package/dist/interfaces/api-parameters.js.map +1 -0
- package/dist/interfaces/api-responses.d.ts +258 -0
- package/dist/interfaces/api-responses.d.ts.map +1 -0
- package/dist/interfaces/api-responses.js +6 -0
- package/dist/interfaces/api-responses.js.map +1 -0
- package/dist/types/enhanced-types.d.ts +227 -0
- package/dist/types/enhanced-types.d.ts.map +1 -0
- package/dist/types/enhanced-types.js +89 -0
- package/dist/types/enhanced-types.js.map +1 -0
- package/dist/types/query-builder.d.ts +252 -0
- package/dist/types/query-builder.d.ts.map +1 -0
- package/dist/types/query-builder.js +458 -0
- package/dist/types/query-builder.js.map +1 -0
- package/dist/types/type-guards.d.ts +110 -0
- package/dist/types/type-guards.d.ts.map +1 -0
- package/dist/types/type-guards.js +271 -0
- package/dist/types/type-guards.js.map +1 -0
- package/package.json +54 -0
package/dist/client.js
ADDED
|
@@ -0,0 +1,478 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
3
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
4
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
5
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
6
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
7
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
8
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
9
|
+
});
|
|
10
|
+
};
|
|
11
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
12
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
13
|
+
};
|
|
14
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
15
|
+
exports.GdeltClient = void 0;
|
|
16
|
+
const axios_1 = __importDefault(require("axios"));
|
|
17
|
+
const constants_1 = require("./constants");
|
|
18
|
+
const enhanced_types_1 = require("./types/enhanced-types");
|
|
19
|
+
const query_builder_1 = require("./types/query-builder");
|
|
20
|
+
const type_guards_1 = require("./types/type-guards");
|
|
21
|
+
/**
|
|
22
|
+
* GDELT API Client
|
|
23
|
+
* A strongly-typed client for interacting with the GDELT API
|
|
24
|
+
*/
|
|
25
|
+
class GdeltClient {
|
|
26
|
+
/**
|
|
27
|
+
* Creates a new GDELT API client
|
|
28
|
+
* @param config - The client configuration
|
|
29
|
+
*/
|
|
30
|
+
constructor(config) {
|
|
31
|
+
var _a, _b, _c, _d, _e, _f;
|
|
32
|
+
this._baseUrl = (_a = config === null || config === void 0 ? void 0 : config.baseUrl) !== null && _a !== void 0 ? _a : constants_1.API_BASE_URL;
|
|
33
|
+
this._defaultFormat = (_b = config === null || config === void 0 ? void 0 : config.defaultFormat) !== null && _b !== void 0 ? _b : constants_1.EFormat.json;
|
|
34
|
+
this._retry = (_c = config === null || config === void 0 ? void 0 : config.retry) !== null && _c !== void 0 ? _c : true;
|
|
35
|
+
this._maxRetries = (_d = config === null || config === void 0 ? void 0 : config.maxRetries) !== null && _d !== void 0 ? _d : 3;
|
|
36
|
+
this._retryDelay = (_e = config === null || config === void 0 ? void 0 : config.retryDelay) !== null && _e !== void 0 ? _e : 1000;
|
|
37
|
+
this._axiosInstance = axios_1.default.create({
|
|
38
|
+
baseURL: this._baseUrl,
|
|
39
|
+
timeout: (_f = config === null || config === void 0 ? void 0 : config.timeout) !== null && _f !== void 0 ? _f : 30000,
|
|
40
|
+
headers: {
|
|
41
|
+
// Using type assertion to bypass ESLint naming convention check for HTTP headers
|
|
42
|
+
// eslint-disable-next-line @typescript-eslint/naming-convention
|
|
43
|
+
'Accept': 'application/json',
|
|
44
|
+
// eslint-disable-next-line @typescript-eslint/naming-convention
|
|
45
|
+
'Content-Type': 'application/json'
|
|
46
|
+
}
|
|
47
|
+
});
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Creates a timespan string from a timespan object
|
|
51
|
+
* @param timespan - The timespan object
|
|
52
|
+
* @returns The timespan string
|
|
53
|
+
* @private
|
|
54
|
+
*/
|
|
55
|
+
_createTimespanString(timespan) {
|
|
56
|
+
return `${timespan.value}${timespan.unit}`;
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* Validates API parameters
|
|
60
|
+
* @param params - The API parameters to validate
|
|
61
|
+
* @private
|
|
62
|
+
*/
|
|
63
|
+
_validateParams(params) {
|
|
64
|
+
// Validate query parameter
|
|
65
|
+
if (!params.query || typeof params.query !== 'string' || params.query.trim() === '') {
|
|
66
|
+
throw new Error('Query parameter is required and must be a non-empty string');
|
|
67
|
+
}
|
|
68
|
+
// Validate maxrecords
|
|
69
|
+
if (params.maxrecords !== undefined) {
|
|
70
|
+
if (!Number.isInteger(params.maxrecords) || params.maxrecords < 1 || params.maxrecords > 250) {
|
|
71
|
+
throw new Error('maxrecords must be an integer between 1 and 250');
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
// Validate timelinesmooth
|
|
75
|
+
if (params.timelinesmooth !== undefined) {
|
|
76
|
+
if (!Number.isInteger(params.timelinesmooth) || params.timelinesmooth < 1 || params.timelinesmooth > 30) {
|
|
77
|
+
throw new Error('timelinesmooth must be an integer between 1 and 30');
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
// Validate datetime formats
|
|
81
|
+
const datetimeRegex = /^\d{14}$/;
|
|
82
|
+
if (params.startdatetime && !datetimeRegex.test(params.startdatetime)) {
|
|
83
|
+
throw new Error('startdatetime must be in YYYYMMDDHHMMSS format (14 digits)');
|
|
84
|
+
}
|
|
85
|
+
if (params.enddatetime && !datetimeRegex.test(params.enddatetime)) {
|
|
86
|
+
throw new Error('enddatetime must be in YYYYMMDDHHMMSS format (14 digits)');
|
|
87
|
+
}
|
|
88
|
+
// Validate timespan format if provided
|
|
89
|
+
if (params.timespan) {
|
|
90
|
+
const timespanRegex = /^\d+(?:min|h|d|w|m)$/;
|
|
91
|
+
if (!timespanRegex.test(params.timespan)) {
|
|
92
|
+
throw new Error('timespan must be in format like "1d", "2h", "30min", "1w", "3m"');
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
/**
|
|
97
|
+
* Transforms API response data without mutating the original
|
|
98
|
+
* @param data - The original response data
|
|
99
|
+
* @returns The transformed response data
|
|
100
|
+
* @private
|
|
101
|
+
*/
|
|
102
|
+
_transformResponse(data) {
|
|
103
|
+
if (!data || typeof data !== 'object') {
|
|
104
|
+
throw new Error('Invalid response data: expected object');
|
|
105
|
+
}
|
|
106
|
+
// Create a new object without mutating the original
|
|
107
|
+
const transformedData = Object.assign({}, data);
|
|
108
|
+
// Add status if missing
|
|
109
|
+
if (!('status' in transformedData)) {
|
|
110
|
+
transformedData['status'] = 'ok';
|
|
111
|
+
}
|
|
112
|
+
// Add count property for article list responses
|
|
113
|
+
if ('articles' in transformedData && Array.isArray(transformedData["articles"]) && !('count' in transformedData)) {
|
|
114
|
+
transformedData['count'] = transformedData["articles"].length;
|
|
115
|
+
}
|
|
116
|
+
// Add count property for image collage responses
|
|
117
|
+
if ('images' in transformedData && Array.isArray(transformedData["images"]) && !('count' in transformedData)) {
|
|
118
|
+
transformedData['count'] = transformedData["images"].length;
|
|
119
|
+
}
|
|
120
|
+
return transformedData;
|
|
121
|
+
}
|
|
122
|
+
/**
|
|
123
|
+
* Builds the query parameters for the API request
|
|
124
|
+
* @param params - The API parameters
|
|
125
|
+
* @returns The query parameters object
|
|
126
|
+
* @private
|
|
127
|
+
*/
|
|
128
|
+
_buildQueryParams(params) {
|
|
129
|
+
const queryParams = {
|
|
130
|
+
query: params.query
|
|
131
|
+
};
|
|
132
|
+
if (params.mode) {
|
|
133
|
+
queryParams['mode'] = params.mode;
|
|
134
|
+
}
|
|
135
|
+
if (params.format) {
|
|
136
|
+
queryParams['format'] = params.format;
|
|
137
|
+
}
|
|
138
|
+
else {
|
|
139
|
+
queryParams['format'] = this._defaultFormat;
|
|
140
|
+
}
|
|
141
|
+
if (params.timespan) {
|
|
142
|
+
queryParams['timespan'] = params.timespan;
|
|
143
|
+
}
|
|
144
|
+
if (params.startdatetime) {
|
|
145
|
+
queryParams['startdatetime'] = params.startdatetime;
|
|
146
|
+
}
|
|
147
|
+
if (params.enddatetime) {
|
|
148
|
+
queryParams['enddatetime'] = params.enddatetime;
|
|
149
|
+
}
|
|
150
|
+
if (params.maxrecords) {
|
|
151
|
+
queryParams['maxrecords'] = params.maxrecords;
|
|
152
|
+
}
|
|
153
|
+
if (params.timelinesmooth) {
|
|
154
|
+
queryParams['timelinesmooth'] = params.timelinesmooth;
|
|
155
|
+
}
|
|
156
|
+
if (params.trans) {
|
|
157
|
+
queryParams['trans'] = params.trans;
|
|
158
|
+
}
|
|
159
|
+
if (params.sort) {
|
|
160
|
+
queryParams['sort'] = params.sort;
|
|
161
|
+
}
|
|
162
|
+
if (params.timezoom) {
|
|
163
|
+
queryParams['timezoom'] = params.timezoom;
|
|
164
|
+
}
|
|
165
|
+
if (params.callback && params.format === constants_1.EFormat.jsonp) {
|
|
166
|
+
queryParams['callback'] = params.callback;
|
|
167
|
+
}
|
|
168
|
+
return queryParams;
|
|
169
|
+
}
|
|
170
|
+
/**
|
|
171
|
+
* Makes a request to the GDELT API
|
|
172
|
+
* @param params - The API parameters
|
|
173
|
+
* @returns A promise that resolves to the API response
|
|
174
|
+
* @private
|
|
175
|
+
*/
|
|
176
|
+
_makeRequest(params) {
|
|
177
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
178
|
+
// Validate parameters before making request
|
|
179
|
+
this._validateParams(params);
|
|
180
|
+
const queryParams = this._buildQueryParams(params);
|
|
181
|
+
let retries = 0;
|
|
182
|
+
const makeAxiosRequest = () => __awaiter(this, void 0, void 0, function* () {
|
|
183
|
+
try {
|
|
184
|
+
return yield this._axiosInstance.get('', {
|
|
185
|
+
params: queryParams
|
|
186
|
+
});
|
|
187
|
+
}
|
|
188
|
+
catch (error) {
|
|
189
|
+
if (this._retry && retries < this._maxRetries) {
|
|
190
|
+
retries++;
|
|
191
|
+
yield new Promise(resolve => setTimeout(resolve, this._retryDelay));
|
|
192
|
+
return makeAxiosRequest();
|
|
193
|
+
}
|
|
194
|
+
throw error;
|
|
195
|
+
}
|
|
196
|
+
});
|
|
197
|
+
const response = yield makeAxiosRequest();
|
|
198
|
+
// Handle string responses (error messages)
|
|
199
|
+
if (typeof response.data === 'string') {
|
|
200
|
+
throw new Error(response.data);
|
|
201
|
+
}
|
|
202
|
+
// Transform response data without mutating original
|
|
203
|
+
const transformedData = this._transformResponse(response.data);
|
|
204
|
+
return transformedData;
|
|
205
|
+
});
|
|
206
|
+
}
|
|
207
|
+
getArticles(paramsOrQuery, options) {
|
|
208
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
209
|
+
let finalParams;
|
|
210
|
+
if (typeof paramsOrQuery === 'string') {
|
|
211
|
+
finalParams = Object.assign({ query: paramsOrQuery }, options);
|
|
212
|
+
}
|
|
213
|
+
else if (typeof paramsOrQuery === 'object' && 'query' in paramsOrQuery) {
|
|
214
|
+
finalParams = paramsOrQuery;
|
|
215
|
+
}
|
|
216
|
+
else {
|
|
217
|
+
throw new Error('Invalid parameters: expected object with query property or query string');
|
|
218
|
+
}
|
|
219
|
+
// Use enhanced validation
|
|
220
|
+
this._validateEnhancedParams(finalParams);
|
|
221
|
+
const response = yield this._makeRequest(Object.assign(Object.assign({}, finalParams), { mode: constants_1.EMode.articleList, format: constants_1.EFormat.json }));
|
|
222
|
+
return this._transformAndValidateResponse(response, type_guards_1.TypeGuards.isArticleListResponse);
|
|
223
|
+
});
|
|
224
|
+
}
|
|
225
|
+
getImages(paramsOrQuery, options) {
|
|
226
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
227
|
+
let finalParams;
|
|
228
|
+
if (typeof paramsOrQuery === 'string') {
|
|
229
|
+
finalParams = Object.assign({ query: paramsOrQuery }, options);
|
|
230
|
+
}
|
|
231
|
+
else if (typeof paramsOrQuery === 'object' && 'query' in paramsOrQuery) {
|
|
232
|
+
finalParams = paramsOrQuery;
|
|
233
|
+
}
|
|
234
|
+
else {
|
|
235
|
+
throw new Error('Invalid parameters: expected object with query property or query string');
|
|
236
|
+
}
|
|
237
|
+
// Use enhanced validation
|
|
238
|
+
this._validateEnhancedParams(finalParams);
|
|
239
|
+
const response = yield this._makeRequest(Object.assign(Object.assign({}, finalParams), { mode: constants_1.EMode.imageCollageInfo, format: constants_1.EFormat.json }));
|
|
240
|
+
return this._transformAndValidateResponse(response, type_guards_1.TypeGuards.isImageCollageResponse);
|
|
241
|
+
});
|
|
242
|
+
}
|
|
243
|
+
getTimeline(paramsOrQuery, timespanOrOptions) {
|
|
244
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
245
|
+
let finalParams;
|
|
246
|
+
if (typeof paramsOrQuery === 'string') {
|
|
247
|
+
if (timespanOrOptions && typeof timespanOrOptions === 'string') {
|
|
248
|
+
finalParams = {
|
|
249
|
+
query: paramsOrQuery,
|
|
250
|
+
timespan: timespanOrOptions
|
|
251
|
+
};
|
|
252
|
+
}
|
|
253
|
+
else {
|
|
254
|
+
finalParams = Object.assign({ query: paramsOrQuery }, timespanOrOptions);
|
|
255
|
+
}
|
|
256
|
+
}
|
|
257
|
+
else if (typeof paramsOrQuery === 'object' && paramsOrQuery !== null && 'query' in paramsOrQuery) {
|
|
258
|
+
finalParams = paramsOrQuery;
|
|
259
|
+
}
|
|
260
|
+
else {
|
|
261
|
+
throw new Error('Invalid parameters: expected object with query property or query string');
|
|
262
|
+
}
|
|
263
|
+
// Use enhanced validation
|
|
264
|
+
this._validateEnhancedParams(finalParams);
|
|
265
|
+
const response = yield this._makeRequest(Object.assign(Object.assign({}, finalParams), { mode: constants_1.EMode.timelineVolume, format: constants_1.EFormat.json }));
|
|
266
|
+
return this._transformAndValidateResponse(response, type_guards_1.TypeGuards.isTimelineResponse);
|
|
267
|
+
});
|
|
268
|
+
}
|
|
269
|
+
getTimelineWithArticles(paramsOrQuery, options) {
|
|
270
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
271
|
+
let finalParams;
|
|
272
|
+
if (typeof paramsOrQuery === 'string') {
|
|
273
|
+
finalParams = Object.assign({ query: paramsOrQuery }, options);
|
|
274
|
+
}
|
|
275
|
+
else if (typeof paramsOrQuery === 'object' && paramsOrQuery !== null && 'query' in paramsOrQuery) {
|
|
276
|
+
finalParams = paramsOrQuery;
|
|
277
|
+
}
|
|
278
|
+
else {
|
|
279
|
+
throw new Error('Invalid parameters: expected object with query property or query string');
|
|
280
|
+
}
|
|
281
|
+
this._validateEnhancedParams(finalParams);
|
|
282
|
+
const response = yield this._makeRequest(Object.assign(Object.assign({}, finalParams), { mode: constants_1.EMode.timelineVolumeInfo, format: constants_1.EFormat.json }));
|
|
283
|
+
return this._transformAndValidateResponse(response, type_guards_1.TypeGuards.isTimelineResponse);
|
|
284
|
+
});
|
|
285
|
+
}
|
|
286
|
+
/**
|
|
287
|
+
* Gets a timeline of news coverage volume broken down by language that matches the query
|
|
288
|
+
* @param params - The API parameters
|
|
289
|
+
* @returns A promise that resolves to the timeline breakdown response
|
|
290
|
+
*/
|
|
291
|
+
getTimelineByLanguage(params) {
|
|
292
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
293
|
+
return this._makeRequest(Object.assign(Object.assign({}, params), { mode: constants_1.EMode.timelineLanguage, format: constants_1.EFormat.json }));
|
|
294
|
+
});
|
|
295
|
+
}
|
|
296
|
+
/**
|
|
297
|
+
* Gets a timeline of news coverage volume broken down by source country that matches the query
|
|
298
|
+
* @param params - The API parameters
|
|
299
|
+
* @returns A promise that resolves to the timeline breakdown response
|
|
300
|
+
*/
|
|
301
|
+
getTimelineByCountry(params) {
|
|
302
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
303
|
+
return this._makeRequest(Object.assign(Object.assign({}, params), { mode: constants_1.EMode.timelineSourceCountry, format: constants_1.EFormat.json }));
|
|
304
|
+
});
|
|
305
|
+
}
|
|
306
|
+
getTimelineTone(paramsOrQuery, options) {
|
|
307
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
308
|
+
let finalParams;
|
|
309
|
+
if (typeof paramsOrQuery === 'string') {
|
|
310
|
+
finalParams = Object.assign({ query: paramsOrQuery }, options);
|
|
311
|
+
}
|
|
312
|
+
else if (typeof paramsOrQuery === 'object' && paramsOrQuery !== null && 'query' in paramsOrQuery) {
|
|
313
|
+
finalParams = paramsOrQuery;
|
|
314
|
+
}
|
|
315
|
+
else {
|
|
316
|
+
throw new Error('Invalid parameters: expected object with query property or query string');
|
|
317
|
+
}
|
|
318
|
+
this._validateEnhancedParams(finalParams);
|
|
319
|
+
const response = yield this._makeRequest(Object.assign(Object.assign({}, finalParams), { mode: constants_1.EMode.timelineTone, format: constants_1.EFormat.json }));
|
|
320
|
+
return this._transformAndValidateResponse(response, type_guards_1.TypeGuards.isTimelineResponse);
|
|
321
|
+
});
|
|
322
|
+
}
|
|
323
|
+
getToneChart(paramsOrQuery, options) {
|
|
324
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
325
|
+
let finalParams;
|
|
326
|
+
if (typeof paramsOrQuery === 'string') {
|
|
327
|
+
finalParams = Object.assign({ query: paramsOrQuery }, options);
|
|
328
|
+
}
|
|
329
|
+
else if (typeof paramsOrQuery === 'object' && 'query' in paramsOrQuery) {
|
|
330
|
+
finalParams = paramsOrQuery;
|
|
331
|
+
}
|
|
332
|
+
else {
|
|
333
|
+
throw new Error('Invalid parameters: expected object with query property or query string');
|
|
334
|
+
}
|
|
335
|
+
// Use enhanced validation
|
|
336
|
+
this._validateEnhancedParams(finalParams);
|
|
337
|
+
const response = yield this._makeRequest(Object.assign(Object.assign({}, finalParams), { mode: constants_1.EMode.toneChart, format: constants_1.EFormat.json }));
|
|
338
|
+
// Enhanced validation with type guard
|
|
339
|
+
const validatedResponse = this._transformAndValidateResponse(response, type_guards_1.TypeGuards.isToneChartResponse);
|
|
340
|
+
// Ensure the response has the expected structure
|
|
341
|
+
if (!validatedResponse.tonechart) {
|
|
342
|
+
throw new Error('Invalid response format from GDELT API: missing tonechart property');
|
|
343
|
+
}
|
|
344
|
+
return validatedResponse;
|
|
345
|
+
});
|
|
346
|
+
}
|
|
347
|
+
/**
|
|
348
|
+
* Gets a word cloud of image tags that match the query
|
|
349
|
+
* @param params - The API parameters
|
|
350
|
+
* @returns A promise that resolves to the word cloud response
|
|
351
|
+
*/
|
|
352
|
+
getImageTagCloud(params) {
|
|
353
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
354
|
+
return this._makeRequest(Object.assign(Object.assign({}, params), { mode: constants_1.EMode.wordCloudImageTags, format: constants_1.EFormat.json }));
|
|
355
|
+
});
|
|
356
|
+
}
|
|
357
|
+
/**
|
|
358
|
+
* Gets a word cloud of image web tags that match the query
|
|
359
|
+
* @param params - The API parameters
|
|
360
|
+
* @returns A promise that resolves to the word cloud response
|
|
361
|
+
*/
|
|
362
|
+
getImageWebTagCloud(params) {
|
|
363
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
364
|
+
return this._makeRequest(Object.assign(Object.assign({}, params), { mode: constants_1.EMode.wordCloudImageWebTags, format: constants_1.EFormat.json }));
|
|
365
|
+
});
|
|
366
|
+
}
|
|
367
|
+
createTimespan(value, unit) {
|
|
368
|
+
const timespanStr = this._createTimespanString({ value, unit: unit });
|
|
369
|
+
// If using enhanced types, validate the result
|
|
370
|
+
const enhancedUnits = Object.values(enhanced_types_1.TimespanUnit);
|
|
371
|
+
if (enhancedUnits.includes(unit)) {
|
|
372
|
+
if (!(0, enhanced_types_1.isValidTimespan)(timespanStr)) {
|
|
373
|
+
throw new Error(`Invalid timespan format: ${timespanStr}`);
|
|
374
|
+
}
|
|
375
|
+
return timespanStr;
|
|
376
|
+
}
|
|
377
|
+
return timespanStr;
|
|
378
|
+
}
|
|
379
|
+
// ===== ENHANCED UTILITY METHODS =====
|
|
380
|
+
/**
|
|
381
|
+
* Create a new query builder for constructing complex queries
|
|
382
|
+
*/
|
|
383
|
+
query() {
|
|
384
|
+
return query_builder_1.QueryHelpers.createQuery();
|
|
385
|
+
}
|
|
386
|
+
/**
|
|
387
|
+
* Create a specialized query builder for article searches
|
|
388
|
+
*/
|
|
389
|
+
articleQuery() {
|
|
390
|
+
return query_builder_1.QueryHelpers.createArticleQuery();
|
|
391
|
+
}
|
|
392
|
+
/**
|
|
393
|
+
* Create a specialized query builder for image searches
|
|
394
|
+
*/
|
|
395
|
+
imageQuery() {
|
|
396
|
+
return query_builder_1.QueryHelpers.createImageQuery();
|
|
397
|
+
}
|
|
398
|
+
/**
|
|
399
|
+
* Validate query string format and complexity
|
|
400
|
+
*/
|
|
401
|
+
validateQuery(query) {
|
|
402
|
+
const errors = [];
|
|
403
|
+
if (!query || query.trim().length === 0) {
|
|
404
|
+
errors.push('Query cannot be empty');
|
|
405
|
+
}
|
|
406
|
+
if (!query_builder_1.QueryHelpers.isValidQuery(query)) {
|
|
407
|
+
errors.push('Query has unbalanced parentheses');
|
|
408
|
+
}
|
|
409
|
+
if (!query_builder_1.QueryHelpers.hasBalancedQuotes(query)) {
|
|
410
|
+
errors.push('Query has unbalanced quotes');
|
|
411
|
+
}
|
|
412
|
+
const complexity = query_builder_1.QueryHelpers.getQueryComplexity(query);
|
|
413
|
+
if (complexity > 50) {
|
|
414
|
+
errors.push(`Query complexity (${complexity}) may be too high and could cause timeouts`);
|
|
415
|
+
}
|
|
416
|
+
return {
|
|
417
|
+
valid: errors.length === 0,
|
|
418
|
+
errors
|
|
419
|
+
};
|
|
420
|
+
}
|
|
421
|
+
/**
|
|
422
|
+
* Get suggested optimizations for a query
|
|
423
|
+
*/
|
|
424
|
+
getQueryOptimizations(query) {
|
|
425
|
+
const suggestions = [];
|
|
426
|
+
const complexity = query_builder_1.QueryHelpers.getQueryComplexity(query);
|
|
427
|
+
if (complexity > 30) {
|
|
428
|
+
suggestions.push('Consider breaking this complex query into smaller, more specific queries');
|
|
429
|
+
}
|
|
430
|
+
if (query.includes(' OR ') && query.split(' OR ').length > 10) {
|
|
431
|
+
suggestions.push('Consider reducing the number of OR terms for better performance');
|
|
432
|
+
}
|
|
433
|
+
if (!query.includes('timespan:') && !query.includes('startdatetime:')) {
|
|
434
|
+
suggestions.push('Consider adding a timespan constraint to limit the search scope');
|
|
435
|
+
}
|
|
436
|
+
if (query.length > 500) {
|
|
437
|
+
suggestions.push('Very long queries may hit URL length limits in some environments');
|
|
438
|
+
}
|
|
439
|
+
return suggestions;
|
|
440
|
+
}
|
|
441
|
+
// ===== ENHANCED TYPE VALIDATION =====
|
|
442
|
+
/**
|
|
443
|
+
* Enhanced parameter validation using new type guards
|
|
444
|
+
*/
|
|
445
|
+
_validateEnhancedParams(params) {
|
|
446
|
+
// Run base validation first
|
|
447
|
+
this._validateParams(params);
|
|
448
|
+
// Enhanced validations using new type guards
|
|
449
|
+
if (params.timespan && !(0, enhanced_types_1.isValidTimespan)(params.timespan)) {
|
|
450
|
+
throw new Error(`Invalid timespan format: ${String(params.timespan)}. Must be like "1d", "2h", "30min", "1w", "3m"`);
|
|
451
|
+
}
|
|
452
|
+
if (params.startdatetime && !(0, enhanced_types_1.isValidDateTime)(params.startdatetime)) {
|
|
453
|
+
throw new Error(`Invalid startdatetime format: ${String(params.startdatetime)}. Must be YYYYMMDDHHMMSS`);
|
|
454
|
+
}
|
|
455
|
+
if (params.enddatetime && !(0, enhanced_types_1.isValidDateTime)(params.enddatetime)) {
|
|
456
|
+
throw new Error(`Invalid enddatetime format: ${String(params.enddatetime)}. Must be YYYYMMDDHHMMSS`);
|
|
457
|
+
}
|
|
458
|
+
if (params.maxrecords !== undefined && !(0, enhanced_types_1.isValidMaxRecords)(params.maxrecords)) {
|
|
459
|
+
throw new Error(`Invalid maxrecords: ${String(params.maxrecords)}. Must be an integer between 1 and 250`);
|
|
460
|
+
}
|
|
461
|
+
if (params.timelinesmooth !== undefined && !(0, enhanced_types_1.isValidTimelineSmooth)(params.timelinesmooth)) {
|
|
462
|
+
throw new Error(`Invalid timelinesmooth: ${String(params.timelinesmooth)}. Must be an integer between 1 and 30`);
|
|
463
|
+
}
|
|
464
|
+
}
|
|
465
|
+
/**
|
|
466
|
+
* Enhanced response validation and transformation
|
|
467
|
+
*/
|
|
468
|
+
_transformAndValidateResponse(data, typeGuard) {
|
|
469
|
+
const transformedData = this._transformResponse(data);
|
|
470
|
+
// If a type guard is provided, use it for additional validation (only warn, don't throw)
|
|
471
|
+
if (typeGuard && !typeGuard(transformedData)) {
|
|
472
|
+
console.warn('Response validation warning: unexpected response structure');
|
|
473
|
+
}
|
|
474
|
+
return transformedData;
|
|
475
|
+
}
|
|
476
|
+
}
|
|
477
|
+
exports.GdeltClient = GdeltClient;
|
|
478
|
+
//# sourceMappingURL=client.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
|