> ## 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

> अपने TypeScript और Node.js अनुप्रयोगों में Dodo Payments को टाइप सुरक्षा और आधुनिक async/await समर्थन के साथ एकीकृत करें

TypeScript SDK Dodo Payments REST API के लिए TypeScript और JavaScript अनुप्रयोगों के लिए सुविधाजनक सर्वर-साइड पहुंच प्रदान करता है। इसमें व्यापक प्रकार की परिभाषाएँ, त्रुटि प्रबंधन, पुनः प्रयास, समय सीमा, और निर्बाध भुगतान प्रसंस्करण के लिए स्वचालित-पृष्ठन शामिल हैं।

## स्थापना

अपने पसंदीदा पैकेज प्रबंधक का उपयोग करके SDK इंस्टॉल करें:

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

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

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

## त्वरित प्रारंभ

अपने API कुंजी के साथ क्लाइंट को प्रारंभ करें और भुगतान प्रसंस्करण शुरू करें:

```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>
  हमेशा अपने API कुंजियाँ environment variables का उपयोग करके सुरक्षित रूप से संग्रहित करें। उन्हें version control में कभी commit न करें या client-side code में उजागर न करें।
</Warning>

## मुख्य विशेषताएँ

<CardGroup cols={2}>
  <Card title="TypeScript First" icon="shield-check">
    सभी API endpoints के लिए व्यापक type definitions के साथ पूर्ण TypeScript समर्थन
  </Card>

  <Card title="Auto-Pagination" icon="arrows-rotate">
    बड़ी datasets के साथ काम करना सहज बनाने के लिए सूची प्रतिक्रियाओं के लिए स्वचालित पेजिनेशन
  </Card>

  <Card title="Error Handling" icon="triangle-exclamation">
    विभिन्न असफलता परिदृश्यों के लिए विस्तृत संदेशों वाले बिल्ट-इन त्रुटि प्रकार
  </Card>

  <Card title="Smart Retries" icon="repeat">
    अस्थायी त्रुटियों के लिए exponential backoff के साथ कॉन्फ़िगर करने योग्य स्वचालित पुन: प्रयास
  </Card>
</CardGroup>

## कॉन्फ़िगरेशन

### पर्यावरण चर

सुरक्षित कॉन्फ़िगरेशन के लिए पर्यावरण चर सेट करें:

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

### समय सीमा कॉन्फ़िगरेशन

वैश्विक या प्रति-अनुरोध समय सीमा कॉन्फ़िगर करें:

```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 },
);
```

### पुनः प्रयास कॉन्फ़िगरेशन

स्वचालित पुनः प्रयास व्यवहार कॉन्फ़िगर करें:

```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>
  SDK स्वचालित रूप से उन अनुरोधों को पुनः प्रयास करता है जो नेटवर्क त्रुटियों या सर्वर समस्याओं (5xx प्रतिक्रियाएँ) के कारण विफल हो जाते हैं, साथ ही exponential backoff के साथ।
</Tip>

## सामान्य संचालन

### चेकआउट सत्र बनाएं

भुगतान जानकारी एकत्र करने के लिए एक चेकआउट सत्र उत्पन्न करें:

```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);
```

### ग्राहकों का प्रबंधन करें

ग्राहक जानकारी बनाएं और पुनः प्राप्त करें:

```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})`);
```

### सदस्यताओं को संभालें

आवर्ती सदस्यताओं का निर्माण और प्रबंधन करें:

```typescript theme={null}
// Create a subscription
const subscription = await client.subscriptions.create({
  billing: {
    country: 'US',
    city: 'San Francisco',
    state: 'CA',
    street: '1 Market St',
    zipcode: '94105',
  },
  customer: {
    customer_id: 'cus_123', // or pass { email, name } to create a new customer
  },
  product_id: 'pdt_456',
  quantity: 1,
});

// Charge an on-demand subscription
// product_price is in the lowest currency denomination (e.g., 2500 = $25.00 USD)
const chargeResponse = await client.subscriptions.charge(subscription.subscription_id, {
  product_price: 2500,
});

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

<Info>
  `billing` कम से कम दो-अक्षर के ISO देश कोड की आवश्यकता होती है। `customer` एक संघ है `{ customer_id }` (मौजूदा ग्राहक को जोड़ने के लिए) या `{ email, name? }` (नया बनाने के लिए)। `product_price` को न्यूनतम मुद्रा संप्रदाय में व्यक्त किया जाता है।
</Info>

## उपयोग-आधारित बिलिंग

### उपयोग घटनाओं को इकट्ठा करें

उपयोग-आधारित बिलिंग के लिए कस्टम इवेंट्स को ट्रैक करें:

