Nasa sistema mo ang pera. Nasa amin ang aritmetika.
Isang kuwenta at isang talaan ang platform. Tinatanggap nito ang nangyari sa sistema mo, kinukuwenta kung magkano ang dapat bayaran, at ibinabalik ang tagubilin. Kailanman ay hindi ito nauupo sa daan ng pera.
Isang inilathalang spec, at dalawang client na isinulat ayon dito.
Isang OpenAPI na dokumento sa repository, isang TypeScript client at isang Dart client. Kayang basahin ng inhinyero mo ang buong ibabaw bago pa may mag-book ng miting.
OpenAPI
api/openapi.yaml
TypeScript client
sdk/typescript
Dart client
sdk/dart
Mga event na mapagkakatiwalaan mong darating.
Labing-isang uri ng event, ipinipila sa parehong transaksyon ng pagbabago ng estadong lumikha sa kanila.
- 01
Isang transactional outbox, hindi POST na binitawan at kinalimutan
Isinusulat ang event sa loob mismo ng transaksyong nagdulot nito, at ipinapadala pagkatapos mula sa isang pilang may lease. Walang bintanang nasabihan ang sistema mo tungkol sa isang bagay na kalaunan ay ibinalik ng ledger, at walang bintanang nakapagtala na ang ledger pero walang nasabihan.internal/outbox
- 02
May pirma, at maiikot ang key id
May dalang HMAC-SHA256 na pirma ang bawat paghahatid, kasama ang key id at timestamp. Nagsasapawan ang pag-ikot: may bisa pa rin ang lumang key habang lumilipat ka, kaya hindi downtime na kailangang iiskedyul ang pag-ikot ng isang sikreto.internal/outbox/sign.go
- 03
Unang dumadaan ang mga event ng pagbabayad
Hindi nakapila ang tagubilin ng claim sa likod ng bunton ng mga abiso. Magkahiwalay na linya ang mga klase ng paghahatid, at ang pagbabayad ang linyang may dalang tagubilin tungkol sa pera.internal/events
- 04
Tiyak na mga id, kaya walang epekto ang muling pagpapatakbo
Ang muling pagpapatakbo ng isang handler ay muling magpipila ng parehong event id, at inaalis ng outbox ang kambal. Ito ang at-least-once na paghahatid na talagang kaya mong ulitin, hindi ang at-least-once na kailangan mong pag-ingatan.internal/events · internal/outbox
- 05
Isang egress guard sa URL mo
Ang destinasyon ay itinatakda ng operator, at iyon na mismo ang gumagawa ritong daan ng SSRF. Sinusuri ng dispatcher ang URL bago ang request at hinaharangan ang mga address na inaasahan mong haharangan.internal/outbox/ssrf.go
- 06
Backoff, paradahan, at isang reconciler
Umaatras muna ang mga pagkabigo at kalaunan ay ipinaparada, sa halip na pukpukin ang destinasyong bagsak. May cross-system reconciler na humuhuli sa event na talagang nawala, sa halip na magtiwalang perpekto ang pila.internal/outbox · internal/reconciler
Mga command na tumatakbo nang eksaktong minsan, naka-key sa record id mo.
Sinasabi mo sa platform na may nangyaring bili, may nangyaring refund, may miyembrong na-verify. Libre ang pag-uulit, dahil sa iyo ang susi.
Bawat papasok na command ay hindi nadodoble kada workspace at kada reference, at nakaimbak ang sagot. Ipadala ang parehong bili nang dalawang beses at ibabalik ng pangalawang tawag ang sagot ng una — hindi ito gumagawa ng pangalawang bili, at hindi ito nagbabayad ng pangalawang ikot ng komisyon sa una.
Tahasan ang kasunduan tungkol sa error, dahil “uulitin ba o hindi” ang tanong na talagang kailangang sagutin ng isang client integration. Ang ibinabalik na error ay nagpapakawala ng resibo at puwede kang mag-ulit. Ang pagtanggi na may 4xx na code ay katapusan at nakaimbak: tinanggihan ang command batay sa nilalaman nito, at tatanggihan ulit kapag inulit.
internal/commands · internal/command
Magbayad sa paraang ginagawa mo na.
Nirereserba ng platform ang eksaktong mga linya sa ledger at nag-uutos. Sa iyo ang nagsasagawa ng bayad.
Kung may settlement host ka, tinatanggap nito ang tagubilin ng claim bilang event ng klaseng pagbabayad at tumatawag pabalik para magbayad o magsabing bigo. Kung wala, inililista ng payouts console ang mga utang, ikaw ang nagbabayad mula sa sarili mong wallet, at itinatala mo ang naisagawang presyo at ang sarili mong reference ng transaksyon. Tinatanggihan ang bayad na naitala nang walang reference — hindi ito kailanman maipagkakatugma sa wallet mo, kaya ang pagtanggap nito ay nangangahulugan lang na mas huli at mas malayo mabibigo ang pagtutugma.
internal/claims · internal/httpapi/payouts.go
Ang sarili mong domain, pinatunayan bago i-provision.
Angkinin ang hostname, ilathala ang TXT record na binubuo ng platform, at mangyayari ang provisioning sa sandaling ma-resolve ito.
Mahalaga ang pagkakasunod at iyon ang buong punto. Ang pagtali ng hostname — o ang pagdagdag ng domain sa listahan ng pinapahintulutan ng identity provider — bago mapatunayan ang kontrol ay magpapadala ng mga sign-in na para sana sa iyo sa taong tunay na may-ari ng pangalang iyon. Kaya walang ipinoprovision, at walang idinadagdag sa listahan ng pinapayagang mag-sign in, hangga't hindi nare-resolve ang record. Kinukuha ito ng background provisioner sa loob ng isang minuto.
internal/domains
Kumuha ng sandbox at ituro ito sa staging na sistema.
Libre sa lahat ng plano, may kaparehong ibabaw ng API, kaparehong mga event at kaparehong pirma tulad ng production.