#!/usr/bin/env node
// @ts-check
/**
* Test Inflow API connectivity
* Run with: npm run test:connection
*/
import dotenv from 'dotenv';
import { InflowClient } from '../src/inflow-client.js';
// Load environment variables
dotenv.config();
async function testConnection() {
console.log('π Testing Inflow API Connection...\n');
// Validate environment variables
if (!process.env.INFLOW_API_KEY) {
console.error('β Error: INFLOW_API_KEY not set in .env file');
process.exit(1);
}
if (!process.env.INFLOW_COMPANY_ID) {
console.error('β Error: INFLOW_COMPANY_ID not set in .env file');
process.exit(1);
}
// Initialize client
const config = {
apiKey: process.env.INFLOW_API_KEY,
companyId: process.env.INFLOW_COMPANY_ID,
apiUrl: process.env.INFLOW_API_URL || 'https://cloudapi.inflowinventory.com',
apiVersion: process.env.INFLOW_API_VERSION || '2025-06-24'
};
console.log('π Configuration:');
console.log(` API URL: ${config.apiUrl}`);
console.log(` Company ID: ${config.companyId}`);
console.log(` API Version: ${config.apiVersion}`);
console.log(` API Key: ${config.apiKey.substring(0, 10)}...`);
console.log();
const client = new InflowClient(config);
// Test 1: List products (limit to 5 for testing)
console.log('π¦ Test 1: Listing products (limit 5)...');
const productsResult = await client.listProducts({ limit: 5 });
if (productsResult.success) {
console.log(`β
Success! Found ${productsResult.data.length} products`);
if (productsResult.data.length > 0) {
console.log('\n First product:');
const firstProduct = productsResult.data[0];
console.log(` - ID: ${firstProduct.productId}`);
console.log(` - Name: ${firstProduct.name || 'N/A'}`);
console.log(` - SKU: ${firstProduct.sku || 'N/A'}`);
console.log(` - Description: ${firstProduct.description || 'N/A'}`);
console.log(` - Active: ${firstProduct.isActive}`);
}
} else {
console.error(`β Failed: ${productsResult.error}`);
if (productsResult.details) {
console.error(' Details:', JSON.stringify(productsResult.details, null, 2));
}
}
console.log();
// Test 2: Search for products with 'smart' search
console.log('π Test 2: Smart search for products...');
const searchResult = await client.listProducts({
smart: 'ingredient',
limit: 3
});
if (searchResult.success) {
console.log(`β
Success! Found ${searchResult.data.length} products matching "ingredient"`);
searchResult.data.forEach((product, index) => {
console.log(`\n ${index + 1}. ${product.name || 'Unnamed'}`);
console.log(` SKU: ${product.sku || 'N/A'}`);
console.log(` ID: ${product.productId}`);
});
} else {
console.error(`β Failed: ${searchResult.error}`);
}
console.log();
// Test 3: If we found a product, get its details with inventory
if (productsResult.success && productsResult.data.length > 0) {
const testProductId = productsResult.data[0].productId;
console.log(`π Test 3: Getting product details with inventory (ID: ${testProductId})...`);
const productResult = await client.getProduct(testProductId, 'inventoryLines,defaultImage');
if (productResult.success) {
console.log('β
Success! Product details retrieved');
console.log(` - Name: ${productResult.data.name}`);
console.log(` - SKU: ${productResult.data.sku || 'N/A'}`);
if (productResult.data.inventoryLines && productResult.data.inventoryLines.length > 0) {
console.log(` - Inventory lines: ${productResult.data.inventoryLines.length}`);
productResult.data.inventoryLines.forEach((line, idx) => {
console.log(` ${idx + 1}. Qty: ${line.quantity || 0}`);
});
} else {
console.log(' - No inventory lines');
}
} else {
console.error(`β Failed: ${productResult.error}`);
}
console.log();
// Test 4: Get product inventory summary
console.log(`π Test 4: Getting inventory summary (ID: ${testProductId})...`);
const summaryResult = await client.getProductSummary(testProductId);
if (summaryResult.success) {
console.log('β
Success! Inventory summary retrieved');
console.log(' Summary:', JSON.stringify(summaryResult.data, null, 2));
} else {
console.error(`β Failed: ${summaryResult.error}`);
}
}
console.log('\n⨠Connection tests completed!');
}
// Run tests
testConnection().catch(error => {
console.error('β Unexpected error:', error);
process.exit(1);
});