Sistem Anda memegang uangnya. Sistem kami memegang hitungannya.
Platform adalah sebuah perhitungan dan sebuah catatan. Ia menerima apa yang terjadi di sistem Anda, menghitung berapa yang terutang, lalu mengirim instruksi kembali. Ia tidak pernah duduk di jalur uang.
Satu spesifikasi yang diterbitkan, dan dua klien yang ditulis mengikutinya.
Sebuah dokumen OpenAPI di repositori, satu klien TypeScript dan satu klien Dart. Insinyur Anda bisa membaca seluruh permukaannya sebelum ada yang menjadwalkan pertemuan.
OpenAPI
api/openapi.yaml
Klien TypeScript
sdk/typescript
Klien Dart
sdk/dart
Peristiwa yang bisa Anda percayai akan sampai.
Sebelas jenis peristiwa, diantrekan dalam transaksi yang sama dengan perubahan status yang menghasilkannya.
- 01
Outbox transaksional, bukan POST tembak-lalu-lupa
Peristiwa ditulis di dalam transaksi yang menyebabkannya, lalu dikirim dari antrean bersewa. Tidak ada jeda ketika sistem Anda diberi tahu tentang sesuatu yang kemudian dibatalkan buku besar, dan tidak ada jeda ketika buku besar sudah menetapkan tetapi tidak ada yang diberi tahu.internal/outbox
- 02
Bertanda tangan, dengan id kunci yang bisa dirotasi
Tiap pengiriman membawa tanda tangan HMAC-SHA256 dengan id kunci dan stempel waktu. Rotasinya bertindih: kunci lama tetap berlaku selagi Anda berpindah, jadi merotasi sebuah rahasia bukan gangguan layanan yang harus Anda jadwalkan.internal/outbox/sign.go
- 03
Peristiwa pembayaran lebih dulu
Instruksi penarikan tidak mengantre di belakang tumpukan notifikasi. Kelas pengiriman adalah jalur terpisah, dan pembayaran adalah jalur yang membawa instruksi soal uang.internal/events
- 04
Id deterministik, jadi menjalankan ulang tidak berefek ganda
Menjalankan ulang sebuah handler akan mengantrekan id peristiwa yang sama, dan outbox membuang duplikatnya. Ini pengiriman minimal-sekali yang benar-benar bisa Anda ulang, bukan pengiriman minimal-sekali yang harus Anda hati-hati dengannya.internal/events · internal/outbox
- 05
Penjaga lalu lintas keluar pada URL Anda
Tujuannya dikonfigurasi operator, dan itu saja sudah menjadikannya jalur SSRF secara konstruksi. Pengirim memeriksa URL sebelum permintaan dikirim dan memblokir alamat-alamat yang memang Anda harapkan diblokir.internal/outbox/ssrf.go
- 06
Backoff, parkir, dan sebuah rekonsiliator
Kegagalan mundur bertahap lalu akhirnya diparkir, alih-alih menggempur tujuan yang sedang mati. Sebuah rekonsiliator lintas sistem menangkap peristiwa yang benar-benar hilang, alih-alih memercayai antrean itu sempurna.internal/outbox · internal/reconciler
Perintah yang berjalan tepat sekali, berkunci pada id catatan Anda.
Anda memberi tahu platform bahwa terjadi sebuah pembelian, terjadi pengembalian dana, seorang anggota terverifikasi. Mengulang kirim itu gratis, karena kuncinya milik Anda.
Tiap perintah masuk bersifat idempoten per ruang kerja dan per nomor referensi, dan jawabannya disimpan sementara. Kirim pembelian yang sama dua kali dan panggilan kedua mengembalikan jawaban panggilan pertama — ia tidak membuat pembelian kedua, dan tidak membayar putaran komisi kedua atas pembelian yang pertama.
Kontrak galatnya eksplisit, karena “diulang atau tidak” adalah pertanyaan yang benar-benar harus dijawab sebuah integrasi klien. Galat yang dikembalikan melepaskan tanda terima dan Anda boleh mengulang. Penolakan dengan kode 4xx bersifat final dan disimpan sementara: perintah itu ditolak atas isinya sendiri, dan mengulangnya akan ditolak lagi.
internal/commands · internal/command
Bayarlah dengan cara yang sudah Anda pakai.
Platform memesan baris buku besar yang persis lalu memberi instruksi. Yang mengeksekusi pembayarannya adalah Anda.
Kalau Anda punya sistem pembayaran, ia menerima instruksi penarikan sebagai peristiwa kelas pembayaran dan memanggil balik untuk melunasi atau menyatakan gagal. Kalau tidak punya, konsol pembayaran memuat daftar yang terutang, Anda membayar dari dompet Anda sendiri, lalu mencatat harga eksekusi dan nomor transaksi Anda sendiri. Pembayaran yang dicatat tanpa nomor referensi ditolak — ia tidak akan pernah bisa direkonsiliasi dengan dompet Anda, jadi menerimanya hanya berarti rekonsiliasi akan gagal lebih belakangan dan lebih jauh.
internal/claims · internal/httpapi/payouts.go
Domain Anda sendiri, dibuktikan sebelum disiapkan.
Klaim nama hostnya, terbitkan catatan TXT yang dihasilkan platform, dan penyiapan berjalan begitu catatan itu bisa diresolusi.
Urutannya penting dan justru itulah intinya. Mengikat sebuah nama host — atau menambahkan sebuah domain ke daftar sah penyedia identitas — sebelum kepemilikannya terbukti akan membuat siapa pun yang benar-benar memiliki nama itu menerima proses masuk yang seharusnya untuk Anda. Jadi tidak ada yang disiapkan, dan tidak ada yang ditambahkan ke daftar izin masuk, sampai catatan itu bisa diresolusi. Sebuah proses latar mengambilnya dalam waktu kurang dari semenit.
internal/domains
Ambil sandbox dan arahkan ke sistem staging Anda.
Gratis di semua paket, dengan permukaan API, peristiwa, dan tanda tangan yang sama seperti produksi.