@cyanheads/reliefweb-mcp-server 0.1.1

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 (77) hide show
  1. package/CLAUDE.md +391 -0
  2. package/Dockerfile +98 -0
  3. package/LICENSE +201 -0
  4. package/README.md +320 -0
  5. package/changelog/0.1.x/0.1.0.md +24 -0
  6. package/changelog/0.1.x/0.1.1.md +29 -0
  7. package/changelog/template.md +119 -0
  8. package/dist/config/server-config.d.ts +14 -0
  9. package/dist/config/server-config.d.ts.map +1 -0
  10. package/dist/config/server-config.js +19 -0
  11. package/dist/config/server-config.js.map +1 -0
  12. package/dist/index.d.ts +7 -0
  13. package/dist/index.d.ts.map +1 -0
  14. package/dist/index.js +42 -0
  15. package/dist/index.js.map +1 -0
  16. package/dist/mcp-server/prompts/definitions/crisis-briefing.prompt.d.ts +14 -0
  17. package/dist/mcp-server/prompts/definitions/crisis-briefing.prompt.d.ts.map +1 -0
  18. package/dist/mcp-server/prompts/definitions/crisis-briefing.prompt.js +62 -0
  19. package/dist/mcp-server/prompts/definitions/crisis-briefing.prompt.js.map +1 -0
  20. package/dist/mcp-server/resources/definitions/country.resource.d.ts +9 -0
  21. package/dist/mcp-server/resources/definitions/country.resource.d.ts.map +1 -0
  22. package/dist/mcp-server/resources/definitions/country.resource.js +30 -0
  23. package/dist/mcp-server/resources/definitions/country.resource.js.map +1 -0
  24. package/dist/mcp-server/resources/definitions/disaster.resource.d.ts +9 -0
  25. package/dist/mcp-server/resources/definitions/disaster.resource.d.ts.map +1 -0
  26. package/dist/mcp-server/resources/definitions/disaster.resource.js +30 -0
  27. package/dist/mcp-server/resources/definitions/disaster.resource.js.map +1 -0
  28. package/dist/mcp-server/resources/definitions/report.resource.d.ts +9 -0
  29. package/dist/mcp-server/resources/definitions/report.resource.d.ts.map +1 -0
  30. package/dist/mcp-server/resources/definitions/report.resource.js +30 -0
  31. package/dist/mcp-server/resources/definitions/report.resource.js.map +1 -0
  32. package/dist/mcp-server/tools/definitions/get-country.tool.d.ts +35 -0
  33. package/dist/mcp-server/tools/definitions/get-country.tool.d.ts.map +1 -0
  34. package/dist/mcp-server/tools/definitions/get-country.tool.js +106 -0
  35. package/dist/mcp-server/tools/definitions/get-country.tool.js.map +1 -0
  36. package/dist/mcp-server/tools/definitions/get-disaster.tool.d.ts +42 -0
  37. package/dist/mcp-server/tools/definitions/get-disaster.tool.d.ts.map +1 -0
  38. package/dist/mcp-server/tools/definitions/get-disaster.tool.js +127 -0
  39. package/dist/mcp-server/tools/definitions/get-disaster.tool.js.map +1 -0
  40. package/dist/mcp-server/tools/definitions/get-report.tool.d.ts +30 -0
  41. package/dist/mcp-server/tools/definitions/get-report.tool.d.ts.map +1 -0
  42. package/dist/mcp-server/tools/definitions/get-report.tool.js +92 -0
  43. package/dist/mcp-server/tools/definitions/get-report.tool.js.map +1 -0
  44. package/dist/mcp-server/tools/definitions/list-countries.tool.d.ts +20 -0
  45. package/dist/mcp-server/tools/definitions/list-countries.tool.d.ts.map +1 -0
  46. package/dist/mcp-server/tools/definitions/list-countries.tool.js +83 -0
  47. package/dist/mcp-server/tools/definitions/list-countries.tool.js.map +1 -0
  48. package/dist/mcp-server/tools/definitions/list-sources.tool.d.ts +22 -0
  49. package/dist/mcp-server/tools/definitions/list-sources.tool.d.ts.map +1 -0
  50. package/dist/mcp-server/tools/definitions/list-sources.tool.js +82 -0
  51. package/dist/mcp-server/tools/definitions/list-sources.tool.js.map +1 -0
  52. package/dist/mcp-server/tools/definitions/search-disasters.tool.d.ts +35 -0
  53. package/dist/mcp-server/tools/definitions/search-disasters.tool.d.ts.map +1 -0
  54. package/dist/mcp-server/tools/definitions/search-disasters.tool.js +163 -0
  55. package/dist/mcp-server/tools/definitions/search-disasters.tool.js.map +1 -0
  56. package/dist/mcp-server/tools/definitions/search-jobs.tool.d.ts +32 -0
  57. package/dist/mcp-server/tools/definitions/search-jobs.tool.d.ts.map +1 -0
  58. package/dist/mcp-server/tools/definitions/search-jobs.tool.js +148 -0
  59. package/dist/mcp-server/tools/definitions/search-jobs.tool.js.map +1 -0
  60. package/dist/mcp-server/tools/definitions/search-reports.tool.d.ts +40 -0
  61. package/dist/mcp-server/tools/definitions/search-reports.tool.d.ts.map +1 -0
  62. package/dist/mcp-server/tools/definitions/search-reports.tool.js +191 -0
  63. package/dist/mcp-server/tools/definitions/search-reports.tool.js.map +1 -0
  64. package/dist/mcp-server/tools/definitions/search-training.tool.d.ts +35 -0
  65. package/dist/mcp-server/tools/definitions/search-training.tool.d.ts.map +1 -0
  66. package/dist/mcp-server/tools/definitions/search-training.tool.js +166 -0
  67. package/dist/mcp-server/tools/definitions/search-training.tool.js.map +1 -0
  68. package/dist/services/reliefweb/reliefweb-service.d.ts +103 -0
  69. package/dist/services/reliefweb/reliefweb-service.d.ts.map +1 -0
  70. package/dist/services/reliefweb/reliefweb-service.js +546 -0
  71. package/dist/services/reliefweb/reliefweb-service.js.map +1 -0
  72. package/dist/services/reliefweb/types.d.ts +345 -0
  73. package/dist/services/reliefweb/types.d.ts.map +1 -0
  74. package/dist/services/reliefweb/types.js +7 -0
  75. package/dist/services/reliefweb/types.js.map +1 -0
  76. package/package.json +78 -0
  77. package/server.json +111 -0
