Pular para o conteúdo principal
Versão: Guardian v0.1.0

Verificar Transações

Chame verify() em momentos sensíveis à segurança. O SDK coleta sinais do dispositivo, realiza atestação e retorna a decisão de risco do backend.

Uso Básico

PaymentScreen.tsx
import { useGuardian } from '@surtai/guardian-rn';

function PaymentScreen() {
const { verify } = useGuardian();

const handlePayment = async () => {
try {
const result = await verify('withdrawal', 'User Payment');

if (result.allowed) {
// Prosseguir com o pagamento
} else {
// Transação negada - verifique result.riskLevel
}
} catch (error) {
// Tratar erro do SDK (rede, não inicializado, etc.)
}
};

return <Button onPress={handlePayment} title="Pay" />;
}

Contexto do Cliente

Defina o contexto do cliente após a autenticação do seu aplicativo. Isso vincula os sinais do dispositivo a uma identidade de usuário.

const { setCustomer, clearCustomer } = useGuardian();

// Após o login
setCustomer('user_abc123', 'John Doe', 'john@example.com');

// No logout
clearCustomer();

Tipos de Transação

TipoCaso de uso
'login'Login do usuário
'signUp'Criação de nova conta
'deposit'Adição de fundos
'withdrawal'Saque de fundos

Substituição de Localização por Chamada

Substitua o padrão collectLocation para uma única chamada:

// Ignorar localização para esta chamada
const result = await verify('login', 'User Login', { collectLocation: false });

// Solicitar localização para esta chamada
const result = await verify('withdrawal', 'User Payment', { collectLocation: true });

// Usar padrão de inicialização
const result = await verify('login', 'User Login');

A substituição é única - afeta apenas aquela chamada verify().

Como a Coleta de Localização É Decidida

GPS no PainelSeu CódigoResultado
habilitadotrue (init ou substituição)GPS coletado
habilitadofalse (init ou substituição)Sem GPS - você optou por sair
desabilitadotrue (init ou substituição)Sem GPS - painel desativado
desabilitadofalse (init ou substituição)Sem GPS
informação

Sua configuração collectLocation só pode optar por sair do GPS. Não pode forçar o GPS se o painel o tiver desabilitado.

Resultado da Verificação

interface VerificationResult {
allowed: boolean; // Decisão do backend - true = prosseguir
riskLevel: RiskLevel; // 'low' | 'medium' | 'high' | 'blocked' | 'unknown'
sessionId: string; // ID da transação para referência de suporte
errors?: string[]; // Mensagens de erro do backend, se houver
timestamp: number; // Timestamp da resposta (ms)
metadata?: Record<string, any>; // Metadados adicionais do backend
}

Para detalhes sobre níveis de risco, consulte Níveis de Risco.

Exemplo Completo

App.tsx
import React, { useState } from 'react';
import { View, Button, Text, Alert } from 'react-native';
import {
GuardianProvider,
useGuardian,
type VerificationResult,
} from '@surtai/guardian-rn';

function HomeScreen() {
const { verify, setCustomer, clearCustomer, isInitialized } = useGuardian();
const [result, setResult] = useState<VerificationResult | null>(null);

const handleLogin = async () => {
setCustomer('user_123', 'Jane Doe', 'jane@example.com');

try {
const res = await verify('login', 'User Login');
setResult(res);
Alert.alert(res.allowed ? 'Approved' : 'Denied', `Risk: ${res.riskLevel}`);
} catch (e: any) {
Alert.alert('Error', e.message);
}
};

return (
<View style={{ padding: 20 }}>
<Text>SDK Ready: {isInitialized ? 'Yes' : 'No'}</Text>
<Button title="Login & Verify" onPress={handleLogin} />
<Button title="Logout" onPress={() => { clearCustomer(); setResult(null); }} />
{result && <Text>Allowed: {result.allowed ? 'Yes' : 'No'}</Text>}
</View>
);
}

export default function App() {
return (
<GuardianProvider apiKey="YOUR_API_KEY" environment="production" collectLocation={true}>
<HomeScreen />
</GuardianProvider>
);
}