> ## Documentation Index
> Fetch the complete documentation index at: https://docs.dodopayments.com/llms.txt
> Use this file to discover all available pages before exploring further.

# TypeScript

> Intégrez Dodo Payments dans vos applications TypeScript et Node.js avec sécurité de type et support moderne d'async/await

Le SDK TypeScript fournit un accès pratique côté serveur à l'API REST de Dodo Payments pour les applications TypeScript et JavaScript. Il propose des définitions de type complètes, la gestion des erreurs, des tentatives, des délais d'attente et une pagination automatique pour un traitement des paiements sans faille.

## Installation

Installez le SDK avec le gestionnaire de paquets de votre choix:

<CodeGroup>
  ```bash npm theme={null}
  npm install dodopayments
  ```

  ```bash yarn theme={null}
  yarn add dodopayments
  ```

  ```bash pnpm theme={null}
  pnpm add dodopayments
  ```
</CodeGroup>

## Démarrage rapide

Initialisez le client avec votre clé API et commencez à traiter les paiements :

```javascript theme={null}
import DodoPayments from 'dodopayments';

const client = new DodoPayments({
  bearerToken: process.env['DODO_PAYMENTS_API_KEY'], // This is the default and can be omitted
  environment: 'test_mode', // defaults to 'live_mode'
});

const checkoutSessionResponse = await client.checkoutSessions.create({
  product_cart: [{ product_id: 'product_id', quantity: 1 }],
});

console.log(checkoutSessionResponse.session_id);
```

<Warning>
  Stockez toujours vos clés API de manière sécurisée en utilisant des variables d’environnement. Ne les validez jamais dans le contrôle de version ni ne les exposez dans du code côté client.
</Warning>

## Fonctionnalités principales

<CardGroup cols={2}>
  <Card title="TypeScript First" icon="shield-check">
    Prise en charge complète de TypeScript avec des définitions de types exhaustives pour tous les points de terminaison de l’API
  </Card>

  <Card title="Auto-Pagination" icon="arrows-rotate">
    La pagination automatique pour les réponses de listes facilite le traitement d’ensembles de données volumineux
  </Card>

  <Card title="Error Handling" icon="triangle-exclamation">
    Types d’erreur intégrés avec des messages détaillés pour différents scénarios d’échec
  </Card>

  <Card title="Smart Retries" icon="repeat">
    Reprises automatiques configurables avec backoff exponentiel pour les erreurs transitoires
  </Card>
</CardGroup>

## Configuration

### Variables d'environnement

Définissez des variables d'environnement pour une configuration sécurisée :

```bash .env theme={null}
DODO_PAYMENTS_API_KEY=your_api_key_here
```

### Configuration des délais d'attente

Configurez les délais d'attente des requêtes globalement ou par requête :

```typescript theme={null}
// Configure default timeout for all requests (default is 1 minute)
const client = new DodoPayments({
  timeout: 20 * 1000, // 20 seconds
});

// Override per-request
await client.checkoutSessions.create(
  { product_cart: [{ product_id: 'product_id', quantity: 1 }] },
  { timeout: 5 * 1000 },
);
```

### Configuration des tentatives

Configurez le comportement de tentative automatique :

```javascript theme={null}
// Configure default for all requests (default is 2 retries)
const client = new DodoPayments({
  maxRetries: 0, // disable retries
});

// Override per-request
await client.checkoutSessions.create(
  { product_cart: [{ product_id: 'product_id', quantity: 1 }] },
  { maxRetries: 5 },
);
```

<Tip>
  Le SDK relance automatiquement les requêtes échouées en raison d’erreurs réseau ou de problèmes serveur (réponses 5xx) avec un backoff exponentiel.
</Tip>

## Opérations courantes

### Créer une session de paiement

Générez une session de paiement pour collecter des informations de paiement :

```typescript theme={null}
const session = await client.checkoutSessions.create({
  product_cart: [
    {
      product_id: 'prod_123',
      quantity: 1
    }
  ],
  return_url: 'https://yourdomain.com/return'
});

console.log('Redirect to:', session.checkout_url);
```

### Gérer les clients

Créez et récupérez des informations sur les clients :

```typescript theme={null}
// Create a customer
const customer = await client.customers.create({
  email: 'customer@example.com',
  name: 'John Doe',
  metadata: {
    user_id: '12345'
  }
});

// Retrieve customer
const retrieved = await client.customers.retrieve('cus_123');
console.log(`Customer: ${retrieved.name} (${retrieved.email})`);
```

### Gérer les abonnements

Créez et gérez des abonnements récurrents :

```typescript theme={null}
// Create a subscription
const subscription = await client.subscriptions.create({
  customer_id: 'cus_123',
  product_id: 'prod_456',
  price_id: 'price_789'
});

// Retrieve subscription usage history
const usageHistory = await client.subscriptions.retrieveUsageHistory('sub_123', {
  start_date: '2024-01-01T00:00:00Z',
  end_date: '2024-03-31T23:59:59Z'
});
```

## Facturation basée sur l'utilisation

### Ingest Usage Events

Suivez des événements personnalisés pour la facturation basée sur l'utilisation :

```typescript theme={null}
await client.usageEvents.ingest({
  events: [
    {
      event_id: 'api_call_12345',
      customer_id: 'cus_abc123',
      event_name: 'api_request',
      timestamp: '2024-01-15T10:30:00Z',
      metadata: {
        endpoint: '/api/v1/users',
        method: 'GET',
        tokens_used: '150'
      }
    }
  ]
});
```

<Info>
  Les événements doivent avoir des valeurs `event_id` uniques pour garantir l’idempotence. Les identifiants en double au sein d’une même requête sont rejetés, et les requêtes subséquentes contenant des identifiants existants sont ignorées.
