tauri-plugin-macos-passkey 0.1.0

Call macOS Passkey registration/login APIs in Tauri apps with ease!
Documentation
#![cfg(target_os = "macos")]

use std::ffi::c_void;
use tauri::{Window, async_runtime::spawn_blocking};
use crate::macos::{PasskeyRegistrationResult, PasskeyLoginResult, blocking::{run_registration, run_login}};

#[tauri::command]
pub async fn register_passkey(
    domain: String,
    challenge: Vec<u8>,
    username: String,
    user_id: Vec<u8>,
    salt: Vec<u8>,
    window: Window
) -> Result<PasskeyRegistrationResult, String> {
    let raw_ptr = window.ns_window().map_err(|_| "Missing ns_window")? as usize;

    spawn_blocking(move || {
        let window_ptr = raw_ptr as *mut c_void;
        run_registration(window_ptr, &domain, &challenge, &username, &user_id, &salt)
    })
    .await
    .map_err(|e| format!("Join error: {}", e))?
}

#[tauri::command]
pub async fn login_passkey(
    domain: String,
    challenge: Vec<u8>,
    salt: Vec<u8>,
    window: Window
) -> Result<PasskeyLoginResult, String> {
    let raw_ptr = window.ns_window().map_err(|_| "Missing ns_window")? as usize;

    spawn_blocking(move || {
        let window_ptr = raw_ptr as *mut c_void;
        run_login(window_ptr, &domain, &challenge, &salt)
    })
    .await
    .map_err(|e| format!("Join error: {}", e))?
}