npm package: @pliancy/ingram-micro-sdk
Description: This SDK provides a way to interact with the Ingram Micro API v6
Author: Santese Smith
Latest version: 1.0.0

# Ingram Micro SDK

This SDK provides a way to interact with the Ingram Micro API v6

## Installation

You can install the sdk using npm:

```bash
npm install @pliancy/ingram-micro-sdk
```

Or using yarn:

```bash
yarn add @pliancy/ingram-micro-sdk
```

Or using pnpm:

```bash
pnpm install @pliancy/ingram-micro-sdk
```

## Configuration

To use the SDK, you'll need to initialize it with your OAuth credentials:

```typescript
import { IngramMicro } from '@pliancy/ingram-micro-sdk'

const ingramMicro = new IngramMicro({
    clientId: 'your-client-id',
    clientSecret: 'your-client-secret',
    customerNumber: 'your-customer-number',
    applicationId: 'your-application-id',
    countryCode: 'US', // optional, defaults to 'US'
})
```

## Usage

### Invoices

#### List Invoices

You can list invoices with optional filters:

```typescript
const invoices = await ingramMicro.invoices.list({
    invoiceFromDate: '2024-01-01',
    invoiceToDate: '2024-03-31',
    pageSize: 100,
    orderby: 'InvoiceDate',
    direction: 'desc',
})
```

#### Get Invoice Details

To retrieve detailed information for a specific invoice:

```typescript
const invoice = await ingramMicro.invoices.get('invoice-number', {
    customerType: 'invoice',
    includeSerialNumbers: true,
})
```

### Available Parameters

#### List Invoices Parameters

```typescript
interface ListInvoicesParams {
    /** Search by payment terms net date in yyyy-MM-dd format */
    paymentTermsNetDate?: string
    /** Search by invoice date in yyyy-MM-dd format */
    invoiceDate?: string
    /** Search by invoice due date in yyyy-MM-dd format */
    invoiceDueDate?: string
    /** Search by order date in yyyy-MM-dd format */
    orderDate?: string
    /** Search by order from date in yyyy-MM-dd format */
    orderFromDate?: string
    /** Search by order to date in yyyy-MM-dd format */
    orderToDate?: string
    /** Search by order number */
    orderNumber?: string
    /** Search by delivery number */
    deliveryNumber?: string
    /** The Ingram Micro invoice number */
    invoiceNumber?: string
    /** Ingram Micro invoice status */
    invoiceStatus?: string
    /** Number of records per page (default: 25, max: 100) */
    pageSize?: number
    /** Page number (default: 1) */
    pageNumber?: number
    /** Column name to sort by */
    orderby?: string
    /** Sort direction ('asc' or 'desc') */
    direction?: 'asc' | 'desc'
}
```

## Pagination

The SDK handles pagination automatically. You can control the page size using the `pageSize` parameter (maximum 100 records per page). The SDK will fetch all pages and return the combined results.

## Authentication

The SDK handles OAuth 2.0 authentication automatically, including:

-   Token acquisition
-   Token refresh when expired
-   Retry of failed requests due to token expiration

## TypeScript Support

This SDK is written in TypeScript and provides full type definitions for all API responses and parameters.

## Error Handling

The SDK includes built-in error handling that will:

-   Automatically retry requests that fail due to authentication issues
-   Provide clear error messages for API errors
-   Include HTTP status codes and error details in thrown errors

## Contributing

If you'd like to contribute to the development of this SDK, please make a PR

## License

This SDK is released under the [MIT License](LICENSE).

## API Documentation

For more details about the Ingram Micro API, please refer to their [official API documentation](https://developer.ingrammicro.com/zh-hans/api/63).