</Info>

### Récupérer les événements d'utilisation

Récupérez des informations détaillées sur les événements d'utilisation :

```typescript theme={null}
// Get a specific event
const event = await client.usageEvents.retrieve('api_call_12345');

// List events with filtering
const events = await client.usageEvents.list({
  customer_id: 'cus_abc123',
  event_name: 'api_request',
  start: '2024-01-14T10:30:00Z',
  end: '2024-01-15T10:30:00Z'
});
```

## Configuration du proxy

Configurez les paramètres du proxy pour différents environnements d'exécution :

### Node.js (en utilisant undici)

```typescript theme={null}
import DodoPayments from 'dodopayments';
import * as undici from 'undici';

const proxyAgent = new undici.ProxyAgent('http://localhost:8888');
const client = new DodoPayments({
  fetchOptions: {
    dispatcher: proxyAgent,
  },
});
```

### Bun

```typescript theme={null}
import DodoPayments from 'dodopayments';

const client = new DodoPayments({
  fetchOptions: {
    proxy: 'http://localhost:8888',
  },
});
```

### Deno

```typescript theme={null}
import DodoPayments from 'npm:dodopayments';

const httpClient = Deno.createHttpClient({ proxy: { url: 'http://localhost:8888' } });
const client = new DodoPayments({
  fetchOptions: {
    client: httpClient,
  },
});
```

## Journalisation

Contrôlez la verbosité des journaux en utilisant des variables d'environnement ou des options client :

```typescript theme={null}
// Via client option
const client = new DodoPayments({
  logLevel: 'debug', // Show all log messages
});
```

```bash theme={null}
# Via environment variable
export DODO_PAYMENTS_LOG=debug
```

**Niveaux de journalisation disponibles :**

* `'debug'` - Affiche les messages de débogage, les infos, les avertissements et les erreurs
* `'info'` - Affiche les messages d’info, les avertissements et les erreurs
* `'warn'` - Affiche les avertissements et les erreurs (par défaut)
* `'error'` - Affiche uniquement les erreurs
* `'off'` - Désactive toute journalisation

<Warning>
  Au niveau de débogage, toutes les requêtes et réponses HTTP sont journalisées, y compris les en-têtes et les corps. Certains en-têtes d’authentification sont masqués, mais des données sensibles présentes dans les corps peuvent rester visibles.
</Warning>

## Migration depuis le SDK Node.js

Si vous mettez à niveau depuis le SDK Node.js hérité, le SDK TypeScript offre une sécurité de type améliorée et des fonctionnalités :

<Card title="View Migration Guide" icon="arrow-right" href="https://github.com/dodopayments/dodopayments-typescript/blob/main/MIGRATION.md">
  Apprenez comment migrer du SDK Node.js vers le SDK TypeScript
</Card>

## Auto-Pagination

Les méthodes de liste de l’API DodoPayments sont paginées. Vous pouvez utiliser la syntaxe `for await … of` pour parcourir les éléments de toutes les pages :

```typescript theme={null}
async function fetchAllPayments() {
  const allPayments = [];
  // Automatically fetches more pages as needed.
  for await (const paymentListResponse of client.payments.list()) {
    allPayments.push(paymentListResponse);
  }
  return allPayments;
}
```

Alternativement, vous pouvez demander une seule page à la fois :

```typescript theme={null}
let page = await client.payments.list();
for (const paymentListResponse of page.items) {
  console.log(paymentListResponse);
}

// Convenience methods are provided for manually paginating:
while (page.hasNextPage()) {
  page = await page.getNextPage();
  // ...
}
```

## Exigences

Les environnements d'exécution suivants sont pris en charge :

* Navigateurs Web (Chrome, Firefox, Safari, Edge à jour, et plus encore)
* Node.js 20 LTS ou version ultérieure ([non-EOL](https://endoflife.date/nodejs))
* Deno v1.28.0 ou supérieur
* Bun 1.0 ou version ultérieure
* Cloudflare Workers
* Vercel Edge Runtime
* Jest 28 ou supérieur avec l’environnement `"node"`
* Nitro v2.6 ou supérieur

TypeScript >= 4.9 est pris en charge.

## Ressources

<CardGroup cols={2}>
  <Card title="GitHub Repository" icon="github" href="https://github.com/dodopayments/dodopayments-typescript">
    Consultez le code source et contribuez
  </Card>

  <Card title="API Reference" icon="book" href="/api-reference/introduction">
    Documentation complète de l’API
  </Card>

  <Card title="Discord Community" icon="discord" href="https://discord.gg/bYqAp4ayYh">
    Obtenez de l’aide et connectez-vous avec les développeurs
  </Card>

  <Card title="Report Issues" icon="bug" href="https://github.com/dodopayments/dodopayments-typescript/issues">
    Signalez des bugs ou demandez des fonctionnalités
  </Card>
</CardGroup>

## Support

Besoin d'aide avec le SDK TypeScript ?

* **Discord** : Rejoignez notre [serveur communautaire](https://discord.gg/bYqAp4ayYh) pour un support en temps réel
* **Email** : Contactez-nous à [support@dodopayments.com](mailto:support@dodopayments.com)
* **GitHub** : Ouvrez un problème sur le [dépôt](https://github.com/dodopayments/dodopayments-typescript)

## Contribuer

Nous accueillons les contributions ! Consultez les [directives de contribution](https://github.com/dodopayments/dodopayments-typescript/blob/main/CONTRIBUTING.md) pour commencer.

Nous accueillons les contributions ! Consultez les [lignes directrices pour contribuer](https://github.com/dodopayments/dodopayments-typescript/blob/main/CONTRIBUTING.md) pour commencer.
