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

# المصادقة

> تهيئة YoukaClient باستخدام مفتاح API الخاص بك

يقوم الـ SDK بمصادقة كل طلب باستخدام مفتاح API من نوع bearer. تنشئ `YoukaClient` مرة واحدة وتعيد استخدامه طوال عمر العملية (process) الخاصة بك.

## `new YoukaClient(options)`

```ts theme={null}
import { YoukaClient } from "@youka/ar/sdk";

const client = new YoukaClient({
  apiKey: process.env.YOUKA_API_KEY!,
});
```

### الخيارات

<ParamField path="apiKey" type="string" required>
  مفتاح API الخاص بـ Youka. أنشئ واحدًا من
  [online.youka.io/account](https://online.youka.io/account) ضمن **API keys**.
</ParamField>

<ParamField path="fetch" type="typeof fetch">
  تنفيذ `fetch` مخصص. الإعداد الافتراضي هو `fetch` العام (global). استخدم هذا من أجل
  إدخال التسجيل (logging)، أو البروكسي، أو وسيط (middleware) مخصص لإعادة المحاولة.
</ParamField>

## تخزين مفتاح API

<Warning>
  تمنح مفاتيح API صلاحية الوصول إلى الفوترة الخاصة بك. لا تقم أبدًا بإضافتها إلى نظام التحكم بالمصادر.
</Warning>

الأنماط الموصى بها:

<Tabs>
  <Tab title="متغير البيئة">
    ```ts theme={null}
    const client = new YoukaClient({
      apiKey: process.env.YOUKA_API_KEY!,
    });
    ```
  </Tab>

  <Tab title="مدير الأسرار">
    ```ts theme={null}
    import { getSecret } from "./my-secret-manager";

    const client = new YoukaClient({
      apiKey: await getSecret("youka-api-key"),
    });
    ```
  </Tab>
</Tabs>

## إدخال fetch مخصص

تستخدم كل طريقة في الـ SDK قيمة `fetch` التي تمررها إلى المُنشئ. هذا يجعل من السهل إضافة التسجيل أو وسيط:

```ts theme={null}
import { YoukaClient } from "@youka/ar/sdk";

const instrumentedFetch: typeof fetch = async (input, init) => {
  const start = Date.now();
  const response = await fetch(input, init);
  console.log(
    `${init?.method ?? "GET"} ${input} ${response.status} in ${Date.now() - start}ms`,
  );
  return response;
};

const client = new YoukaClient({
  apiKey: process.env.YOUKA_API_KEY!,
  fetch: instrumentedFetch,
});
```

## خيارات لكل طلب

تقبل كل طريقة وسيطًا ثانيًا أو ثالثًا اختياريًا يحتوي على خيارات على مستوى الطلب:

```ts theme={null}
await client.projects.create(body, {
  idempotencyKey: "import-2026-04-08-song-001",
  signal: abortController.signal,
});
```

<ParamField path="idempotencyKey" type="string">
  يتم تمريره كترويسة `Idempotency-Key`. يؤدي استخدام المفتاح نفسه مع الحمولة نفسها إلى
  إرجاع النتيجة الأصلية بدلًا من إنشاء نسخة مكررة. راجع [API
  idempotency](/ar/api/idempotency).
</ParamField>

<ParamField path="signal" type="AbortSignal">
  إشارة إلغاء قياسية. تُلغي الطلبات قيد التنفيذ وعمليات الاستطلاع طويلة الأمد
  `client.tasks.wait(...)`, `client.projects.wait(...)`, و
  `client.exports.wait(...)`.
</ParamField>

## ما التالي

* [Projects](/ar/sdk/projects) — أنشئ مشروعك الأول
* [Errors](/ar/sdk/errors) — تعامل مع حالات فشل المصادقة
* [API authentication](/ar/api/authentication) — تفاصيل ترويسات HTTP الخام
