Biblioteca de integração com o software QuickBooks Online, com suporte completo ao fluxo OAuth2 e métodos para manipulação dos principais recursos da API.
npm i @sinapselabso/ts-quickbooks
- Customers: Representa os clientes cadastrados na empresa no QuickBooks Online.
- Invoices: Refere-se às faturas emitidas para clientes.
- Payments: Pagamentos recebidos de clientes, normalmente relacionados a faturas.
- Products/Items: Produtos e serviços oferecidos e cadastrados na empresa.
- Credit Memos: Notas de crédito emitidas para clientes (ex: devoluções, descontos).
- Bills: Contas a pagar, geralmente lançadas por fornecedores.
- Bill Payments: Pagamentos realizados para quitar contas a pagar (Bills).
- Accounts: Contas do plano de contas da empresa (financeiro e contábil).
- Attachables: Anexos e documentos vinculados a outros registros (ex: PDFs, imagens).
- Company: Informações cadastrais e gerais da empresa autenticada.
- Vendors: Fornecedores cadastrados na empresa.
- Vendor Credits: Créditos de fornecedor, normalmente usados para registrar devoluções ou ajustes.
A biblioteca encapsula todos os principais endpoints do QuickBooks Online em classes organizadas, acessíveis via a classe principal QuickBooksIntegration
. Cada endpoint possui métodos para criação e consulta de recursos, conforme a API oficial.
getAllCustomers(): Promise<CustomersQueryResponse>
createCustomer(data: Customer): Promise<any>
getAllInvoices(): Promise<InvoicesQueryResponse>
createInvoice(data: Invoice): Promise<any>
findPayments(criteria?: string): Promise<PaymentQueryResponse>
createPayment(data: Payment): Promise<any>
getAllProducts(): Promise<ItemsQueryResponse>
createItem(data: Item): Promise<any>
getAllCreditMemos(): Promise<CreditMemosQueryResponse>
createCreditMemo(data: CreditMemo): Promise<any>
getAllBills(): Promise<BillsQueryResponse>
createBill(data: Bill): Promise<any>
getAllBillPayments(): Promise<BillPaymentsQueryResponse>
createBillPayment(data: BillPayment): Promise<any>
getAllAccounts(): Promise<AccountsQueryResponse>
createAccount(data: Account): Promise<any>
updateAccount(data: Account): Promise<any>
deleteAccount(accountId: string, syncToken: string): Promise<any>
getAllAttachables(): Promise<AttachablesQueryResponse>
createAttachable(data: Attachable): Promise<any>
updateAttachable(data: Attachable): Promise<any>
deleteAttachable(attachableId: string): Promise<any>
getCompanyInfo(): Promise<CompanyInfo>
findVendors(criteria?: string): Promise<VendorsQueryResponse>
createVendor(data: Vendor): Promise<Vendor>
updateVendor(data: Vendor): Promise<Vendor>
deleteVendor(data: Vendor): Promise<Vendor>
findVendorCredits(criteria?: string): Promise<VendorCreditsQueryResponse>
createVendorCredit(data: VendorCredit): Promise<VendorCredit>
getVendorCredit(id: string): Promise<VendorCredit>
updateVendorCredit(data: VendorCredit): Promise<VendorCredit>
deleteVendorCredit(id: string, syncToken: string): Promise<VendorCredit>
A autenticação é feita via OAuth2, utilizando a biblioteca oficial intuit-oauth
. O fluxo é totalmente automatizado e seguro.
import { QuickBooksIntegration } from "ts-quickbooks";
import express from "express";
const quickBooks = new QuickBooksIntegration({ clientId, clientSecret });
const redirectUri = "http://localhost:3000/callback";
// 1. Gere a URL de autorização
const authUrl = quickBooks.getAuthorizationUri(redirectUri);
console.log("Acesse esta URL para autorizar o app:", authUrl);
// 2. Endpoint para receber o callback
app.get("/callback", async (req, res) => {
const code = req.query.code as string;
const realmId = req.query.realmId as string;
await quickBooks.exchangeAuthorizationCode(code, redirectUri, realmId);
res.send("Tokens obtidos e integração pronta!");
});
// 3. Usando a API após autenticação
const customers = await quickBooks.customers.getAllCustomers();
console.log(customers);
await quickBooks.customers.createCustomer({
DisplayName: "João Silva",
PrimaryEmailAddr: { Address: "joao.silva@exemplo.com" },
// ...outros campos...
});
await quickBooks.invoices.createInvoice({
CustomerRef: { value: "1" },
Line: [
{
Amount: 100.00,
DetailType: "SalesItemLineDetail",
SalesItemLineDetail: {
ItemRef: { value: "2" },
UnitPrice: 100.00,
Qty: 1
}
}
],
// ...outros campos...
});
await quickBooks.payments.createPayment({
CustomerRef: { value: "1" },
TotalAmt: 100.00,
// ...outros campos...
});
await quickBooks.products.createItem({
Name: "Produto A",
Type: "Service",
IncomeAccountRef: { value: "79" },
// ...outros campos...
});
await quickBooks.creditMemos.createCreditMemo({
CustomerRef: { value: "1" },
Line: [
{
Amount: -50.00,
DetailType: "SalesItemLineDetail",
SalesItemLineDetail: {
ItemRef: { value: "2" },
UnitPrice: -50.00,
Qty: 1
}
}
],
// ...outros campos...
});
await quickBooks.accounts.createAccount({
Name: "Caixa",
AccountType: "Bank",
// ...outros campos...
});
await quickBooks.bills.createBill({
VendorRef: { value: "1" },
TotalAmt: 100.00,
// ...outros campos...
});
await quickBooks.billsPayments.createBillPayment({
VendorRef: { value: "1" },
TotalAmt: 100.00,
// ...outros campos...
});
await quickBooks.attachables.createAttachable({
FileName: "Nota_Fiscal.pdf",
Category: "Statement",
ContentType: "application/pdf",
Size: 2048,
// ...outros campos...
});
await quickBooks.vendors.createVendor({
DisplayName: "Fornecedor X",
PrimaryEmailAddr: { Address: "fornecedor@exemplo.com" },
// ...outros campos...
});
await quickBooks.vendorCredits.createVendorCredit({
VendorRef: { value: "1" },
TotalAmt: 200.00,
Line: [
{
Amount: 200.00,
DetailType: "AccountBasedExpenseLineDetail",
// ...outros campos...
}
],
// ...outros campos...
});
await quickBooks.accounts.updateAccount({
Id: "123",
SyncToken: "1",
Name: "Conta Atualizada",
// ...outros campos...
});
await quickBooks.attachables.updateAttachable({
Id: "456",
FileName: "NovoNome.pdf",
// ...outros campos...
});
await quickBooks.accounts.deleteAccount("123", "1");
await quickBooks.attachables.deleteAttachable("456");
- Todos os métodos retornam Promises.
- Os métodos de atualização e deleção só estão disponíveis para Accounts e Attachables.
- Para métodos de update/delete, consulte a documentação do QuickBooks para saber os campos obrigatórios (ex: SyncToken para contas).
- O fluxo OAuth2 exige interação do usuário apenas na primeira autorização.
- Tokens devem ser armazenados de forma segura em produção.