@cyanheads/imf-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 (65) hide show
  1. package/AGENTS.md +377 -0
  2. package/CLAUDE.md +377 -0
  3. package/Dockerfile +105 -0
  4. package/LICENSE +201 -0
  5. package/README.md +290 -0
  6. package/changelog/0.1.x/0.1.1.md +33 -0
  7. package/changelog/template.md +127 -0
  8. package/dist/config/server-config.d.ts +13 -0
  9. package/dist/config/server-config.d.ts.map +1 -0
  10. package/dist/config/server-config.js +26 -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 +28 -0
  15. package/dist/index.js.map +1 -0
  16. package/dist/mcp-server/prompts/definitions/index.d.ts +7 -0
  17. package/dist/mcp-server/prompts/definitions/index.d.ts.map +1 -0
  18. package/dist/mcp-server/prompts/definitions/index.js +7 -0
  19. package/dist/mcp-server/prompts/definitions/index.js.map +1 -0
  20. package/dist/mcp-server/resources/definitions/imf-database.resource.d.ts +9 -0
  21. package/dist/mcp-server/resources/definitions/imf-database.resource.d.ts.map +1 -0
  22. package/dist/mcp-server/resources/definitions/imf-database.resource.js +61 -0
  23. package/dist/mcp-server/resources/definitions/imf-database.resource.js.map +1 -0
  24. package/dist/mcp-server/resources/definitions/index.d.ts +9 -0
  25. package/dist/mcp-server/resources/definitions/index.d.ts.map +1 -0
  26. package/dist/mcp-server/resources/definitions/index.js +8 -0
  27. package/dist/mcp-server/resources/definitions/index.js.map +1 -0
  28. package/dist/mcp-server/tools/definitions/imf-dataframe-describe.tool.d.ts +26 -0
  29. package/dist/mcp-server/tools/definitions/imf-dataframe-describe.tool.d.ts.map +1 -0
  30. package/dist/mcp-server/tools/definitions/imf-dataframe-describe.tool.js +96 -0
  31. package/dist/mcp-server/tools/definitions/imf-dataframe-describe.tool.js.map +1 -0
  32. package/dist/mcp-server/tools/definitions/imf-dataframe-query.tool.d.ts +24 -0
  33. package/dist/mcp-server/tools/definitions/imf-dataframe-query.tool.d.ts.map +1 -0
  34. package/dist/mcp-server/tools/definitions/imf-dataframe-query.tool.js +96 -0
  35. package/dist/mcp-server/tools/definitions/imf-dataframe-query.tool.js.map +1 -0
  36. package/dist/mcp-server/tools/definitions/imf-get-database.tool.d.ts +39 -0
  37. package/dist/mcp-server/tools/definitions/imf-get-database.tool.d.ts.map +1 -0
  38. package/dist/mcp-server/tools/definitions/imf-get-database.tool.js +155 -0
  39. package/dist/mcp-server/tools/definitions/imf-get-database.tool.js.map +1 -0
  40. package/dist/mcp-server/tools/definitions/imf-list-databases.tool.d.ts +19 -0
  41. package/dist/mcp-server/tools/definitions/imf-list-databases.tool.d.ts.map +1 -0
  42. package/dist/mcp-server/tools/definitions/imf-list-databases.tool.js +88 -0
  43. package/dist/mcp-server/tools/definitions/imf-list-databases.tool.js.map +1 -0
  44. package/dist/mcp-server/tools/definitions/imf-query-dataset.tool.d.ts +57 -0
  45. package/dist/mcp-server/tools/definitions/imf-query-dataset.tool.d.ts.map +1 -0
  46. package/dist/mcp-server/tools/definitions/imf-query-dataset.tool.js +277 -0
  47. package/dist/mcp-server/tools/definitions/imf-query-dataset.tool.js.map +1 -0
  48. package/dist/mcp-server/tools/definitions/index.d.ts +136 -0
  49. package/dist/mcp-server/tools/definitions/index.d.ts.map +1 -0
  50. package/dist/mcp-server/tools/definitions/index.js +22 -0
  51. package/dist/mcp-server/tools/definitions/index.js.map +1 -0
  52. package/dist/services/canvas/canvas-accessor.d.ts +11 -0
  53. package/dist/services/canvas/canvas-accessor.d.ts.map +1 -0
  54. package/dist/services/canvas/canvas-accessor.js +13 -0
  55. package/dist/services/canvas/canvas-accessor.js.map +1 -0
  56. package/dist/services/imf-sdmx/imf-sdmx-service.d.ts +38 -0
  57. package/dist/services/imf-sdmx/imf-sdmx-service.d.ts.map +1 -0
  58. package/dist/services/imf-sdmx/imf-sdmx-service.js +415 -0
  59. package/dist/services/imf-sdmx/imf-sdmx-service.js.map +1 -0
  60. package/dist/services/imf-sdmx/types.d.ts +157 -0
  61. package/dist/services/imf-sdmx/types.d.ts.map +1 -0
  62. package/dist/services/imf-sdmx/types.js +6 -0
  63. package/dist/services/imf-sdmx/types.js.map +1 -0
  64. package/package.json +106 -0
  65. package/server.json +99 -0
