qbo-mcp-ts
Version:
TypeScript QuickBooks Online MCP Server with enhanced features and dual transport support
163 lines • 6.5 kB
JavaScript
"use strict";
/**
* Core TypeScript type definitions for QBOMCP-TS
*/
Object.defineProperty(exports, "__esModule", { value: true });
exports.NetworkError = exports.RateLimitError = exports.ValidationError = exports.AuthenticationError = exports.QBOError = exports.JournalEntrySchema = exports.ChartOfAccountsSchema = exports.CustomerBalanceSchema = exports.CreateCustomerSchema = exports.GetCustomersSchema = exports.AgingReportSchema = exports.CashFlowSchema = exports.BalanceSheetSchema = exports.ProfitAndLossSchema = exports.GetExpensesSchema = exports.CreateExpenseSchema = exports.SendInvoiceSchema = exports.CreateInvoiceSchema = exports.GetInvoicesSchema = void 0;
const zod_1 = require("zod");
// ============================================================================
// MCP Tool Input Schemas (using Zod for validation)
// ============================================================================
exports.GetInvoicesSchema = zod_1.z.object({
status: zod_1.z.enum(['unpaid', 'paid', 'overdue', 'all']).optional(),
customerName: zod_1.z.string().optional(),
dateFrom: zod_1.z.string().optional(),
dateTo: zod_1.z.string().optional(),
minAmount: zod_1.z.number().optional(),
maxAmount: zod_1.z.number().optional(),
limit: zod_1.z.number().max(100).optional(),
});
exports.CreateInvoiceSchema = zod_1.z.object({
customerName: zod_1.z.string(),
items: zod_1.z
.array(zod_1.z.object({
description: zod_1.z.string(),
amount: zod_1.z.number().positive(),
quantity: zod_1.z.number().positive().optional(),
unitPrice: zod_1.z.number().positive().optional(),
}))
.min(1),
dueDate: zod_1.z.string().optional(),
memo: zod_1.z.string().optional(),
emailToCustomer: zod_1.z.boolean().optional(),
});
exports.SendInvoiceSchema = zod_1.z.object({
invoiceId: zod_1.z.string(),
email: zod_1.z.string().email().optional(),
subject: zod_1.z.string().optional(),
message: zod_1.z.string().optional(),
});
exports.CreateExpenseSchema = zod_1.z.object({
vendorName: zod_1.z.string(),
amount: zod_1.z.number().positive(),
accountName: zod_1.z.string(),
paymentMethod: zod_1.z.enum(['Cash', 'Check', 'Credit Card', 'Bank']).optional(),
description: zod_1.z.string().optional(),
date: zod_1.z.string().optional(),
referenceNumber: zod_1.z.string().optional(),
});
exports.GetExpensesSchema = zod_1.z.object({
dateFrom: zod_1.z.string().optional(),
dateTo: zod_1.z.string().optional(),
vendorName: zod_1.z.string().optional(),
minAmount: zod_1.z.number().optional(),
maxAmount: zod_1.z.number().optional(),
accountName: zod_1.z.string().optional(),
limit: zod_1.z.number().max(100).optional(),
});
exports.ProfitAndLossSchema = zod_1.z.object({
startDate: zod_1.z.string().optional(),
endDate: zod_1.z.string().optional(),
summarizeBy: zod_1.z.enum(['Total', 'Month', 'Quarter', 'Year']).optional(),
accountingMethod: zod_1.z.enum(['Cash', 'Accrual']).optional(),
});
exports.BalanceSheetSchema = zod_1.z.object({
asOfDate: zod_1.z.string().optional(),
summarizeBy: zod_1.z.enum(['Total', 'Month', 'Quarter']).optional(),
accountingMethod: zod_1.z.enum(['Cash', 'Accrual']).optional(),
});
exports.CashFlowSchema = zod_1.z.object({
startDate: zod_1.z.string().optional(),
endDate: zod_1.z.string().optional(),
});
exports.AgingReportSchema = zod_1.z.object({
reportType: zod_1.z.enum(['receivables', 'payables']),
asOfDate: zod_1.z.string().optional(),
agingPeriod: zod_1.z.number().default(30),
});
exports.GetCustomersSchema = zod_1.z.object({
active: zod_1.z.boolean().optional(),
withBalance: zod_1.z.boolean().optional(),
nameContains: zod_1.z.string().optional(),
limit: zod_1.z.number().max(100).optional(),
});
exports.CreateCustomerSchema = zod_1.z.object({
displayName: zod_1.z.string(),
givenName: zod_1.z.string().optional(),
familyName: zod_1.z.string().optional(),
companyName: zod_1.z.string().optional(),
email: zod_1.z.string().email().optional(),
phone: zod_1.z.string().optional(),
billingAddress: zod_1.z
.object({
line1: zod_1.z.string().optional(),
city: zod_1.z.string().optional(),
countrySubDivisionCode: zod_1.z.string().optional(),
postalCode: zod_1.z.string().optional(),
})
.optional(),
});
exports.CustomerBalanceSchema = zod_1.z.object({
customerName: zod_1.z.string(),
});
exports.ChartOfAccountsSchema = zod_1.z.object({
accountType: zod_1.z.enum(['Asset', 'Liability', 'Equity', 'Income', 'Expense']).optional(),
active: zod_1.z.boolean().optional(),
});
exports.JournalEntrySchema = zod_1.z.object({
date: zod_1.z.string(),
entries: zod_1.z
.array(zod_1.z.object({
accountName: zod_1.z.string(),
debit: zod_1.z.number().optional(),
credit: zod_1.z.number().optional(),
description: zod_1.z.string().optional(),
}))
.min(2),
memo: zod_1.z.string().optional(),
});
// ============================================================================
// Error Types
// ============================================================================
class QBOError extends Error {
code;
statusCode;
details;
constructor(message, code, statusCode, details) {
super(message);
this.code = code;
this.statusCode = statusCode;
this.details = details;
this.name = 'QBOError';
}
}
exports.QBOError = QBOError;
class AuthenticationError extends QBOError {
constructor(message, details) {
super(message, 'AUTH_ERROR', 401, details);
this.name = 'AuthenticationError';
}
}
exports.AuthenticationError = AuthenticationError;
class ValidationError extends QBOError {
constructor(message, details) {
super(message, 'VALIDATION_ERROR', 400, details);
this.name = 'ValidationError';
}
}
exports.ValidationError = ValidationError;
class RateLimitError extends QBOError {
constructor(message, retryAfter) {
super(message, 'RATE_LIMIT', 429, { retryAfter });
this.name = 'RateLimitError';
}
}
exports.RateLimitError = RateLimitError;
class NetworkError extends QBOError {
constructor(message, details) {
super(message, 'NETWORK_ERROR', 503, details);
this.name = 'NetworkError';
}
}
exports.NetworkError = NetworkError;
//# sourceMappingURL=index.js.map