Axum के साथ Rust में उच्च-प्रदर्शन वेबहुक सत्यापन। अपने Rust एप्लिकेशन में मिनटों में विज़िटर पहचान, बॉट डिटेक्शन और smart signals जोड़ें।
अपने पसंदीदा पैकेज मैनेजर के साथ अपने प्रोजेक्ट में SDK जोड़ें।
npm install axumyarn add axumpnpm add axumन्यूनतम सेटअप के साथ चालू और तैयार हो जाएँ।
use axum::{body::Bytes, http::HeaderMap, routing::post, Router};async fn webhook(headers: HeaderMap, body: Bytes) -> &'static str { // verify headers["x-tracio-signature"] against body, then act println!("{}", String::from_utf8_lossy(&body)); "OK"}#[tokio::main]async fn main() { let app = Router::new().route("/webhook/tracio", post(webhook)); let listener = tokio::net::TcpListener::bind("0.0.0.0:3000").await.unwrap(); axum::serve(listener, app).await.unwrap();}एरर हैंडलिंग, लोडिंग स्थितियों और उन्नत कॉन्फ़िगरेशन के साथ प्रोडक्शन-तैयार पैटर्न।
use axum::{body::Bytes, http::{HeaderMap, StatusCode}, routing::post, Router};use hmac::{Hmac, Mac};use sha2::Sha256;use serde::Deserialize;type HmacSha256 = Hmac<Sha256>;#[derive(Deserialize)]struct Bot { result: String,}#[derive(Deserialize)]struct Event { #[serde(rename = "visitorId")] visitor_id: String, bot: Bot,}// Recompute the HMAC-SHA256 over "<t>.<rawBody>" and compare it.fn verify(body: &[u8], header: &str, secret: &[u8]) -> bool { let (mut t, mut v1) = ("", ""); for kv in header.split(',') { match kv.split_once('=') { Some(("t", val)) => t = val, Some(("v1", val)) => v1 = val, _ => {} } } let mut mac = HmacSha256::new_from_slice(secret).unwrap(); mac.update(t.as_bytes()); mac.update(b"."); mac.update(body); match hex::decode(v1) { Ok(sig) => mac.verify_slice(&sig).is_ok(), Err(_) => false, }}async fn webhook(headers: HeaderMap, body: Bytes) -> Result<&'static str, StatusCode> { let secret = std::env::var("TRACIO_WEBHOOK_SECRET").unwrap_or_default(); let sig = headers .get("x-tracio-signature") .and_then(|v| v.to_str().ok()) .unwrap_or(""); if !verify(&body, sig, secret.as_bytes()) { return Err(StatusCode::UNAUTHORIZED); } let event: Event = serde_json::from_slice(&body).map_err(|_| StatusCode::BAD_REQUEST)?; if event.bot.result == "bot" { println!("flagging bot visitor {}", event.visitor_id); } Ok("OK")}#[tokio::main]async fn main() { let app = Router::new().route("/webhook/tracio", post(webhook)); let listener = tokio::net::TcpListener::bind("0.0.0.0:3000").await.unwrap(); axum::serve(listener, app).await.unwrap();}SDK को आरंभ और कॉन्फ़िगर करने के लिए सभी उपलब्ध विकल्प।
publicKeystringडैशबोर्ड से आपकी पब्लिक की — ब्राउज़र में भेजना सुरक्षितendpointstringप्रॉक्सी-रूटेड डिप्लॉयमेंट के लिए कस्टम एंडपॉइंट URL — स्पष्ट URL region पर भारी पड़ता हैregionstringडेटा रीजन: us या eutimeoutMsnumberपूरी getResult() कॉल के लिए टाइमआउट, मिलीसेकंड मेंlinkedIdstringसाइन-इन यूज़र के लिए आपका आंतरिक अकाउंट ID, ताकि एक ही डिवाइस साझा करने वाली विज़िट्स जोड़ी जा सकेंtagstringपहचान अनुरोध के साथ जुड़ा मुक्त-रूप लेबल, जैसे checkout या logindebugbooleanस्क्रिप्ट लाइफ़साइकल और नेटवर्क गतिविधि को ब्राउज़र कंसोल में लॉग करता हैscriptUrlstringएजेंट स्क्रिप्ट URL का पूरा ओवरराइड — सेल्फ-होस्टिंग या Subresource Integrity के लिएपूर्ण API संदर्भ, webhook कॉन्फ़िगरेशन और उन्नत गाइड के साथ गहराई में जाएँ।
पूर्ण API संदर्भ, इंटीग्रेशन गाइड और सर्वोत्तम अभ्यास।
रीयल-टाइम इवेंट डिलीवरी, पेलोड स्कीमा और सिग्नेचर सत्यापन।
हर डिवाइस पहचान के लिए रीयल-टाइम इवेंट सूचनाएँ कॉन्फ़िगर करें।
अपने Rust एप्लिकेशन में 5 मिनट से भी कम समय में Device Fingerprinting जोड़ें।