SDK y API

SDK Reference

Referencia de @accesly/react y @accesly/core. Provider, hooks, componentes del kit y helpers.

Paquetes

Paquete Versión Descripción
@accesly/react 2.6.0 Provider, hooks React, componentes prearmados
@accesly/core 1.21.0 Cliente API, tipos, helpers criptográficos, DeviceStore
@accesly/react/kit Sub path de react Componentes UI listos para renderizar

AcceslyProvider

El provider raíz. Envolvés tu app con esto y todos los hooks + componentes del kit funcionan.

Props

Prop Tipo Requerido Descripción
appId string App ID del dashboard. Determina branding, redes, providers de auth.
env "dev" | "staging" | "prod" Environment del backend. Determina qué API URL usar.
authCallbackPath string No Path del callback OAuth. Default: /auth/callback. Setear si tu app vive en sub path.
overrides object No Override de deviceStore, sessionStorage, authClient. Ver Overrides.
cognitoConfig object No Skipea el bootstrap fetch del appConfig. Útil para tests.
loadingFallback ReactNode No UI mientras se resuelve el appConfig inicial.
errorFallback (err) => ReactNode No UI si falla el bootstrap del appConfig.

Overrides

Para producción siempre pasá deviceStore: new IndexedDbDeviceStore(). Sin esto el default es InMemoryDeviceStore y el usuario pierde acceso al recargar la página.

import { IndexedDbDeviceStore } from '@accesly/core';

<AcceslyProvider
  appId={appId}
  env="dev"
  overrides={{
    deviceStore: new IndexedDbDeviceStore(),
  }}
>

useAccesly

El hook principal. Devuelve namespaces con toda la API del SDK.

const {
  auth,       // signIn, signUp, signInWithGoogle, signOut, handleAuthCallback
  wallet,     // bootstrap, unlockForSigning, fetchRemote, getStoredCredential
  tx,         // send, swap, swapViaSdex
  recovery,   // requestOtp, verifyOtp, finalize, reconstructSeed
  fiat,       // startOnRamp, startOffRamp, checkStatus
  contacts,   // list, add, remove, resolve
  _internal,  // context avanzado
} = useAccesly();

auth

MétodoUso
signUp(email, password)Registra un user con email + password. Cognito manda código de confirmación.
confirmSignUp(email, code)Confirma el signup con el código del email.
signIn(email, password)Login clásico.
signInWithGoogle(redirectUri?)Redirige a Cognito Hosted UI con Google IdP.
handleAuthCallback(code, redirectUri?)Intercambia el code del OAuth callback por tokens.
signOut()Borra tokens de session storage.
status"anonymous" | "authenticated" | "expired" | "bootstrapping"
usernameEmail del usuario actual, o null si no autenticado.

wallet

MétodoUso
bootstrap({ email, password, passkey })Crea passkey, genera seed, deploya Smart Account on chain.
unlockForSigning(username)Pide biométrico al chip, devuelve material listo para firmar.
fetchRemote()GET /wallets. Devuelve datos on chain del user actual, o null si no tiene wallet.
getStoredCredential(username)Lee del DeviceStore. Devuelve el CredentialRecord local o null.
bootstrapG(input)Crea la G address bridge (cuenta Stellar classic). Auto disparado por flows que lo requieren.
addTrustlineG(input)Agrega trustline a la G address para un asset específico.
sweepGToSA(input)Mueve balance de la G al Smart Account.

tx

MétodoUso
send({ to, amount, asset, ...material })Transfer XLM o USDC on chain. material viene de unlockForSigning.
swap({ fromAsset, toAsset, amountIn, slippageBps, ...material })Swap XLM ↔ USDC vía Soroswap.
swapViaSdex(...)Fallback SDEX classic. El kit lo dispara auto si Soroswap no tiene path.

recovery

MétodoUso
requestOtp({ email })Manda OTP al email. Rate limited: 3/hora.
verifyOtp({ email, code, idToken? })Verifica OTP, devuelve recoveryJwt.
finalize({ email, password, recoveryJwt, passkey })Orquesta el flow completo: reconstruye seed, rota signer, guarda nuevos fragments.
reconstructSeed({ cognitoPassword, recoveryJwt })Bajo nivel. Reconstruye la seed sin rotar. Para casos custom.

fiat

MétodoUso
registerBankAccount({ clabe, ...kycData })Registra CLABE + CURP + datos KYC en Dynerox.
startOnRamp({ amount, currency })Crea route MXN → USDC Stellar. Devuelve authorizationUrl.
startOffRamp({ amount, clabeId })Crea route USDC Stellar → MXN. Devuelve authorizationUrl.
checkStatus(routeId)Consulta status de una route específica.

Hooks

useAppConfig

Lee la config del app (branding, providers, network). Cached module level: un solo poll a backend por appId sin importar cuántos componentes lo consuman.

const { appConfig, status, error } = useAppConfig();

// appConfig.network: "testnet" | "mainnet"
// appConfig.branding: colores, logos, textos
// appConfig.auth.providers: ["email", "google"]

useBranding

Escribe CSS vars al :root con los colores del app. Devuelve textos brandeados (loginButtonText, landingTitle, etc.).

const branding = useBranding();

// document.documentElement tiene ahora:
//   --accesly-primary: #a78bfa
//   --accesly-grad: linear-gradient(...)
// Y branding.loginButtonText = "Ingresar" o el custom del dev

useBalance

Devuelve balance XLM + USDC de la wallet actual. Poll + SSE, cached module level.

const { xlm, usdc, loading, refetch } = useBalance();

useWalletHistory

Historia paginada de transacciones. Poll cada 30s + optimistic updates.

const { history, nextPage, loading } = useWalletHistory({ limit: 20 });

useAuthProviders

Devuelve qué providers de auth están habilitados en el appConfig. Los componentes del kit usan esto para renderizar botones condicionales.

const { providers } = useAuthProviders();
// providers: ["email", "google"]

if (providers.includes('google')) {
  // renderizar botón Google
}

useKyc

Status de KYC del usuario en Dynerox.

const { status, authorizationUrl, refetch } = useKyc();

// status: "not-started" | "pending_identity" | "pending_authorization" | "active" | "inactive"
// authorizationUrl: link a auth.dynerox.com para completar el KYC

Otros hooks

Componentes del kit

Import: import { ComponentName } from '@accesly/react/kit';

Auth

Wallet

Transacciones

Recovery y KYC

Overrides + custom UI

Todos los componentes leen tu branding automáticamente. Si querés customizar más:

Integración con Astro

El SDK depende de APIs browser (IndexedDB, WebAuthn). Si tu Astro app usa output: 'server', montá los componentes como client:only="react":

---
import { DemoEntry } from '../components/demo/DemoEntry';
---

<DemoEntry client:only="react" />

Y en astro.config.mjs agregá node polyfills scopeados solo al client build:

import { nodePolyfills } from 'vite-plugin-node-polyfills';

const polyfills = nodePolyfills({
  include: ['buffer', 'crypto', 'stream', 'util', 'process'],
  globals: { Buffer: true, global: true, process: true },
});

const clientOnly = (Array.isArray(polyfills) ? polyfills : [polyfills]).map((p) => ({
  ...p,
  apply: (_c, env) => !env.isSsrBuild,
}));

export default {
  vite: {
    plugins: clientOnly,
    ssr: {
      external: ['@accesly/react', '@accesly/core', '@stellar/stellar-sdk'],
    },
  },
};

Errores

El SDK exporta clases de error específicas para try/catch preciso:

Catálogo completo con códigos HTTP y remediation en Errores.

Siguientes pasos