馃毀 La documentacion de Bloque est谩 en desarrollo

Cuentas Virtuales

Crea y gestiona cuentas virtuales de prueba usando el SDK de Bloque.

Descripci贸n General

Las cuentas virtuales son cuentas de prueba simples que solo requieren informaci贸n personal b谩sica. Son perfectas para:

  • Desarrollo y Pruebas: Creaci贸n r谩pida de cuentas para pruebas de integraci贸n
  • Entorno Sandbox: Pruebas seguras sin datos financieros reales
  • KYC Simple: Informaci贸n m铆nima requerida (nombre y apellido)
  • Configuraci贸n R谩pida: Creaci贸n instant谩nea de cuentas

Crear una Cuenta Virtual

Creaci贸n B谩sica

Crea una cuenta virtual con informaci贸n m铆nima:

crear-cuenta-virtual.ts
import { SDK } from '@bloque/sdk';

const bloque = new SDK({
  origin: 'tu-origen',
  auth: {
    type: 'apiKey',
    apiKey: process.env.BLOQUE_API_KEY!,
  },
  mode: 'sandbox', // Usa sandbox para pruebas
});

// Conectar a sesi贸n de usuario
const session = await bloque.connect('did:bloque:tu-origen:alias-usuario');

// Crear una cuenta virtual
const account = await session.accounts.virtual.create({
  firstName: 'Juan',
  lastName: 'P茅rez',
  metadata: {
    ambiente: 'pruebas',
    proposito: 'prueba-integracion',
  },
});

console.log('Cuenta creada:', account.urn);
console.log('Estado:', account.status);
console.log('ID del Ledger:', account.ledgerId);

Par谩metros

tipos.ts
interface CreateVirtualAccountParams {
  firstName: string;       // Requerido: Nombre del titular de la cuenta
  lastName: string;        // Requerido: Apellido del titular de la cuenta
  ledgerId?: string;       // Opcional: ID de cuenta ledger (se crea autom谩ticamente si no se proporciona)
  webhookUrl?: string;     // Opcional: Webhook para eventos de la cuenta
  metadata?: Record<string, string>; // Opcional: Metadata personalizada (debe ser strings)
}

Respuesta

tipos.ts
interface VirtualAccount {
  urn: string;              // Nombre de recurso 煤nico
  id: string;               // ID de la cuenta
  firstName: string;        // Nombre del titular
  lastName: string;         // Apellido del titular
  status: AccountStatus;    // Estado de la cuenta
  ownerUrn: string;         // URN del propietario
  ledgerId: string;         // ID de cuenta ledger
  webhookUrl: string | null;
  metadata?: Record<string, string>;
  createdAt: string;        // Timestamp ISO 8601
  updatedAt: string;        // Timestamp ISO 8601
}

type AccountStatus =
  | 'creation_in_progress'  // Creaci贸n en progreso
  | 'active'               // Activa
  | 'disabled'             // Deshabilitada
  | 'frozen'               // Congelada
  | 'deleted'              // Eliminada
  | 'creation_failed';     // Creaci贸n fallida

Gestionar Cuentas Virtuales

Actualizar Metadata

Actualiza metadata personalizada en una cuenta virtual:

actualizar-metadata.ts
const actualizada = await session.accounts.virtual.updateMetadata({
  urn: 'did:bloque:mediums:virtual:account:123e4567',
  metadata: {
    actualizado_por: 'admin',
    razon_actualizacion: 'actualizacion_prueba',
    ambiente: 'staging',
  },
});

console.log('Metadata actualizada:', actualizada.metadata);
Restricciones de Metadata

El campo source est谩 reservado y no puede modificarse a trav茅s de actualizaciones de metadata. Todos los valores de metadata deben ser strings.

Estados de Cuenta

Gestiona el estado de las cuentas virtuales:

gestionar-estado.ts
const accountUrn = 'did:bloque:mediums:virtual:account:123e4567';

// Activar cuenta
const activada = await session.accounts.virtual.activate(accountUrn);
console.log('Estado:', activada.status); // 'active'

// Congelar cuenta (suspender temporalmente)
const congelada = await session.accounts.virtual.freeze(accountUrn);
console.log('Estado:', congelada.status); // 'frozen'

// Deshabilitar cuenta (permanentemente)
const deshabilitada = await session.accounts.virtual.disable(accountUrn);
console.log('Estado:', deshabilitada.status); // 'disabled'

