Browse Source

Merge 1e8249649d into 8c80086da1

pull/5799/merge
Nachiketa Pahari 1 day ago
committed by GitHub
parent
commit
35987959f4
No known key found for this signature in database GPG Key ID: B5690EEEBB952194
  1. 58
      apps/api/src/services/data-provider/data-enhancer/openfigi/openfigi.service.ts

58
apps/api/src/services/data-provider/data-enhancer/openfigi/openfigi.service.ts

@ -1,9 +1,9 @@
import { ConfigurationService } from '@ghostfolio/api/services/configuration/configuration.service'; import { ConfigurationService } from '@ghostfolio/api/services/configuration/configuration.service';
import { DataEnhancerInterface } from '@ghostfolio/api/services/data-provider/interfaces/data-enhancer.interface'; import { DataEnhancerInterface } from '@ghostfolio/api/services/data-provider/interfaces/data-enhancer.interface';
import { parseSymbol } from '@ghostfolio/common/helper'; import { parseSymbol } from '@ghostfolio/common/helper';
import { Injectable } from '@nestjs/common'; import { Injectable } from '@nestjs/common';
import { SymbolProfile } from '@prisma/client'; import { SymbolProfile } from '@prisma/client';
import OpenFIGI from 'openfigi';
@Injectable() @Injectable()
export class OpenFigiDataEnhancerService implements DataEnhancerInterface { export class OpenFigiDataEnhancerService implements DataEnhancerInterface {
@ -31,46 +31,40 @@ export class OpenFigiDataEnhancerService implements DataEnhancerInterface {
return response; return response;
} }
const headers: HeadersInit = {};
const { exchange, ticker } = parseSymbol({ const { exchange, ticker } = parseSymbol({
symbol, symbol,
dataSource: response.dataSource dataSource: response.dataSource
}); });
if (this.configurationService.get('API_KEY_OPEN_FIGI')) { const openfigi = new OpenFIGI({
headers['X-OPENFIGI-APIKEY'] = apiKey: this.configurationService.get('API_KEY_OPEN_FIGI') || undefined
this.configurationService.get('API_KEY_OPEN_FIGI'); });
}
const mappings = (await fetch(
`${OpenFigiDataEnhancerService.baseUrl}/v3/mapping`,
{
body: JSON.stringify([
{ exchCode: exchange, idType: 'TICKER', idValue: ticker }
]),
headers: {
'Content-Type': 'application/json',
...headers
},
method: 'POST',
signal: AbortSignal.timeout(requestTimeout)
}
).then((res) => res.json())) as any[];
if (mappings?.length === 1 && mappings[0].data?.length === 1) {
const { compositeFIGI, figi, shareClassFIGI } = mappings[0].data[0];
if (figi) { try {
response.figi = figi; const mappings = await openfigi.mapping(
} [
{
idType: 'TICKER',
idValue: ticker,
exchCode: exchange
}
],
{
fetchOptions: {
signal: AbortSignal.timeout(requestTimeout ?? 5000)
}
}
);
if (compositeFIGI) { if (mappings?.length === 1 && mappings[0].data?.length === 1) {
response.figiComposite = compositeFIGI; const { compositeFIGI, figi, shareClassFIGI } = mappings[0].data[0];
}
if (shareClassFIGI) { if (figi) response.figi = figi;
response.figiShareClass = shareClassFIGI; if (compositeFIGI) response.figiComposite = compositeFIGI;
if (shareClassFIGI) response.figiShareClass = shareClassFIGI;
} }
} catch (error) {
console.error('OpenFIGI mapping failed:', error);
} }
return response; return response;

Loading…
Cancel
Save