borsajs 0.1.1 → 0.1.4
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.en.md +239 -94
- package/README.md +250 -18
- package/dist/index.d.ts +3 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/market.d.ts +33 -4
- package/dist/market.d.ts.map +1 -1
- package/dist/market.js +58 -3
- package/dist/market.js.map +1 -1
- package/dist/providers/kap.d.ts +24 -3
- package/dist/providers/kap.d.ts.map +1 -1
- package/dist/providers/kap.js +180 -7
- package/dist/providers/kap.js.map +1 -1
- package/package.json +7 -4
- package/src/index.ts +3 -2
- package/src/market.ts +73 -3
- package/src/providers/kap.ts +216 -7
- package/test/demo.ts +108 -35
package/dist/providers/kap.js
CHANGED
|
@@ -7,6 +7,12 @@ import { TTL } from '../cache.js';
|
|
|
7
7
|
import { APIError } from '../exceptions.js';
|
|
8
8
|
export class KapProvider extends BaseProvider {
|
|
9
9
|
static BASE_URL = 'https://www.kap.org.tr';
|
|
10
|
+
static DISCLOSURE_URL = 'https://www.kap.org.tr/tr/bildirim-sorgu-sonuc';
|
|
11
|
+
static CALENDAR_API_URL = 'https://kap.org.tr/tr/api/expected-disclosure-inquiry/company';
|
|
12
|
+
static COMPANY_INFO_URL = 'https://kap.org.tr/tr/sirket-bilgileri/ozet';
|
|
13
|
+
oidMap = null;
|
|
14
|
+
oidCacheTime = 0;
|
|
15
|
+
CACHE_DURATION = 86400000; // 24 hours in ms
|
|
10
16
|
constructor(options) { super(options); }
|
|
11
17
|
async getCompanies() {
|
|
12
18
|
const cacheKey = 'kap:companies';
|
|
@@ -14,14 +20,28 @@ export class KapProvider extends BaseProvider {
|
|
|
14
20
|
if (cached)
|
|
15
21
|
return cached;
|
|
16
22
|
try {
|
|
17
|
-
const response = await this.get(`${KapProvider.BASE_URL}/tr/bist-
|
|
18
|
-
|
|
23
|
+
const response = await this.get(`${KapProvider.BASE_URL}/tr/bist-sirketler`, { responseType: 'text' });
|
|
24
|
+
// Parse from Next.js embedded JSON data
|
|
25
|
+
// Pattern: \\"mkkMemberOid\\":\\"xxx\\",\\"kapMemberTitle\\":\\"...\\",\\"relatedMemberTitle\\":\\"...\\",\\"stockCode\\":\\"TICKER\\"
|
|
26
|
+
const pattern = /\\"mkkMemberOid\\":\\"([^\\]+)\\",\\"kapMemberTitle\\":\\"([^\\]+)\\",\\"relatedMemberTitle\\":\\"[^\\]*\\",\\"stockCode\\":\\"([^\\]+)\\"/g;
|
|
19
27
|
const companies = [];
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
28
|
+
const matches = response.data.matchAll(pattern);
|
|
29
|
+
for (const match of matches) {
|
|
30
|
+
const name = match[2];
|
|
31
|
+
const stockCodes = match[3];
|
|
32
|
+
// Handle multiple tickers (e.g., "GARAN, TGB")
|
|
33
|
+
if (stockCodes.includes(',')) {
|
|
34
|
+
const tickers = stockCodes.split(',').map(t => t.trim());
|
|
35
|
+
for (const ticker of tickers) {
|
|
36
|
+
if (ticker) {
|
|
37
|
+
companies.push({ ticker, name, city: '' });
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
else {
|
|
42
|
+
companies.push({ ticker: stockCodes, name, city: '' });
|
|
43
|
+
}
|
|
44
|
+
}
|
|
25
45
|
this.cacheSet(cacheKey, companies, TTL.COMPANY_LIST);
|
|
26
46
|
return companies;
|
|
27
47
|
}
|
|
@@ -34,6 +54,159 @@ export class KapProvider extends BaseProvider {
|
|
|
34
54
|
const q = query.toLowerCase();
|
|
35
55
|
return companies.filter(c => c.ticker.toLowerCase().includes(q) || c.name.toLowerCase().includes(q));
|
|
36
56
|
}
|
|
57
|
+
async getMemberOid(symbol) {
|
|
58
|
+
symbol = symbol.toUpperCase().replace('.IS', '').replace('.E', '');
|
|
59
|
+
const currentTime = Date.now();
|
|
60
|
+
// Check cache
|
|
61
|
+
if (this.oidMap && (currentTime - this.oidCacheTime) < this.CACHE_DURATION) {
|
|
62
|
+
return this.oidMap.get(symbol) || null;
|
|
63
|
+
}
|
|
64
|
+
// Fetch BIST companies list from KAP
|
|
65
|
+
try {
|
|
66
|
+
const response = await this.get(`${KapProvider.BASE_URL}/tr/bist-sirketler`, { responseType: 'text' });
|
|
67
|
+
// Parse mkkMemberOid and stockCode pairs from Next.js data
|
|
68
|
+
const pattern = /\\"mkkMemberOid\\":\\"([^\\]+)\\",[^}]*\\"stockCode\\":\\"([^\\]+)\\"/g;
|
|
69
|
+
const matches = response.data.matchAll(pattern);
|
|
70
|
+
// Build mapping: stockCode -> mkkMemberOid
|
|
71
|
+
this.oidMap = new Map();
|
|
72
|
+
for (const match of matches) {
|
|
73
|
+
const oid = match[1];
|
|
74
|
+
const codesStr = match[2];
|
|
75
|
+
// Handle multiple codes per company (e.g., "GARAN, TGB")
|
|
76
|
+
for (const code of codesStr.split(',')) {
|
|
77
|
+
const trimmedCode = code.trim();
|
|
78
|
+
if (trimmedCode) {
|
|
79
|
+
this.oidMap.set(trimmedCode, oid);
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
this.oidCacheTime = currentTime;
|
|
84
|
+
return this.oidMap.get(symbol) || null;
|
|
85
|
+
}
|
|
86
|
+
catch (error) {
|
|
87
|
+
return null;
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
async getDisclosures(symbol, limit = 20) {
|
|
91
|
+
symbol = symbol.toUpperCase().replace('.IS', '').replace('.E', '');
|
|
92
|
+
// Get KAP member OID for the symbol
|
|
93
|
+
const memberOid = await this.getMemberOid(symbol);
|
|
94
|
+
if (!memberOid) {
|
|
95
|
+
return [];
|
|
96
|
+
}
|
|
97
|
+
// Fetch disclosures from KAP
|
|
98
|
+
const discUrl = `${KapProvider.DISCLOSURE_URL}?member=${memberOid}`;
|
|
99
|
+
try {
|
|
100
|
+
const response = await this.get(discUrl, { responseType: 'text' });
|
|
101
|
+
// Parse disclosures from Next.js embedded data
|
|
102
|
+
// Pattern: publishDate\":\"29.12.2025 19:21:18\",\"disclosureIndex\":1530826...title\":\"...\"
|
|
103
|
+
const pattern = /publishDate\\":\\"([^\\]+)\\".*?disclosureIndex\\":(\d+).*?title\\":\\"([^\\]+)\\"/gs;
|
|
104
|
+
const matches = Array.from(response.data.matchAll(pattern));
|
|
105
|
+
const disclosures = [];
|
|
106
|
+
for (let i = 0; i < Math.min(matches.length, limit); i++) {
|
|
107
|
+
const match = matches[i];
|
|
108
|
+
const date = match[1];
|
|
109
|
+
const idx = parseInt(match[2]);
|
|
110
|
+
const title = match[3];
|
|
111
|
+
disclosures.push({
|
|
112
|
+
date,
|
|
113
|
+
title,
|
|
114
|
+
disclosureIndex: idx,
|
|
115
|
+
url: `https://www.kap.org.tr/tr/Bildirim/${idx}`
|
|
116
|
+
});
|
|
117
|
+
}
|
|
118
|
+
return disclosures;
|
|
119
|
+
}
|
|
120
|
+
catch (error) {
|
|
121
|
+
throw new APIError(`Failed to fetch disclosures for ${symbol}: ${error}`);
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
async getCalendar(symbol) {
|
|
125
|
+
symbol = symbol.toUpperCase().replace('.IS', '').replace('.E', '');
|
|
126
|
+
// Get KAP member OID for the symbol
|
|
127
|
+
const memberOid = await this.getMemberOid(symbol);
|
|
128
|
+
if (!memberOid) {
|
|
129
|
+
return [];
|
|
130
|
+
}
|
|
131
|
+
// Calculate date range: today to 6 months from now
|
|
132
|
+
const now = new Date();
|
|
133
|
+
const startDate = now.toISOString().split('T')[0];
|
|
134
|
+
const endDate = new Date(now.getTime() + 180 * 24 * 60 * 60 * 1000).toISOString().split('T')[0];
|
|
135
|
+
// Fetch expected disclosures from KAP API
|
|
136
|
+
const headers = {
|
|
137
|
+
'Accept': '*/*',
|
|
138
|
+
'Content-Type': 'application/json',
|
|
139
|
+
'Origin': 'https://kap.org.tr',
|
|
140
|
+
'Referer': 'https://kap.org.tr/tr/beklenen-bildirim-sorgu'
|
|
141
|
+
};
|
|
142
|
+
const payload = {
|
|
143
|
+
startDate,
|
|
144
|
+
endDate,
|
|
145
|
+
memberTypes: ['IGS'],
|
|
146
|
+
mkkMemberOidList: [memberOid],
|
|
147
|
+
disclosureClass: '',
|
|
148
|
+
subjects: [],
|
|
149
|
+
mainSector: '',
|
|
150
|
+
sector: '',
|
|
151
|
+
subSector: '',
|
|
152
|
+
market: '',
|
|
153
|
+
index: '',
|
|
154
|
+
year: '',
|
|
155
|
+
term: '',
|
|
156
|
+
ruleType: ''
|
|
157
|
+
};
|
|
158
|
+
try {
|
|
159
|
+
const response = await this.post(KapProvider.CALENDAR_API_URL, payload, { headers });
|
|
160
|
+
const events = [];
|
|
161
|
+
for (const item of response.data) {
|
|
162
|
+
events.push({
|
|
163
|
+
startDate: item.startDate || '',
|
|
164
|
+
endDate: item.endDate || '',
|
|
165
|
+
subject: item.subject || '',
|
|
166
|
+
period: item.ruleTypeTerm || '',
|
|
167
|
+
year: item.year || ''
|
|
168
|
+
});
|
|
169
|
+
}
|
|
170
|
+
return events;
|
|
171
|
+
}
|
|
172
|
+
catch (error) {
|
|
173
|
+
throw new APIError(`Failed to fetch calendar for ${symbol}: ${error}`);
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
async getCompanyDetails(symbol) {
|
|
177
|
+
symbol = symbol.toUpperCase().replace('.IS', '').replace('.E', '');
|
|
178
|
+
// Get KAP member OID for the symbol
|
|
179
|
+
const memberOid = await this.getMemberOid(symbol);
|
|
180
|
+
if (!memberOid) {
|
|
181
|
+
return {};
|
|
182
|
+
}
|
|
183
|
+
// Fetch company info page
|
|
184
|
+
const url = `${KapProvider.COMPANY_INFO_URL}/${memberOid}`;
|
|
185
|
+
try {
|
|
186
|
+
const response = await this.get(url, { responseType: 'text' });
|
|
187
|
+
const html = response.data;
|
|
188
|
+
const result = {};
|
|
189
|
+
// Extract sector: href="/tr/Sektorler?sector=...">SECTOR_NAME</a>
|
|
190
|
+
const sectorMatch = html.match(/href="\/tr\/Sektorler\?sector=[^"]*">([^<]+)<\/a>/);
|
|
191
|
+
if (sectorMatch) {
|
|
192
|
+
result.sector = sectorMatch[1].trim();
|
|
193
|
+
}
|
|
194
|
+
// Extract market: href="/tr/Pazarlar?market=...">MARKET_NAME</a>
|
|
195
|
+
const marketMatch = html.match(/href="\/tr\/Pazarlar\?market=[^"]*">([^<]+)<\/a>/);
|
|
196
|
+
if (marketMatch) {
|
|
197
|
+
result.market = marketMatch[1].trim();
|
|
198
|
+
}
|
|
199
|
+
// Extract website: after "İnternet Adresi" label
|
|
200
|
+
const websiteMatch = html.match(/İnternet Adresi<\/h3><p[^>]*>([^<]+)<\/p>/);
|
|
201
|
+
if (websiteMatch) {
|
|
202
|
+
result.website = websiteMatch[1].trim();
|
|
203
|
+
}
|
|
204
|
+
return result;
|
|
205
|
+
}
|
|
206
|
+
catch (error) {
|
|
207
|
+
return {};
|
|
208
|
+
}
|
|
209
|
+
}
|
|
37
210
|
}
|
|
38
211
|
export class ViopProvider extends BaseProvider {
|
|
39
212
|
static BASE_URL = 'https://www.isyatirim.com.tr/tr-tr/analiz/Sayfalar/viop-akis.aspx';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"kap.js","sourceRoot":"","sources":["../../src/providers/kap.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"kap.js","sourceRoot":"","sources":["../../src/providers/kap.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,KAAK,OAAO,MAAM,SAAS,CAAC;AACnC,OAAO,EAAE,YAAY,EAAmB,MAAM,WAAW,CAAC;AAC1D,OAAO,EAAE,GAAG,EAAE,MAAM,aAAa,CAAC;AAClC,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAO5C,MAAM,OAAO,WAAY,SAAQ,YAAY;IACjC,MAAM,CAAU,QAAQ,GAAG,wBAAwB,CAAC;IACpD,MAAM,CAAU,cAAc,GAAG,gDAAgD,CAAC;IAClF,MAAM,CAAU,gBAAgB,GAAG,+DAA+D,CAAC;IACnG,MAAM,CAAU,gBAAgB,GAAG,6CAA6C,CAAC;IACjF,MAAM,GAA+B,IAAI,CAAC;IAC1C,YAAY,GAAW,CAAC,CAAC;IAChB,cAAc,GAAG,QAAQ,CAAC,CAAC,iBAAiB;IAE7D,YAAY,OAAyB,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;IAE1D,KAAK,CAAC,YAAY;QACd,MAAM,QAAQ,GAAG,eAAe,CAAC;QACjC,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAY,QAAQ,CAAC,CAAC;QAClD,IAAI,MAAM;YAAE,OAAO,MAAM,CAAC;QAC1B,IAAI,CAAC;YACD,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,GAAG,CAAS,GAAG,WAAW,CAAC,QAAQ,oBAAoB,EAAE,EAAE,YAAY,EAAE,MAAe,EAAE,CAAC,CAAC;YAExH,wCAAwC;YACxC,uIAAuI;YACvI,MAAM,OAAO,GAAG,6IAA6I,CAAC;YAE9J,MAAM,SAAS,GAAc,EAAE,CAAC;YAChC,MAAM,OAAO,GAAG,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;YAEhD,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;gBAC1B,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;gBACtB,MAAM,UAAU,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;gBAE5B,+CAA+C;gBAC/C,IAAI,UAAU,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;oBAC3B,MAAM,OAAO,GAAG,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;oBACzD,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;wBAC3B,IAAI,MAAM,EAAE,CAAC;4BACT,SAAS,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC;wBAC/C,CAAC;oBACL,CAAC;gBACL,CAAC;qBAAM,CAAC;oBACJ,SAAS,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,UAAU,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC;gBAC3D,CAAC;YACL,CAAC;YAED,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,SAAS,EAAE,GAAG,CAAC,YAAY,CAAC,CAAC;YACrD,OAAO,SAAS,CAAC;QACrB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YAAC,MAAM,IAAI,QAAQ,CAAC,8BAA8B,KAAK,EAAE,CAAC,CAAC;QAAC,CAAC;IAClF,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,KAAa;QACtB,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,YAAY,EAAE,CAAC;QAC5C,MAAM,CAAC,GAAG,KAAK,CAAC,WAAW,EAAE,CAAC;QAC9B,OAAO,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;IACzG,CAAC;IAED,KAAK,CAAC,YAAY,CAAC,MAAc;QAC7B,MAAM,GAAG,MAAM,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;QACnE,MAAM,WAAW,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAE/B,cAAc;QACd,IAAI,IAAI,CAAC,MAAM,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,YAAY,CAAC,GAAG,IAAI,CAAC,cAAc,EAAE,CAAC;YACzE,OAAO,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC;QAC3C,CAAC;QAED,qCAAqC;QACrC,IAAI,CAAC;YACD,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,GAAG,CAAS,GAAG,WAAW,CAAC,QAAQ,oBAAoB,EAAE,EAAE,YAAY,EAAE,MAAe,EAAE,CAAC,CAAC;YAExH,2DAA2D;YAC3D,MAAM,OAAO,GAAG,wEAAwE,CAAC;YACzF,MAAM,OAAO,GAAG,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;YAEhD,2CAA2C;YAC3C,IAAI,CAAC,MAAM,GAAG,IAAI,GAAG,EAAE,CAAC;YACxB,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;gBAC1B,MAAM,GAAG,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;gBACrB,MAAM,QAAQ,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;gBAE1B,yDAAyD;gBACzD,KAAK,MAAM,IAAI,IAAI,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC;oBACrC,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;oBAChC,IAAI,WAAW,EAAE,CAAC;wBACd,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC;oBACtC,CAAC;gBACL,CAAC;YACL,CAAC;YAED,IAAI,CAAC,YAAY,GAAG,WAAW,CAAC;YAChC,OAAO,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC;QAC3C,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACb,OAAO,IAAI,CAAC;QAChB,CAAC;IACL,CAAC;IAED,KAAK,CAAC,cAAc,CAAC,MAAc,EAAE,QAAgB,EAAE;QACnD,MAAM,GAAG,MAAM,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;QAEnE,oCAAoC;QACpC,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;QAClD,IAAI,CAAC,SAAS,EAAE,CAAC;YACb,OAAO,EAAE,CAAC;QACd,CAAC;QAED,6BAA6B;QAC7B,MAAM,OAAO,GAAG,GAAG,WAAW,CAAC,cAAc,WAAW,SAAS,EAAE,CAAC;QAEpE,IAAI,CAAC;YACD,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,GAAG,CAAS,OAAO,EAAE,EAAE,YAAY,EAAE,MAAe,EAAE,CAAC,CAAC;YAEpF,+CAA+C;YAC/C,+FAA+F;YAC/F,MAAM,OAAO,GAAG,sFAAsF,CAAC;YACvG,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC;YAE5D,MAAM,WAAW,GAAiB,EAAE,CAAC;YACrC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,MAAM,EAAE,KAAK,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;gBACvD,MAAM,KAAK,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;gBACzB,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;gBACtB,MAAM,GAAG,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;gBAC/B,MAAM,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;gBAEvB,WAAW,CAAC,IAAI,CAAC;oBACb,IAAI;oBACJ,KAAK;oBACL,eAAe,EAAE,GAAG;oBACpB,GAAG,EAAE,sCAAsC,GAAG,EAAE;iBACnD,CAAC,CAAC;YACP,CAAC;YAED,OAAO,WAAW,CAAC;QACvB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACb,MAAM,IAAI,QAAQ,CAAC,mCAAmC,MAAM,KAAK,KAAK,EAAE,CAAC,CAAC;QAC9E,CAAC;IACL,CAAC;IAED,KAAK,CAAC,WAAW,CAAC,MAAc;QAC5B,MAAM,GAAG,MAAM,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;QAEnE,oCAAoC;QACpC,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;QAClD,IAAI,CAAC,SAAS,EAAE,CAAC;YACb,OAAO,EAAE,CAAC;QACd,CAAC;QAED,mDAAmD;QACnD,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC;QACvB,MAAM,SAAS,GAAG,GAAG,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QAClD,MAAM,OAAO,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,GAAG,GAAG,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QAEhG,0CAA0C;QAC1C,MAAM,OAAO,GAAG;YACZ,QAAQ,EAAE,KAAK;YACf,cAAc,EAAE,kBAAkB;YAClC,QAAQ,EAAE,oBAAoB;YAC9B,SAAS,EAAE,+CAA+C;SAC7D,CAAC;QAEF,MAAM,OAAO,GAAG;YACZ,SAAS;YACT,OAAO;YACP,WAAW,EAAE,CAAC,KAAK,CAAC;YACpB,gBAAgB,EAAE,CAAC,SAAS,CAAC;YAC7B,eAAe,EAAE,EAAE;YACnB,QAAQ,EAAE,EAAE;YACZ,UAAU,EAAE,EAAE;YACd,MAAM,EAAE,EAAE;YACV,SAAS,EAAE,EAAE;YACb,MAAM,EAAE,EAAE;YACV,KAAK,EAAE,EAAE;YACT,IAAI,EAAE,EAAE;YACR,IAAI,EAAE,EAAE;YACR,QAAQ,EAAE,EAAE;SACf,CAAC;QAEF,IAAI,CAAC;YACD,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,IAAI,CAAQ,WAAW,CAAC,gBAAgB,EAAE,OAAO,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC;YAE5F,MAAM,MAAM,GAAoB,EAAE,CAAC;YACnC,KAAK,MAAM,IAAI,IAAI,QAAQ,CAAC,IAAI,EAAE,CAAC;gBAC/B,MAAM,CAAC,IAAI,CAAC;oBACR,SAAS,EAAE,IAAI,CAAC,SAAS,IAAI,EAAE;oBAC/B,OAAO,EAAE,IAAI,CAAC,OAAO,IAAI,EAAE;oBAC3B,OAAO,EAAE,IAAI,CAAC,OAAO,IAAI,EAAE;oBAC3B,MAAM,EAAE,IAAI,CAAC,YAAY,IAAI,EAAE;oBAC/B,IAAI,EAAE,IAAI,CAAC,IAAI,IAAI,EAAE;iBACxB,CAAC,CAAC;YACP,CAAC;YAED,OAAO,MAAM,CAAC;QAClB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACb,MAAM,IAAI,QAAQ,CAAC,gCAAgC,MAAM,KAAK,KAAK,EAAE,CAAC,CAAC;QAC3E,CAAC;IACL,CAAC;IAED,KAAK,CAAC,iBAAiB,CAAC,MAAc;QAClC,MAAM,GAAG,MAAM,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;QAEnE,oCAAoC;QACpC,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;QAClD,IAAI,CAAC,SAAS,EAAE,CAAC;YACb,OAAO,EAAE,CAAC;QACd,CAAC;QAED,0BAA0B;QAC1B,MAAM,GAAG,GAAG,GAAG,WAAW,CAAC,gBAAgB,IAAI,SAAS,EAAE,CAAC;QAE3D,IAAI,CAAC;YACD,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,GAAG,CAAS,GAAG,EAAE,EAAE,YAAY,EAAE,MAAe,EAAE,CAAC,CAAC;YAChF,MAAM,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC;YAE3B,MAAM,MAAM,GAAmB,EAAE,CAAC;YAElC,kEAAkE;YAClE,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,mDAAmD,CAAC,CAAC;YACpF,IAAI,WAAW,EAAE,CAAC;gBACd,MAAM,CAAC,MAAM,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;YAC1C,CAAC;YAED,iEAAiE;YACjE,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,kDAAkD,CAAC,CAAC;YACnF,IAAI,WAAW,EAAE,CAAC;gBACd,MAAM,CAAC,MAAM,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;YAC1C,CAAC;YAED,iDAAiD;YACjD,MAAM,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC,2CAA2C,CAAC,CAAC;YAC7E,IAAI,YAAY,EAAE,CAAC;gBACf,MAAM,CAAC,OAAO,GAAG,YAAY,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;YAC5C,CAAC;YAED,OAAO,MAAM,CAAC;QAClB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACb,OAAO,EAAE,CAAC;QACd,CAAC;IACL,CAAC;;AAKL,MAAM,OAAO,YAAa,SAAQ,YAAY;IAClC,MAAM,CAAU,QAAQ,GAAG,mEAAmE,CAAC;IACvG,YAAY,OAAyB,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;IAE1D,KAAK,CAAC,UAAU,CAAC,WAAiE,KAAK;QACnF,MAAM,QAAQ,GAAG,gBAAgB,QAAQ,EAAE,CAAC;QAC5C,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAiB,QAAQ,CAAC,CAAC;QACvD,IAAI,MAAM;YAAE,OAAO,MAAM,CAAC;QAC1B,IAAI,CAAC;YACD,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,GAAG,CAAS,YAAY,CAAC,QAAQ,EAAE,EAAE,YAAY,EAAE,MAAe,EAAE,CAAC,CAAC;YAClG,MAAM,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;YACtC,MAAM,SAAS,GAAmB,EAAE,CAAC;YACrC,CAAC,CAAC,0BAA0B,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,EAAE;gBAC1C,MAAM,KAAK,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBAChC,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC;oBAAE,OAAO;gBAC7B,MAAM,IAAI,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC;gBACvC,IAAI,GAAG,GAAG,OAAO,CAAC;gBAClB,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC;oBAAE,GAAG,GAAG,OAAO,CAAC;qBAC5D,IAAI,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC;oBAAE,GAAG,GAAG,UAAU,CAAC;qBACnE,IAAI,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC;oBAAE,GAAG,GAAG,WAAW,CAAC;gBACzE,IAAI,QAAQ,KAAK,KAAK,IAAI,GAAG,KAAK,QAAQ;oBAAE,OAAO;gBACnD,MAAM,QAAQ,GAAG,CAAC,CAAS,EAAE,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC;gBAChH,SAAS,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,EAAE,KAAK,EAAE,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,QAAQ,EAAE,GAAG,EAAE,CAAC,CAAC;YAC7O,CAAC,CAAC,CAAC;YACH,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,SAAS,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC;YAC7C,OAAO,SAAS,CAAC;QACrB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YAAC,MAAM,IAAI,QAAQ,CAAC,4BAA4B,KAAK,EAAE,CAAC,CAAC;QAAC,CAAC;IAChF,CAAC;IAED,KAAK,CAAC,UAAU,CAAC,WAAsC,KAAK;QACxD,MAAM,QAAQ,GAAG,gBAAgB,QAAQ,EAAE,CAAC;QAC5C,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAiB,QAAQ,CAAC,CAAC;QACvD,IAAI,MAAM;YAAE,OAAO,MAAM,CAAC;QAC1B,IAAI,CAAC;YACD,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,GAAG,CAAS,YAAY,CAAC,QAAQ,EAAE,EAAE,YAAY,EAAE,MAAe,EAAE,CAAC,CAAC;YAClG,MAAM,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;YACtC,MAAM,SAAS,GAAmB,EAAE,CAAC;YACrC,CAAC,CAAC,6BAA6B,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,EAAE;gBAC7C,MAAM,KAAK,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBAChC,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC;oBAAE,OAAO;gBAC7B,MAAM,IAAI,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC;gBACvC,IAAI,GAAG,GAAG,OAAO,CAAC;gBAClB,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC;oBAAE,GAAG,GAAG,OAAO,CAAC;gBACjE,IAAI,QAAQ,KAAK,KAAK,IAAI,GAAG,KAAK,QAAQ;oBAAE,OAAO;gBACnD,MAAM,QAAQ,GAAG,CAAC,CAAS,EAAE,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC;gBAChH,SAAS,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,EAAE,KAAK,EAAE,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,QAAQ,EAAE,GAAG,EAAE,CAAC,CAAC;YAC7O,CAAC,CAAC,CAAC;YACH,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,SAAS,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC;YAC7C,OAAO,SAAS,CAAC;QACrB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YAAC,MAAM,IAAI,QAAQ,CAAC,4BAA4B,KAAK,EAAE,CAAC,CAAC;QAAC,CAAC;IAChF,CAAC;;AAGL,IAAI,WAAW,GAAuB,IAAI,CAAC;AAC3C,MAAM,UAAU,cAAc,KAAkB,IAAI,CAAC,WAAW;IAAE,WAAW,GAAG,IAAI,WAAW,EAAE,CAAC,CAAC,OAAO,WAAW,CAAC,CAAC,CAAC;AACxH,IAAI,YAAY,GAAwB,IAAI,CAAC;AAC7C,MAAM,UAAU,eAAe,KAAmB,IAAI,CAAC,YAAY;IAAE,YAAY,GAAG,IAAI,YAAY,EAAE,CAAC,CAAC,OAAO,YAAY,CAAC,CAAC,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "borsajs",
|
|
3
|
-
"version": "0.1.
|
|
4
|
-
"description": "
|
|
3
|
+
"version": "0.1.4",
|
|
4
|
+
"description": "Turkey financial markets data library, BIST stocks, KAP, forex, crypto, investment funds, and more",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/index.js",
|
|
7
7
|
"types": "dist/index.d.ts",
|
|
@@ -24,8 +24,11 @@
|
|
|
24
24
|
"turkey",
|
|
25
25
|
"forex",
|
|
26
26
|
"crypto",
|
|
27
|
-
"
|
|
28
|
-
"
|
|
27
|
+
"investment-funds",
|
|
28
|
+
"economic-indicators",
|
|
29
|
+
"macroeconomic-indicators",
|
|
30
|
+
"türkiye",
|
|
31
|
+
"market-data"
|
|
29
32
|
],
|
|
30
33
|
"author": "Mesut Piskin",
|
|
31
34
|
"license": "Apache-2.0",
|
package/src/index.ts
CHANGED
|
@@ -22,7 +22,8 @@ export { Inflation } from './inflation.js';
|
|
|
22
22
|
|
|
23
23
|
export { VIOP } from './viop.js';
|
|
24
24
|
|
|
25
|
-
export {
|
|
25
|
+
export { symbols, searchSymbols, cryptoSymbols, fxSymbols, indexSymbols } from './market.js';
|
|
26
|
+
export type { FXSymbol, IndexSymbol, StockSymbol, Company } from './market.js';
|
|
26
27
|
|
|
27
28
|
export { BorsajsError, TickerNotFoundError, DataNotAvailableError, APIError, AuthenticationError, RateLimitError, InvalidPeriodError, InvalidIntervalError } from './exceptions.js';
|
|
28
29
|
|
|
@@ -33,6 +34,6 @@ export type { TickerData } from './providers/btcturk.js';
|
|
|
33
34
|
export type { FXCurrentData, FXHistoryData } from './providers/dovizcom.js';
|
|
34
35
|
export type { FundInfo, FundHistoryData, SearchResult } from './providers/tefas.js';
|
|
35
36
|
export type { InflationLatest, InflationData, InflationCalculation } from './providers/tcmb.js';
|
|
36
|
-
export type { ContractData,
|
|
37
|
+
export type { ContractData, Disclosure } from './providers/kap.js';
|
|
37
38
|
|
|
38
39
|
export const VERSION = '0.1.0';
|
package/src/market.ts
CHANGED
|
@@ -1,7 +1,77 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Market-level functions for BIST data.
|
|
3
3
|
*/
|
|
4
|
-
import {
|
|
4
|
+
import { getBtcTurkProvider } from './providers/btcturk.js';
|
|
5
5
|
|
|
6
|
-
|
|
7
|
-
|
|
6
|
+
// Static list of major BIST stocks (commonly traded)
|
|
7
|
+
const BIST_STOCKS = [
|
|
8
|
+
'THYAO', 'GARAN', 'AKBNK', 'YKBNK', 'ISCTR', 'HALKB', 'VAKBN', 'SAHOL', 'SISE', 'TUPRS',
|
|
9
|
+
'TCELL', 'EREGL', 'BIMAS', 'KOZAL', 'PETKM', 'ASELS', 'KCHOL', 'TOASO', 'FROTO', 'ARCLK',
|
|
10
|
+
'MGROS', 'TTKOM', 'ENKAI', 'PGSUS', 'TAVHL', 'EKGYO', 'SASA', 'DOHOL', 'VESTL', 'GUBRF',
|
|
11
|
+
'KOZAA', 'KLMSC', 'KRDMD', 'ODAS', 'TSKB', 'AKSEN', 'AEFES', 'KONTR', 'CEMTS', 'LOGO',
|
|
12
|
+
'OYAKC', 'ULKER', 'CIMSA', 'ALARK', 'TURSG', 'ISGYO', 'GESAN', 'SOKM', 'DOAS', 'OTKAR',
|
|
13
|
+
'BTCIM', 'BRISA', 'NETAS', 'IHLGM', 'TKFEN', 'TRGYO', 'AYGAZ', 'CCOLA', 'MAVI', 'HEKTS',
|
|
14
|
+
'ANSGR', 'ZOREN', 'AGHOL', 'ISMEN', 'ANHYT', 'IPEKE', 'KORDS', 'KARTN', 'KLRHO', 'BINHO',
|
|
15
|
+
'AKSA', 'NUHCM', 'ALBRK', 'SKBNK', 'TMSN', 'VERUS', 'SISEB', 'POLHO', 'GLYHO', 'TUREX',
|
|
16
|
+
] as const;
|
|
17
|
+
|
|
18
|
+
export interface Company {
|
|
19
|
+
ticker: string;
|
|
20
|
+
name?: string;
|
|
21
|
+
sector?: string;
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
/**
|
|
25
|
+
* Get common BIST stock symbols.
|
|
26
|
+
* @returns Array of stock symbols
|
|
27
|
+
*/
|
|
28
|
+
export function symbols(): string[] {
|
|
29
|
+
return [...BIST_STOCKS].sort();
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
/**
|
|
33
|
+
* Search stocks by ticker pattern.
|
|
34
|
+
* @param query - Search query (matches start of ticker)
|
|
35
|
+
* @returns Matching symbols
|
|
36
|
+
*/
|
|
37
|
+
export function searchSymbols(query: string): string[] {
|
|
38
|
+
const q = query.toUpperCase();
|
|
39
|
+
return BIST_STOCKS.filter(s => s.includes(q));
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
/**
|
|
43
|
+
* Get available cryptocurrency pairs.
|
|
44
|
+
* @param quote - Quote currency (default: 'TRY')
|
|
45
|
+
* @returns Array of trading pairs (e.g., ['BTCTRY', 'ETHTRY', ...])
|
|
46
|
+
*/
|
|
47
|
+
export async function cryptoSymbols(quote: string = 'TRY'): Promise<string[]> {
|
|
48
|
+
return getBtcTurkProvider().getPairs(quote);
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
/**
|
|
52
|
+
* Available FX symbols.
|
|
53
|
+
*/
|
|
54
|
+
export const fxSymbols = [
|
|
55
|
+
// Currencies
|
|
56
|
+
'USD', 'EUR', 'GBP', 'JPY', 'CHF', 'CAD', 'AUD',
|
|
57
|
+
// Precious Metals
|
|
58
|
+
'gram-altin', 'ceyrek-altin', 'yarim-altin', 'tam-altin', 'cumhuriyet-altini',
|
|
59
|
+
'gumus', 'ons',
|
|
60
|
+
// Energy
|
|
61
|
+
'BRENT', 'WTI',
|
|
62
|
+
// Fuel
|
|
63
|
+
'diesel', 'gasoline', 'lpg',
|
|
64
|
+
] as const;
|
|
65
|
+
|
|
66
|
+
/**
|
|
67
|
+
* Available BIST indices.
|
|
68
|
+
*/
|
|
69
|
+
export const indexSymbols = [
|
|
70
|
+
'XU100', 'XU050', 'XU030', 'XBANK', 'XUSIN', 'XHOLD', 'XUTEK', 'XGIDA',
|
|
71
|
+
'XTRZM', 'XULAS', 'XSGRT', 'XMANA', 'XKMYA', 'XMADN', 'XELKT', 'XTEKS',
|
|
72
|
+
'XILTM', 'XUMAL', 'XUTUM',
|
|
73
|
+
] as const;
|
|
74
|
+
|
|
75
|
+
export type FXSymbol = typeof fxSymbols[number];
|
|
76
|
+
export type IndexSymbol = typeof indexSymbols[number];
|
|
77
|
+
export type StockSymbol = typeof BIST_STOCKS[number];
|
package/src/providers/kap.ts
CHANGED
|
@@ -7,10 +7,19 @@ import { TTL } from '../cache.js';
|
|
|
7
7
|
import { APIError } from '../exceptions.js';
|
|
8
8
|
|
|
9
9
|
export interface Company { ticker: string; name: string; city: string; }
|
|
10
|
-
export interface Disclosure {
|
|
10
|
+
export interface Disclosure { date: string; title: string; disclosureIndex: number; url: string; }
|
|
11
|
+
export interface CalendarEvent { startDate: string; endDate: string; subject: string; period: string; year: string; }
|
|
12
|
+
export interface CompanyDetails { sector?: string; market?: string; website?: string; }
|
|
11
13
|
|
|
12
14
|
export class KapProvider extends BaseProvider {
|
|
13
15
|
private static readonly BASE_URL = 'https://www.kap.org.tr';
|
|
16
|
+
private static readonly DISCLOSURE_URL = 'https://www.kap.org.tr/tr/bildirim-sorgu-sonuc';
|
|
17
|
+
private static readonly CALENDAR_API_URL = 'https://kap.org.tr/tr/api/expected-disclosure-inquiry/company';
|
|
18
|
+
private static readonly COMPANY_INFO_URL = 'https://kap.org.tr/tr/sirket-bilgileri/ozet';
|
|
19
|
+
private oidMap: Map<string, string> | null = null;
|
|
20
|
+
private oidCacheTime: number = 0;
|
|
21
|
+
private readonly CACHE_DURATION = 86400000; // 24 hours in ms
|
|
22
|
+
|
|
14
23
|
constructor(options?: ProviderOptions) { super(options); }
|
|
15
24
|
|
|
16
25
|
async getCompanies(): Promise<Company[]> {
|
|
@@ -18,13 +27,32 @@ export class KapProvider extends BaseProvider {
|
|
|
18
27
|
const cached = this.cacheGet<Company[]>(cacheKey);
|
|
19
28
|
if (cached) return cached;
|
|
20
29
|
try {
|
|
21
|
-
const response = await this.get<string>(`${KapProvider.BASE_URL}/tr/bist-
|
|
22
|
-
|
|
30
|
+
const response = await this.get<string>(`${KapProvider.BASE_URL}/tr/bist-sirketler`, { responseType: 'text' as const });
|
|
31
|
+
|
|
32
|
+
// Parse from Next.js embedded JSON data
|
|
33
|
+
// Pattern: \\"mkkMemberOid\\":\\"xxx\\",\\"kapMemberTitle\\":\\"...\\",\\"relatedMemberTitle\\":\\"...\\",\\"stockCode\\":\\"TICKER\\"
|
|
34
|
+
const pattern = /\\"mkkMemberOid\\":\\"([^\\]+)\\",\\"kapMemberTitle\\":\\"([^\\]+)\\",\\"relatedMemberTitle\\":\\"[^\\]*\\",\\"stockCode\\":\\"([^\\]+)\\"/g;
|
|
35
|
+
|
|
23
36
|
const companies: Company[] = [];
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
37
|
+
const matches = response.data.matchAll(pattern);
|
|
38
|
+
|
|
39
|
+
for (const match of matches) {
|
|
40
|
+
const name = match[2];
|
|
41
|
+
const stockCodes = match[3];
|
|
42
|
+
|
|
43
|
+
// Handle multiple tickers (e.g., "GARAN, TGB")
|
|
44
|
+
if (stockCodes.includes(',')) {
|
|
45
|
+
const tickers = stockCodes.split(',').map(t => t.trim());
|
|
46
|
+
for (const ticker of tickers) {
|
|
47
|
+
if (ticker) {
|
|
48
|
+
companies.push({ ticker, name, city: '' });
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
} else {
|
|
52
|
+
companies.push({ ticker: stockCodes, name, city: '' });
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
|
|
28
56
|
this.cacheSet(cacheKey, companies, TTL.COMPANY_LIST);
|
|
29
57
|
return companies;
|
|
30
58
|
} catch (error) { throw new APIError(`Failed to fetch companies: ${error}`); }
|
|
@@ -35,6 +63,187 @@ export class KapProvider extends BaseProvider {
|
|
|
35
63
|
const q = query.toLowerCase();
|
|
36
64
|
return companies.filter(c => c.ticker.toLowerCase().includes(q) || c.name.toLowerCase().includes(q));
|
|
37
65
|
}
|
|
66
|
+
|
|
67
|
+
async getMemberOid(symbol: string): Promise<string | null> {
|
|
68
|
+
symbol = symbol.toUpperCase().replace('.IS', '').replace('.E', '');
|
|
69
|
+
const currentTime = Date.now();
|
|
70
|
+
|
|
71
|
+
// Check cache
|
|
72
|
+
if (this.oidMap && (currentTime - this.oidCacheTime) < this.CACHE_DURATION) {
|
|
73
|
+
return this.oidMap.get(symbol) || null;
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
// Fetch BIST companies list from KAP
|
|
77
|
+
try {
|
|
78
|
+
const response = await this.get<string>(`${KapProvider.BASE_URL}/tr/bist-sirketler`, { responseType: 'text' as const });
|
|
79
|
+
|
|
80
|
+
// Parse mkkMemberOid and stockCode pairs from Next.js data
|
|
81
|
+
const pattern = /\\"mkkMemberOid\\":\\"([^\\]+)\\",[^}]*\\"stockCode\\":\\"([^\\]+)\\"/g;
|
|
82
|
+
const matches = response.data.matchAll(pattern);
|
|
83
|
+
|
|
84
|
+
// Build mapping: stockCode -> mkkMemberOid
|
|
85
|
+
this.oidMap = new Map();
|
|
86
|
+
for (const match of matches) {
|
|
87
|
+
const oid = match[1];
|
|
88
|
+
const codesStr = match[2];
|
|
89
|
+
|
|
90
|
+
// Handle multiple codes per company (e.g., "GARAN, TGB")
|
|
91
|
+
for (const code of codesStr.split(',')) {
|
|
92
|
+
const trimmedCode = code.trim();
|
|
93
|
+
if (trimmedCode) {
|
|
94
|
+
this.oidMap.set(trimmedCode, oid);
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
this.oidCacheTime = currentTime;
|
|
100
|
+
return this.oidMap.get(symbol) || null;
|
|
101
|
+
} catch (error) {
|
|
102
|
+
return null;
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
async getDisclosures(symbol: string, limit: number = 20): Promise<Disclosure[]> {
|
|
107
|
+
symbol = symbol.toUpperCase().replace('.IS', '').replace('.E', '');
|
|
108
|
+
|
|
109
|
+
// Get KAP member OID for the symbol
|
|
110
|
+
const memberOid = await this.getMemberOid(symbol);
|
|
111
|
+
if (!memberOid) {
|
|
112
|
+
return [];
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
// Fetch disclosures from KAP
|
|
116
|
+
const discUrl = `${KapProvider.DISCLOSURE_URL}?member=${memberOid}`;
|
|
117
|
+
|
|
118
|
+
try {
|
|
119
|
+
const response = await this.get<string>(discUrl, { responseType: 'text' as const });
|
|
120
|
+
|
|
121
|
+
// Parse disclosures from Next.js embedded data
|
|
122
|
+
// Pattern: publishDate\":\"29.12.2025 19:21:18\",\"disclosureIndex\":1530826...title\":\"...\"
|
|
123
|
+
const pattern = /publishDate\\":\\"([^\\]+)\\".*?disclosureIndex\\":(\d+).*?title\\":\\"([^\\]+)\\"/gs;
|
|
124
|
+
const matches = Array.from(response.data.matchAll(pattern));
|
|
125
|
+
|
|
126
|
+
const disclosures: Disclosure[] = [];
|
|
127
|
+
for (let i = 0; i < Math.min(matches.length, limit); i++) {
|
|
128
|
+
const match = matches[i];
|
|
129
|
+
const date = match[1];
|
|
130
|
+
const idx = parseInt(match[2]);
|
|
131
|
+
const title = match[3];
|
|
132
|
+
|
|
133
|
+
disclosures.push({
|
|
134
|
+
date,
|
|
135
|
+
title,
|
|
136
|
+
disclosureIndex: idx,
|
|
137
|
+
url: `https://www.kap.org.tr/tr/Bildirim/${idx}`
|
|
138
|
+
});
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
return disclosures;
|
|
142
|
+
} catch (error) {
|
|
143
|
+
throw new APIError(`Failed to fetch disclosures for ${symbol}: ${error}`);
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
async getCalendar(symbol: string): Promise<CalendarEvent[]> {
|
|
148
|
+
symbol = symbol.toUpperCase().replace('.IS', '').replace('.E', '');
|
|
149
|
+
|
|
150
|
+
// Get KAP member OID for the symbol
|
|
151
|
+
const memberOid = await this.getMemberOid(symbol);
|
|
152
|
+
if (!memberOid) {
|
|
153
|
+
return [];
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
// Calculate date range: today to 6 months from now
|
|
157
|
+
const now = new Date();
|
|
158
|
+
const startDate = now.toISOString().split('T')[0];
|
|
159
|
+
const endDate = new Date(now.getTime() + 180 * 24 * 60 * 60 * 1000).toISOString().split('T')[0];
|
|
160
|
+
|
|
161
|
+
// Fetch expected disclosures from KAP API
|
|
162
|
+
const headers = {
|
|
163
|
+
'Accept': '*/*',
|
|
164
|
+
'Content-Type': 'application/json',
|
|
165
|
+
'Origin': 'https://kap.org.tr',
|
|
166
|
+
'Referer': 'https://kap.org.tr/tr/beklenen-bildirim-sorgu'
|
|
167
|
+
};
|
|
168
|
+
|
|
169
|
+
const payload = {
|
|
170
|
+
startDate,
|
|
171
|
+
endDate,
|
|
172
|
+
memberTypes: ['IGS'],
|
|
173
|
+
mkkMemberOidList: [memberOid],
|
|
174
|
+
disclosureClass: '',
|
|
175
|
+
subjects: [],
|
|
176
|
+
mainSector: '',
|
|
177
|
+
sector: '',
|
|
178
|
+
subSector: '',
|
|
179
|
+
market: '',
|
|
180
|
+
index: '',
|
|
181
|
+
year: '',
|
|
182
|
+
term: '',
|
|
183
|
+
ruleType: ''
|
|
184
|
+
};
|
|
185
|
+
|
|
186
|
+
try {
|
|
187
|
+
const response = await this.post<any[]>(KapProvider.CALENDAR_API_URL, payload, { headers });
|
|
188
|
+
|
|
189
|
+
const events: CalendarEvent[] = [];
|
|
190
|
+
for (const item of response.data) {
|
|
191
|
+
events.push({
|
|
192
|
+
startDate: item.startDate || '',
|
|
193
|
+
endDate: item.endDate || '',
|
|
194
|
+
subject: item.subject || '',
|
|
195
|
+
period: item.ruleTypeTerm || '',
|
|
196
|
+
year: item.year || ''
|
|
197
|
+
});
|
|
198
|
+
}
|
|
199
|
+
|
|
200
|
+
return events;
|
|
201
|
+
} catch (error) {
|
|
202
|
+
throw new APIError(`Failed to fetch calendar for ${symbol}: ${error}`);
|
|
203
|
+
}
|
|
204
|
+
}
|
|
205
|
+
|
|
206
|
+
async getCompanyDetails(symbol: string): Promise<CompanyDetails> {
|
|
207
|
+
symbol = symbol.toUpperCase().replace('.IS', '').replace('.E', '');
|
|
208
|
+
|
|
209
|
+
// Get KAP member OID for the symbol
|
|
210
|
+
const memberOid = await this.getMemberOid(symbol);
|
|
211
|
+
if (!memberOid) {
|
|
212
|
+
return {};
|
|
213
|
+
}
|
|
214
|
+
|
|
215
|
+
// Fetch company info page
|
|
216
|
+
const url = `${KapProvider.COMPANY_INFO_URL}/${memberOid}`;
|
|
217
|
+
|
|
218
|
+
try {
|
|
219
|
+
const response = await this.get<string>(url, { responseType: 'text' as const });
|
|
220
|
+
const html = response.data;
|
|
221
|
+
|
|
222
|
+
const result: CompanyDetails = {};
|
|
223
|
+
|
|
224
|
+
// Extract sector: href="/tr/Sektorler?sector=...">SECTOR_NAME</a>
|
|
225
|
+
const sectorMatch = html.match(/href="\/tr\/Sektorler\?sector=[^"]*">([^<]+)<\/a>/);
|
|
226
|
+
if (sectorMatch) {
|
|
227
|
+
result.sector = sectorMatch[1].trim();
|
|
228
|
+
}
|
|
229
|
+
|
|
230
|
+
// Extract market: href="/tr/Pazarlar?market=...">MARKET_NAME</a>
|
|
231
|
+
const marketMatch = html.match(/href="\/tr\/Pazarlar\?market=[^"]*">([^<]+)<\/a>/);
|
|
232
|
+
if (marketMatch) {
|
|
233
|
+
result.market = marketMatch[1].trim();
|
|
234
|
+
}
|
|
235
|
+
|
|
236
|
+
// Extract website: after "İnternet Adresi" label
|
|
237
|
+
const websiteMatch = html.match(/İnternet Adresi<\/h3><p[^>]*>([^<]+)<\/p>/);
|
|
238
|
+
if (websiteMatch) {
|
|
239
|
+
result.website = websiteMatch[1].trim();
|
|
240
|
+
}
|
|
241
|
+
|
|
242
|
+
return result;
|
|
243
|
+
} catch (error) {
|
|
244
|
+
return {};
|
|
245
|
+
}
|
|
246
|
+
}
|
|
38
247
|
}
|
|
39
248
|
|
|
40
249
|
export interface ContractData { code: string; contract: string; price: number; change: number; volumeTl: number; volumeQty: number; category: string; }
|