Estados Disponibles

EstadoDescripci贸nPuede Transicionar A
creation_in_progressLa cuenta se est谩 creandoactive, creation_failed
activeCuenta activa y usablefrozen, disabled, deleted
frozenCuenta temporalmente suspendidaactive, disabled
disabledCuenta permanentemente deshabilitada-
deletedCuenta eliminada-
creation_failedCreaci贸n de cuenta fallida-
stateDiagram-v2
    [*] --> creation_in_progress
    creation_in_progress --> active
    creation_in_progress --> creation_failed
    active --> frozen
    active --> disabled
    active --> deleted
    frozen --> active
    frozen --> disabled
    creation_failed --> [*]
    disabled --> [*]
    deleted --> [*]

Casos de Uso

Pruebas de Integraci贸n

prueba-integracion.ts
import { SDK } from '@bloque/sdk';
import { describe, test, expect } from 'bun:test';

describe('Integraci贸n de Cuenta Virtual', () => {
  const bloque = new SDK({
    origin: 'tu-origen',
    auth: { type: 'apiKey', apiKey: process.env.BLOQUE_API_KEY! },
    mode: 'sandbox',
  });

  test('deber铆a crear y gestionar cuenta virtual', async () => {
    const session = await bloque.connect('did:bloque:tu-origen:usuario-prueba');

    // Crear cuenta
    const account = await session.accounts.virtual.create({
      firstName: 'Prueba',
      lastName: 'Usuario',
      metadata: {
        test_id: 'integracion-001',
      },
    });

    expect(account.status).toBe('active');
    expect(account.firstName).toBe('Prueba');

    // Actualizar metadata
    const actualizada = await session.accounts.virtual.updateMetadata({
      urn: account.urn,
      metadata: {
        test_id: 'integracion-001',
        actualizado: 'true',
      },
    });

    expect(actualizada.metadata?.actualizado).toBe('true');

    // Congelar cuenta
    const congelada = await session.accounts.virtual.freeze(account.urn);
    expect(congelada.status).toBe('frozen');
  });
});

Manejo de Errores

Maneja los errores apropiadamente al trabajar con cuentas virtuales:

manejo-errores.ts
import {
  BloqueValidationError,
  BloqueNotFoundError,
  BloqueAuthenticationError,
} from '@bloque/sdk';

try {
  const account = await session.accounts.virtual.create({
    firstName: 'Juan',
    lastName: 'P茅rez',
  });

  console.log('Cuenta creada:', account.urn);
} catch (error) {
  if (error instanceof BloqueValidationError) {
    console.error('Validaci贸n fallida:', error.validationErrors);
    // Manejar entrada inv谩lida (campos requeridos faltantes, etc.)
  } else if (error instanceof BloqueNotFoundError) {
    console.error('Recurso no encontrado:', error.resourceId);
    // Manejar usuario/sesi贸n faltante
  } else if (error instanceof BloqueAuthenticationError) {
    console.error('Autenticaci贸n fallida');
    // Manejar problemas de autenticaci贸n
  } else {
    console.error('Error inesperado:', error);
  }
}

Mejores Pr谩cticas

  1. Usar Modo Sandbox: Siempre usa modo sandbox para cuentas virtuales
  2. Metadata Significativa: Agrega metadata para rastrear escenarios y prop贸sitos de prueba
  3. Limpieza: Deshabilita o elimina cuentas de prueba despu茅s de usarlas
  4. Manejo de Errores: Siempre envuelve las operaciones en bloques try-catch
  5. Aislamiento de Pruebas: Usa identificadores 煤nicos para aislar cuentas de prueba
  6. Webhooks: Configura webhooks para notificaciones de eventos durante las pruebas
  7. Verificaci贸n de Estado: Verifica el estado de la cuenta antes de realizar operaciones

Diferencias con Otros Tipos de Cuenta

Caracter铆sticaCuentas VirtualesTarjetas VirtualesBancolombia
KYC RequeridoNoS铆S铆
Tiempo de Creaci贸nInstant谩neoInstant谩neoInstant谩neo
Caso de UsoPruebas/DesarrolloPagosBanca colombiana
Informaci贸n RequeridaNombre, ApellidoURN del usuarioNombre (opcional)
C贸digo de ReferenciaNoNoS铆
N煤mero de TarjetaNoS铆No

Pr贸ximos Pasos