@@ -0,0 +1,546 @@
1
+ /**
2
+ * @fileoverview ReliefWeb API v2 service — POST query builder, retry, field selection,
3
+ * normalization helpers for all content types.
4
+ * @module services/reliefweb/reliefweb-service
5
+ */
6
+ import { httpErrorFromResponse, withRetry } from '@cyanheads/mcp-ts-core/utils';
7
+ import { getServerConfig } from '../../config/server-config.js';
8
+ const BASE_URL = 'https://api.reliefweb.int/v2';
9
+ // Field selections for list views — trim payload to avoid burning context.
10
+ const REPORT_LIST_FIELDS = [
11
+ 'id',
12
+ 'title',
13
+ 'date.original',
14
+ 'date.created',
15
+ 'primary_country.name',
16
+ 'country.name',
17
+ 'source.shortname',
18
+ 'format.name',
19
+ 'theme.name',
20
+ 'language.code',
21
+ 'url_alias',
22
+ 'file.url',
23
+ 'headline.summary',
24
+ ];
25
+ const DISASTER_LIST_FIELDS = [
26
+ 'id',
27
+ 'name',
28
+ 'status',
29
+ 'glide',
30
+ 'date.event',
31
+ 'date.created',
32
+ 'primary_country.name',
33
+ 'country.name',
34
+ 'type.name',
35
+ 'primary_type.name',
36
+ 'url_alias',
37
+ ];
38
+ const JOB_LIST_FIELDS = [
39
+ 'id',
40
+ 'title',
41
+ 'date.created',
42
+ 'date.closing',
43
+ 'source.shortname',
44
+ 'country.name',
45
+ 'theme.name',
46
+ 'type.name',
47
+ 'career_categories.name',
48
+ 'experience.name',
49
+ 'url_alias',
50
+ ];
51
+ const TRAINING_LIST_FIELDS = [
52
+ 'id',
53
+ 'title',
54
+ 'date.start',
55
+ 'date.end',
56
+ 'date.registration',
57
+ 'source.shortname',
58
+ 'country.name',
59
+ 'theme.name',
60
+ 'format.name',
61
+ 'language.code',
62
+ 'career_categories.name',
63
+ 'url_alias',
64
+ ];
65
+ const SOURCE_LIST_FIELDS = ['id', 'name', 'shortname', 'type.name', 'url', 'homepage'];
66
+ export class ReliefWebService {
67
+ // Config and storage reserved for future use (caching, rate limiting).
68
+ // Currently only getServerConfig() is needed for the appname.
69
+ constructor(_appConfig, _storage) {
70
+ // Eagerly validate the appname at construction time so errors surface in setup().
71
+ getServerConfig();
72
+ }
73
+ // ─── Internal fetch ──────────────────────────────────────────────────────────
74
+ async post(contentType, query, ctx) {
75
+ const appName = getServerConfig().appName;
76
+ const url = `${BASE_URL}/${contentType}?appname=${encodeURIComponent(appName)}`;
77
+ return withRetry(async () => {
78
+ const response = await fetch(url, {
79
+ method: 'POST',
80
+ headers: { 'Content-Type': 'application/json', Accept: 'application/json' },
81
+ body: JSON.stringify(query),
82
+ signal: ctx.signal,
83
+ });
84
+ if (!response.ok) {
85
+ throw await httpErrorFromResponse(response, {
86
+ service: 'ReliefWeb',
87
+ data: { contentType, url },
88
+ });
89
+ }
90
+ const text = await response.text();
91
+ if (/^\s*<(!DOCTYPE\s+html|html[\s>])/i.test(text)) {
92
+ const { serviceUnavailable } = await import('@cyanheads/mcp-ts-core/errors');
93
+ throw serviceUnavailable('ReliefWeb returned HTML — likely rate-limited or blocked.', {
94
+ contentType,
95
+ });
96
+ }
97
+ return JSON.parse(text);
98
+ }, {
99
+ operation: `reliefweb.${contentType}.post`,
100
+ context: ctx,
101
+ baseDelayMs: 1_000,
102
+ signal: ctx.signal,
103
+ });
104
+ }
105
+ async get(contentType, id, profile, ctx) {
106
+ const appName = getServerConfig().appName;
107
+ const url = `${BASE_URL}/${contentType}/${id}?appname=${encodeURIComponent(appName)}&profile=${profile}`;
108
+ return withRetry(async () => {
109
+ const response = await fetch(url, {
110
+ method: 'GET',
111
+ headers: { Accept: 'application/json' },
112
+ signal: ctx.signal,
113
+ });
114
+ if (response.status === 404)
115
+ return null;
116
+ if (!response.ok) {
117
+ throw await httpErrorFromResponse(response, {
118
+ service: 'ReliefWeb',
119
+ data: { contentType, id, url },
120
+ });
121
+ }
122
+ const text = await response.text();
123
+ if (/^\s*<(!DOCTYPE\s+html|html[\s>])/i.test(text)) {
124
+ const { serviceUnavailable } = await import('@cyanheads/mcp-ts-core/errors');
125
+ throw serviceUnavailable('ReliefWeb returned HTML — likely rate-limited or blocked.', {
126
+ contentType,
127
+ id,
128
+ });
129
+ }
130
+ const parsed = JSON.parse(text);
131
+ return parsed.data ?? null;
132
+ }, {
133
+ operation: `reliefweb.${contentType}.get`,
134
+ context: ctx,
135
+ baseDelayMs: 1_000,
136
+ signal: ctx.signal,
137
+ });
138
+ }
139
+ // ─── Filter builder helpers ──────────────────────────────────────────────────
140
+ buildAndFilter(conditions) {
141
+ if (conditions.length === 0)
142
+ return;
143
+ if (conditions.length === 1)
144
+ return conditions[0];
145
+ return { operator: 'AND', conditions };
146
+ }
147
+ mergeFilters(builtConditions, rawFilter) {
148
+ if (rawFilter && builtConditions.length > 0) {
149
+ return { operator: 'AND', conditions: [...builtConditions, rawFilter] };
150
+ }
151
+ if (rawFilter)
152
+ return rawFilter;
153
+ return this.buildAndFilter(builtConditions);
154
+ }
155
+ makeDateFilter(field, from, to) {
156
+ const value = {};
157
+ if (from)
158
+ value.from = from;
159
+ if (to)
160
+ value.to = to;
161
+ return { field, value };
162
+ }
163
+ // ─── Reports ─────────────────────────────────────────────────────────────────
164
+ async searchReports(params, ctx) {
165
+ ctx.log.debug('searchReports', { params });
166
+ const conditions = [];
167
+ if (params.country)
168
+ conditions.push({ field: 'primary_country.iso3', value: params.country });
169
+ if (params.disasterId)
170
+ conditions.push({ field: 'disaster.id', value: params.disasterId });
171
+ if (params.format)
172
+ conditions.push({ field: 'format.name', value: params.format });
173
+ if (params.theme)
174
+ conditions.push({ field: 'theme.name', value: params.theme });
175
+ if (params.language)
176
+ conditions.push({ field: 'language.code', value: params.language });
177
+ if (params.source)
178
+ conditions.push({ field: 'source.shortname', value: params.source });
179
+ if (params.dateFrom || params.dateTo) {
180
+ conditions.push(this.makeDateFilter('date.original', params.dateFrom, params.dateTo));
181
+ }
182
+ const filter = this.mergeFilters(conditions, params.rawFilter);
183
+ const query = {
184
+ fields: { include: REPORT_LIST_FIELDS },
185
+ ...(filter ? { filter } : {}),
186
+ sort: [params.sort ?? 'date.original:desc'],
187
+ preset: params.includeArchived ? 'analysis' : 'latest',
188
+ limit: params.limit ?? 10,
189
+ offset: params.offset ?? 0,
190
+ };
191
+ if (params.text)
192
+ query.query = { value: params.text, operator: 'AND' };
193
+ const result = await this.post('reports', query, ctx);
194
+ return {
195
+ items: (result.data ?? []).map((r) => normalizeReportSummary(r.fields, r.id)),
196
+ totalCount: result.totalCount,
197
+ };
198
+ }
199
+ async getReport(id, ctx) {
200
+ ctx.log.debug('getReport', { id });
201
+ const record = await this.get('reports', id, 'full', ctx);
202
+ if (!record)
203
+ return null;
204
+ return normalizeReportDetail(record.fields, record.id);
205
+ }
206
+ // ─── Disasters ───────────────────────────────────────────────────────────────
207
+ async searchDisasters(params, ctx) {
208
+ ctx.log.debug('searchDisasters', { params });
209
+ const conditions = [];
210
+ if (params.country)
211
+ conditions.push({ field: 'primary_country.iso3', value: params.country });
212
+ if (params.disasterType)
213
+ conditions.push({ field: 'type.name', value: params.disasterType });
214
+ if (params.status) {
215
+ const values = params.status
216
+ .split(',')
217
+ .map((s) => s.trim())
218
+ .filter((s) => s.length > 0);
219
+ const statusValue = values.length === 1 ? (values[0] ?? values) : values;
220
+ conditions.push({ field: 'status', value: statusValue });
221
+ }
222
+ if (params.glide)
223
+ conditions.push({ field: 'glide', value: params.glide });
224
+ if (params.dateFrom || params.dateTo) {
225
+ conditions.push(this.makeDateFilter('date.created', params.dateFrom, params.dateTo));
226
+ }
227
+ const filter = this.buildAndFilter(conditions);
228
+ const query = {
229
+ fields: { include: DISASTER_LIST_FIELDS },
230
+ ...(filter ? { filter } : {}),
231
+ sort: [params.sort ?? 'date.created:desc'],
232
+ preset: params.includeArchived ? 'analysis' : 'latest',
233
+ limit: params.limit ?? 10,
234
+ offset: params.offset ?? 0,
235
+ };
236
+ if (params.text)
237
+ query.query = { value: params.text, operator: 'AND' };
238
+ const result = await this.post('disasters', query, ctx);
239
+ return {
240
+ items: (result.data ?? []).map((r) => normalizeDisasterSummary(r.fields, r.id)),
241
+ totalCount: result.totalCount,
242
+ };
243
+ }
244
+ async getDisaster(id, ctx) {
245
+ ctx.log.debug('getDisaster', { id });
246
+ const record = await this.get('disasters', id, 'full', ctx);
247
+ if (!record)
248
+ return null;
249
+ return normalizeDisasterDetail(record.fields, record.id);
250
+ }
251
+ // ─── Countries ───────────────────────────────────────────────────────────────
252
+ async getCountry(iso3, ctx) {
253
+ ctx.log.debug('getCountry', { iso3 });
254
+ const query = {
255
+ filter: { field: 'iso3', value: iso3.toUpperCase() },
256
+ profile: 'full',
257
+ limit: 1,
258
+ };
259
+ const result = await this.post('countries', query, ctx);
260
+ const record = result.data?.[0];
261
+ if (!record)
262
+ return null;
263
+ return normalizeCountryDetail(record.fields, record.id);
264
+ }
265
+ async listCountries(params, ctx) {
266
+ ctx.log.debug('listCountries', { params });
267
+ const conditions = [];
268
+ if (params.crisisOnly) {
269
+ conditions.push({ field: 'status', value: ['alert', 'current'], operator: 'OR' });
270
+ }
271
+ const filter = this.buildAndFilter(conditions);
272
+ const query = {
273
+ fields: { include: ['id', 'name', 'iso3', 'status', 'url_alias'] },
274
+ ...(filter ? { filter } : {}),
275
+ sort: ['name:asc'],
276
+ limit: params.limit ?? 100,
277
+ offset: params.offset ?? 0,
278
+ };
279
+ const result = await this.post('countries', query, ctx);
280
+ return {
281
+ items: (result.data ?? []).map((r) => normalizeCountrySummary(r.fields, r.id)),
282
+ totalCount: result.totalCount,
283
+ };
284
+ }
285
+ // ─── Jobs ────────────────────────────────────────────────────────────────────
286
+ async searchJobs(params, ctx) {
287
+ ctx.log.debug('searchJobs', { params });
288
+ const conditions = [];
289
+ if (params.country)
290
+ conditions.push({ field: 'country.iso3', value: params.country });
291
+ if (params.source)
292
+ conditions.push({ field: 'source.shortname', value: params.source });
293
+ if (params.careerCategory)
294
+ conditions.push({ field: 'career_categories.name', value: params.careerCategory });
295
+ if (params.theme)
296
+ conditions.push({ field: 'theme.name', value: params.theme });
297
+ if (params.experience)
298
+ conditions.push({ field: 'experience.name', value: params.experience });
299
+ const filter = this.buildAndFilter(conditions);
300
+ const query = {
301
+ fields: { include: JOB_LIST_FIELDS },
302
+ ...(filter ? { filter } : {}),
303
+ sort: ['date.created:desc'],
304
+ preset: 'latest',
305
+ limit: params.limit ?? 10,
306
+ offset: params.offset ?? 0,
307
+ };
308
+ if (params.text)
309
+ query.query = { value: params.text, operator: 'AND' };
310
+ const result = await this.post('jobs', query, ctx);
311
+ return {
312
+ items: (result.data ?? []).map((r) => normalizeJobSummary(r.fields, r.id)),
313
+ totalCount: result.totalCount,
314
+ };
315
+ }
316
+ // ─── Training ────────────────────────────────────────────────────────────────
317
+ async searchTraining(params, ctx) {
318
+ ctx.log.debug('searchTraining', { params });
319
+ const conditions = [];
320
+ if (params.country)
321
+ conditions.push({ field: 'country.iso3', value: params.country });
322
+ if (params.source)
323
+ conditions.push({ field: 'source.shortname', value: params.source });
324
+ if (params.format)
325
+ conditions.push({ field: 'format.name', value: params.format });
326
+ if (params.careerCategory)
327
+ conditions.push({ field: 'career_categories.name', value: params.careerCategory });
328
+ if (params.language)
329
+ conditions.push({ field: 'language.code', value: params.language });
330
+ if (params.dateStartFrom || params.dateStartTo) {
331
+ conditions.push(this.makeDateFilter('date.start', params.dateStartFrom, params.dateStartTo));
332
+ }
333
+ const filter = this.buildAndFilter(conditions);
334
+ const query = {
335
+ fields: { include: TRAINING_LIST_FIELDS },
336
+ ...(filter ? { filter } : {}),
337
+ sort: ['date.created:desc'],
338
+ preset: 'latest',
339
+ limit: params.limit ?? 10,
340
+ offset: params.offset ?? 0,
341
+ };
342
+ if (params.text)
343
+ query.query = { value: params.text, operator: 'AND' };
344
+ const result = await this.post('training', query, ctx);
345
+ return {
346
+ items: (result.data ?? []).map((r) => normalizeTrainingSummary(r.fields, r.id)),
347
+ totalCount: result.totalCount,
348
+ };
349
+ }
350
+ // ─── Sources ─────────────────────────────────────────────────────────────────
351
+ async listSources(params, ctx) {
352
+ ctx.log.debug('listSources', { params });
353
+ const conditions = [];
354
+ if (params.type)
355
+ conditions.push({ field: 'type.name', value: params.type });
356
+ const filter = this.buildAndFilter(conditions);
357
+ const query = {
358
+ fields: { include: SOURCE_LIST_FIELDS },
359
+ ...(filter ? { filter } : {}),
360
+ sort: ['name:asc'],
361
+ preset: 'minimal',
362
+ limit: params.limit ?? 10,
363
+ offset: params.offset ?? 0,
364
+ };
365
+ if (params.text)
366
+ query.query = { value: params.text, operator: 'AND' };
367
+ const result = await this.post('sources', query, ctx);
368
+ return {
369
+ items: (result.data ?? []).map((r) => normalizeSourceSummary(r.fields, r.id)),
370
+ totalCount: result.totalCount,
371
+ };
372
+ }
373
+ }
374
+ // ─── Init/accessor pattern ────────────────────────────────────────────────────
375
+ let _service;
376
+ export function initReliefWebService(config, storage) {
377
+ _service = new ReliefWebService(config, storage);
378
+ }
379
+ export function getReliefWebService() {
380
+ if (!_service) {
381
+ throw new Error('ReliefWebService not initialized — call initReliefWebService() in setup()');
382
+ }
383
+ return _service;
384
+ }
385
+ // ─── Normalization helpers ────────────────────────────────────────────────────
386
+ function normalizeReportSummary(f, id) {
387
+ const r = { id: f.id ?? id, title: f.title ?? '(untitled)' };
388
+ if (f.date?.original)
389
+ r.dateOriginal = f.date.original;
390
+ if (f.date?.created)
391
+ r.dateCreated = f.date.created;
392
+ if (f.primary_country?.name)
393
+ r.primaryCountry = f.primary_country.name;
394
+ if (f.country?.length)
395
+ r.countries = f.country.map((c) => c.name ?? '').filter(Boolean);
396
+ if (f.source?.length)
397
+ r.sources = f.source.map((s) => s.shortname ?? s.name ?? '').filter(Boolean);
398
+ if (f.format?.length)
399
+ r.formats = f.format.map((x) => x.name ?? '').filter(Boolean);
400
+ if (f.theme?.length)
401
+ r.themes = f.theme.map((x) => x.name ?? '').filter(Boolean);
402
+ if (f.language?.length)
403
+ r.languages = f.language.map((x) => x.code ?? '').filter(Boolean);
404
+ if (f.url_alias)
405
+ r.urlAlias = f.url_alias;
406
+ if (f.file?.length)
407
+ r.fileUrls = f.file.map((x) => x.url ?? '').filter(Boolean);
408
+ if (f.headline?.summary)
409
+ r.headlineSummary = f.headline.summary;
410
+ return r;
411
+ }
412
+ function normalizeReportDetail(f, id) {
413
+ const summary = normalizeReportSummary(f, id);
414
+ if (f.body)
415
+ return { ...summary, body: f.body };
416
+ return summary;
417
+ }
418
+ function normalizeDisasterSummary(f, id) {
419
+ const r = { id: f.id ?? id, name: f.name ?? '(unnamed)' };
420
+ if (f.status)
421
+ r.status = f.status;
422
+ if (f.glide)
423
+ r.glide = f.glide;
424
+ if (f.date?.event)
425
+ r.dateEvent = f.date.event;
426
+ if (f.date?.created)
427
+ r.dateCreated = f.date.created;
428
+ if (f.primary_country?.name)
429
+ r.primaryCountry = f.primary_country.name;
430
+ if (f.country?.length)
431
+ r.countries = f.country.map((c) => c.name ?? '').filter(Boolean);
432
+ if (f.type?.length)
433
+ r.types = f.type.map((t) => t.name ?? '').filter(Boolean);
434
+ if (f.primary_type?.name)
435
+ r.primaryType = f.primary_type.name;
436
+ if (f.url_alias)
437
+ r.urlAlias = f.url_alias;
438
+ return r;
439
+ }
440
+ function normalizeDisasterDetail(f, id) {
441
+ const summary = normalizeDisasterSummary(f, id);
442
+ const r = { ...summary };
443
+ if (f.description)
444
+ r.description = f.description;
445
+ if (f.profile?.overview)
446
+ r.profileOverview = f.profile.overview;
447
+ if (f.profile?.key_content?.length) {
448
+ r.keyContent = f.profile.key_content.flatMap((kc) => kc.title && kc.url ? [{ title: kc.title, url: kc.url }] : []);
449
+ }
450
+ if (f.profile?.appeals_response_plans?.length) {
451
+ r.appealsResponsePlans = f.profile.appeals_response_plans.flatMap((ap) => ap.title && ap.url
452
+ ? [{ title: ap.title, url: ap.url, ...(ap.date ? { date: ap.date } : {}) }]
453
+ : []);
454
+ }
455
+ if (f.profile?.useful_links?.length) {
456
+ r.usefulLinks = f.profile.useful_links.flatMap((ul) => ul.title && ul.url ? [{ title: ul.title, url: ul.url }] : []);
457
+ }
458
+ return r;
459
+ }
460
+ function normalizeCountrySummary(f, id) {
461
+ const r = { id: f.id ?? id, name: f.name ?? '(unnamed)' };
462
+ if (f.iso3)
463
+ r.iso3 = f.iso3;
464
+ if (f.status)
465
+ r.status = f.status;
466
+ if (f.url_alias)
467
+ r.urlAlias = f.url_alias;
468
+ return r;
469
+ }
470
+ function normalizeCountryDetail(f, id) {
471
+ const summary = normalizeCountrySummary(f, id);
472
+ const r = { ...summary };
473
+ if (f.profile?.overview)
474
+ r.profileOverview = f.profile.overview;
475
+ if (f.profile?.key_content?.length) {
476
+ r.keyContent = f.profile.key_content.flatMap((kc) => kc.title && kc.url ? [{ title: kc.title, url: kc.url }] : []);
477
+ }
478
+ if (f.profile?.appeals_response_plans?.length) {
479
+ r.appealsResponsePlans = f.profile.appeals_response_plans.flatMap((ap) => ap.title && ap.url
480
+ ? [{ title: ap.title, url: ap.url, ...(ap.date ? { date: ap.date } : {}) }]
481
+ : []);
482
+ }
483
+ if (f.profile?.useful_links?.length) {
484
+ r.usefulLinks = f.profile.useful_links.flatMap((ul) => ul.title && ul.url ? [{ title: ul.title, url: ul.url }] : []);
485
+ }
486
+ return r;
487
+ }
488
+ function normalizeJobSummary(f, id) {
489
+ const r = { id: f.id ?? id, title: f.title ?? '(untitled)' };
490
+ if (f.date?.created)
491
+ r.dateCreated = f.date.created;
492
+ if (f.date?.closing)
493
+ r.dateClosing = f.date.closing;
494
+ if (f.source?.length)
495
+ r.sources = f.source.map((s) => s.shortname ?? s.name ?? '').filter(Boolean);
496
+ if (f.country?.length)
497
+ r.countries = f.country.map((c) => c.name ?? '').filter(Boolean);
498
+ if (f.theme?.length)
499
+ r.themes = f.theme.map((t) => t.name ?? '').filter(Boolean);
500
+ if (f.type?.length)
501
+ r.types = f.type.map((t) => t.name ?? '').filter(Boolean);
502
+ if (f.career_categories?.length)
503
+ r.careerCategories = f.career_categories.map((c) => c.name ?? '').filter(Boolean);
504
+ if (f.experience?.length)
505
+ r.experienceLevels = f.experience.map((e) => e.name ?? '').filter(Boolean);
506
+ if (f.url_alias)
507
+ r.urlAlias = f.url_alias;
508
+ return r;
509
+ }
510
+ function normalizeTrainingSummary(f, id) {
511
+ const r = { id: f.id ?? id, title: f.title ?? '(untitled)' };
512
+ if (f.date?.start)
513
+ r.dateStart = f.date.start;
514
+ if (f.date?.end)
515
+ r.dateEnd = f.date.end;
516
+ if (f.date?.registration)
517
+ r.dateRegistration = f.date.registration;
518
+ if (f.source?.length)
519
+ r.sources = f.source.map((s) => s.shortname ?? s.name ?? '').filter(Boolean);
520
+ if (f.country?.length)
521
+ r.countries = f.country.map((c) => c.name ?? '').filter(Boolean);
522
+ if (f.theme?.length)
523
+ r.themes = f.theme.map((t) => t.name ?? '').filter(Boolean);
524
+ if (f.format?.length)
525
+ r.formats = f.format.map((x) => x.name ?? '').filter(Boolean);
526
+ if (f.language?.length)
527
+ r.languages = f.language.map((l) => l.code ?? '').filter(Boolean);
528
+ if (f.career_categories?.length)
529
+ r.careerCategories = f.career_categories.map((c) => c.name ?? '').filter(Boolean);
530
+ if (f.url_alias)
531
+ r.urlAlias = f.url_alias;
532
+ return r;
533
+ }
534
+ function normalizeSourceSummary(f, id) {
535
+ const r = { id: f.id ?? id, name: f.name ?? '(unnamed)' };
536
+ if (f.shortname)
537
+ r.shortname = f.shortname;
538
+ if (f.type?.length)
539
+ r.types = f.type.map((t) => t.name ?? '').filter(Boolean);
540
+ if (f.url)
541
+ r.url = f.url;
542
+ if (f.homepage)
543
+ r.homepage = f.homepage;
544
+ return r;
545
+ }
546
+ //# sourceMappingURL=reliefweb-service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reliefweb-service.js","sourceRoot":"","sources":["../../../src/services/reliefweb/reliefweb-service.ts"],"names":[],"mappings":"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"}