Jetimza MVP Teknik Strateji & API Sözleşmesi
MVP kapsamı, imza.io SignGate entegrasyonu, Jet Token ledger kuralları, jet-api sözleşmesi, veri modeli ve teslimat sırası. Ana Jetimza Ürün Stratejisi v2.0 dokümanının teknik uygulama karşılığıdır.
Kullanıcı yaklaşık 1 dakikada üye olur, aylık 10 ücretsiz Jet Token bakiyesini görür ve dört dijital güven işleminden birini tamamlar: mobil imza, e-imza, doğrulama, zaman damgası.
Yönetici Özeti
Bu doküman, Jetimza Ürün Stratejisi v2.0'da tanımlanan MVP'nin teknik uygulama çerçevesini belirler. Ana strateji ne yapılacağını söyler; bu doküman hangi servisle, hangi sözleşmeyle ve hangi sırayla yapılacağını sabitler.
- MVP dört dijital güven yeteneği sunar: mobil imza, e-imza, doğrulama, zaman damgası.
- İmza motoru yazılmaz. Jetimza, imza.io SignGate v2 REST API'sinin müşterisidir.
- Backend
imzaio-jet-api(.NET 10 · Postgres · EF Core · Valkey); mimari sade tutulur — Controller → DbContext doğrudan. - Üyelik telefon + SMS OTP ile şifresizdir; oturum JWT ile taşınır.
- Jet Token append-only ledger üzerinde çalışır; işlem başında hold, sonucunda commit veya release uygulanır.
- Tüm zaman değerleri UTC saklanır ve taşınır; yerelleştirme sunum katmanında yapılır.
- Jetimza, imza.io Platform ürün ailesinden bağımsızdır; platform servisleriyle ilişkisi yoktur.
MVP, imza.io altyapısının bugün mevcut olan yüzeyiyle çıkar. Dört yeteneğin gerçek kullanıcıyla çalıştığını doğrulamak önceliklidir; kapsamı genişleten her kalem bunun arkasına alınır.
MVP Kapsamı — Dört Dijital Güven Yeteneği
Her yetenek uçtan uca çalışır durumda teslim edilir: ön-uçuş kontrolü, işlem başlatma, durum takibi, sonuç saklama, token muhasebesi ve kullanıcı dostu hata mesajı dahil.
① Mobil İmza
- Kayıtlı numara doğrudan kullanılır — kullanıcı hiçbir bilgi girmez
- Turkcell, Vodafone, Türk Telekom
- Ön-uçuş: mobil sertifika var mı
- PAdES / CAdES / XAdES
- BES seviyesi (T/XL/A hazır)
- Operatör onayı beklenirken durum ekranı
② E-İmza
- Easy deeplink ile açılır, kurulu değilse indirmeye yönlendirilir
- Ön-uçuş: Easy açık mı, kart takılı mı
- Sertifika slot seçimi (thumbprint)
- PAdES görünür imza (ad, tarih, unvan)
- PIN girişi Easy içinde, güvenli
- Belge parmak izi + kısa doğrulama kodu
③ Doğrulama
- PAdES / CAdES / XAdES otomatik tespit
- İmzacı adı, kimlik no, imza zamanı
- Sertifika geçerliliği ve iptal durumu
- Çoklu ve seri (counter) imza görünümü
- Denetim kalemleri (validation checks)
- Anlaşılır Türkçe sonuç özeti
④ Zaman Damgası
- PDF doküman zaman damgası (RFC 3161)
- İmza gerektirmez — kart/PIN yok
- Görünür damga seçeneği
- Anında sonuç (senkron)
- Damgalı belge geçmişe kaydedilir
Dört yetenek paralel geliştirilir; ancak ilk gerçek imzanın tamamlanması ana kritik hattı oluşturur.
Sistem Mimarisi
Jetimza kullanıcı deneyimini, üyeliği, Jet Token muhasebesini ve işlem geçmişini yönetir. Kriptografik imza, doğrulama ve zaman damgası imza.io SignGate tarafından üretilir. Jetimza hiçbir imza işlemini kendi başına gerçekleştirmez.
ImzaIo.Jet.Api (istek/yanıt) · ImzaIo.Jet.Worker (imza işçisi, gözcü,
zamanlanmış işler) · ImzaIo.Jet.Notifier (SMS/bildirim gönderimi).
Servisler birbirini doğrudan çağırmaz; iletişim Postgres tabloları üzerinden
LISTEN/NOTIFY + SKIP LOCKED ile yürür.
Ayrıntı: Jetimza MVP — Servis & Kod Mimarisi dokümanı./v2/login/v2/sign-file/{pades|cades|xades}/v2/validate-file/v2/pdf-timestamp/v2/check-mobile-cert/v2/check-session/v2/check-token/v2/token-status/v2/get-fingerprintSignGate imza sonucunu yanıt gövdesinde döner; callback göndermez. E-imzada çağrı kullanıcı PIN girene, mobil imzada operatör onayı gelene kadar açık kalır. Bu nedenle jet-api imzayı arka plan işi olarak yürütür ve web uygulaması işlem durumunu sorgular (Bölüm 08). Tarayıcının HTTP isteğine bağlanan bir tasarım; mobil ağda kopma, proxy zaman aşımı ve sekme kapanınca askıda kalan token üretirdi.
SignGate v2 Entegrasyon Yüzeyi
| Jetimza yeteneği | SignGate v2 endpoint | Not |
|---|---|---|
| Kimlik | POST /v2/login | clientId + clientSecret → JWT (1 saat). Valkey'de cache'lenir. |
| ① Mobil imza | POST /v2/sign-file/{format} | channel: "mobileid", identifier = telefon |
| ① ön-uçuş | POST /v2/check-mobile-cert | Sertifika var mı + operatör. Telefon formatı 5XXXXXXXXX (10 hane, ülke kodsuz) |
| ② E-imza | POST /v2/sign-file/{format} | channel: "easy", identifier = TCKN |
| ② ön-uçuş — Easy açık mı | POST /v2/check-session | Aktif masaüstü oturumu |
| ② ön-uçuş — kart takılı mı | POST /v2/check-token | Token bağlantı durumu |
| ② sertifika seçimi | POST /v2/token-status | Karttaki sertifikalar: sahip adı, geçerlilik, thumbprint |
| ③ Doğrulama | POST /v2/validate-file | İmzacı bilgisi, sertifika durumu, denetim kalemleri |
| ③ sertifika doğrulama | POST /v2/validate-certificate | Zincir + iptal kontrolü |
| ④ Zaman damgası | POST /v2/pdf-timestamp | RFC 3161, imzasız; görünür damga opsiyonel |
| Belge parmak izi | POST /v2/get-fingerprint | SHA-256 — kısa doğrulama kodunun kaynağı |
İmza isteğinin taşıdığı alanlar
Üyelik & Jet Token Modeli
| Konu | Kural | Uygulama |
|---|---|---|
| Hesap | Telefon + SMS OTP, şifresiz | OTP kodu asla düz saklanmaz; HMAC-SHA256 + pepper. Deneme sayacı ve hız sınırı uygulanır. |
| Kullanıcı adı | Benzersiz, üyelik anında seçilir | Veritabanı seviyesinde benzersizlik kısıtı |
| Aylık bakiye | Her ay 10 Jet Token — devretmez | Tanımlama lazy yapılır: kullanıcı bakiyeye dokunduğunda, idempotent anahtarla. Zamanlanmış görev yok. Ay sınırı referans saat diliminde hesaplanır, UTC olarak saklanır. |
| Devretmeme | Kullanılmayan token ay sonunda yanar | Aylık paketin son kullanma tarihi ayın son anıdır; harcama daima en erken dolan paketten yapılır. Bir sonraki ay yeniden 10 token tanımlanır. |
| Kimlik numarası | Şifreli saklanır | KVKK aydınlatma metni bu veriyi kapsayacak biçimde onaylatılır. İlk e-imzada alınır, sonraki imzalarda sorulmaz. API yanıtlarında daima maskeli döner. |
| Belge saklama | İşlem sonrası kısa süre | Belgenin işlemden sonra ~15 dakika tutulması yönelimi var. İşlem kaydı süresiz kalır; belgenin kendisi süre dolunca indirilemez — bu sınır kullanıcıya imza anında söylenir. |
| Ek talep | Sabit 10 token, aynı anda 1 açık talep | Kısmi benzersizlik indeksi ile veritabanında garanti; MVP'de onay doğrudan veritabanından verilir |
| Jet Davet | Davet edene 30 gün geçerli +10 token | Davet edilen kişi başına yalnızca bir kez ödül; 3. kişi verisi toplanmaz |
| İşlem bedeli | Mobil imza / e-imza / zaman damgası = 1 token · doğrulama = ücretsiz | Doğrulama huni etkisi için ücretsizdir |
Token muhasebesi: hold → commit / release
Bakiye süresi dolmamış token paketlerinin toplamıdır; her hareket append-only ledger'a yazılır. İşlem başlarken 1 token hold edilir; işlem başarılıysa commit, başarısız/iptal/süre aşımı ise release edilir.
Başarısız imza kullanıcıya bedel yazmaz; buna karşılık bakiyesi biten kullanıcı eşzamanlı çok sayıda işlem açıp bakiyeyi aşamaz. İki riski birlikte kapatan tek model budur.
jet-api Sözleşmesi
Taban adres https://api.jetimza.com/v1. Hata gövdeleri RFC 7807 biçimindedir.
API'nin ürettiği ve kabul ettiği tüm zaman değerleri UTC'dir ve
ISO-8601 Z ekiyle taşınır
(2026-07-31T20:59:59Z). Veritabanında saat dilimi duyarlı tip
kullanılır. Yerel saate çevirme yalnızca sunum katmanında yapılır.
Sabit bir +03:00 ofseti taşımak, yaz saati uygulayan ülkelerde
ve birden çok bölgeye dağıtımda yanlış hesap üretir; ürün ileride Türkiye dışına açıldığında
geriye dönük veri düzeltmesi gerektirirdi.
Tek istisna iş takvimidir: "aylık 10 token"ın ay sınırı bir takvim ayıdır,
mutlak bir an değil. Ay sınırı yapılandırılabilir bir referans saat dilimine bağlanır
(MVP: Europe/Istanbul) ve hesaplandıktan sonra UTC olarak saklanır.
Üyelik & oturum
Profil & izinler
Jet Token
① Mobil imza · ② E-imza
E-imza kanalı kimlik numarası ile yönlendiğinden TCKN gereklidir. KVKK aydınlatma metni bu
veriyi kapsayacak biçimde onaylatılacağı için ilk e-imzada bir kez alınır ve şifreli
saklanır; sonraki imzalarda tekrar sorulmaz. Düz metin ne log'a ne API yanıtına
düşer — gösterim daima maskelidir (123****8901).
İmza tamamlandığında sertifikadan dönen kimlik numarası kullanıcının beyanıyla karşılaştırılır;
eşleşirse numara doğrulanmış olarak işaretlenir. Mobil imzada bu alan hiç istenmez.
③ Doğrulama · ④ Zaman damgası senkron
Bu iki işlem kart, PIN veya operatör onayı gerektirmediği için doğrudan sonuç döner.
İşlemlerim
Veri Modeli
| Tablo | Sorumluluk | Kritik kural |
|---|---|---|
users | Hesap, telefon, kullanıcı adı, kimlik | Telefon ve kullanıcı adı benzersiz. Kimlik numarası şifreli tutulur; arama için anahtarlı özeti, sertifikadan teyit anı ayrıca saklanır. |
otp_challenges | OTP doğrulama oturumları | Kod hash'li; deneme sayacı ve son kullanma zamanı zorunlu. Kötüye kullanım denetimi için kalıcı. |
refresh_tokens | Oturum yenileme | Hash'li saklanır, rotasyonlu, iptal edilebilir |
consent_documents · user_consents | Sözleşme metinleri ve onaylar | Sürüm + onay zaman damgası + IP; kullanıcı-doküman çifti benzersiz |
token_grants | Bakiye kaynağı (paketler) | Her paketin türü, kalan miktarı ve son kullanma tarihi vardır. Aylık tanımlama idempotent anahtarla tekilleştirilir. |
token_ledger | Append-only hareket kaydı | Silinmez, güncellenmez. Her satırda hareket sonrası bakiye ve idempotent anahtar. |
token_requests | Ek token talepleri | Kısmi benzersizlik indeksi ile aynı anda tek açık talep veritabanında garanti |
invites · invite_redemptions | Jet Davet ve ödüller | Davet edilen kullanıcı başına tek ödül; 3. kişi verisi tutulmaz |
transactions | Dört işlem tipi tek tabloda | Tip, kanal, format, belge özeti, sertifika bilgisi, hold/commit bağlantısı, sonuç dosyası |
transaction_events | Append-only durum geçişleri | Her geçişin kaynağı kaydedilir: api · worker · watchdog · user |
feedback | Deneyimini Paylaş kayıtları | Kategori, durum takibi, iç not |
Para benzeri her şey (token) ve hukuki sonuç doğuran her şey (işlem, onay) append-only tutulur. Bakiye hesaplanan bir değerdir, güncellenen bir sayaç değil; böylece her bakiye farkı ledger üzerinden geriye doğru açıklanabilir. Tüm zaman kolonları saat dilimi duyarlı tiptedir ve UTC tutar.
Bugün saklanmayan bazı veriler ileride istenebilir. Şema bunları eklemeyi göçle
mümkün kılacak biçimde tasarlanır, ancak MVP'de kolon açılmaz — kullanılmayan
kişisel veri kolonu tutmak KVKK açısından gereksiz risktir.
Başlıcaları: kimlik numarası (e-imzayı hatırlama), tercih edilen sertifika parmak izi,
kullanıcının varsayılan imza kanalı, tercih edilen görünür imza şablonu ve saat dilimi.
Her biri users tablosuna eklenebilir; hiçbiri işlem, ledger ya da
denetim tablolarının yapısını değiştirmez.
İşlem Durum Makinesi
Aşağıdaki durumlar imza işlemleri için geçerlidir. Doğrulama ve zaman damgası kullanıcı etkileşimi gerektirmediğinden doğrudan sonuçlanır.
Bir watchdog, signing durumunda takılan kayıtları süre aşımına
uğratır ve token'ı iade eder. Böylece SignGate yanıtı hiç gelmese bile kullanıcının bakiyesi
kilitli kalmaz. Bu, callback bileşeni geldiğinde de yerinde kalacak bir emniyet katmanıdır.
Kullanıcı Akışları
Üyelik & giriş
① Mobil imza — en düşük sürtünme
Kullanıcı mobil imzasının bağlı olduğu numarayla üye olduğu için numara sunucu tarafında zaten bilinir ve doğrudan SignGate'e iletilir. Kanal seçimi, numara girişi ya da kimlik adımı yoktur: yükle, imzala, telefonda onayla.
② E-imza — masaüstü, USB token
Web uygulaması Easy'yi özel protokol bağlantısıyla kendisi açar; kullanıcıdan uygulamayı bulup çalıştırması beklenmez. Protokol yanıt vermezse — yani Easy kurulu değilse — kullanıcı doğrudan indirme adresine yönlendirilir, kurulum sonrası akış kaldığı yerden devam eder. TCKN yalnızca ilk e-imzada istenir; şifreli saklandığı için sonraki imzalarda bu adım hiç görünmez.
③ Doğrulama · ④ Zaman damgası
Kart ya da mobil imzası olmayan kullanıcı da doğrulama ve zaman damgası ile ilk değeri hemen yaşar. Bu, üyelik → ilk işlem dönüşümünü yalnızca sertifika sahiplerine bağlı olmaktan çıkarır.
Teslimat Dalgaları
| Dalga | jet-api çıktısı | Birlikte yürüyen |
|---|---|---|
| Dalga 1 | Üyelik, OTP, JWT, kullanıcı adı, profil, izin kaydı | Kullanım koşulları, KVKK, prod ortamı |
| Dalga 2 | Token ledger + aylık tanımlama, belge yükleme, ① mobil imza ve ② e-imza uçtan uca | Loglama, hata takibi, destek hattı |
| Dalga 3 | ③ doğrulama, ④ zaman damgası, işlem geçmişi, ek token talebi | Talep yönetimi operasyonu |
| Dalga 4 | Jet Davet ve ödül token'ı, Deneyimini Paylaş | Referral kontrolü, gizlilik denetimi |
| Dalga 5 | Performans, hata mesajı iyileştirmeleri, pilot | Kontrollü kullanıcı alımı |
Mobil imza ve e-imza Dalga 2'de birlikte çıkar; ikisi de aynı SignGate çağrısını ve aynı işlem kaydını kullanır, yalnızca kanal ve ön-uçuş farklıdır. Doğrulama ve zaman damgası senkron ve daha basit oldukları için Dalga 3'te eklenir.
Walking Skeleton
İlk teslimat, tek bir dikey kesitin uçtan uca gerçek çalışmasıdır. Yalnızca SignGate ve SMS çağrıları arayüz arkasına alınır; ledger, durum makinesi, arka plan işi ve watchdog gerçek kodla yazılır ve test edilir.
- Telefon OTP isteği ve doğrulaması — hash'li kod, deneme sayacı, hız sınırı
- Kayıt — kullanıcı adı benzersizliği, sözleşme onayı
- JWT ve yenileme rotasyonu
- Profil ve bakiye — aylık 10 token tanımlaması burada gerçekten çalışır
- Token hareket dökümü
- İmza başlatma — belge alımı, özet hesabı, kısa doğrulama kodu, token hold, kuyruk
- Arka plan işçisi — durum ilerletme, token commit / release, olay kaydı
- İşlem sorgulama ve geçmiş
- Watchdog — takılan işlemi süre aşımına uğratıp token iadesi
- Migration, yerel çalışma ortamı, sağlık uçları, sürekli entegrasyon
SignGate erişim bilgileri beklenirken bloke olunmaz. Sözleşme, ledger ve durum makinesi tamamlandığında SignGate'e bağlanmak tek bir sınıfın değişmesi anlamına gelir; ardından jet-web hiçbir sahte veriye yatırım yapmadan doğrudan gerçek API'ye bağlanır.
Açık Kararlar
| Konu | Durum / Öneri | Etiket |
|---|---|---|
| SMS OTP sağlayıcısı | Değerlendiriliyor. jet-api sağlayıcıdan bağımsız bir gönderim arayüzü ile yazılır; seçim geldiğinde tek bir uygulama sınıfı eklenir. | Açık Karar |
| SignGate test ortamı ve erişim bilgileri | Ortam ve tenant/api_client kaydı imza.io tarafından açılacak. Gelene kadar geliştirme sahte istemciyle ilerler. | Bekleniyor |
| Kimlik numarası | Şifreli saklanır. KVKK aydınlatma metni bu veriyi kapsayacak biçimde onaylatılacak. İlk e-imzada alınır, sonra sorulmaz; gösterim maskeli. | Karar verildi |
| Belge saklama süresi | İşlem sonrası ~15 dakika yönelimi. Netleşmesi gereken: kaynak belge ile imzalı çıktı aynı süreye mi tabi, ve sınırın kullanıcıya nerede anlatılacağı. | Açık Karar |
| Ücretsiz token devri | Devretmez. Her ay 10 adet tanımlanır, kullanılmayan ay sonunda yanar. | Karar verildi |
| Zaman dilimi | UTC. Saklama ve API transferi UTC; yerelleştirme sunumda. Ay sınırı referans saat diliminde hesaplanır. | Karar verildi |
| Doğrulamanın ücretsizliği | Ücretsiz önerilir; token asıl değere (imza) saklanır. | Öneri |
| Ek token talep sıklığı | Aynı anda 1 talep, sabit 10 token. Sıklık limiti pilotta netleşecek. | Açık Karar |
| Dağıtım hedefi | jet-api bir .NET servisidir; hedef ortam belirlenecek. Walking skeleton'ı bloke etmez. | Sonra |
| Ücretli paket geçişi | MVP dışı; sonraki faz verilerine göre değerlendirilecek. | Ertelendi |
Jetimza MVP'si, bugün mevcut olan imza.io altyapısıyla gerçek kullanıcıya gerçek imza attırır. Eksik bileşenler MVP'yi beklemez; MVP onları bekler hâle gelmez.