@@ -0,0 +1,415 @@
1
+ /**
2
+ * @fileoverview IMF SDMX 3.0 REST API service — fetches dataflows, data structures,
3
+ * and observations from api.imf.org. Implements caching via ctx.state and retry.
4
+ * @module services/imf-sdmx/imf-sdmx-service
5
+ */
6
+ import { notFound, serviceUnavailable } from '@cyanheads/mcp-ts-core/errors';
7
+ import { fetchWithTimeout, withRetry } from '@cyanheads/mcp-ts-core/utils';
8
+ const DATAFLOWS_CACHE_TTL = 3600; // 1 hour
9
+ const DSD_CACHE_TTL = 86_400; // 24 hours
10
+ export class ImfSdmxService {
11
+ baseUrl;
12
+ timeoutMs;
13
+ constructor(_config, _storage, baseUrl, timeoutMs) {
14
+ this.baseUrl = baseUrl.replace(/\/+$/, '');
15
+ this.timeoutMs = timeoutMs;
16
+ }
17
+ // ---------------------------------------------------------------------------
18
+ // Dataflow list
19
+ // ---------------------------------------------------------------------------
20
+ /** Fetch all dataflows, with 1-hour caching. */
21
+ async fetchDataflows(ctx) {
22
+ const cacheKey = 'imf/dataflows/all';
23
+ const cached = await ctx.state.get(cacheKey);
24
+ if (cached) {
25
+ ctx.log.debug('Dataflows served from cache', { count: cached.length });
26
+ return cached;
27
+ }
28
+ const raw = await withRetry(async () => {
29
+ const url = `${this.baseUrl}/structure/dataflow`;
30
+ ctx.log.debug('Fetching dataflow list', { url });
31
+ const response = await fetchWithTimeout(url, this.timeoutMs, ctx, {
32
+ headers: { Accept: 'application/json' },
33
+ signal: ctx.signal,
34
+ });
35
+ const text = await response.text();
36
+ return this.parseJson(text, 'dataflow list');
37
+ }, {
38
+ operation: 'ImfSdmxService.fetchDataflows',
39
+ context: ctx,
40
+ maxRetries: 3,
41
+ baseDelayMs: 1000,
42
+ signal: ctx.signal,
43
+ });
44
+ const dataflows = this.normalizeDataflows(raw);
45
+ await ctx.state.set(cacheKey, dataflows, { ttl: DATAFLOWS_CACHE_TTL });
46
+ ctx.log.info('Dataflows fetched and cached', { count: dataflows.length });
47
+ return dataflows;
48
+ }
49
+ /** Find a dataflow by id, optionally constraining by agencyId/version. */
50
+ async findDataflow(dataflowId, agencyId, version, ctx) {
51
+ const all = await this.fetchDataflows(ctx);
52
+ return all.find((df) => df.id === dataflowId &&
53
+ (agencyId == null || df.agencyId === agencyId) &&
54
+ (version == null || df.version === version));
55
+ }
56
+ // ---------------------------------------------------------------------------
57
+ // Data structure (DSD + codelists)
58
+ // ---------------------------------------------------------------------------
59
+ /** Fetch DSD with all codelists for a dataflow, with 24-hour caching. */
60
+ async fetchDataStructure(agencyId, dsdId, version, ctx) {
61
+ const cacheKey = `imf/dsd/${agencyId}/${dsdId}/${version}`;
62
+ const cached = await ctx.state.get(cacheKey);
63
+ if (cached) {
64
+ ctx.log.debug('DSD served from cache', { dsdId });
65
+ return cached;
66
+ }
67
+ const raw = await withRetry(async () => {
68
+ const url = `${this.baseUrl}/structure/datastructure/${encodeURIComponent(agencyId)}/${encodeURIComponent(dsdId)}/${encodeURIComponent(version)}?references=all`;
69
+ ctx.log.debug('Fetching data structure', { url });
70
+ const response = await fetchWithTimeout(url, this.timeoutMs, ctx, {
71
+ headers: { Accept: 'application/json' },
72
+ signal: ctx.signal,
73
+ });
74
+ const text = await response.text();
75
+ return this.parseJson(text, 'data structure');
76
+ }, {
77
+ operation: 'ImfSdmxService.fetchDataStructure',
78
+ context: ctx,
79
+ maxRetries: 3,
80
+ baseDelayMs: 1000,
81
+ signal: ctx.signal,
82
+ });
83
+ const structure = this.normalizeDsd(raw, agencyId, dsdId, version);
84
+ if (!structure)
85
+ return;
86
+ await ctx.state.set(cacheKey, structure, { ttl: DSD_CACHE_TTL });
87
+ return structure;
88
+ }
89
+ /**
90
+ * Fetch a dataflow's structure, resolving the DSD reference from the dataflow
91
+ * list if not provided.
92
+ */
93
+ async fetchDataflowStructure(dataflowId, agencyId, version, ctx) {
94
+ const dataflow = await this.findDataflow(dataflowId, agencyId, version, ctx);
95
+ if (!dataflow) {
96
+ throw notFound(`Dataflow '${dataflowId}' not found`, {
97
+ reason: 'dataflow_not_found',
98
+ dataflowId,
99
+ });
100
+ }
101
+ // Derive DSD id from the dataflow — IMF SDMX 3.0 uses DSD_<FLOW_ID> naming for most flows.
102
+ // We fetch the structure endpoint directly using the dataflow's agency+version.
103
+ const dsdId = `DSD_${dataflowId}`;
104
+ let structure;
105
+ try {
106
+ structure = await this.fetchDataStructure(dataflow.agencyId, dsdId, dataflow.version, ctx).catch(() => this.fetchDataflowStructureFallback(dataflowId, dataflow.agencyId, dataflow.version, ctx));
107
+ }
108
+ catch {
109
+ // Both primary and fallback DSD fetch failed; throw a controlled message
110
+ // (the raw McpError would carry the upstream URL path in its message).
111
+ throw serviceUnavailable(`Structure unavailable for dataflow '${dataflowId}'`, {
112
+ reason: 'structure_unavailable',
113
+ dataflowId,
114
+ });
115
+ }
116
+ if (!structure) {
117
+ throw serviceUnavailable(`Structure unavailable for dataflow '${dataflowId}'`, {
118
+ reason: 'structure_unavailable',
119
+ dataflowId,
120
+ });
121
+ }
122
+ // Merge name/description from the dataflow into the structure.
123
+ const mergedDescription = structure.description ?? dataflow.description;
124
+ return {
125
+ ...structure,
126
+ dataflowId,
127
+ name: structure.name || dataflow.name,
128
+ ...(mergedDescription ? { description: mergedDescription } : {}),
129
+ };
130
+ }
131
+ /** Fallback: fetch structure using the dataflow endpoint path directly. */
132
+ async fetchDataflowStructureFallback(dataflowId, agencyId, version, ctx) {
133
+ const cacheKey = `imf/dsd-fb/${agencyId}/${dataflowId}/${version}`;
134
+ const cached = await ctx.state.get(cacheKey);
135
+ if (cached)
136
+ return cached;
137
+ const raw = await withRetry(async () => {
138
+ const url = `${this.baseUrl}/structure/dataflow/${encodeURIComponent(agencyId)}/${encodeURIComponent(dataflowId)}/${encodeURIComponent(version)}?references=all`;
139
+ ctx.log.debug('Fetching dataflow structure (fallback)', { url });
140
+ const response = await fetchWithTimeout(url, this.timeoutMs, ctx, {
141
+ headers: { Accept: 'application/json' },
142
+ signal: ctx.signal,
143
+ });
144
+ const text = await response.text();
145
+ return this.parseJson(text, 'dataflow structure (fallback)');
146
+ }, {
147
+ operation: 'ImfSdmxService.fetchDataflowStructureFallback',
148
+ context: ctx,
149
+ maxRetries: 3,
150
+ baseDelayMs: 1000,
151
+ signal: ctx.signal,
152
+ });
153
+ const structure = this.normalizeDsd(raw, agencyId, dataflowId, version);
154
+ if (structure) {
155
+ await ctx.state.set(cacheKey, structure, { ttl: DSD_CACHE_TTL });
156
+ }
157
+ return structure;
158
+ }
159
+ // ---------------------------------------------------------------------------
160
+ // Data query
161
+ // ---------------------------------------------------------------------------
162
+ /** Fetch observations for a dataflow key over a time range. No cache — always live. */
163
+ async fetchData(agencyId, dataflowId, version, key, startPeriod, endPeriod, ctx, signal) {
164
+ const queryParams = new URLSearchParams();
165
+ if (startPeriod)
166
+ queryParams.set('startPeriod', startPeriod);
167
+ if (endPeriod)
168
+ queryParams.set('endPeriod', endPeriod);
169
+ const qsStr = queryParams.toString();
170
+ const qs = qsStr ? `?${qsStr}` : '';
171
+ // Build a minimal RequestContextLike for fetchWithTimeout when no ctx provided
172
+ const now = new Date().toISOString();
173
+ const fetchCtx = ctx
174
+ ? ctx
175
+ : { requestId: 'internal', timestamp: now };
176
+ const effectiveSignal = signal ?? ctx?.signal;
177
+ const raw = await withRetry(async () => {
178
+ const url = `${this.baseUrl}/data/dataflow/${encodeURIComponent(agencyId)}/${encodeURIComponent(dataflowId)}/${encodeURIComponent(version)}/${encodeURIComponent(key)}${qs}`;
179
+ if (ctx)
180
+ ctx.log.debug('Fetching data', { url });
181
+ const response = await fetchWithTimeout(url, this.timeoutMs, fetchCtx, {
182
+ headers: { Accept: 'application/json' },
183
+ ...(effectiveSignal ? { signal: effectiveSignal } : {}),
184
+ });
185
+ const text = await response.text();
186
+ return this.parseJson(text, 'data query');
187
+ }, {
188
+ operation: 'ImfSdmxService.fetchData',
189
+ context: ctx,
190
+ maxRetries: 3,
191
+ baseDelayMs: 1000,
192
+ ...(effectiveSignal ? { signal: effectiveSignal } : {}),
193
+ });
194
+ return this.decodeObservations(raw, dataflowId, key, startPeriod, endPeriod);
195
+ }
196
+ // ---------------------------------------------------------------------------
197
+ // Normalizers
198
+ // ---------------------------------------------------------------------------
199
+ normalizeDataflows(raw) {
200
+ const flows = raw.data?.dataflows ?? [];
201
+ return flows.map((f) => ({
202
+ id: f.id,
203
+ agencyId: f.agencyID ?? 'IMF',
204
+ version: f.version ?? '1.0',
205
+ name: f.names?.en ?? f.id,
206
+ ...(f.descriptions?.en ? { description: f.descriptions.en } : {}),
207
+ }));
208
+ }
209
+ normalizeDsd(raw, agencyId, id, version) {
210
+ const dsds = raw.data?.dataStructures ?? [];
211
+ const codelists = raw.data?.codelists ?? [];
212
+ const dataflows = raw.data?.dataflows ?? [];
213
+ // Build a codelist map: id → entries
214
+ const clMap = new Map();
215
+ for (const cl of codelists) {
216
+ const entries = (cl.codes ?? []).map((c) => ({
217
+ id: c.id,
218
+ name: c.names?.en ?? c.id,
219
+ }));
220
+ clMap.set(cl.id, entries);
221
+ if (cl.agencyID) {
222
+ clMap.set(`${cl.agencyID}:${cl.id}`, entries);
223
+ clMap.set(`${cl.agencyID}:${cl.id}:${cl.version ?? '1.0'}`, entries);
224
+ }
225
+ }
226
+ const dsd = dsds[0];
227
+ if (!dsd)
228
+ return;
229
+ const dimList = dsd.dataStructureComponents?.dimensionList?.dimensions ?? [];
230
+ // IMF SDMX 3.0 uses `position` (SDMX 3.0 spec); legacy used `keyPosition`.
231
+ const sorted = [...dimList].sort((a, b) => (a.position ?? a.keyPosition ?? 0) - (b.position ?? b.keyPosition ?? 0));
232
+ // Derive the dataflow ID portion for IMF naming-convention codelist lookup.
233
+ // IMF SDMX 3.0 does not populate localRepresentation.enumeration — codelists are
234
+ // identified by naming convention: CL_<FLOW_ID>_<DIM_ID> (flow-specific) or
235
+ // CL_<DIM_ID> (shared). Try flow-specific first, then shared.
236
+ const flowIdForCl = id.replace(/^DSD_/, '');
237
+ const dimensions = sorted.map((d, idx) => {
238
+ const dimId = d.id ?? `DIM_${idx}`;
239
+ const enumRef = d.localRepresentation?.enumeration;
240
+ let codelist = [];
241
+ // 1. IMF naming convention (primary path — enumeration is null on SDMX 3.0).
242
+ // Also try the concept ID extracted from the conceptIdentity URN (e.g. FREQ from
243
+ // "urn:sdmx:...CS_MASTER_SYSTEM(1.0).FREQ") since some shared codelists use the
244
+ // concept ID rather than the dimension ID (e.g. FREQUENCY dim → CL_FREQ codelist).
245
+ const conceptId = typeof d.conceptIdentity === 'string' ? d.conceptIdentity.replace(/^.*\./, '') : undefined;
246
+ const conventionKeys = [
247
+ `CL_${flowIdForCl}_${dimId}`,
248
+ `CL_${dimId}`,
249
+ ...(conceptId && conceptId !== dimId
250
+ ? [`CL_${flowIdForCl}_${conceptId}`, `CL_${conceptId}`]
251
+ : []),
252
+ ];
253
+ for (const k of conventionKeys) {
254
+ const found = clMap.get(k);
255
+ if (found && found.length > 0) {
256
+ codelist = found;
257
+ break;
258
+ }
259
+ }
260
+ // 2. Explicit enumeration reference (fallback for servers that populate it)
261
+ if (codelist.length === 0 && enumRef) {
262
+ const enumKeys = [
263
+ `${enumRef.agencyID ?? ''}:${enumRef.id ?? ''}:${enumRef.version ?? ''}`,
264
+ `${enumRef.agencyID ?? ''}:${enumRef.id ?? ''}`,
265
+ enumRef.id ?? '',
266
+ ];
267
+ for (const k of enumKeys) {
268
+ const found = clMap.get(k);
269
+ if (found && found.length > 0) {
270
+ codelist = found;
271
+ break;
272
+ }
273
+ }
274
+ }
275
+ return {
276
+ id: dimId,
277
+ name: dimId,
278
+ position: d.position ?? d.keyPosition ?? idx,
279
+ codelist,
280
+ };
281
+ });
282
+ // Build key format string from sorted dimension ids
283
+ const keyFormat = dimensions.map((d) => d.id).join('.');
284
+ // Get name from dataflow if available
285
+ const df = dataflows[0];
286
+ const name = dsd.names?.en ?? df?.names?.en ?? id;
287
+ const description = dsd.descriptions?.en ?? df?.descriptions?.en;
288
+ return {
289
+ dataflowId: id,
290
+ agencyId: dsd.agencyID ?? agencyId,
291
+ version: dsd.version ?? version,
292
+ name,
293
+ ...(description ? { description } : {}),
294
+ keyFormat,
295
+ dimensions,
296
+ };
297
+ }
298
+ decodeObservations(raw, dataflowId, key, startPeriod, endPeriod) {
299
+ const dataset = raw.data?.dataSets?.[0];
300
+ const structure = raw.data?.structures?.[0];
301
+ // Observation dimension (TIME_PERIOD)
302
+ const obsDims = structure?.dimensions?.observation ?? [];
303
+ const timeDim = obsDims[0];
304
+ const timeValues = timeDim?.values ?? [];
305
+ // Series attributes (UNIT, SCALE, DECIMALS, etc.)
306
+ const seriesAttrs = structure?.attributes?.series ?? [];
307
+ const obsAttrs = structure?.attributes?.observation ?? [];
308
+ // Find STATUS attribute index in observation attributes
309
+ const statusObsIdx = obsAttrs.findIndex((a) => a.id === 'STATUS');
310
+ // Find attribute indices in series attributes
311
+ const unitIdx = seriesAttrs.findIndex((a) => a.id === 'UNIT');
312
+ const scaleIdx = seriesAttrs.findIndex((a) => a.id === 'SCALE');
313
+ const decimalsIdx = seriesAttrs.findIndex((a) => a.id === 'DECIMALS_DISPLAYED');
314
+ const series = dataset?.series ?? {};
315
+ const observations = [];
316
+ let seriesAttributes = { unit: null, scale: null, decimals: null };
317
+ // Series-level dimensions for decoding the colon-separated series key ("0:0:0").
318
+ const seriesDims = structure?.dimensions?.series ?? [];
319
+ for (const [seriesKey, seriesData] of Object.entries(series)) {
320
+ // Decode the series key ("0:1:0") into dimension code values ("USA.NGDP_RPCH.A").
321
+ const seriesKeyParts = seriesKey.split(':');
322
+ const seriesCodeParts = seriesDims.map((dim, dimIdx) => {
323
+ const valIdx = parseInt(seriesKeyParts[dimIdx] ?? '0', 10);
324
+ const val = dim.values[valIdx];
325
+ return val?.id ?? val?.value ?? seriesKeyParts[dimIdx] ?? '';
326
+ });
327
+ const decodedSeriesKey = seriesCodeParts.join('.');
328
+ // Extract series-level attributes for the first series we find
329
+ if (seriesData.attributes) {
330
+ const attrs = seriesData.attributes;
331
+ seriesAttributes = {
332
+ unit: this.resolveAttrValue(unitIdx, attrs, seriesAttrs),
333
+ scale: this.resolveAttrValue(scaleIdx, attrs, seriesAttrs),
334
+ decimals: this.resolveDecimalsValue(decimalsIdx, attrs),
335
+ };
336
+ }
337
+ // Decode observations
338
+ for (const [obsIdx, obsValues] of Object.entries(seriesData.observations ?? {})) {
339
+ const timeIdx = parseInt(obsIdx, 10);
340
+ // IMF SDMX 3.0 uses `value` field for time periods; fallback to `id` for legacy compat.
341
+ const timePeriod = timeValues[timeIdx]?.value ?? timeValues[timeIdx]?.id ?? obsIdx;
342
+ const rawValue = obsValues?.[0];
343
+ const value = rawValue != null && rawValue !== '' ? parseFloat(rawValue) : null;
344
+ let status = null;
345
+ if (statusObsIdx >= 0 && obsValues && obsValues[statusObsIdx + 1] != null) {
346
+ const statusCode = obsValues[statusObsIdx + 1];
347
+ const statusAttr = obsAttrs[statusObsIdx];
348
+ if (statusCode != null && statusAttr?.values) {
349
+ const idx2 = parseInt(statusCode, 10);
350
+ status = statusAttr.values[idx2]?.id ?? statusCode;
351
+ }
352
+ }
353
+ observations.push({ series_key: decodedSeriesKey, time_period: timePeriod, value, status });
354
+ }
355
+ }
356
+ // Sort observations by time_period
357
+ observations.sort((a, b) => a.time_period.localeCompare(b.time_period));
358
+ return {
359
+ dataflowId,
360
+ key,
361
+ ...(startPeriod ? { startPeriod } : {}),
362
+ ...(endPeriod ? { endPeriod } : {}),
363
+ observations,
364
+ seriesAttributes,
365
+ };
366
+ }
367
+ resolveAttrValue(attrIdx, attrValues, attrDefs) {
368
+ if (attrIdx < 0 || attrIdx >= attrValues.length)
369
+ return null;
370
+ const raw = attrValues[attrIdx];
371
+ if (raw == null)
372
+ return null;
373
+ const def = attrDefs[attrIdx];
374
+ if (def?.values) {
375
+ const idx = parseInt(raw, 10);
376
+ if (!Number.isNaN(idx))
377
+ return def.values[idx]?.name ?? def.values[idx]?.id ?? raw;
378
+ }
379
+ return raw;
380
+ }
381
+ resolveDecimalsValue(attrIdx, attrValues) {
382
+ if (attrIdx < 0 || attrIdx >= attrValues.length)
383
+ return null;
384
+ const raw = attrValues[attrIdx];
385
+ if (raw == null)
386
+ return null;
387
+ const n = parseInt(raw, 10);
388
+ return Number.isNaN(n) ? null : n;
389
+ }
390
+ parseJson(text, context) {
391
+ if (/^\s*<(!DOCTYPE\s+html|html[\s>])/i.test(text)) {
392
+ throw serviceUnavailable(`IMF API returned HTML instead of JSON (${context})`);
393
+ }
394
+ try {
395
+ return JSON.parse(text);
396
+ }
397
+ catch {
398
+ throw serviceUnavailable(`Failed to parse IMF API response as JSON (${context})`);
399
+ }
400
+ }
401
+ }
402
+ // ---------------------------------------------------------------------------
403
+ // Init/accessor pattern
404
+ // ---------------------------------------------------------------------------
405
+ let _service;
406
+ export function initImfSdmxService(config, storage, baseUrl, timeoutMs) {
407
+ _service = new ImfSdmxService(config, storage, baseUrl, timeoutMs);
408
+ }
409
+ export function getImfSdmxService() {
410
+ if (!_service) {
411
+ throw new Error('ImfSdmxService not initialized — call initImfSdmxService() in setup()');
412
+ }
413
+ return _service;
414
+ }
415
+ //# sourceMappingURL=imf-sdmx-service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"imf-sdmx-service.js","sourceRoot":"","sources":["../../../src/services/imf-sdmx/imf-sdmx-service.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,157 @@
1
+ /**
2
+ * @fileoverview Domain types for the IMF SDMX 3.0 service.
3
+ * @module services/imf-sdmx/types
4
+ */
5
+ /** A single dataflow entry from the IMF SDMX structure/dataflow endpoint. */
6
+ export interface Dataflow {
7
+ agencyId: string;
8
+ description?: string;
9
+ id: string;
10
+ name: string;
11
+ version: string;
12
+ }
13
+ /** A single codelist entry: the machine code and human-readable name. */
14
+ export interface CodelistEntry {
15
+ id: string;
16
+ name: string;
17
+ }
18
+ /** A single dimension in a dataflow's data structure definition. */
19
+ export interface Dimension {
20
+ codelist: CodelistEntry[];
21
+ id: string;
22
+ name: string;
23
+ position: number;
24
+ }
25
+ /** Fully-described dataflow including all dimensions and their codelists. */
26
+ export interface DataflowStructure {
27
+ agencyId: string;
28
+ dataflowId: string;
29
+ description?: string;
30
+ dimensions: Dimension[];
31
+ /** Dimension names in keyPosition order, e.g. "COUNTRY.INDICATOR.FREQUENCY" */
32
+ keyFormat: string;
33
+ name: string;
34
+ version: string;
35
+ }
36
+ /** A decoded observation row. */
37
+ export interface Observation {
38
+ /** Dot-separated dimension codes for this series, e.g. "USA.NGDP_RPCH.A". */
39
+ series_key: string;
40
+ status: string | null;
41
+ time_period: string;
42
+ value: number | null;
43
+ }
44
+ /** Attributes carried per-series (unit, scale, decimals). */
45
+ export interface SeriesAttributes {
46
+ decimals: number | null;
47
+ scale: string | null;
48
+ unit: string | null;
49
+ }
50
+ /** Result of a data query, pre-spill. */
51
+ export interface DataQueryResult {
52
+ dataflowId: string;
53
+ endPeriod?: string;
54
+ key: string;
55
+ observations: Observation[];
56
+ seriesAttributes: SeriesAttributes;
57
+ startPeriod?: string;
58
+ }
59
+ /** Raw SDMX 3.0 JSON response shape (compact format). */
60
+ export interface SdmxDataResponse {
61
+ data?: {
62
+ dataSets?: Array<{
63
+ series?: Record<string, SdmxSeries>;
64
+ }>;
65
+ structures?: Array<SdmxStructure>;
66
+ };
67
+ }
68
+ export interface SdmxSeries {
69
+ attributes?: Array<string | null>;
70
+ observations?: Record<string, Array<string | null>>;
71
+ }
72
+ export interface SdmxStructure {
73
+ attributes?: {
74
+ series?: Array<SdmxAttributeDef>;
75
+ observation?: Array<SdmxAttributeDef>;
76
+ };
77
+ dimensions?: {
78
+ /** Series-level dimensions — values array lists the code for each index position in the series key. */
79
+ series?: Array<SdmxDimensionDef>;
80
+ observation?: Array<SdmxDimensionDef>;
81
+ };
82
+ }
83
+ export interface SdmxDimensionDef {
84
+ id: string;
85
+ /** IMF SDMX 3.0 uses `value` for observation dimension values (e.g. time periods);
86
+ * legacy SDMX 2.1 used `id`. Both are optional to handle either format. */
87
+ values: Array<{
88
+ id?: string;
89
+ value?: string;
90
+ name?: string;
91
+ }>;
92
+ }
93
+ export interface SdmxAttributeDef {
94
+ id: string;
95
+ values?: Array<{
96
+ id: string;
97
+ name?: string;
98
+ }>;
99
+ }
100
+ /** Raw SDMX structure response shape. */
101
+ export interface SdmxStructureResponse {
102
+ data?: {
103
+ dataflows?: Array<{
104
+ id: string;
105
+ agencyID?: string;
106
+ version?: string;
107
+ names?: Record<string, string>;
108
+ descriptions?: Record<string, string>;
109
+ structure?: {
110
+ id: string;
111
+ agencyID?: string;
112
+ version?: string;
113
+ };
114
+ }>;
115
+ dataStructures?: Array<{
116
+ id: string;
117
+ agencyID?: string;
118
+ version?: string;
119
+ names?: Record<string, string>;
120
+ descriptions?: Record<string, string>;
121
+ dataStructureComponents?: {
122
+ dimensionList?: {
123
+ dimensions?: Array<{
124
+ id?: string;
125
+ /** String URN in IMF SDMX 3.0 (e.g. "urn:sdmx:...=IMF.RES:CS_WEO(4.0).COUNTRY"). */
126
+ conceptIdentity?: string | {
127
+ id?: string;
128
+ urn?: string;
129
+ };
130
+ /** SDMX 3.0 position — IMF returns this field instead of keyPosition. */
131
+ position?: number;
132
+ /** Legacy SDMX 2.1 position field — absent on IMF SDMX 3.0. */
133
+ keyPosition?: number;
134
+ localRepresentation?: {
135
+ enumeration?: {
136
+ id?: string;
137
+ agencyID?: string;
138
+ version?: string;
139
+ };
140
+ };
141
+ }>;
142
+ };
143
+ };
144
+ }>;
145
+ codelists?: Array<{
146
+ id: string;
147
+ agencyID?: string;
148
+ version?: string;
149
+ names?: Record<string, string>;
150
+ codes?: Array<{
151
+ id: string;
152
+ names?: Record<string, string>;
153
+ }>;
154
+ }>;
155
+ };
156
+ }
157
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/services/imf-sdmx/types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * @fileoverview Domain types for the IMF SDMX 3.0 service.
3
+ * @module services/imf-sdmx/types
4
+ */
5
+ export {};
6
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/services/imf-sdmx/types.ts"],"names":[],"mappings":"AAAA;;;GAGG"}