inflow-get
v0.3.4
Published
SQLite database seeded from Inflow Inventory API
Maintainers
Readme
inflow-get
A reusable library for seeding a local SQLite database from any Inflow Inventory account. Uses inflow-api-types for schema validation.
Installation
npm install inflow-getAlso install the API client:
npm install inflow-clientUsage
Option 1: Seed from Inflow API
Fetch all data from your Inflow account and store it locally:
import { createDb, seedAll } from 'inflow-get';
import { createClient } from 'inflow-client';
// Create database at your chosen path
const db = createDb('./my-inventory.db');
// Create API client with your credentials
const client = createClient({
apiKey: process.env.INFLOW_API_KEY,
companyId: process.env.INFLOW_COMPANY_ID,
});
// Seed all data (one-time)
await seedAll({ db, client });
// Now query your data with full type safety
import { products, salesOrders, customers } from 'inflow-get';
import { eq } from 'drizzle-orm';
const activeProducts = db
.select()
.from(products)
.where(eq(products.isActive, true))
.all();Option 2: Schema Only (No Seeding)
Use the Drizzle schema tables in your own project without seeding from Inflow:
import { createDb, products, customers, salesOrders } from 'inflow-get';
import { eq } from 'drizzle-orm';
// Create database
const db = createDb('./my-data.db');
// Import tables and use with Drizzle ORM
// Full TypeScript support - IDE shows all columns
const results = db.select().from(products).all();
// ^? Array<{ productId: string, name: string, sku: string, ... }>
// Joins work with full type inference
const ordersWithCustomers = db
.select({
orderNumber: salesOrders.orderNumber,
customerName: customers.name,
total: salesOrders.total,
})
.from(salesOrders)
.leftJoin(customers, eq(salesOrders.customerId, customers.customerId))
.all();Option 3: Selective Seeding
Seed only specific entities:
import { createDb, seedAllReference, seedProducts, seedVendors } from 'inflow-get';
import { createClient } from 'inflow-client';
const db = createDb('./inventory.db');
const client = createClient({ apiKey: '...', companyId: '...' });
// Seed only what you need
await seedAllReference({ db, client }); // Categories, locations, etc.
await seedProducts({ db, client }); // Products with prices, inventory
await seedVendors({ db, client }); // Vendors with vendor itemsAvailable Exports
// Database factory
import { createDb } from 'inflow-get';
// Seed functions
import {
seedAll, // Everything
seedAllReference, // Reference tables only
seedProducts, // Products + nested tables
seedVendors, // Vendors + vendor items
seedCustomers, // Customers
seedAllOrders, // PO, SO, MO
seedAllTransactions, // Transfers, adjustments
seedAllStockCounts, // Stock counts
seedAllCustomFields, // Custom field definitions
seedProductSummary, // Inventory metrics (opt-in)
} from 'inflow-get';
// Schema tables (for querying)
import {
// Reference
categories, locations, currencies, pricingSchemes,
paymentTerms, taxCodes, taxingSchemes, operationTypes,
adjustmentReasons, teamMembers,
// Custom Fields
customFieldDefinitions, customFieldDropdownOptions, customFields,
// Products
products, productPrices, productBarcodes, inventoryLines,
itemBoms, productOperations, reorderSettings,
// Vendors & Customers
vendors, vendorItems, customers,
// Orders
purchaseOrders, purchaseOrderLines,
salesOrders, salesOrderLines,
manufacturingOrders,
// Transactions
stockTransfers, stockTransferLines,
stockAdjustments, stockAdjustmentLines,
productCostAdjustments, productCostAdjustmentLines,
// Inventory Operations
stockCounts, countSheets, countSheetLines,
// Reporting
productSummary,
} from 'inflow-get';
// Types
import type { SeedContext, InflowDb } from 'inflow-get';Schema Reference
All tables are Drizzle schema definitions with full TypeScript types. Import them and get IDE autocomplete for all columns.
Reference Tables
| Table | Key Columns | Description |
|-------|-------------|-------------|
| categories | categoryId, name, parentCategoryId | Hierarchical product categories |
| locations | locationId, name, address | Warehouses, stores |
| currencies | currencyId, code, exchangeRate | Currency definitions |
| pricingSchemes | pricingSchemeId, name | Price tier schemes |
| paymentTerms | paymentTermsId, name, netDays | Payment terms |
| taxCodes | taxCodeId, name, rate | Tax rates |
| taxingSchemes | taxingSchemeId, name | Tax scheme groups |
| operationTypes | operationTypeId, name | Manufacturing operations |
| adjustmentReasons | adjustmentReasonId, name | Stock adjustment reasons |
| teamMembers | teamMemberId, name, email | Users |
Products
| Table | Key Columns | Description |
|-------|-------------|-------------|
| products | productId, name, sku, categoryId | Main product records |
| productPrices | productPriceId, productId, unitPrice | Prices per pricing scheme |
| productBarcodes | productBarcodeId, productId, barcode | Product barcodes |
| inventoryLines | inventoryLineId, productId, locationId, quantityOnHand | Stock by location |
| itemBoms | itemBomId, productId, childProductId, quantity | Bill of materials |
| productOperations | productOperationId, productId, operationTypeId | Manufacturing steps |
| reorderSettings | reorderSettingsId, productId, reorderPoint | Reorder configuration |
Vendors & Customers
| Table | Key Columns | Description |
|-------|-------------|-------------|
| vendors | vendorId, name, currencyId, paymentTermsId | Vendor records |
| vendorItems | vendorItemId, vendorId, productId, cost | Vendor-product links |
| customers | customerId, name, pricingSchemeId | Customer records |
Orders
| Table | Key Columns | Description |
|-------|-------------|-------------|
| purchaseOrders | purchaseOrderId, orderNumber, vendorId, status | Purchase orders |
| purchaseOrderLines | purchaseOrderLineId, purchaseOrderId, productId | PO line items |
| salesOrders | salesOrderId, orderNumber, customerId, status | Sales orders |
| salesOrderLines | salesOrderLineId, salesOrderId, productId | SO line items |
| manufacturingOrders | manufacturingOrderId, orderNumber, productId | Work orders |
Transactions
| Table | Key Columns | Description |
|-------|-------------|-------------|
| stockTransfers | stockTransferId, fromLocationId, toLocationId | Inventory transfers |
| stockTransferLines | stockTransferLineId, stockTransferId, productId | Transfer line items |
| stockAdjustments | stockAdjustmentId, locationId, adjustmentReasonId | Stock adjustments |
| stockAdjustmentLines | stockAdjustmentLineId, stockAdjustmentId, productId | Adjustment lines |
| productCostAdjustments | productCostAdjustmentId, adjustmentNumber | Cost adjustments |
| productCostAdjustmentLines | productCostAdjustmentLineId, productId, oldCost, newCost | Cost adjustment lines |
Inventory Operations
| Table | Key Columns | Description |
|-------|-------------|-------------|
| stockCounts | stockCountId, stockCountNumber, locationId, status | Inventory counts |
| countSheets | countSheetId, stockCountId, sheetNumber | Count sheets |
| countSheetLines | countSheetLineId, countSheetId, productId, countedQuantity | Count lines |
Reporting
| Table | Key Columns | Description |
|-------|-------------|-------------|
| productSummary | productSummaryId, productId, quantityOnHand, quantityAvailable | Inventory metrics |
Custom Fields
| Table | Key Columns | Description |
|-------|-------------|-------------|
| customFieldDefinitions | customFieldDefinitionId, label, entityType | Field definitions |
| customFieldDropdownOptions | id, entityType, dropdownOptions | Dropdown choices |
| customFields | customFieldsId, *Print settings | Print configuration |
Full Column Details
For complete column definitions, see src/db/schema.ts. All columns have TypeScript types inferred automatically when you use the Drizzle tables.
Local Development
If you're contributing to this repo (not consuming as a library):
# Install dependencies
npm install
# Generate and run migrations
npm run db:generate
npm run db:migrate
# Seed from your Inflow account
INFLOW_API_KEY=xxx INFLOW_COMPANY_ID=yyy npm run seed
# Browse data
npm run db:studioScripts
| Script | Description |
|--------|-------------|
| npm run typecheck | TypeScript type checking |
| npm run db:generate | Generate migrations from schema |
| npm run db:migrate | Run pending migrations |
| npm run db:studio | Open Drizzle Studio GUI |
| npm run seed | Seed all entities |
| npm run seed:reference | Seed reference tables only |
| npm run seed:products | Seed products only |
| npm run seed:vendors | Seed vendors only |
| npm run seed:customers | Seed customers only |
| npm run seed:orders | Seed orders only |
| npm run seed:transactions | Seed transactions only |
| npm run seed:stock-counts | Seed stock counts only |
Related Packages
- inflow-api-types - Zod schemas for Inflow API validation
- inflow-client - API client with rate limiting and pagination
