Invoice SDK entry package for getting started quickly, including domain and application layers
npm install invoicing-sdkThe main entry point for the invoicing system, providing a convenient API for creating and managing invoices.
``bash`
npm install invoicing-sdk
`typescript
import { createInvoicingSDK } from "invoicing-sdk";
// Set up your dependencies
const dependencies = {
invoiceRepository: myInvoiceRepository,
orderRepository: myOrderRepository,
invoiceNumberValidator: myValidator,
pdfRenderer: myPdfRenderer,
invoiceNumberGenerator: myGenerator,
legalInfo: myLegalInfo,
shippingRateProvider: myShippingRates,
shippingCostPolicy: myShippingPolicy,
};
// Create the SDK
const sdk = createInvoicingSDK(dependencies);
// Use the SDK
const invoiceDraft = await sdk.requestInvoice({
orderId: "order-123",
requestedBy: "user@example.com",
});
const invoice = await sdk.createInvoice({
orderId: "order-123",
invoiceNumber: "INV-2025-001",
createdBy: "user@example.com",
});
`
#### createInvoicingSDK(dependencies)
Creates a complete SDK instance with all use cases.
Parameters:
- dependencies: InvoicingSDKDependencies - All required dependencies
Returns: InvoicingSDK - Complete SDK with all use cases
#### createInvoicingSDKSafe(dependencies)
Safe version that validates dependencies before creating the SDK.
Parameters:
- dependencies: Partial - Dependencies to validate
Returns: InvoicingSDK - Complete SDK instance
Throws: Error if any required dependency is missing
#### validateSDKDependencies(dependencies)
Validates that all required dependencies are provided.
Parameters:
- dependencies: Partial - Dependencies to validate
Throws: Error with details about missing dependencies
The SDK provides the following use cases:
- requestInvoice - Create an invoice draft from an order
- createInvoice - Create and finalize an invoice with PDF generation
- listInvoices - List invoices with filtering and pagination
- getInvoice - Retrieve a single invoice by ID, number, or order ID
The SDK re-exports all key types from the domain and application layers:
- Domain entities: Invoice, Money, CustomerInfo, etc.OrderItem
- Value objects: , InvoiceFinancials, ShippingCostRequestInvoiceCommand
- Commands: , CreateInvoiceCommandGetInvoiceQuery
- Queries: , ListInvoicesQueryRequestInvoiceResult
- Results: , CreateInvoiceResult, etc.InvoiceRepository
- Repositories: , OrderRepository
The SDK requires the following dependencies:
- invoiceRepository: InvoiceRepository - For invoice persistenceorderRepository: OrderRepository
- - For order data accessinvoiceNumberValidator: InvoiceNumberValidator
- - For invoice number validationpdfRenderer: PDFRenderer
- - For PDF generationinvoiceNumberGenerator: InvoiceNumberGenerator
- - For generating invoice numberslegalInfo: GermanLegalInfo
- - Legal information for invoicesshippingRateProvider: ShippingRateProvider
- - Shipping rate calculationshippingCostPolicy: ShippingCostPolicy
- - Shipping cost policies
If you only need specific functionality, you can create individual use cases:
`typescript
import {
makeRequestInvoice,
makeCreateInvoice,
createUseCases,
} from "invoicing-sdk";
const useCases = createUseCases({
requestInvoice: makeRequestInvoice(requestDependencies),
createInvoice: makeCreateInvoice(createDependencies),
});
`
The SDK functions may throw domain-specific errors:
`typescript
import {
OrderNotFoundError,
InvoiceAlreadyExistsError,
InvalidInvoiceNumberError,
} from "invoicing-sdk";
try {
const invoice = await sdk.createInvoice(command);
} catch (error) {
if (error instanceof OrderNotFoundError) {
// Handle order not found
} else if (error instanceof InvoiceAlreadyExistsError) {
// Handle duplicate invoice
}
}
``
MIT