```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>
  इवेंट्स में अद्वितीय `event_id` मान होना चाहिए ताकि वे आइडेमोटेंसी बनें। उसी अनुरोध में डुप्लिकेट आईडी अस्वीकार कर दिए जाते हैं, और मौजूदा आईडी के साथ बाद के अनुरोधों को नज़रअंदाज़ किया जाता है।
</Info>

### उपयोग घटनाओं को पुनः प्राप्त करें

उपयोग घटनाओं के बारे में विस्तृत जानकारी प्राप्त करें:

```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'
});
```

## प्रॉक्सी कॉन्फ़िगरेशन

विभिन्न रनटाइम्स के लिए प्रॉक्सी सेटिंग्स कॉन्फ़िगर करें:

### Node.js (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,
  },
});
```

## लॉगिंग

पर्यावरण वेरिएबल्स या क्लाइंट विकल्पों का उपयोग करके लॉग का विवरण कन्ट्रोल करें:

```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
```

**उपलब्ध लॉग स्तर:**

* `'debug'` - डिबग संदेश, जानकारी, चेतावनी, और त्रुटियाँ दिखाएँ
* `'info'` - जानकारी संदेश, चेतावनी, और त्रुटियाँ दिखाएँ
* `'warn'` - चेतावनी और त्रुटियाँ दिखाएँ (डिफ़ॉल्ट)
* `'error'` - केवल त्रुटियाँ दिखाएँ
* `'off'` - सभी लॉगिंग को निष्क्रिय करें

<Warning>
  डिबग स्तर पर, सभी HTTP अनुरोध और उत्तर लॉग की जाती हैं, जिसमें हेडर और बॉडी शामिल हैं। कुछ प्रमाणीकरण हेडर्स को हटा दिया गया है, लेकिन बॉडी में संवेदनशील डेटा अभी भी दिखाई दे सकता है।
</Warning>

## Node.js SDK से माइग्रेशन

यदि आप पुराने Node.js SDK से अपग्रेड कर रहे हैं, तो TypeScript SDK में सुधारित टाइप सुरक्षा और विशेषताएँ हैं:

<Card title="View Migration Guide" icon="arrow-right" href="https://github.com/dodopayments/dodopayments-typescript/blob/main/MIGRATION.md">
  जानें कि कैसे Node.js SDK से TypeScript SDK में माइग्रेट किया जाए
</Card>

## ऑटो-पैजिनेशन

DodoPayments API में सूची पद्धतियाँ पेजिनेटेड होती हैं। आप सभी पृष्ठों में आइटम्स को पुनरावृत्त करने के लिए `for await … of` सिंटैक्स का उपयोग कर सकते हैं:

```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;
}
```

वैकल्पिक रूप से, आप एक समय में एक पृष्ठ का अनुरोध कर सकते हैं:

```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();
  // ...
}
```

## आवश्यकताएँ

निम्नलिखित रनटाइम्स समर्थित हैं:

* वेब ब्राउज़र्स (अप-टू-डेट Chrome, Firefox, Safari, Edge, और अधिक)
* Node.js 20 LTS या बाद के ([non-EOL](https://endoflife.date/nodejs)) संस्करण
* Deno v1.28.0 या उच्चतर
* Bun 1.0 या बाद का
* Cloudflare Workers
* Vercel Edge Runtime
* `"node"` वातावरण के साथ Jest 28 या अधिक
* Nitro v2.6 या अधिक

TypeScript >= 4.9 समर्थित है।

## संसाधन

<CardGroup cols={2}>
  <Card title="GitHub Repository" icon="github" href="https://github.com/dodopayments/dodopayments-typescript">
    स्रोत कोड देखें और योगदान करें
  </Card>

  <Card title="API Reference" icon="book" href="/api-reference/introduction">
    संपूर्ण API डाक्यूमेंटेशन
  </Card>

  <Card title="Discord Community" icon="discord" href="https://discord.gg/bYqAp4ayYh">
    सहायता प्राप्त करें और डेवलपर्स से जुड़ें
  </Card>

  <Card title="Report Issues" icon="bug" href="https://github.com/dodopayments/dodopayments-typescript/issues">
    बग की रिपोर्ट करें या विशेषताओं का अनुरोध करें
  </Card>
</CardGroup>

## समर्थन

TypeScript SDK के साथ मदद की आवश्यकता है?

* **Discord**: हमारे [सामुदायिक सर्वर](https://discord.gg/bYqAp4ayYh) में शामिल हों और वास्तविक समय में समर्थन प्राप्त करें
* **ईमेल**: हमें [support@dodopayments.com](mailto:support@dodopayments.com) पर संपर्क करें
* **GitHub**: [repository](https://github.com/dodopayments/dodopayments-typescript) पर एक मुद्दा खोलें

## योगदान

हम योगदान का स्वागत करते हैं! प्रारंभ करने के लिए [contributing guidelines](https://github.com/dodopayments/dodopayments-typescript/blob/main/CONTRIBUTING.md) देखें।
