para-transferi 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md ADDED
@@ -0,0 +1,799 @@
1
+ # para-transferi
2
+
3
+ **Uluslararası para transferi sağlayıcılarını karşılaştırma kütüphanesi** — Türkiye'den ve Türkiye'ye yapılan para transferlerinde en uygun sağlayıcıyı bulun.
4
+
5
+ [![npm version](https://img.shields.io/npm/v/para-transferi.svg)](https://www.npmjs.com/package/para-transferi)
6
+ [![License: MIT](https://img.shields.io/badge/License-MIT-green.svg)](https://opensource.org/licenses/MIT)
7
+ [![Node.js](https://img.shields.io/badge/node-%3E%3D18-brightgreen.svg)](https://nodejs.org/)
8
+ [![TypeScript](https://img.shields.io/badge/TypeScript-ready-blue.svg)](https://www.typescriptlang.org/)
9
+ [![Zero Dependencies](https://img.shields.io/badge/dependencies-0-orange.svg)](https://www.npmjs.com/package/para-transferi)
10
+
11
+ Wise, Remitly, XE, OFX, WorldRemit ve Revolut gibi popüler para transferi servislerinin **ücretlerini**, **döviz kurlarını**, **kur marjlarını** ve **transfer sürelerini** tek bir API ile karşılaştırın. Genişletilebilir plugin sistemi sayesinde banka, fintech veya yerel havale servisi gibi kendi sağlayıcılarınızı da ekleyebilirsiniz.
12
+
13
+ ---
14
+
15
+ ## Neden `para-transferi`?
16
+
17
+ Uluslararası para transferi yaparken doğru sağlayıcıyı seçmek yüzlerce, hatta binlerce lira tasarruf ettirebilir. Ancak her sağlayıcının farklı ücret yapısı, kur marjı ve transfer hızı vardır. Bu kütüphane ile:
18
+
19
+ - **Gerçek maliyeti görün** — Sadece transfer ücretini değil, gizli kur marjı maliyetini de hesaplayın
20
+ - **Otomatik karşılaştırma yapın** — Tek bir fonksiyon çağrısıyla tüm sağlayıcıları sıralayın
21
+ - **Uygulamanıza entegre edin** — Fintech uygulamaları, karşılaştırma siteleri veya kişisel projelerinize kolayca ekleyin
22
+ - **Canlı döviz kurları ile çalışın** — ECB (Avrupa Merkez Bankası) verileriyle gerçek zamanlı hesaplama
23
+
24
+ ---
25
+
26
+ ## Özellikler
27
+
28
+ | Özellik | Detay |
29
+ |---------|-------|
30
+ | **6 Yerleşik Sağlayıcı** | Wise, Remitly, XE, OFX, WorldRemit, Revolut |
31
+ | **Canlı Döviz Kurları** | ECB ve exchangerate-api entegrasyonu, 30 dakika önbellek |
32
+ | **Toplam Maliyet Hesaplama** | Transfer ücreti + kur marjı + koridor bazlı özel ücretler |
33
+ | **Akıllı Karşılaştırma** | Maliyet, hız, puan veya kura göre sıralama |
34
+ | **56 Ülke Desteği** | Türkiye, ABD, Almanya, İngiltere, Fransa ve 50+ ülke |
35
+ | **46 Para Birimi** | TRY, USD, EUR, GBP, CHF ve 40+ para birimi |
36
+ | **Plugin Sistemi** | Özel sağlayıcı ekleme, kaldırma ve güncelleme |
37
+ | **TypeScript Desteği** | Tam tip tanımları, IntelliSense desteği |
38
+ | **Sıfır Bağımlılık** | Node.js 18+ native `fetch()`, ek paket gerektirmez |
39
+ | **Dual Format** | ESM ve CommonJS (CJS) çıktı desteği |
40
+
41
+ ---
42
+
43
+ ## Kurulum
44
+
45
+ ```bash
46
+ npm install para-transferi
47
+ ```
48
+
49
+ ```bash
50
+ # veya yarn ile
51
+ yarn add para-transferi
52
+ ```
53
+
54
+ ```bash
55
+ # veya pnpm ile
56
+ pnpm add para-transferi
57
+ ```
58
+
59
+ ---
60
+
61
+ ## Hızlı Başlangıç
62
+
63
+ ### Sağlayıcıları Karşılaştır
64
+
65
+ Türkiye'den Amerika'ya 10.000 TL göndermek isteyen bir kullanıcı için tüm sağlayıcıları karşılaştırın:
66
+
67
+ ```typescript
68
+ import { karsilastir } from "para-transferi";
69
+
70
+ const sonuc = await karsilastir({
71
+ gonderenUlke: "TR",
72
+ aliciUlke: "US",
73
+ gonderenParaBirimi: "TRY",
74
+ aliciParaBirimi: "USD",
75
+ miktar: 10000,
76
+ });
77
+
78
+ console.log(`Piyasa kuru: ${sonuc.piyasaKuru}`);
79
+ console.log(`Kur kaynağı: ${sonuc.kurKaynagi}`);
80
+ console.log(`Karşılaştırılan sağlayıcı sayısı: ${sonuc.sonuclar.length}`);
81
+
82
+ // En ucuzdan en pahalıya sıralı sonuçlar
83
+ for (const s of sonuc.sonuclar) {
84
+ console.log(`
85
+ ${s.saglayiciAd}
86
+ Transfer ücreti: ${s.transferUcreti} TRY
87
+ Kur marjı maliyeti: ${s.kurMarjiMaliyet} TRY
88
+ Toplam maliyet: ${s.toplamMaliyet} TRY
89
+ Alıcı alacak: ${s.aliciMiktar} USD
90
+ Tahmini süre: ${s.tahminiSure.aciklama}
91
+ `);
92
+ }
93
+
94
+ // Desteklemeyen sağlayıcıları da görebilirsiniz
95
+ for (const d of sonuc.desteklemeyenler) {
96
+ console.log(`${d.saglayiciId}: ${d.sebep}`);
97
+ }
98
+ ```
99
+
100
+ ### En Uygun Sağlayıcıyı Bul
101
+
102
+ Tek satırda en düşük maliyetli sağlayıcıyı bulun:
103
+
104
+ ```typescript
105
+ import { enUygun } from "para-transferi";
106
+
107
+ const enIyi = await enUygun({
108
+ gonderenUlke: "TR",
109
+ aliciUlke: "DE",
110
+ gonderenParaBirimi: "TRY",
111
+ aliciParaBirimi: "EUR",
112
+ miktar: 5000,
113
+ });
114
+
115
+ if (enIyi) {
116
+ console.log(`En uygun sağlayıcı: ${enIyi.saglayiciAd}`);
117
+ console.log(`Toplam maliyet: ${enIyi.toplamMaliyet} TRY`);
118
+ console.log(`Alıcı alacak: ${enIyi.aliciMiktar} EUR`);
119
+ console.log(`Uygulanan kur: ${enIyi.uyguladigiKur}`);
120
+ console.log(`Piyasa kuru: ${enIyi.piyasaKuru}`);
121
+ console.log(`Kur marjı: %${enIyi.kurMarjiYuzde}`);
122
+ }
123
+ ```
124
+
125
+ ### Tek Sağlayıcı ile Maliyet Hesapla
126
+
127
+ Belirli bir sağlayıcının ücretlerini ayrıntılı hesaplayın:
128
+
129
+ ```typescript
130
+ import { hesapla } from "para-transferi";
131
+
132
+ const sonuc = await hesapla("wise", 10000, "TRY", "USD", "TR", "US");
133
+
134
+ console.log(`Sağlayıcı: ${sonuc.saglayiciAd}`);
135
+ console.log(`Gönderilen: ${sonuc.gonderenMiktar} ${sonuc.gonderenParaBirimi}`);
136
+ console.log(`Alıcı alacak: ${sonuc.aliciMiktar} ${sonuc.aliciParaBirimi}`);
137
+ console.log(`Transfer ücreti: ${sonuc.transferUcreti} TRY`);
138
+ console.log(`Kur marjı maliyeti: ${sonuc.kurMarjiMaliyet} TRY`);
139
+ console.log(`Toplam maliyet: ${sonuc.toplamMaliyet} TRY`);
140
+ console.log(`Uygulanan kur: ${sonuc.uyguladigiKur}`);
141
+ console.log(`Piyasa orta kuru: ${sonuc.piyasaKuru}`);
142
+ console.log(`Tahmini süre: ${sonuc.tahminiSure.aciklama}`);
143
+ ```
144
+
145
+ ### Canlı Döviz Kuru Getir
146
+
147
+ ECB veya exchangerate-api'den güncel döviz kurlarını çekin:
148
+
149
+ ```typescript
150
+ import { kurGetir } from "para-transferi";
151
+
152
+ const tryUsd = await kurGetir("TRY", "USD");
153
+ console.log(`1 TRY = ${tryUsd.kur} USD`);
154
+ console.log(`Kaynak: ${tryUsd.kaynak}`);
155
+ console.log(`Tarih: ${tryUsd.tarih}`);
156
+
157
+ const eurTry = await kurGetir("EUR", "TRY");
158
+ console.log(`1 EUR = ${eurTry.kur} TRY`);
159
+ ```
160
+
161
+ ### Ülke ve Koridor Desteğini Kontrol Et
162
+
163
+ Bir ülkenin hangi sağlayıcılar tarafından desteklendiğini öğrenin:
164
+
165
+ ```typescript
166
+ import { ulkeDestegi, desteklenenUlkeler, desteklenenParaBirimleri } from "para-transferi";
167
+
168
+ // Türkiye desteği
169
+ const tr = ulkeDestegi("TR");
170
+ console.log(`Ülke: ${tr.ulkeAdi}`);
171
+ console.log(`Gönderi destekleyen: ${tr.destekleyenSaglayicilar.filter(s => s.gonderimVar).length} sağlayıcı`);
172
+ console.log(`Alım destekleyen: ${tr.destekleyenSaglayicilar.filter(s => s.alimVar).length} sağlayıcı`);
173
+
174
+ // Tüm desteklenen ülkeler
175
+ const ulkeler = desteklenenUlkeler();
176
+ console.log(`Toplam ${ulkeler.length} ülke destekleniyor`);
177
+
178
+ // Tüm para birimleri
179
+ const birimler = desteklenenParaBirimleri();
180
+ console.log(`Toplam ${birimler.length} para birimi destekleniyor`);
181
+ ```
182
+
183
+ ### Sağlayıcıları Listele
184
+
185
+ Kayıtlı tüm sağlayıcıların detaylı bilgilerine erişin:
186
+
187
+ ```typescript
188
+ import { saglayicilar } from "para-transferi";
189
+
190
+ const liste = saglayicilar();
191
+
192
+ for (const s of liste) {
193
+ console.log(`
194
+ ${s.ad} (${s.id})
195
+ Web: ${s.webSitesi}
196
+ Kuruluş: ${s.kurulusYili}
197
+ Merkez: ${s.merkezUlke}
198
+ Puan: ${s.puan}/5
199
+ Kur marjı: %${s.kurMarjiYuzde}
200
+ Lisanslar: ${s.duzenleme.lisanslar.join(", ")}
201
+ Gönderen ülke sayısı: ${s.gonderenUlkeler.length}
202
+ Alıcı ülke sayısı: ${s.aliciUlkeler.length}
203
+ Ödeme yöntemleri: ${s.odemeYontemleri.join(", ")}
204
+ `);
205
+ }
206
+ ```
207
+
208
+ ---
209
+
210
+ ## Desteklenen Sağlayıcılar
211
+
212
+ ### Wise (TransferWise)
213
+
214
+ | Bilgi | Detay |
215
+ |-------|-------|
216
+ | Kuruluş | 2011, Londra |
217
+ | Kur Marjı | %0 (orta piyasa kuru) |
218
+ | Ücret Modeli | %0.4-%1.5 arası değişen ücretler |
219
+ | Transfer Hızı | 30 dakika - 2 iş günü |
220
+ | Lisanslar | FCA, FinCEN, ASIC, MAS |
221
+ | Ödeme | Banka havalesi, kart, Apple Pay, Google Pay, SWIFT, SEPA |
222
+
223
+ Wise, gerçek orta piyasa kurunu (mid-market rate) kullanan nadir sağlayıcılardan biridir. Kur marjı %0 olduğundan, toplam maliyet sadece transfer ücretinden oluşur. Özellikle büyük tutarlı transferlerde rekabetçi fiyatlar sunar.
224
+
225
+ ### Remitly
226
+
227
+ | Bilgi | Detay |
228
+ |-------|-------|
229
+ | Kuruluş | 2011, Seattle |
230
+ | Kur Marjı | ~%1.5 |
231
+ | Ücret Modeli | Sabit ücret ($2.99 - $3.99) |
232
+ | Transfer Hızı | Dakikalar (Express) - 5 iş günü (Economy) |
233
+ | Lisanslar | FinCEN, FCA, ASIC |
234
+ | Ödeme | Banka havalesi, banka kartı, kredi kartı |
235
+
236
+ Remitly, gelişmekte olan ülkelere para gönderme konusunda uzmanlaşmıştır. Mobil cüzdan, nakit teslim ve eve teslim gibi alternatif teslimat seçenekleri sunar. Express seçeneğiyle dakikalar içinde para gönderebilirsiniz.
237
+
238
+ ### XE Money Transfer
239
+
240
+ | Bilgi | Detay |
241
+ |-------|-------|
242
+ | Kuruluş | 1993, Kanada |
243
+ | Kur Marjı | ~%1.0 |
244
+ | Ücret Modeli | Transfer ücreti yok (maliyet kur marjına dahil) |
245
+ | Transfer Hızı | 1-4 iş günü |
246
+ | Lisanslar | FinCEN, FCA, ASIC, FINTRAC |
247
+ | Ödeme | Banka havalesi, SWIFT |
248
+
249
+ XE, dünyanın en bilinen döviz kuru platformudur. Transfer ücreti almaz ancak döviz kuru üzerinden marj uygular. Euronet Worldwide bünyesinde güvenilir ve köklü bir kurumdur.
250
+
251
+ ### OFX
252
+
253
+ | Bilgi | Detay |
254
+ |-------|-------|
255
+ | Kuruluş | 1998, Sydney |
256
+ | Kur Marjı | ~%0.4 |
257
+ | Ücret Modeli | Transfer ücreti yok (maliyet kur marjına dahil) |
258
+ | Transfer Hızı | 1-3 iş günü |
259
+ | Lisanslar | ASIC, FCA, FinCEN, FINTRAC, MAS |
260
+ | Ödeme | Banka havalesi, SWIFT |
261
+
262
+ OFX, özellikle büyük tutarlı transferlerde (10.000$ ve üzeri) en rekabetçi kurları sunan sağlayıcıdır. %0.4 gibi düşük bir kur marjı ile işletmeler ve yüksek tutarlı bireysel transferler için idealdir. 5 milyon dolara kadar tek seferde transfer yapılabilir.
263
+
264
+ ### WorldRemit
265
+
266
+ | Bilgi | Detay |
267
+ |-------|-------|
268
+ | Kuruluş | 2010, Londra |
269
+ | Kur Marjı | ~%1.8 |
270
+ | Ücret Modeli | Sabit ücret ($1.99 - $3.99) |
271
+ | Transfer Hızı | Dakikalar (mobil cüzdan) - 3 iş günü |
272
+ | Lisanslar | FCA, FinCEN, ASIC, FINTRAC |
273
+ | Ödeme | Banka havalesi, banka kartı, kredi kartı, Apple Pay |
274
+
275
+ WorldRemit, çoklu teslimat seçenekleriyle öne çıkar. M-Pesa gibi mobil cüzdanlara dakikalar içinde para gönderebilir, nakit teslim noktalarından para çektirebilirsiniz. Afrika ve Güney Asya'ya transferlerde popülerdir.
276
+
277
+ ### Revolut
278
+
279
+ | Bilgi | Detay |
280
+ |-------|-------|
281
+ | Kuruluş | 2015, Londra |
282
+ | Kur Marjı | ~%0.3 (hafta içi), ~%1.3 (hafta sonu) |
283
+ | Ücret Modeli | Standart: aylık ücretsiz limit üzeri %0.5, Premium/Metal: sınırsız |
284
+ | Transfer Hızı | Anlık (Revolut arası) - 3 iş günü (SWIFT) |
285
+ | Lisanslar | ECB, FCA, FinCEN |
286
+ | Ödeme | Banka havalesi, kart, Apple Pay, Google Pay, SWIFT, SEPA |
287
+
288
+ Revolut, dijital bankacılık platformu olarak hafta içi neredeyse piyasa kuruna yakın kurlarla transfer sunar. Revolut kullanıcıları arasında anlık ve ücretsiz transfer yapılabilir. Premium ve Metal planlarında sınırsız ücretsiz döviz transferi bulunur.
289
+
290
+ ---
291
+
292
+ ## Sağlayıcı Karşılaştırma Tablosu
293
+
294
+ | Sağlayıcı | Kur Marjı | Ücret | Min. Transfer | Maks. Transfer | Hız | Puan |
295
+ |-----------|-----------|-------|---------------|----------------|-----|------|
296
+ | **Wise** | %0 | %0.4-1.5 | $1 | $1.500.000 | 30dk-2 gün | 4.6/5 |
297
+ | **Revolut** | %0.3 | %0-0.5 | $1 | $250.000 | Anlık-3 gün | 4.5/5 |
298
+ | **Remitly** | %1.5 | $2.99-3.99 | $25 | $25.000 | Dakikalar-5 gün | 4.4/5 |
299
+ | **OFX** | %0.4 | Yok | $250 | $5.000.000 | 1-3 gün | 4.3/5 |
300
+ | **XE** | %1.0 | Yok | $100 | $500.000 | 1-4 gün | 4.2/5 |
301
+ | **WorldRemit** | %1.8 | $1.99-3.99 | $10 | $10.000 | Dakikalar-3 gün | 4.1/5 |
302
+
303
+ ---
304
+
305
+ ## API Referansı
306
+
307
+ ### `karsilastir(parametreler)` — Sağlayıcıları Karşılaştır
308
+
309
+ Belirtilen transfer koridoru ve miktar için tüm uygun sağlayıcıları karşılaştırır, maliyet hesabı yapar ve sıralar. Canlı döviz kuru ile çalışır.
310
+
311
+ **Parametreler:**
312
+
313
+ | Alan | Tip | Zorunlu | Varsayılan | Açıklama |
314
+ |------|-----|---------|------------|----------|
315
+ | `gonderenUlke` | `string` | Evet | — | Gönderen ülke kodu (ISO 3166-1 alpha-2, ör: `"TR"`) |
316
+ | `aliciUlke` | `string` | Evet | — | Alıcı ülke kodu (ör: `"US"`, `"DE"`, `"GB"`) |
317
+ | `gonderenParaBirimi` | `string` | Evet | — | Gönderen para birimi (ISO 4217, ör: `"TRY"`) |
318
+ | `aliciParaBirimi` | `string` | Evet | — | Alıcı para birimi (ör: `"USD"`, `"EUR"`) |
319
+ | `miktar` | `number` | Evet | — | Gönderilecek miktar (gönderen para birimi cinsinden) |
320
+ | `siralamaKriteri` | `string` | Hayır | `"toplam_maliyet"` | Sıralama: `"toplam_maliyet"` \| `"hiz"` \| `"puan"` \| `"kur"` |
321
+ | `saglayiciFiltresi` | `string[]` | Hayır | Tümü | Sadece belirli sağlayıcılar (ör: `["wise", "revolut"]`) |
322
+ | `transferYontemi` | `string` | Hayır | Tümü | Filtre: `"banka_havalesi"` \| `"mobil_cuzdan"` \| `"nakit_teslim"` \| `"ev_teslim"` \| `"kart"` |
323
+
324
+ **Dönen Değer:** `Promise<KarsilastirmaSonucu>`
325
+
326
+ ```typescript
327
+ interface KarsilastirmaSonucu {
328
+ sorgu: KarsilastirmaParametreleri; // Kullanılan parametreler
329
+ zamanDamgasi: string; // ISO datetime
330
+ piyasaKuru: number; // Kullanılan piyasa orta kuru
331
+ kurKaynagi: string; // "ecb" veya "exchangerate_api"
332
+ sonuclar: TransferHesapSonucu[]; // Sıralı sağlayıcı sonuçları
333
+ desteklemeyenler: Array<{ // Bu koridoru desteklemeyen sağlayıcılar
334
+ saglayiciId: string;
335
+ sebep: string;
336
+ }>;
337
+ }
338
+ ```
339
+
340
+ ### `hesapla(saglayiciId, miktar, gonderenParaBirimi, aliciParaBirimi, gonderenUlke?, aliciUlke?)` — Tek Sağlayıcı Hesapla
341
+
342
+ Belirli bir sağlayıcı için ayrıntılı maliyet hesaplaması yapar.
343
+
344
+ **Dönen Değer:** `Promise<TransferHesapSonucu>`
345
+
346
+ ```typescript
347
+ interface TransferHesapSonucu {
348
+ saglayiciId: string; // "wise"
349
+ saglayiciAd: string; // "Wise (TransferWise)"
350
+ gonderenMiktar: number; // 10000
351
+ gonderenParaBirimi: string; // "TRY"
352
+ aliciMiktar: number; // 285.50
353
+ aliciParaBirimi: string; // "USD"
354
+ uyguladigiKur: number; // Sağlayıcının uyguladığı kur
355
+ piyasaKuru: number; // Gerçek piyasa orta kuru
356
+ kurMarjiYuzde: number; // Kur marjı yüzdesi
357
+ kurMarjiMaliyet: number; // Kur marjından kaynaklanan maliyet
358
+ transferUcreti: number; // Transfer ücreti
359
+ toplamMaliyet: number; // Toplam maliyet (ücret + kur marjı)
360
+ tahminiSure: { // Transfer süresi
361
+ min: number; // Minimum saat
362
+ maks: number; // Maksimum saat
363
+ aciklama: string; // "1 saat - 2 iş günü"
364
+ };
365
+ odemeYontemleri: string[]; // Desteklenen ödeme yöntemleri
366
+ puan: number; // Sağlayıcı puanı (1-5)
367
+ }
368
+ ```
369
+
370
+ ### `kurGetir(kaynakParaBirimi, hedefParaBirimi)` — Döviz Kuru Getir
371
+
372
+ ECB veya exchangerate-api'den canlı döviz kuru getirir. Sonuçlar 30 dakika önbelleklenir.
373
+
374
+ **Dönen Değer:** `Promise<DovizKuru>`
375
+
376
+ ```typescript
377
+ interface DovizKuru {
378
+ kaynak: string; // "ecb" veya "exchangerate_api"
379
+ kaynakParaBirimi: string; // "TRY"
380
+ hedefParaBirimi: string; // "USD"
381
+ kur: number; // 0.02855
382
+ tarih: string; // "2026-04-03"
383
+ zamanDamgasi: string; // ISO datetime
384
+ }
385
+ ```
386
+
387
+ ### `enUygun(parametreler)` — En Uygun Sağlayıcıyı Bul
388
+
389
+ En düşük toplam maliyetli sağlayıcıyı döndürür. Parametreler `karsilastir()` ile aynıdır. Hiçbir sağlayıcı uygun değilse `null` döner.
390
+
391
+ **Dönen Değer:** `Promise<TransferHesapSonucu | null>`
392
+
393
+ ### `saglayicilar()` — Sağlayıcıları Listele
394
+
395
+ Kayıtlı tüm sağlayıcıların tam bilgilerini döndürür. Senkron fonksiyondur.
396
+
397
+ **Dönen Değer:** `Saglayici[]`
398
+
399
+ ### `saglayiciEkle(saglayici)` — Yeni Sağlayıcı Ekle
400
+
401
+ Plugin sistemiyle yeni sağlayıcı ekler. Aynı `id` ile eklenen sağlayıcı mevcut kaydı günceller.
402
+
403
+ ### `saglayiciKaldir(id)` — Sağlayıcı Kaldır
404
+
405
+ Belirtilen sağlayıcıyı kayıttan kaldırır. Başarılıysa `true`, bulunamazsa `false` döner.
406
+
407
+ ### `ulkeDestegi(ulkeKodu)` — Ülke Desteği Kontrol Et
408
+
409
+ Bir ülkenin hangi sağlayıcılar tarafından gönderim ve alım için desteklendiğini kontrol eder.
410
+
411
+ ### `desteklenenUlkeler()` — Tüm Ülkeleri Listele
412
+
413
+ En az bir sağlayıcı tarafından desteklenen tüm ülkeleri döndürür.
414
+
415
+ **Dönen Değer:** `Array<{ kod: string; ad: string }>`
416
+
417
+ ### `desteklenenParaBirimleri()` — Tüm Para Birimlerini Listele
418
+
419
+ Sistemde tanımlı tüm para birimlerini döndürür.
420
+
421
+ **Dönen Değer:** `Array<{ kod: string; ad: string; sembol: string }>`
422
+
423
+ ### `kurAyarla(ayarlar)` — Döviz Kuru Ayarları
424
+
425
+ Kur kaynağı önceliğini, önbellek süresini ve API anahtarlarını yapılandırır.
426
+
427
+ ```typescript
428
+ import { kurAyarla } from "para-transferi";
429
+
430
+ kurAyarla({
431
+ onbellekSuresi: 3600, // Önbellek süresi (saniye), varsayılan: 1800
432
+ kaynakOnceligi: ["exchangerate_api", "ecb"], // Kaynak öncelik sırası
433
+ apiAnahtarlari: {
434
+ fixer: "API_ANAHTARINIZ", // Opsiyonel ek kur kaynağı
435
+ },
436
+ });
437
+ ```
438
+
439
+ ### `sifirla()` — Varsayılanlara Dön
440
+
441
+ Tüm eklenen/kaldırılan sağlayıcıları sıfırlar, kur önbelleğini temizler ve 6 varsayılan sağlayıcıyı yeniden yükler.
442
+
443
+ ---
444
+
445
+ ## Plugin Sistemi — Özel Sağlayıcı Ekleme
446
+
447
+ `para-transferi`'nin en güçlü özelliklerinden biri genişletilebilir plugin sistemidir. Herhangi bir bankayı, fintech'i veya yerel havale servisini kolayca ekleyebilirsiniz:
448
+
449
+ ```typescript
450
+ import { saglayiciEkle, karsilastir } from "para-transferi";
451
+
452
+ // Yerel bankanızı sağlayıcı olarak ekleyin
453
+ saglayiciEkle({
454
+ id: "ziraat-bankasi",
455
+ ad: "Ziraat Bankası",
456
+ webSitesi: "https://www.ziraatbank.com.tr",
457
+ kurulusYili: 1863,
458
+ merkezUlke: "TR",
459
+ aciklama: "Türkiye'nin en büyük kamu bankası ile uluslararası havale",
460
+ gonderenUlkeler: ["TR"],
461
+ aliciUlkeler: ["US", "DE", "GB", "FR", "NL", "SA", "AE"],
462
+ gonderenParaBirimleri: ["TRY"],
463
+ aliciParaBirimleri: ["USD", "EUR", "GBP", "SAR", "AED"],
464
+ ucretYapisi: {
465
+ sabitUcret: 40,
466
+ sabitUcretParaBirimi: "TRY",
467
+ yuzdeUcret: 0.2,
468
+ minimumUcret: 40,
469
+ maksimumUcret: 500,
470
+ aciklama: "40 TL sabit + %0.2 komisyon, maks 500 TL",
471
+ koridorUcretleri: {
472
+ "TR_DE": { sabitUcret: 30 }, // Almanya'ya özel ücret
473
+ },
474
+ },
475
+ transferYontemleri: [
476
+ { tip: "banka_havalesi", ad: "SWIFT Havalesi", desteklenenUlkeler: [] },
477
+ ],
478
+ transferHizlari: [
479
+ {
480
+ yontem: "banka_havalesi",
481
+ minimumSaat: 24,
482
+ maksimumSaat: 72,
483
+ aciklama: "1-3 iş günü",
484
+ },
485
+ ],
486
+ limitler: {
487
+ minimumGonderim: 100,
488
+ maksimumGonderim: 500000,
489
+ paraBirimi: "TRY",
490
+ gunlukLimit: 500000,
491
+ },
492
+ kurMarjiYuzde: 2.5,
493
+ odemeYontemleri: ["banka_havalesi", "swift"],
494
+ puan: 3.8,
495
+ duzenleme: {
496
+ lisanslar: ["BDDK", "SPK"],
497
+ duzenleyiciUlkeler: ["TR"],
498
+ },
499
+ });
500
+
501
+ // Artık Ziraat Bankası da karşılaştırmada yer alır
502
+ const sonuc = await karsilastir({
503
+ gonderenUlke: "TR",
504
+ aliciUlke: "DE",
505
+ gonderenParaBirimi: "TRY",
506
+ aliciParaBirimi: "EUR",
507
+ miktar: 20000,
508
+ });
509
+
510
+ console.log(`${sonuc.sonuclar.length} sağlayıcı karşılaştırıldı`);
511
+ ```
512
+
513
+ ---
514
+
515
+ ## Hata Yönetimi
516
+
517
+ Paket, geliştirici deneyimini kolaylaştırmak için özel hata sınıfları kullanır. Her hata bir `kod` alanı içerir:
518
+
519
+ ```typescript
520
+ import {
521
+ karsilastir,
522
+ ParaTransferiHatasi,
523
+ GecersizParametreHatasi,
524
+ SaglayiciBulunamadiHatasi,
525
+ KurGetirmeHatasi,
526
+ } from "para-transferi";
527
+
528
+ try {
529
+ const sonuc = await karsilastir({
530
+ gonderenUlke: "TR",
531
+ aliciUlke: "US",
532
+ gonderenParaBirimi: "TRY",
533
+ aliciParaBirimi: "USD",
534
+ miktar: 10000,
535
+ });
536
+ } catch (hata) {
537
+ if (hata instanceof GecersizParametreHatasi) {
538
+ console.error("Geçersiz girdi:", hata.message);
539
+ } else if (hata instanceof KurGetirmeHatasi) {
540
+ console.error("Döviz kuru alınamadı:", hata.message);
541
+ } else if (hata instanceof ParaTransferiHatasi) {
542
+ console.error(`Hata [${hata.kod}]:`, hata.message);
543
+ }
544
+ }
545
+ ```
546
+
547
+ ### Hata Sınıfları
548
+
549
+ | Hata Sınıfı | Kod | Ne Zaman Fırlatılır |
550
+ |-------------|-----|---------------------|
551
+ | `ParaTransferiHatasi` | — | Tüm hataların temel sınıfı |
552
+ | `GecersizParametreHatasi` | `GECERSIZ_PARAMETRE` | Geçersiz ülke kodu, para birimi veya miktar |
553
+ | `SaglayiciBulunamadiHatasi` | `SAGLAYICI_BULUNAMADI` | `hesapla()` ile olmayan sağlayıcı ID'si kullanıldığında |
554
+ | `KoridorDesteklenmiyorHatasi` | `KORIDOR_DESTEKLENMIYOR` | Gönderen-alıcı ülke kombinasyonu hiç desteklenmediğinde |
555
+ | `KurGetirmeHatasi` | `KUR_GETIRME_HATASI` | ECB ve yedek kaynaklar da dahil tüm kur API'leri başarısız olduğunda |
556
+ | `LimitAsimiHatasi` | `LIMIT_ASIMI` | Transfer miktarı sağlayıcının limitlerini aştığında |
557
+
558
+ ---
559
+
560
+ ## Desteklenen Ülkeler
561
+
562
+ ### Avrupa
563
+ Türkiye (TR), Almanya (DE), Birleşik Krallık (GB), Fransa (FR), Hollanda (NL), Belçika (BE), Avusturya (AT), İsviçre (CH), İsveç (SE), Norveç (NO), Danimarka (DK), Finlandiya (FI), İtalya (IT), İspanya (ES), Portekiz (PT), Yunanistan (GR), Polonya (PL), Çekya (CZ), Macaristan (HU), Romanya (RO), Bulgaristan (BG), Hırvatistan (HR), İrlanda (IE)
564
+
565
+ ### Amerika
566
+ Amerika Birleşik Devletleri (US), Kanada (CA), Brezilya (BR), Meksika (MX), Kolombiya (CO), Arjantin (AR), Şili (CL), Peru (PE)
567
+
568
+ ### Asya-Pasifik
569
+ Japonya (JP), Çin (CN), Hindistan (IN), Pakistan (PK), Bangladeş (BD), Filipinler (PH), Malezya (MY), Singapur (SG), Tayland (TH), Endonezya (ID), Vietnam (VN), Güney Kore (KR), Avustralya (AU), Yeni Zelanda (NZ)
570
+
571
+ ### Orta Doğu ve Afrika
572
+ Birleşik Arap Emirlikleri (AE), Suudi Arabistan (SA), İsrail (IL), Mısır (EG), Fas (MA), Nijerya (NG), Gana (GH), Kenya (KE), Güney Afrika (ZA)
573
+
574
+ ### Diğer
575
+ Rusya (RU), Ukrayna (UA), Gürcistan (GE), Azerbaycan (AZ)
576
+
577
+ ---
578
+
579
+ ## Desteklenen Para Birimleri
580
+
581
+ `TRY` Türk Lirası, `USD` Amerikan Doları, `EUR` Euro, `GBP` İngiliz Sterlini, `CHF` İsviçre Frangı, `SEK` İsveç Kronu, `NOK` Norveç Kronu, `DKK` Danimarka Kronu, `PLN` Polonya Zlotisi, `CZK` Çek Korunası, `HUF` Macar Forinti, `RON` Romen Leyi, `BGN` Bulgar Levası, `CAD` Kanada Doları, `AUD` Avustralya Doları, `NZD` Yeni Zelanda Doları, `JPY` Japon Yeni, `CNY` Çin Yuanı, `INR` Hindistan Rupisi, `PKR` Pakistan Rupisi, `BDT` Bangladeş Takası, `PHP` Filipin Pesosu, `MYR` Malezya Ringgiti, `SGD` Singapur Doları, `THB` Tayland Bahtı, `IDR` Endonezya Rupisi, `VND` Vietnam Dongu, `KRW` Güney Kore Wonu, `AED` BAE Dirhemi, `SAR` Suudi Riyali, `EGP` Mısır Lirası, `MAD` Fas Dirhemi, `NGN` Nijerya Nairası, `GHS` Gana Sedisi, `KES` Kenya Şilini, `ZAR` Güney Afrika Randı, `BRL` Brezilya Reali, `MXN` Meksika Pesosu, `COP` Kolombiya Pesosu, `ARS` Arjantin Pesosu, `CLP` Şili Pesosu, `PEN` Peru Solu, `ILS` İsrail Şekeli, `RUB` Rus Rublesi, `UAH` Ukrayna Grivnası, `GEL` Gürcistan Larisi, `AZN` Azerbaycan Manatı
582
+
583
+ ---
584
+
585
+ ## Popüler Transfer Koridorları
586
+
587
+ Bu paket ile en sık kullanılan transfer rotalarını kolayca karşılaştırabilirsiniz:
588
+
589
+ | Koridor | Açıklama |
590
+ |---------|----------|
591
+ | Türkiye → Almanya (TRY → EUR) | Almanya'daki Türk diasporasına para gönderimi |
592
+ | Türkiye → ABD (TRY → USD) | Yurt dışı eğitim, iş ve aile transferleri |
593
+ | Türkiye → İngiltere (TRY → GBP) | İngiltere'deki aileye havale |
594
+ | Almanya → Türkiye (EUR → TRY) | Gurbetçi havaleleri |
595
+ | ABD → Türkiye (USD → TRY) | Yurt dışından Türkiye'ye para gönderimi |
596
+ | İngiltere → Türkiye (GBP → TRY) | İngiltere'den Türkiye'ye transfer |
597
+ | Türkiye → Hollanda (TRY → EUR) | Hollanda'ya para transferi |
598
+ | Türkiye → Fransa (TRY → EUR) | Fransa'ya para transferi |
599
+ | Türkiye → Suudi Arabistan (TRY → SAR) | İşçi havaleleri |
600
+ | Türkiye → BAE (TRY → AED) | Dubai ve Abu Dhabi'ye transfer |
601
+
602
+ ---
603
+
604
+ ## Kullanım Senaryoları
605
+
606
+ ### Fintech Uygulamaları
607
+
608
+ Para transferi karşılaştırma özelliğini kendi uygulamanıza entegre edin:
609
+
610
+ ```typescript
611
+ import { karsilastir, saglayiciEkle } from "para-transferi";
612
+
613
+ // API endpoint'iniz
614
+ app.get("/api/karsilastir", async (req, res) => {
615
+ const { gonderen, alici, paraBirimi, hedefParaBirimi, miktar } = req.query;
616
+
617
+ const sonuc = await karsilastir({
618
+ gonderenUlke: gonderen,
619
+ aliciUlke: alici,
620
+ gonderenParaBirimi: paraBirimi,
621
+ aliciParaBirimi: hedefParaBirimi,
622
+ miktar: Number(miktar),
623
+ });
624
+
625
+ res.json(sonuc);
626
+ });
627
+ ```
628
+
629
+ ### Döviz Kuru Takip Botu
630
+
631
+ ```typescript
632
+ import { kurGetir } from "para-transferi";
633
+
634
+ const paraCiftleri = [
635
+ ["TRY", "USD"],
636
+ ["TRY", "EUR"],
637
+ ["TRY", "GBP"],
638
+ ["EUR", "USD"],
639
+ ];
640
+
641
+ for (const [kaynak, hedef] of paraCiftleri) {
642
+ const kur = await kurGetir(kaynak, hedef);
643
+ console.log(`${kaynak}/${hedef}: ${kur.kur}`);
644
+ }
645
+ ```
646
+
647
+ ### Maliyet Uyarı Sistemi
648
+
649
+ ```typescript
650
+ import { enUygun } from "para-transferi";
651
+
652
+ async function maliyetKontrol() {
653
+ const enIyi = await enUygun({
654
+ gonderenUlke: "TR",
655
+ aliciUlke: "DE",
656
+ gonderenParaBirimi: "TRY",
657
+ aliciParaBirimi: "EUR",
658
+ miktar: 10000,
659
+ });
660
+
661
+ if (enIyi && enIyi.toplamMaliyet < 200) {
662
+ console.log("Transfer maliyeti düşük, şimdi gönderme zamanı!");
663
+ }
664
+ }
665
+ ```
666
+
667
+ ---
668
+
669
+ ## Maliyet Hesaplama Mantığı
670
+
671
+ `para-transferi`'nin maliyet hesaplamasını anlamak, sonuçları doğru yorumlamanız için önemlidir:
672
+
673
+ ### Transfer Ücreti
674
+
675
+ Her sağlayıcının ücret yapısı farklıdır:
676
+
677
+ ```
678
+ transferÜcreti = max(minimumÜcret, sabitÜcret + (miktar × yüzdeÜcret / 100))
679
+
680
+ // Maksimum ücret varsa:
681
+ transferÜcreti = min(transferÜcreti, maksimumÜcret)
682
+ ```
683
+
684
+ ### Kur Marjı Maliyeti
685
+
686
+ Bazı sağlayıcılar (Wise hariç) piyasa kurunun altında bir kur uygular:
687
+
688
+ ```
689
+ uyguladigiKur = piyasaKuru × (1 - kurMarjıYüzde / 100)
690
+ kurMarjıMaliyeti = miktar × (kurMarjıYüzde / 100)
691
+ ```
692
+
693
+ ### Toplam Maliyet
694
+
695
+ ```
696
+ toplamMaliyet = transferÜcreti + kurMarjıMaliyeti
697
+ ```
698
+
699
+ ### Alıcı Miktar
700
+
701
+ ```
702
+ alıcıMiktar = (miktar - transferÜcreti) × uyguladigiKur
703
+ ```
704
+
705
+ > **Not:** Wise gibi %0 kur marjı uygulayan sağlayıcılarda toplam maliyet = transfer ücreti olur. OFX ve XE gibi transfer ücreti almayan sağlayıcılarda ise toplam maliyet = kur marjı maliyeti olur.
706
+
707
+ ---
708
+
709
+ ## Veri Kaynakları ve Güvenilirlik
710
+
711
+ | Veri Tipi | Kaynak | Güncelleme |
712
+ |-----------|--------|------------|
713
+ | Döviz kurları | ECB (Avrupa Merkez Bankası) | Günlük (iş günleri) |
714
+ | Yedek kur kaynağı | exchangerate-api.com | Gerçek zamanlı |
715
+ | Sağlayıcı ücretleri | Resmi web siteleri | Paket güncellemeleriyle |
716
+ | Sağlayıcı bilgileri | Resmi belgeler ve lisans kayıtları | Paket güncellemeleriyle |
717
+
718
+ > **Uyarı:** Sağlayıcı ücretleri ve kur marjları zamanla değişebilir. Bu paket genel bir karşılaştırma aracıdır. Kesin tutarlar için transfer öncesinde sağlayıcının resmi sitesini kontrol edin.
719
+
720
+ ---
721
+
722
+ ## Sıkça Sorulan Sorular (SSS)
723
+
724
+ ### Bu paket gerçek para transferi yapıyor mu?
725
+
726
+ Hayır. `para-transferi` yalnızca **karşılaştırma ve hesaplama** kütüphanesidir. Gerçek para transferi yapmaz, sağlayıcı API'lerine bağlanmaz. Transfer yapmak için sağlayıcıların kendi platformlarını kullanmanız gerekir.
727
+
728
+ ### Döviz kurları ne kadar güncel?
729
+
730
+ ECB kurları her iş günü güncellenir. Paket içinde 30 dakikalık bir önbellek mekanizması vardır. `kurAyarla()` ile önbellek süresini değiştirebilirsiniz.
731
+
732
+ ### Kendi sağlayıcımı nasıl eklerim?
733
+
734
+ `saglayiciEkle()` fonksiyonu ile `Saglayici` arayüzüne uygun bir obje geçirerek herhangi bir banka veya fintech servisini ekleyebilirsiniz. Detaylar için [Plugin Sistemi](#plugin-sistemi--özel-sağlayıcı-ekleme) bölümüne bakın.
735
+
736
+ ### Sağlayıcı verileri ne kadar doğru?
737
+
738
+ Veriler sağlayıcıların resmi web sitelerinden derlenmiştir. Ancak ücret yapıları zaman içinde değişebilir. Kritik kararlar için transfer öncesi sağlayıcının güncel ücretlerini doğrulayın.
739
+
740
+ ### CommonJS projelerimde kullanabilir miyim?
741
+
742
+ Evet. Paket hem ESM (`import`) hem CJS (`require`) formatını destekler:
743
+
744
+ ```javascript
745
+ // ESM
746
+ import { karsilastir } from "para-transferi";
747
+
748
+ // CommonJS
749
+ const { karsilastir } = require("para-transferi");
750
+ ```
751
+
752
+ ### Offline çalışır mı?
753
+
754
+ Sağlayıcı listesi, ülke/para birimi verileri ve maliyet hesaplama mantığı offline çalışır. Ancak `karsilastir()`, `hesapla()` ve `kurGetir()` gibi canlı döviz kuru gerektiren fonksiyonlar internet bağlantısına ihtiyaç duyar.
755
+
756
+ ### Hangi Node.js versiyonları destekleniyor?
757
+
758
+ Node.js 18 ve üstü. Paket native `fetch()` API'sini kullandığından Node.js 18+ gereklidir.
759
+
760
+ ---
761
+
762
+ ## Gereksinimler
763
+
764
+ - **Node.js 18** veya üstü
765
+ - İnternet bağlantısı (canlı kur fonksiyonları için)
766
+
767
+ ---
768
+
769
+ ## Lisans
770
+
771
+ MIT License — Ticari ve kişisel projelerde serbestçe kullanabilirsiniz.
772
+
773
+ ## Katkıda Bulunma
774
+
775
+ Katkılarınızı bekliyoruz!
776
+
777
+ 1. Bu repoyu fork edin
778
+ 2. Yeni bir branch oluşturun (`git checkout -b yeni-ozellik`)
779
+ 3. Değişikliklerinizi commit edin (`git commit -m "Yeni sağlayıcı eklendi"`)
780
+ 4. Branch'i push edin (`git push origin yeni-ozellik`)
781
+ 5. Pull Request oluşturun
782
+
783
+ Büyük değişiklikler için önce bir issue açarak tartışmaya başlayın.
784
+
785
+ ---
786
+
787
+ ## İlgili Bağlantılar
788
+
789
+ - [paratransferleri.com](https://paratransferleri.com) — Uluslararası para transferi karşılaştırma platformu
790
+ - [Wise](https://wise.com) — Gerçek orta piyasa kuru ile transfer
791
+ - [Remitly](https://www.remitly.com) — Hızlı uluslararası para transferi
792
+ - [XE](https://www.xe.com) — Döviz kuru ve para transferi
793
+ - [OFX](https://www.ofx.com) — Büyük tutarlı transferler
794
+ - [WorldRemit](https://www.worldremit.com) — Çoklu teslimat seçenekleri
795
+ - [Revolut](https://www.revolut.com) — Dijital bankacılık ve transfer
796
+
797
+ ---
798
+
799
+ [paratransferleri.com](https://paratransferleri.com) tarafından geliştirilmiştir.