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

# নিরাপত্তা ও ত্রুটি

> পার্টনার ক্রেডেনশিয়াল সুরক্ষিত রাখুন, গ্রাহকদের আলাদা রাখুন এবং SDK ব্যর্থতা সামলান

## পার্টনার কী সুরক্ষিত রাখুন

পার্টনার কী প্রজেক্ট-জুড়ে অপারেশনের অনুমতি দেয়। এগুলো সার্ভার-সাইড সিক্রেট ম্যানেজার বা এনক্রিপ্টেড এনভায়রনমেন্ট
ভ্যারিয়েবলে রাখুন এবং শুধু বিশ্বস্ত ব্যাকএন্ড প্রসেসে ইনজেক্ট করুন।

> [!WARNING]
>
> পার্টনার কী কখনো কনফিগারেশন, API রেসপন্স, কোয়েরি প্যারামিটার বা রেন্ডার করা এনভায়রনমেন্ট ভ্যারিয়েবল হিসেবে
> আপনার ফ্রন্টএন্ডে পাঠাবেন না। Social media studio-কে কল করার আগে সাইন-ইন করা গ্রাহককে অনুমোদন দেয় এমন সীমিত এন্ডপয়েন্ট আপনার
> ব্যাকএন্ডে রাখুন।

ডেভেলপমেন্টের সময় `pk_test_` কী এবং শুধু প্রোডাকশনে `pk_live_` কী ব্যবহার করুন। টেস্ট ও লাইভ প্রজেক্ট আলাদা রাখুন,
নিয়মিত কী রোটেট করুন, এবং ফাঁস হয়ে থাকতে পারে মনে হলে সাথে সাথে কী প্রত্যাহার করুন।

## প্রতিটি গ্রাহক-অপারেশন অনুমোদন করুন

SDK আপনার অ্যাপ্লিকেশনকে প্রমাণীকরণ করে, আপনার প্রোডাক্ট ব্যবহারকারী গ্রাহককে নয়। প্রতিটি SDK কলের আগে:

1. আপনার অ্যাপ্লিকেশনে গ্রাহককে প্রমাণীকরণ করুন।
2. আপনার সার্ভারে গ্রাহকের সংরক্ষিত Social media studio `endUserId` নির্ণয় করুন।
3. অনুরোধ করা কানেকশন ও পোস্ট ID যে ওই গ্রাহকেরই, তা যাচাই করুন।
4. সার্ভারে নির্ণয় করা ওই ID দিয়ে SDK কল করুন।

ডাটাবেসে মালিকানা যাচাই না করে ব্রাউজার থেকে আসা যেকোনো `endUserId` সরাসরি পাস করবেন না।

## কী স্কোপ

পার্টনার কী এমনভাবে সীমিত করা যায় যাতে একটি সার্ভিসের প্রয়োজনীয় সক্ষমতাটুকুই থাকে:

| রিসোর্স | পড়ার স্কোপ | লেখার স্কোপ |
| - | - | - |
| এন্ড ইউজার | `end_users:read` | `end_users:write` |
| সংযোগ | `connections:read` | `connections:write` |
| কানেক্ট সেশন | `connect_sessions:read` | `connect_sessions:write` |
| পোস্ট | `posts:read` | `posts:write` |
| মিডিয়া | — | `media:write` |
| ওয়েবহুক | `webhooks:read` | `webhooks:write` |

সম্ভব হলে স্বতন্ত্র সার্ভিসের জন্য আলাদা, ন্যূনতম-অনুমতির কী ব্যবহার করুন।

## SDK ত্রুটি সামলান

প্রতিটি ব্যর্থ API রিকোয়েস্ট `SoMePlatformError` থ্রো করে:

```ts theme={null}
import {
  SoMePlatformError,
  SoMePlatformClient,
} from "@social-media-scheduler/sdk";

try {
  await soMe.posts.get(endUserId, postId);
} catch (error) {
  if (error instanceof SoMePlatformError) {
    logger.error("Social media studio request failed", {
      status: error.status,
      details: error.details,
    });
  }
  throw error;
}
```

| স্ট্যাটাস | অর্থ | প্রস্তাবিত করণীয় |
| - | - | - |
| `0` | নেটওয়ার্ক ত্রুটি, DNS ব্যর্থতা বা রিকোয়েস্ট টাইমআউট | নিরাপদ হলে ব্যাকঅফসহ রিট্রাই করুন |
| `400` | ভুল ইনপুট, প্ল্যাটফর্ম অমিল বা অননুমোদিত রিটার্ন URL | রিকোয়েস্ট ঠিক করুন; অপরিবর্তিত অবস্থায় রিট্রাই করবেন না |
| `401` | পার্টনার কী নেই, অবৈধ, মেয়াদোত্তীর্ণ বা প্রত্যাহার করা | থামুন এবং কী রোটেট বা বদলান |
| `403` | কী-তে প্রয়োজনীয় স্কোপ নেই | সঠিক স্কোপের কী ব্যবহার করুন |
| `404` | এই প্রজেক্ট/এন্ড ইউজারে রিসোর্সটি নেই | সংরক্ষিত ID মিলিয়ে দেখুন |
| `409` | গ্রাহকের ওয়ার্কস্পেস প্রস্তুত নয় | জানানো অবস্থার সমাধান করে আবার চেষ্টা করুন |
| `429` | রেট লিমিটে পৌঁছেছে | রিট্রাই নির্দেশনা মানুন এবং এক্সপোনেনশিয়াল ব্যাকঅফ ব্যবহার করুন |
| `5xx` | Social media studio সার্ভিসের সাময়িক ব্যর্থতা | সীমা-নির্দিষ্ট এক্সপোনেনশিয়াল ব্যাকঅফসহ রিট্রাই করুন |

পোস্ট তৈরির ক্ষেত্রে একই idempotency কী পুনর্ব্যবহার করলেই কেবল রিট্রাই নিরাপদ। অন্য write অপারেশনের ফলাফল
নিশ্চিত করতে না পারলে সেগুলো অন্ধভাবে রিট্রাই করবেন না।

## লগিং

আপনার গ্রাহক ID, এন্ড ইউজার ID, অপারেশন, HTTP স্ট্যাটাস ও idempotency কী-র মতো রিকোয়েস্টের প্রেক্ষাপট লগ করুন। সম্পূর্ণ
পার্টনার কী, ওয়েবহুক সিক্রেট, OAuth টোকেন, presigned আপলোড URL বা সংবেদনশীল গ্রাহক মেটাডেটা লগ করবেন না।


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.