authia 0.3.4

High-performance JWT verification library for Ed25519 using WebAssembly
Documentation
use wasm_bindgen::prelude::*;

mod error;
mod jwt;
mod types;

pub use error::{AuthiaError, ErrorCode};
pub use types::{AccessTokenPayload, RefreshTokenPayload, VerifyOptions};

/// Verify an access token
#[wasm_bindgen(js_name = verifyAccessToken)]
pub fn verify_access_token(token: &str, options: JsValue) -> Result<JsValue, JsValue> {
    let opts: VerifyOptions = serde_wasm_bindgen::from_value(options).map_err(|e| {
        let err = AuthiaError::malformed_token(format!("Invalid options: {}", e));
        serde_wasm_bindgen::to_value(&err).unwrap_or_else(|_| JsValue::from_str(&err.to_string()))
    })?;

    let payload = jwt::verify_jwt::<AccessTokenPayload>(token, &opts).map_err(|e| {
        serde_wasm_bindgen::to_value(&e).unwrap_or_else(|_| JsValue::from_str(&e.to_string()))
    })?;

    serde_wasm_bindgen::to_value(&payload).map_err(|e| {
        let err = AuthiaError::invalid_claims(format!("Serialization error: {}", e));
        serde_wasm_bindgen::to_value(&err).unwrap_or_else(|_| JsValue::from_str(&err.to_string()))
    })
}

/// Verify a refresh token
#[wasm_bindgen(js_name = verifyRefreshToken)]
pub fn verify_refresh_token(token: &str, options: JsValue) -> Result<JsValue, JsValue> {
    let opts: VerifyOptions = serde_wasm_bindgen::from_value(options).map_err(|e| {
        let err = AuthiaError::malformed_token(format!("Invalid options: {}", e));
        serde_wasm_bindgen::to_value(&err).unwrap_or_else(|_| JsValue::from_str(&err.to_string()))
    })?;

    let payload = jwt::verify_jwt::<RefreshTokenPayload>(token, &opts).map_err(|e| {
        serde_wasm_bindgen::to_value(&e).unwrap_or_else(|_| JsValue::from_str(&e.to_string()))
    })?;

    serde_wasm_bindgen::to_value(&payload).map_err(|e| {
        let err = AuthiaError::invalid_claims(format!("Serialization error: {}", e));
        serde_wasm_bindgen::to_value(&err).unwrap_or_else(|_| JsValue::from_str(&err.to_string()))
    })
}