UNPKG

@criapix/saas-assinaturas-client

Version:

SDK JavaScript/TypeScript para o AssinaturasService - Sistema de gestão de assinaturas SaaS com processamento de pagamentos de faturas (cartão, PIX, débito), gerenciamento de métodos de pagamento, pagamentos recorrentes e análise de falhas de pagamento

297 lines (239 loc) 7.07 kB
# AssinaturasService SDK JavaScript/TypeScript SDK JavaScript/TypeScript para integração com o AssinaturasService - Sistema de gestão de assinaturas SaaS multi-tenant. ## 📦 Instalação ### Via NPM (local link) ```bash npm install @saas-core/assinaturas-client ``` ### Via arquivo local ```bash npm install file:../saas-core-assinaturas/AssinaturasService.SDK.JS ``` ## 🚀 Uso Básico ### Criar e Configurar o Cliente ```typescript import { AssinaturasServiceClient } from '@saas-core/assinaturas-client'; // Criar instância do cliente const client = new AssinaturasServiceClient('http://localhost:5001'); // Configurar token de autenticação client.setAuthorizationToken(jwtToken); ``` ### Planos de Assinatura ```typescript // Listar planos const plans = await client.listSubscriptionPlans({ isActive: true, page: 1, pageSize: 10 }); // Criar plano const newPlan = await client.createSubscriptionPlan({ name: 'Plano Básico', description: 'Plano básico para pequenos condomínios', pricePerUnit: 7.00, features: '["Gestão de unidades", "Cobrança mensal"]', isDefault: true, isActive: true }); // Atualizar plano const updatedPlan = await client.updateSubscriptionPlan(planId, { name: 'Plano Básico Atualizado', pricePerUnit: 8.00 }); // Deletar plano await client.deleteSubscriptionPlan(planId); ``` ### Assinaturas ```typescript import { BillingCycle } from '@saas-core/assinaturas-client'; // Criar assinatura const subscription = await client.createSubscription({ customerId: customerId, subscriptionPlanId: planId, quantity: 15, billingCycle: BillingCycle.Monthly, startTrial: false, defaultInvoiceDueDayOfMonth: 10 }); // Listar assinaturas const subscriptions = await client.listSubscriptions({ customerId: customerId, page: 1, pageSize: 10 }); // Cancelar assinatura await client.cancelSubscription(subscriptionId, 'Cliente solicitou cancelamento'); ``` ### Faturas ```typescript // Gerar fatura const invoice = await client.generateInvoice({ subscriptionId: subscriptionId, dueDate: '2024-02-10', notes: 'Fatura referente ao mês de Janeiro' }); // Listar faturas const invoices = await client.listInvoices({ subscriptionId: subscriptionId, page: 1, pageSize: 10 }); // Atualizar status da fatura import { InvoiceStatus } from '@saas-core/assinaturas-client'; await client.updateInvoiceStatus(invoiceId, { status: InvoiceStatus.Paid, paidAt: new Date().toISOString(), paymentMethod: 'PIX' }); ``` ### Processamento de Pagamentos ```typescript // Processar primeiro pagamento com cartão const firstPaymentResult = await client.processFirstPayment(invoiceId, { cardToken: 'card_token_from_mercadopago', cardHolderName: 'João Silva', cardExpiryDate: '11/30', // Suporta MM/YY, MM/YYYY ou ISO 8601 customer: { name: 'João Silva', email: 'joao@example.com', documentNumber: '12345678901', phone: '11999999999' } }); // Processar pagamento PIX const pixResult = await client.processPixPayment(invoiceId, { customer: { name: 'João Silva', email: 'joao@example.com', documentNumber: '12345678901' } }); // Processar pagamento com débito const debitResult = await client.processDebitPayment(invoiceId, { cardToken: 'debit_card_token', cardHolderName: 'João Silva', cardExpiryDate: '05/2032', customer: { name: 'João Silva', email: 'joao@example.com', documentNumber: '12345678901' } }); // Atualizar método de pagamento const updateResult = await client.updatePaymentMethod(subscriptionId, { cardToken: 'new_card_token', cardHolderName: 'João Silva', cardExpiryDate: '12/35', customer: { name: 'João Silva', email: 'joao@example.com', documentNumber: '12345678901' } }); ``` ### Análise de Falhas de Pagamento ```typescript import { PaymentFailureHelper, canRetryPayment, getSuggestedAction, getUserFriendlyReason } from '@saas-core/assinaturas-client'; // Verificar se um pagamento pode ser tentado novamente const canRetry = canRetryPayment('insufficient_funds', 'Saldo insuficiente'); // Retorna: true // Ou usando a classe diretamente const canRetryAlt = PaymentFailureHelper.canRetryPayment( 'insufficient_funds', 'Saldo insuficiente' ); // Obter ação sugerida para o usuário const suggestedAction = getSuggestedAction( 'insufficient_funds', 'Saldo insuficiente', true ); // Retorna: "Verifique o saldo disponível ou aguarde a próxima tentativa automática" // Obter mensagem amigável para o usuário const friendlyMessage = getUserFriendlyReason( 'expired_card', null, 'Card is expired' ); // Retorna: "Cartão expirado" // Exemplo completo com resposta de pagamento falhado if (paymentResponse.success === false) { const canRetry = canRetryPayment( paymentResponse.failureCode, paymentResponse.failureReason ); const userMessage = getUserFriendlyReason( paymentResponse.failureCode, paymentResponse.failureReason, paymentResponse.errorMessage ); const action = getSuggestedAction( paymentResponse.failureCode, paymentResponse.failureReason, canRetry ); console.log(`Erro: ${userMessage}`); console.log(`Ação sugerida: ${action}`); console.log(`Pode tentar novamente: ${canRetry ? 'Sim' : 'Não'}`); } ``` ### Validação de Data de Expiração de Cartão ```typescript import { CardExpiryDateValidator, isValidCardExpiryDate, parseCardExpiryDate, normalizeCardExpiryDate } from '@saas-core/assinaturas-client'; // Validar formato de data const validationResult = CardExpiryDateValidator.validate('11/30'); if (validationResult.valid) { console.log('Data válida:', validationResult.parsedDate); } else { console.error('Erro:', validationResult.error); } // Verificação rápida const isValid = isValidCardExpiryDate('11/30'); // true // Converter para Date const expiryDate = parseCardExpiryDate('11/30'); // Normalizar para ISO 8601 (usado internamente pelo SDK) const isoDate = normalizeCardExpiryDate('11/30'); // Retorna: "2030-11-30T23:59:59.000Z" // Formatos suportados: // - "11/30" (MM/YY) // - "11/2030" (MM/YYYY) // - "2030-11-30T00:00:00Z" (ISO 8601) ``` ## 🔐 Autenticação O SDK utiliza autenticação JWT via header `Authorization: Bearer {token}`. ```typescript // Configurar token antes de fazer requisições client.setAuthorizationToken(jwtToken); ``` O token deve conter as seguintes claims: - `saasId`: Identificador da aplicação SaaS - `sub` ou `userId`: ID do usuário - `role`: Role do usuário (Admin, User, etc.) ## 📚 Tipos Disponíveis ### Enums - `SubscriptionStatus`: Trial, Active, Suspended, Cancelled, Expired - `InvoiceStatus`: Pending, Paid, Overdue, Cancelled, Refunded - `BillingCycle`: Monthly, Quarterly, Yearly ### Interfaces - `SubscriptionPlanResponse` - `CreateSubscriptionPlanRequest` - `UpdateSubscriptionPlanRequest` - `SubscriptionResponse` - `InvoiceResponse` - `PaginatedResponse<T>` ## 🛠️ Build ```bash npm run build ``` ## 📄 Licença Este projeto é privado e proprietário.