import{j as e,c as u}from"./index-C0CnWKTJ.js";import{r as m}from"./vendor-animations-CsoOZIH8.js";const b="_developersPage_1ypv1_1",y="_backgroundGlow_1ypv1_29",_="_container_1ypv1_41",f="_content_1ypv1_52",T="_header_1ypv1_65",I="_sectionContainer_1ypv1_84",N="_fadeIn_1ypv1_1",l={developersPage:b,backgroundGlow:y,container:_,content:f,header:T,sectionContainer:I,fadeIn:N},S="_sidebar_ijgne_1",k="_logo_ijgne_18",v="_nav_ijgne_31",A="_separator_ijgne_43",C="_navItem_ijgne_50",E="_active_ijgne_70",q="_badge_ijgne_76",P="_supportInfo_ijgne_88",i={sidebar:S,logo:k,nav:v,separator:A,navItem:C,active:E,badge:q,supportInfo:P},H=({activeSection:r,setActiveSection:h})=>{const[x,a]=m.useState(0),p=()=>{x<10?a(n=>n+1):a(0)},g=[{id:"websockets",label:"WebSocket API",badge:"v1"},{id:"separator",type:"separator"},{id:"oauth",label:"Аутентификация OAuth2",badge:"v2"},{id:"partner-donations",label:"Партнёрские донаты",badge:"v2"},{id:"webhooks-v2",label:"Вебхуки партнёрских донатов",badge:"v2"},{id:"separator-2",type:"separator"},{id:"errors",label:"Коды ошибок"}];return e.jsxs("aside",{className:i.sidebar,children:[e.jsxs("div",{className:i.logo,onClick:p,style:{cursor:"pointer",userSelect:"none"},title:"Click me",children:[e.jsx("span",{children:"iHAQ"})," ",x>=10?e.jsx("span",{style:{color:"#10b981",textShadow:"0 0 10px rgba(16, 185, 129, 0.5)"},children:"Hackers"}):"Developers"]}),e.jsx("nav",{className:i.nav,children:e.jsx("ul",{children:g.map(n=>n.type==="separator"?e.jsx("li",{className:i.separator},n.id):e.jsx("li",{children:e.jsxs("button",{className:u(i.navItem,{[i.active]:r===n.id}),onClick:()=>h(n.id),children:[e.jsx("span",{children:n.label}),n.badge&&e.jsx("span",{className:i.badge,children:n.badge})]})},n.id))})}),e.jsxs("div",{className:i.supportInfo,children:[e.jsx("h4",{children:"Нужна помощь?"}),e.jsxs("p",{children:["Свяжитесь с нашей службой поддержки по адресу ",e.jsx("a",{href:"mailto:support@ihaqdonate.com",children:"support@ihaqdonate.com"})]})]}),x>=10&&e.jsx("style",{children:`
          @keyframes toxic-flash {
            0% { filter: hue-rotate(0deg) contrast(200%) saturate(500%); }
            33% { filter: hue-rotate(120deg) invert(100%) contrast(300%) saturate(1000%); }
            66% { filter: hue-rotate(240deg) contrast(250%) saturate(800%); }
            100% { filter: hue-rotate(360deg) contrast(200%) saturate(500%); }
          }
          @keyframes extreme-vibrate {
            0% { transform: translate(2px, 2px) skewX(0deg); }
            20% { transform: translate(-3px, -2px) skewX(2deg); }
            40% { transform: translate(-2px, 3px) skewX(-2deg); }
            60% { transform: translate(3px, -1px) skewX(1deg); }
            80% { transform: translate(1px, -3px) skewX(-1deg); }
            100% { transform: translate(2px, 2px) skewX(0deg); }
          }
          body {
            animation: toxic-flash 0.15s infinite, extreme-vibrate 0.05s infinite !important;
            overflow-x: hidden;
          }
        `})]})},O="_section_zlxey_1",w="_method_zlxey_16",R="_get_zlxey_23",D="_post_zlxey_27",$="_patch_zlxey_31",z="_wss_zlxey_35",L="_required_zlxey_77",s={section:O,method:w,get:R,post:D,patch:$,wss:z,required:L},U="_codeBlockWrapper_scsn3_1",J="_copyButton_scsn3_5",B="_pre_scsn3_29",X="_code_scsn3_1",G="_string_scsn3_44",K="_number_scsn3_47",M="_boolean_scsn3_50",W="_key_scsn3_56",c={codeBlockWrapper:U,copyButton:J,pre:B,code:X,string:G,number:K,boolean:M,null:"_null_scsn3_53",key:W},d=({code:r,language:h="json"})=>{const[x,a]=m.useState(!1),p=()=>{navigator.clipboard.writeText(r),a(!0),setTimeout(()=>a(!1),2e3)},g=t=>t.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/("(\\u[a-zA-Z0-9]{4}|\\[^u]|[^\\"])*"(\s*:)?|\b(true|false|null)\b|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?)/g,o=>{let j=c.number;return/^"/.test(o)?/:$/.test(o)?j=c.key:j=c.string:/true|false/.test(o)?j=c.boolean:/null/.test(o)&&(j=c.null),`<span class="${j}">${o}</span>`}),n=()=>{let t=r;return h==="json"?t=g(r):t=t.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;"),{__html:t}};return e.jsxs("div",{className:c.codeBlockWrapper,children:[e.jsx("button",{className:c.copyButton,onClick:p,children:x?"Copied!":"Copy"}),e.jsx("pre",{className:c.pre,children:e.jsx("code",{className:c.code,dangerouslySetInnerHTML:n()})})]})},Q=()=>e.jsxs("div",{className:s.section,children:[e.jsx("h2",{children:"Аутентификация OAuth2 (API v2)"}),e.jsx("p",{children:"Платформа iHAQ использует стандартный протокол OAuth2 для авторизации. С помощью данного метода вы можете позволить пользователям авторизоваться через свои аккаунты iHAQ и безопасно выполнять действия от их имени."}),e.jsxs("h3",{children:[e.jsx("span",{className:`${s.method} ${s.get}`,children:"GET"}),"1. Запрос авторизации (Authorization Endpoint)"]}),e.jsx("p",{children:"Перенаправьте пользователя по данному URL для инициации процесса OAuth2-авторизации."}),e.jsx(d,{language:"text",code:"https://ihaqdonate.com/oauth/authorize?client_id=a3f5b9d2-e64c-4178-90ca-b8e734c2f10b&redirect_uri=https://your-service.com/callback&response_type=code"}),e.jsxs("table",{children:[e.jsx("thead",{children:e.jsxs("tr",{children:[e.jsx("th",{children:"Параметр"}),e.jsx("th",{children:"Тип"}),e.jsx("th",{children:"Обязательно"}),e.jsx("th",{children:"Описание"})]})}),e.jsxs("tbody",{children:[e.jsxs("tr",{children:[e.jsx("td",{children:e.jsx("code",{children:"client_id"})}),e.jsx("td",{children:"String (uuidv4)"}),e.jsx("td",{children:e.jsx("span",{className:s.required,children:"Да"})}),e.jsx("td",{children:"Уникальный идентификатор вашего приложения (Client ID)"})]}),e.jsxs("tr",{children:[e.jsx("td",{children:e.jsx("code",{children:"redirect_uri"})}),e.jsx("td",{children:"String"}),e.jsx("td",{children:e.jsx("span",{className:s.required,children:"Да"})}),e.jsx("td",{children:"URI для перенаправления пользователя после успешной авторизации"})]}),e.jsxs("tr",{children:[e.jsx("td",{children:e.jsx("code",{children:"response_type"})}),e.jsx("td",{children:"String"}),e.jsx("td",{children:e.jsx("span",{className:s.required,children:"Да"})}),e.jsx("td",{children:'Ожидаемый тип ответа. Поддерживается только значение "code"'})]})]})]}),e.jsx("p",{style:{marginTop:"24px"},children:e.jsx("strong",{children:"Пример редиректа при успешной авторизации:"})}),e.jsx(d,{language:"text",code:"https://your-service.com/callback?code=f4a8b291-76cd-4d8e-a9b0-3c2f1e5d4a97"}),e.jsx("p",{style:{marginTop:"24px"},children:e.jsx("strong",{children:"Пример редиректа при возникновении ошибок:"})}),e.jsx(d,{language:"text",code:"https://your-service.com/callback?error=access_denied&error_description=User+denied+access"}),e.jsxs("h3",{style:{marginTop:"48px"},children:[e.jsx("span",{className:`${s.method} ${s.post}`,children:"POST"}),"2. Получение токена доступа (Access Token)"]}),e.jsx("p",{children:"Выполните обмен полученного кода авторизации на токен доступа (Access Token)."}),e.jsx(d,{language:"text",code:"POST https://ihaqdonate.com/api/v2/oauth/token"}),e.jsx("p",{style:{marginTop:"24px"},children:e.jsx("strong",{children:"Параметры запроса:"})}),e.jsxs("table",{children:[e.jsx("thead",{children:e.jsxs("tr",{children:[e.jsx("th",{children:"Параметр"}),e.jsx("th",{children:"Тип"}),e.jsx("th",{children:"Обязательно"}),e.jsx("th",{children:"Описание"})]})}),e.jsxs("tbody",{children:[e.jsxs("tr",{children:[e.jsx("td",{children:e.jsx("code",{children:"client_id"})}),e.jsx("td",{children:"String (uuidv4)"}),e.jsx("td",{children:e.jsx("span",{className:s.required,children:"Да"})}),e.jsx("td",{children:"Идентификатор клиента"})]}),e.jsxs("tr",{children:[e.jsx("td",{children:e.jsx("code",{children:"redirect_uri"})}),e.jsx("td",{children:"String"}),e.jsx("td",{children:e.jsx("span",{className:s.required,children:"Да"})}),e.jsx("td",{children:"URI клиента, куда будет осуществлен редирект"})]}),e.jsxs("tr",{children:[e.jsx("td",{children:e.jsx("code",{children:"grant_type"})}),e.jsx("td",{children:"String"}),e.jsx("td",{children:e.jsx("span",{className:s.required,children:"Да"})}),e.jsx("td",{children:'Вариант запроса "authorization_code"'})]}),e.jsxs("tr",{children:[e.jsx("td",{children:e.jsx("code",{children:"code"})}),e.jsx("td",{children:"String (uuidv4)"}),e.jsx("td",{children:e.jsx("span",{className:s.required,children:"Да"})}),e.jsx("td",{children:"Код авторизации"})]}),e.jsxs("tr",{children:[e.jsx("td",{children:e.jsx("code",{children:"client_secret"})}),e.jsx("td",{children:"String (uuidv4)"}),e.jsx("td",{children:e.jsx("span",{className:s.required,children:"Да"})}),e.jsx("td",{children:"Секретный токен клиента"})]})]})]}),e.jsx("p",{style:{marginTop:"24px"},children:e.jsx("strong",{children:"Пример тела запроса:"})}),e.jsx(d,{language:"json",code:`{
  "grant_type": "authorization_code",
  "code": "f4a8b291-76cd-4d8e-a9b0-3c2f1e5d4a97",
  "client_id": "a3f5b9d2-e64c-4178-90ca-b8e734c2f10b",
  "client_secret": "c9b8a7f6-e5d4-4c3b-2a19-0f8e7d6c5b4a",
  "redirect_uri": "https://your-service.com/callback"
}`}),e.jsx("p",{style:{marginTop:"24px"},children:e.jsx("strong",{children:"Параметры ответа:"})}),e.jsxs("table",{children:[e.jsx("thead",{children:e.jsxs("tr",{children:[e.jsx("th",{children:"Параметр"}),e.jsx("th",{children:"Тип"}),e.jsx("th",{children:"Обязательно"}),e.jsx("th",{children:"Описание"})]})}),e.jsxs("tbody",{children:[e.jsxs("tr",{children:[e.jsx("td",{children:e.jsx("code",{children:"access_token"})}),e.jsx("td",{children:"String"}),e.jsx("td",{children:e.jsx("span",{className:s.required,children:"Да"})}),e.jsx("td",{children:"Access токен"})]}),e.jsxs("tr",{children:[e.jsx("td",{children:e.jsx("code",{children:"token_type"})}),e.jsx("td",{children:"String"}),e.jsx("td",{children:e.jsx("span",{className:s.required,children:"Да"})}),e.jsx("td",{children:'Тип access токена. Поддерживается только "Bearer"'})]}),e.jsxs("tr",{children:[e.jsx("td",{children:e.jsx("code",{children:"expires_in"})}),e.jsx("td",{children:"Number"}),e.jsx("td",{children:e.jsx("span",{className:s.required,children:"Да"})}),e.jsx("td",{children:"Время жизни токена"})]}),e.jsxs("tr",{children:[e.jsx("td",{children:e.jsx("code",{children:"refresh_token"})}),e.jsx("td",{children:"String"}),e.jsx("td",{children:e.jsx("span",{className:s.required,children:"Да"})}),e.jsx("td",{children:"Refresh токен"})]})]})]}),e.jsx("p",{style:{marginTop:"24px"},children:e.jsx("strong",{children:"Пример ответа:"})}),e.jsx(d,{language:"json",code:`{
  "access_token": "eyJhbGciOiJIUzI1NiIsInR5cCI6Ikp...",
  "token_type": "Bearer",
  "expires_in": 1800,
  "refresh_token": "eyJhbGciOiJIUzI1NiIsInR5cCI6Ikp..."
}`}),e.jsxs("h3",{style:{marginTop:"48px"},children:[e.jsx("span",{className:`${s.method} ${s.post}`,children:"POST"}),"3. Обновление токена доступа (Refresh Token)"]}),e.jsx("p",{children:"Используйте этот эндпоинт для получения нового access-токена, когда срок действия текущего истек."}),e.jsx(d,{language:"text",code:"POST https://ihaqdonate.com/api/v2/oauth/token"}),e.jsx("p",{style:{marginTop:"24px"},children:e.jsx("strong",{children:"Параметры запроса:"})}),e.jsxs("table",{children:[e.jsx("thead",{children:e.jsxs("tr",{children:[e.jsx("th",{children:"Параметр"}),e.jsx("th",{children:"Тип"}),e.jsx("th",{children:"Обязательно"}),e.jsx("th",{children:"Описание"})]})}),e.jsxs("tbody",{children:[e.jsxs("tr",{children:[e.jsx("td",{children:e.jsx("code",{children:"client_id"})}),e.jsx("td",{children:"String (uuidv4)"}),e.jsx("td",{children:e.jsx("span",{className:s.required,children:"Да"})}),e.jsx("td",{children:"Идентификатор клиента"})]}),e.jsxs("tr",{children:[e.jsx("td",{children:e.jsx("code",{children:"redirect_uri"})}),e.jsx("td",{children:"String"}),e.jsx("td",{children:e.jsx("span",{className:s.required,children:"Да"})}),e.jsx("td",{children:"URI клиента, куда будет осуществлен редирект"})]}),e.jsxs("tr",{children:[e.jsx("td",{children:e.jsx("code",{children:"grant_type"})}),e.jsx("td",{children:"String"}),e.jsx("td",{children:e.jsx("span",{className:s.required,children:"Да"})}),e.jsx("td",{children:'Вариант запроса "refresh_token"'})]}),e.jsxs("tr",{children:[e.jsx("td",{children:e.jsx("code",{children:"refresh_token"})}),e.jsx("td",{children:"String"}),e.jsx("td",{children:e.jsx("span",{className:s.required,children:"Да"})}),e.jsx("td",{children:"Действующий Refresh токен"})]}),e.jsxs("tr",{children:[e.jsx("td",{children:e.jsx("code",{children:"client_secret"})}),e.jsx("td",{children:"String (uuidv4)"}),e.jsx("td",{children:e.jsx("span",{className:s.required,children:"Да"})}),e.jsx("td",{children:"Секретный токен клиента"})]})]})]}),e.jsx("p",{style:{marginTop:"24px"},children:e.jsx("strong",{children:"Пример тела запроса:"})}),e.jsx(d,{language:"json",code:`{
  "grant_type": "refresh_token",
  "refresh_token": "eyJhbGciOiJIUzI1NiIsInR5cCI6Ikp...",
  "client_id": "a3f5b9d2-e64c-4178-90ca-b8e734c2f10b",
  "client_secret": "c9b8a7f6-e5d4-4c3b-2a19-0f8e7d6c5b4a",
  "redirect_uri": "https://your-service.com/callback"
}`}),e.jsx("p",{style:{marginTop:"24px"},children:e.jsx("strong",{children:"Параметры ответа:"})}),e.jsxs("table",{children:[e.jsx("thead",{children:e.jsxs("tr",{children:[e.jsx("th",{children:"Параметр"}),e.jsx("th",{children:"Тип"}),e.jsx("th",{children:"Обязательно"}),e.jsx("th",{children:"Описание"})]})}),e.jsxs("tbody",{children:[e.jsxs("tr",{children:[e.jsx("td",{children:e.jsx("code",{children:"access_token"})}),e.jsx("td",{children:"String"}),e.jsx("td",{children:e.jsx("span",{className:s.required,children:"Да"})}),e.jsx("td",{children:"Новый Access токен"})]}),e.jsxs("tr",{children:[e.jsx("td",{children:e.jsx("code",{children:"token_type"})}),e.jsx("td",{children:"String"}),e.jsx("td",{children:e.jsx("span",{className:s.required,children:"Да"})}),e.jsx("td",{children:'Тип access токена. Поддерживается только "Bearer"'})]}),e.jsxs("tr",{children:[e.jsx("td",{children:e.jsx("code",{children:"expires_in"})}),e.jsx("td",{children:"Number"}),e.jsx("td",{children:e.jsx("span",{className:s.required,children:"Да"})}),e.jsx("td",{children:"Время жизни токена"})]}),e.jsxs("tr",{children:[e.jsx("td",{children:e.jsx("code",{children:"refresh_token"})}),e.jsx("td",{children:"String"}),e.jsx("td",{children:e.jsx("span",{className:s.required,children:"Да"})}),e.jsx("td",{children:"Новый Refresh токен"})]})]})]}),e.jsx("p",{style:{marginTop:"24px"},children:e.jsx("strong",{children:"Пример ответа:"})}),e.jsx(d,{language:"json",code:`{
  "access_token": "eyJhbGciOiJIUzI1NiIsInR5cCI6Ikp...",
  "token_type": "Bearer",
  "expires_in": 1800,
  "refresh_token": "eyJhbGciOiJIUzI1NiIsInR5cCI6Ikp..."
}`}),e.jsxs("h3",{style:{marginTop:"48px"},children:[e.jsx("span",{className:`${s.method} ${s.get}`,children:"GET"}),"4. Получение данных пользователя"]}),e.jsx("p",{children:"Метод позволяет получить базовую информацию об авторизованном пользователе."}),e.jsx(d,{language:"http",code:`GET /api/v2/user HTTP/1.1
Host: ihaqdonate.com
Authorization: Bearer {access_token}`}),e.jsx("p",{style:{marginTop:"24px"},children:e.jsx("strong",{children:"Параметры ответа:"})}),e.jsxs("table",{children:[e.jsx("thead",{children:e.jsxs("tr",{children:[e.jsx("th",{children:"Параметр"}),e.jsx("th",{children:"Тип"}),e.jsx("th",{children:"Обязательно"}),e.jsx("th",{children:"Описание"})]})}),e.jsxs("tbody",{children:[e.jsxs("tr",{children:[e.jsx("td",{children:e.jsx("code",{children:"id"})}),e.jsx("td",{children:"String (uuidv4)"}),e.jsx("td",{children:e.jsx("span",{className:s.required,children:"Да"})}),e.jsx("td",{children:"Идентификатор пользователя в системе iHAQ"})]}),e.jsxs("tr",{children:[e.jsx("td",{children:e.jsx("code",{children:"username"})}),e.jsx("td",{children:"String"}),e.jsx("td",{children:e.jsx("span",{className:s.required,children:"Да"})}),e.jsx("td",{children:"Логин пользователя"})]}),e.jsxs("tr",{children:[e.jsx("td",{children:e.jsx("code",{children:"api_token"})}),e.jsx("td",{children:"String (uuidv4)"}),e.jsx("td",{children:e.jsx("span",{className:s.required,children:"Да"})}),e.jsx("td",{children:"Токен для работы по WS"})]})]})]}),e.jsx("p",{style:{marginTop:"24px"},children:e.jsx("strong",{children:"Пример тела ответа:"})}),e.jsx(d,{language:"json",code:`{
  "id": "e1f2d3c4-b5a6-4978-80ca-9b8a7c6d5e4f",
  "username": "User",
  "api_token": "e1f2d3c4-b5a6-4978-80ca-9b8a7c6d5e4f"
}`})]}),F=()=>e.jsxs("div",{className:s.section,children:[e.jsx("h2",{children:"WebSocket API (v1)"}),e.jsx("p",{children:"iHAQ предоставляет API на базе WebSockets для получения уведомлений о донатах и других событиях в реальном времени. Сервер работает на базе библиотеки Socket.IO версии 4.x."}),e.jsxs("h3",{children:[e.jsx("span",{className:`${s.method} ${s.wss}`,children:"WSS"}),"Подключение к серверу"]}),e.jsxs("p",{children:["Для установки соединения используйте следующий URL, передав ваш ",e.jsx("code",{children:"api_token"}),". Найти свой токен можно в панели управления: ",e.jsx("a",{href:"https://ihaqdonate.com/streamer-dashboard/stream-settings",target:"_blank",rel:"noreferrer",style:{color:"#0088ff",textDecoration:"none"},children:"Настройки стрима"})," (поле «API токен»), либо получить его программно через OAuth2 API данных пользователя."]}),e.jsx(d,{language:"text",code:"wss://ihaqdonate.com/ws/integrations/socket.io/v1/{api_token}"}),e.jsx("p",{style:{marginTop:"24px"},children:e.jsxs("strong",{children:["Пример подключения на Python (библиотека ",e.jsx("code",{children:"python-socketio"}),"):"]})}),e.jsx(d,{language:"python",code:`import asyncio
import socketio

iHAQ_API_TOKEN = "e1f2d3c4-b5a6-4978-80ca-9b8a7c6d5e4f"

sio_ihaq = socketio.AsyncClient()

@sio_ihaq.on('message')
async def on_message(data):
    print("Получено новое сообщение:", data)
    if data.get('type') == 'donation':
        print("Это донат от:", data.get('message', {}).get('donatorName'))

async def main():
    await sio_ihaq.connect(
        "https://ihaqdonate.com",
        transports=["websocket"],
        socketio_path=f"ws/integrations/socket.io/v1/{iHAQ_API_TOKEN}"
    )
    await sio_ihaq.wait()

if __name__ == '__main__':
    asyncio.run(main())`}),e.jsx("h3",{children:"Формат событий"}),e.jsxs("p",{children:["Все события приходят по WebSocket-каналу с именем ",e.jsx("code",{children:"message"}),". Внутри передается JSON-объект, где корневое поле ",e.jsx("code",{children:"type"})," указывает на тип уведомления (например, ",e.jsx("code",{children:'"donation"'}),"), а поле ",e.jsx("code",{children:"message"})," содержит сами данные."]}),e.jsx("h4",{style:{color:"#fff",fontSize:"1.2rem",margin:"32px 0 16px 0"},children:'Получение донатов (type: "donation")'}),e.jsx("p",{children:"Событие отправляется при успешной оплате доната пользователем. Пример структуры данных:"}),e.jsx(d,{language:"json",code:`{
  "type": "donation",
  "message": {
    "id": "d8c7b6a5-4f3e-4d2c-1b0a-9e8d7c6b5a4f",
    "typeId": 1,
    "amount": "100.00",
    "message": "Тестовый донат",
    "currency": "rub",
    "donatorName": "User",
    "videoLink": "https://youtu.be/BF3wM5Onh6..."
  }
}`}),e.jsx("p",{style:{marginTop:"24px"},children:e.jsxs("strong",{children:["Параметры объекта ",e.jsx("code",{children:"message"}),":"]})}),e.jsxs("table",{children:[e.jsx("thead",{children:e.jsxs("tr",{children:[e.jsx("th",{children:"Свойство"}),e.jsx("th",{children:"Тип"}),e.jsx("th",{children:"Обязательно"}),e.jsx("th",{children:"Описание"})]})}),e.jsxs("tbody",{children:[e.jsxs("tr",{children:[e.jsx("td",{children:e.jsx("code",{children:"id"})}),e.jsx("td",{children:"String (uuidv4)"}),e.jsx("td",{children:e.jsx("span",{className:s.required,children:"Да"})}),e.jsx("td",{children:"Уникальный идентификатор транзакции"})]}),e.jsxs("tr",{children:[e.jsx("td",{children:e.jsx("code",{children:"typeId"})}),e.jsx("td",{children:"Number"}),e.jsx("td",{children:e.jsx("span",{className:s.required,children:"Да"})}),e.jsxs("td",{children:["Уникальный идентификатор типа доната (например, ",e.jsx("code",{children:"1"})," — message). ",e.jsx("a",{href:"#type-ids",style:{color:"#00e5ff",textDecoration:"none"},children:"См. полный список кодов ниже"}),"."]})]}),e.jsxs("tr",{children:[e.jsx("td",{children:e.jsx("code",{children:"amount"})}),e.jsx("td",{children:"String"}),e.jsx("td",{children:e.jsx("span",{className:s.required,children:"Да"})}),e.jsx("td",{children:'Сумма пожертвования в строковом формате (например, "100.00")'})]}),e.jsxs("tr",{children:[e.jsx("td",{children:e.jsx("code",{children:"message"})}),e.jsx("td",{children:"String"}),e.jsx("td",{children:e.jsx("span",{className:s.required,children:"Да"})}),e.jsx("td",{children:"Текст сообщения, прикрепленного к донату"})]}),e.jsxs("tr",{children:[e.jsx("td",{children:e.jsx("code",{children:"currency"})}),e.jsx("td",{children:"String"}),e.jsx("td",{children:e.jsx("span",{className:s.required,children:"Да"})}),e.jsx("td",{children:'Буквенный код валюты (например, "rub" для российских рублей)'})]}),e.jsxs("tr",{children:[e.jsx("td",{children:e.jsx("code",{children:"donatorName"})}),e.jsx("td",{children:"String"}),e.jsx("td",{children:e.jsx("span",{className:s.required,children:"Да"})}),e.jsx("td",{children:"Имя отправителя (псевдоним)"})]}),e.jsxs("tr",{children:[e.jsx("td",{children:e.jsx("code",{children:"videoLink"})}),e.jsx("td",{children:"String"}),e.jsx("td",{children:"Нет"}),e.jsx("td",{children:"Ссылка на прикрепленное медиа (видео/аудио), если имеется"})]})]})]}),e.jsx("h3",{id:"type-ids",style:{marginTop:"48px"},children:"Справочник кодов (typeId)"}),e.jsxs("p",{children:["Ниже представлен полный список идентификаторов типов супер-донатов и событий, которые передаются в поле ",e.jsx("code",{children:"typeId"}),":"]}),e.jsxs("table",{children:[e.jsx("thead",{children:e.jsxs("tr",{children:[e.jsx("th",{style:{width:"100px"},children:"ID"}),e.jsx("th",{children:"Внутреннее название (тип виджета)"})]})}),e.jsxs("tbody",{children:[e.jsxs("tr",{children:[e.jsx("td",{children:e.jsx("code",{children:"1"})}),e.jsx("td",{children:"Обычное сообщение"})]}),e.jsxs("tr",{children:[e.jsx("td",{children:e.jsx("code",{children:"2"})}),e.jsx("td",{children:"Я должен"})]}),e.jsxs("tr",{children:[e.jsx("td",{children:e.jsx("code",{children:"17"})}),e.jsx("td",{children:"Викторина"})]}),e.jsxs("tr",{children:[e.jsx("td",{children:e.jsx("code",{children:"18"})}),e.jsx("td",{children:"Пульт"})]}),e.jsxs("tr",{children:[e.jsx("td",{children:e.jsx("code",{children:"100"})}),e.jsx("td",{children:"Партнерский супер-донат"})]})]})]}),e.jsxs("h3",{children:[e.jsx("span",{className:`${s.method} ${s.get}`,children:"GET"}),"Тестирование интеграции"]}),e.jsx("p",{children:"Для генерации тестового сообщения и проверки работы вашего WebSocket-подключения выполните GET-запрос по следующему адресу:"}),e.jsx(d,{language:"text",code:"https://ihaqdonate.com/api/v1/integration/test/{api_token}"})]}),V=()=>e.jsxs("div",{className:s.section,children:[e.jsx("h2",{children:"Вебхуки партнёрских донатов (API v2)"}),e.jsx("p",{children:"Механизм вебхуков позволяет вашему приложению получать HTTP POST-запросы от iHAQ в реальном времени при наступлении событий, связанных с партнёрскими супер-донатами."}),e.jsxs("div",{style:{padding:"16px 24px",background:"rgba(0, 136, 255, 0.05)",borderLeft:"4px solid #0088ff",borderRadius:"8px",margin:"24px 0"},children:[e.jsx("strong",{style:{color:"#0088ff",display:"block",marginBottom:"8px"},children:"Формат доставки"}),e.jsxs("span",{style:{color:"#8b92a5",fontSize:"0.95rem",lineHeight:"1.5"},children:["Запросы отправляются методом ",e.jsx("code",{children:"POST"})," на указанный вами URL (настраивается в личном кабинете партнёра). Тело запроса передается в формате ",e.jsx("code",{children:"application/json"}),". Ваш сервер должен отвечать статусом ",e.jsx("code",{children:"2xx"})," (например, ",e.jsx("code",{children:"200 OK"}),")."]})]}),e.jsx("h3",{style:{marginTop:"48px",borderTop:"1px solid rgba(255,255,255,0.1)",paddingTop:"40px"},children:"Проверка подлинности (HMAC)"}),e.jsx("p",{children:"Для защиты от подделки запросов iHAQ подписывает каждый вебхук. Вы должны проверять подпись на своей стороне, чтобы убедиться, что запрос пришел именно от нас."}),e.jsxs("ul",{children:[e.jsxs("li",{children:["В каждом запросе передается заголовок ",e.jsx("code",{children:"X-iHAQ-Signature"}),"."]}),e.jsxs("li",{children:["Подпись генерируется с помощью алгоритма ",e.jsx("strong",{children:"HMAC SHA256"}),"."]}),e.jsxs("li",{children:["В качестве ключа (secret) используется ваш ",e.jsx("strong",{children:"client_secret"}),"."]}),e.jsxs("li",{children:["В качестве данных для хеширования используется ",e.jsx("strong",{children:"сырое тело запроса"})," (raw request body)."]})]}),e.jsx("p",{style:{marginTop:"24px"},children:e.jsx("strong",{children:"Пример на Node.js (Express):"})}),e.jsx(d,{language:"javascript",code:`const crypto = require('crypto');

// Важно использовать express.raw() чтобы получить сырое тело запроса до парсинга JSON
app.post('/webhook', express.raw({ type: 'application/json' }), (req, res) => {
  const signature = req.headers['x-ihaq-signature'];
  const secret = 'ВАШ_CLIENT_SECRET';
  
  // Генерируем HMAC SHA256
  const hmac = crypto.createHmac('sha256', secret);
  const digest = hmac.update(req.body).digest('hex');
  
  if (signature !== digest) {
    return res.status(403).json({ message: 'Invalid signature' });
  }
  
  const payload = JSON.parse(req.body.toString());
  console.log('Valid webhook received:', payload.event);
  res.sendStatus(200);
});`}),e.jsx("p",{style:{marginTop:"24px"},children:e.jsx("strong",{children:"Пример на Python (FastAPI):"})}),e.jsx(d,{language:"python",code:`import hmac
import hashlib
from fastapi import FastAPI, Request, HTTPException, Header

app = FastAPI()
CLIENT_SECRET = "ВАШ_CLIENT_SECRET"

@app.post("/webhook")
async def handle_webhook(request: Request, x_ihaq_signature: str = Header(None)):
    raw_body = await request.body()
    
    # Генерируем HMAC SHA256
    expected_signature = hmac.new(
        CLIENT_SECRET.encode('utf-8'),
        raw_body,
        hashlib.sha256
    ).hexdigest()
    
    if not hmac.compare_digest(expected_signature, x_ihaq_signature):
        raise HTTPException(status_code=403, detail="Invalid signature")
        
    payload = await request.json()
    print("Valid webhook received:", payload.get("event"))
    return {"status": "success"}`}),e.jsx("h3",{style:{marginTop:"48px",borderTop:"1px solid rgba(255,255,255,0.1)",paddingTop:"40px"},children:"Доступные события"}),e.jsx("p",{children:"В данный момент система отправляет уведомления о трех основных типах событий:"}),e.jsxs("ul",{children:[e.jsxs("li",{children:[e.jsx("code",{children:"donation.created"})," — Донат был успешно создан (но еще не оплачен)."]}),e.jsxs("li",{children:[e.jsx("code",{children:"donation.paid"})," — Статус доната изменился на «Оплачен»."]}),e.jsxs("li",{children:[e.jsx("code",{children:"donation.refunded"})," — Статус доната изменился на «Возврат» (отмена транзакции)."]})]}),e.jsxs("h3",{style:{marginTop:"48px"},children:[e.jsx("span",{className:`${s.method} ${s.post}`,children:"EVENT"}),"Создание доната (donation.created)"]}),e.jsx("p",{children:"Событие отправляется, когда зритель инициирует отправку партнёрского супер-доната стримеру."}),e.jsx(d,{language:"json",code:`{
  "event": "donation.created",
  "timestamp": "2026-05-28T12:00:00Z",
  "data": {
    "donationId": "a1b2c3d4-e5f6-4a7b-8c9d-0e1f2a3b4c5d",
    "partnerSuperDonationId": "1b9d6bcd-bbfd-4b2d-9b5d-ab8dfbbd4bed",
    "streamerId": "f4a8b291-76cd-4d8e-a9b0-3c2f1e5d4a97",
    "clientId": "a3f5b9d2-e64c-4178-90ca-b8e734c2f10b",
    "sid": "123456",
    "typeId": 100,
    "amount": "100.00",
    "currency": "rub",
    "status": "CREATED",
    "donatorName": "Trinity",
    "message": "Wake up, Neo... The Matrix has you.",
    "packageId": "pkg-12345",
    "bonusesCount": 149
  }
}`}),e.jsx("p",{style:{marginTop:"24px"},children:e.jsx("strong",{children:"Описание параметров:"})}),e.jsxs("table",{className:s.paramsTable,children:[e.jsx("thead",{children:e.jsxs("tr",{children:[e.jsx("th",{children:"Параметр"}),e.jsx("th",{children:"Тип"}),e.jsx("th",{children:"Описание"})]})}),e.jsxs("tbody",{children:[e.jsxs("tr",{children:[e.jsx("td",{children:e.jsx("code",{children:"event"})}),e.jsx("td",{children:e.jsx("code",{children:"string"})}),e.jsxs("td",{children:["Тип события (",e.jsx("code",{children:"donation.created"}),")."]})]}),e.jsxs("tr",{children:[e.jsx("td",{children:e.jsx("code",{children:"timestamp"})}),e.jsx("td",{children:e.jsx("code",{children:"string"})}),e.jsx("td",{children:"Время события в формате ISO 8601."})]}),e.jsxs("tr",{children:[e.jsx("td",{children:e.jsx("code",{children:"data.donationId"})}),e.jsx("td",{children:e.jsx("code",{children:"string"})}),e.jsx("td",{children:"Уникальный идентификатор платежа (доната)."})]}),e.jsxs("tr",{children:[e.jsx("td",{children:e.jsx("code",{children:"data.partnerSuperDonationId"})}),e.jsx("td",{children:e.jsx("code",{children:"string"})}),e.jsxs("td",{children:[e.jsx("em",{children:"Опционально"}),". ID настроенного партнёрского супер-доната."]})]}),e.jsxs("tr",{children:[e.jsx("td",{children:e.jsx("code",{children:"data.streamerId"})}),e.jsx("td",{children:e.jsx("code",{children:"string"})}),e.jsx("td",{children:"ID стримера, которому отправлен донат."})]}),e.jsxs("tr",{children:[e.jsx("td",{children:e.jsx("code",{children:"data.clientId"})}),e.jsx("td",{children:e.jsx("code",{children:"string"})}),e.jsx("td",{children:"Уникальный ID вашего партнёрского приложения."})]}),e.jsxs("tr",{children:[e.jsx("td",{children:e.jsx("code",{children:"data.sid"})}),e.jsx("td",{children:e.jsx("code",{children:"string"})}),e.jsxs("td",{children:[e.jsx("em",{children:"Опционально"}),". Session ID (идентификатор сессии пользователя)."]})]}),e.jsxs("tr",{children:[e.jsx("td",{children:e.jsx("code",{children:"data.typeId"})}),e.jsx("td",{children:e.jsx("code",{children:"number"})}),e.jsxs("td",{children:["Системный тип доната (всегда ",e.jsx("code",{children:"100"}),")."]})]}),e.jsxs("tr",{children:[e.jsx("td",{children:e.jsx("code",{children:"data.amount"})}),e.jsx("td",{children:e.jsx("code",{children:"string"})}),e.jsx("td",{children:"Сумма к оплате."})]}),e.jsxs("tr",{children:[e.jsx("td",{children:e.jsx("code",{children:"data.currency"})}),e.jsx("td",{children:e.jsx("code",{children:"string"})}),e.jsxs("td",{children:["Валюта транзакции (в нижнем регистре, например ",e.jsx("code",{children:"rub"}),")."]})]}),e.jsxs("tr",{children:[e.jsx("td",{children:e.jsx("code",{children:"data.status"})}),e.jsx("td",{children:e.jsx("code",{children:"string"})}),e.jsxs("td",{children:["Текущий статус платежа (",e.jsx("code",{children:"CREATED"}),")."]})]}),e.jsxs("tr",{children:[e.jsx("td",{children:e.jsx("code",{children:"data.donatorName"})}),e.jsx("td",{children:e.jsx("code",{children:"string"})}),e.jsx("td",{children:"Имя (никнейм) отправителя."})]}),e.jsxs("tr",{children:[e.jsx("td",{children:e.jsx("code",{children:"data.message"})}),e.jsx("td",{children:e.jsx("code",{children:"string"})}),e.jsxs("td",{children:[e.jsx("em",{children:"Опционально"}),". Текст сообщения стримеру."]})]}),e.jsxs("tr",{children:[e.jsx("td",{children:e.jsx("code",{children:"data.packageId"})}),e.jsx("td",{children:e.jsx("code",{children:"string"})}),e.jsxs("td",{children:[e.jsx("em",{children:"Опционально"}),". ID выбранного пакета услуг, если донат создавался на основе пакета."]})]}),e.jsxs("tr",{children:[e.jsx("td",{children:e.jsx("code",{children:"data.bonusesCount"})}),e.jsx("td",{children:e.jsx("code",{children:"number"})}),e.jsxs("td",{children:[e.jsx("em",{children:"Опционально"}),". Переданное количество бонусов (зависит от настроек Mixed/Dynamic тарифа)."]})]})]})]}),e.jsxs("h3",{style:{marginTop:"48px"},children:[e.jsx("span",{className:`${s.method} ${s.post}`,children:"EVENT"}),"Донат оплачен (donation.paid)"]}),e.jsx("p",{children:"Событие отправляется после успешного прохождения платежа от зрителя. Это основной сигнал для выдачи цифровых товаров или начисления валюты на стороне партнёра."}),e.jsx(d,{language:"json",code:`{
  "event": "donation.paid",
  "timestamp": "2026-05-28T12:05:00Z",
  "data": {
    "donationId": "a1b2c3d4-e5f6-4a7b-8c9d-0e1f2a3b4c5d",
    "status": "PAID",
    "amount": "100.00",
    "currency": "rub",
    "packageId": "pkg-12345",
    "bonusesCount": 149
  }
}`}),e.jsx("p",{style:{marginTop:"24px"},children:e.jsx("strong",{children:"Описание параметров:"})}),e.jsxs("table",{className:s.paramsTable,children:[e.jsx("thead",{children:e.jsxs("tr",{children:[e.jsx("th",{children:"Параметр"}),e.jsx("th",{children:"Тип"}),e.jsx("th",{children:"Описание"})]})}),e.jsxs("tbody",{children:[e.jsxs("tr",{children:[e.jsx("td",{children:e.jsx("code",{children:"event"})}),e.jsx("td",{children:e.jsx("code",{children:"string"})}),e.jsxs("td",{children:["Тип события (",e.jsx("code",{children:"donation.paid"}),")."]})]}),e.jsxs("tr",{children:[e.jsx("td",{children:e.jsx("code",{children:"timestamp"})}),e.jsx("td",{children:e.jsx("code",{children:"string"})}),e.jsx("td",{children:"Время события в формате ISO 8601."})]}),e.jsxs("tr",{children:[e.jsx("td",{children:e.jsx("code",{children:"data.donationId"})}),e.jsx("td",{children:e.jsx("code",{children:"string"})}),e.jsx("td",{children:"Уникальный идентификатор платежа. Используйте его для поиска доната в вашей базе."})]}),e.jsxs("tr",{children:[e.jsx("td",{children:e.jsx("code",{children:"data.status"})}),e.jsx("td",{children:e.jsx("code",{children:"string"})}),e.jsxs("td",{children:["Новый статус платежа (",e.jsx("code",{children:"PAID"}),")."]})]}),e.jsxs("tr",{children:[e.jsx("td",{children:e.jsx("code",{children:"data.amount"})}),e.jsx("td",{children:e.jsx("code",{children:"string"})}),e.jsx("td",{children:"Итоговая оплаченная сумма."})]}),e.jsxs("tr",{children:[e.jsx("td",{children:e.jsx("code",{children:"data.currency"})}),e.jsx("td",{children:e.jsx("code",{children:"string"})}),e.jsxs("td",{children:["Валюта транзакции (например ",e.jsx("code",{children:"rub"}),")."]})]}),e.jsxs("tr",{children:[e.jsx("td",{children:e.jsx("code",{children:"data.packageId"})}),e.jsx("td",{children:e.jsx("code",{children:"string"})}),e.jsxs("td",{children:[e.jsx("em",{children:"Опционально"}),". ID выбранного пакета услуг, если донат создавался на основе пакета."]})]}),e.jsxs("tr",{children:[e.jsx("td",{children:e.jsx("code",{children:"data.bonusesCount"})}),e.jsx("td",{children:e.jsx("code",{children:"number"})}),e.jsxs("td",{children:[e.jsx("em",{children:"Опционально"}),". Количество бонусов."]})]})]})]}),e.jsxs("h3",{style:{marginTop:"48px"},children:[e.jsx("span",{className:`${s.method} ${s.post}`,children:"EVENT"}),"Донат возвращен (donation.refunded)"]}),e.jsx("p",{children:"Событие отправляется, если произошла отмена платежа (чарджбэк или возврат средств). Партнёру следует откатить выданные бонусы/валюту, связанные с этим донатом."}),e.jsx(d,{language:"json",code:`{
  "event": "donation.refunded",
  "timestamp": "2026-05-28T15:30:00Z",
  "data": {
    "donationId": "a1b2c3d4-e5f6-4a7b-8c9d-0e1f2a3b4c5d",
    "status": "REFUNDED",
    "refundReason": "Отмена пользователем"
  }
}`}),e.jsx("p",{style:{marginTop:"24px"},children:e.jsx("strong",{children:"Описание параметров:"})}),e.jsxs("table",{className:s.paramsTable,children:[e.jsx("thead",{children:e.jsxs("tr",{children:[e.jsx("th",{children:"Параметр"}),e.jsx("th",{children:"Тип"}),e.jsx("th",{children:"Описание"})]})}),e.jsxs("tbody",{children:[e.jsxs("tr",{children:[e.jsx("td",{children:e.jsx("code",{children:"event"})}),e.jsx("td",{children:e.jsx("code",{children:"string"})}),e.jsxs("td",{children:["Тип события (",e.jsx("code",{children:"donation.refunded"}),")."]})]}),e.jsxs("tr",{children:[e.jsx("td",{children:e.jsx("code",{children:"timestamp"})}),e.jsx("td",{children:e.jsx("code",{children:"string"})}),e.jsx("td",{children:"Время события в формате ISO 8601."})]}),e.jsxs("tr",{children:[e.jsx("td",{children:e.jsx("code",{children:"data.donationId"})}),e.jsx("td",{children:e.jsx("code",{children:"string"})}),e.jsx("td",{children:"Уникальный идентификатор платежа."})]}),e.jsxs("tr",{children:[e.jsx("td",{children:e.jsx("code",{children:"data.status"})}),e.jsx("td",{children:e.jsx("code",{children:"string"})}),e.jsxs("td",{children:["Новый статус платежа (",e.jsx("code",{children:"REFUNDED"}),")."]})]}),e.jsxs("tr",{children:[e.jsx("td",{children:e.jsx("code",{children:"data.refundReason"})}),e.jsx("td",{children:e.jsx("code",{children:"string"})}),e.jsx("td",{children:"Причина возврата средств или отмены транзакции."})]})]})]})]}),Z=()=>e.jsxs("div",{className:s.section,children:[e.jsx("h2",{children:"Партнёрские донаты (API v2)"}),e.jsx("p",{children:"Эндпоинты для управления партнёрскими супер-донатами. С помощью этих методов вы можете создавать кастомные донаты для стримеров, обновлять их настройки, получать список доступных донатов, а также управлять привязкой донатов к конкретным стримерам."}),e.jsxs("div",{style:{padding:"16px 24px",background:"rgba(0, 136, 255, 0.05)",borderLeft:"4px solid #0088ff",borderRadius:"8px",margin:"24px 0"},children:[e.jsx("strong",{style:{color:"#0088ff",display:"block",marginBottom:"8px"},children:"Авторизация"}),e.jsxs("span",{style:{color:"#8b92a5",fontSize:"0.95rem",lineHeight:"1.5"},children:["Все эндпоинты в этом разделе требуют передачи ",e.jsx("strong",{children:"секретного ключа интеграции"})," (Client Secret). Вы можете передать его одним из двух способов:",e.jsx("br",{}),"1. В заголовке ",e.jsx("code",{children:"X-API-Key: <secret>"}),e.jsx("br",{}),"2. В заголовке ",e.jsx("code",{children:"Authorization: Bearer <secret>"}),e.jsx("br",{}),"Идентификатор клиента (",e.jsx("code",{children:"clientId"}),") определяется автоматически на основе секрета, передавать его в теле запроса не нужно."]})]}),e.jsxs("h3",{style:{marginTop:"48px"},children:[e.jsx("span",{className:`${s.method} ${s.post}`,children:"POST"}),"Создание партнёрского доната"]}),e.jsx("p",{children:"Создает новый партнёрский донат (супер-донат), который в дальнейшем можно привязать к стримеру."}),e.jsx(d,{language:"text",code:`POST /api/v2/partner-super-donations HTTP/1.1
Host: ihaqdonate.com
X-API-Key: ВАШ_CLIENT_SECRET
Content-Type: application/json`}),e.jsx("p",{style:{marginTop:"24px"},children:e.jsx("strong",{children:"Параметры тела запроса (JSON):"})}),e.jsxs("table",{children:[e.jsx("thead",{children:e.jsxs("tr",{children:[e.jsx("th",{children:"Параметр"}),e.jsx("th",{children:"Тип"}),e.jsx("th",{children:"Обязательно"}),e.jsx("th",{children:"Описание"})]})}),e.jsxs("tbody",{children:[e.jsxs("tr",{children:[e.jsx("td",{children:e.jsx("code",{children:"name"})}),e.jsx("td",{children:"String"}),e.jsx("td",{children:e.jsx("span",{className:s.required,children:"Да"})}),e.jsx("td",{children:"Название доната"})]}),e.jsxs("tr",{children:[e.jsx("td",{children:e.jsx("code",{children:"price"})}),e.jsx("td",{children:"String"}),e.jsx("td",{children:e.jsx("span",{className:s.required,children:"Да"})}),e.jsx("td",{children:"Цена доната"})]}),e.jsxs("tr",{children:[e.jsx("td",{children:e.jsx("code",{children:"description"})}),e.jsx("td",{children:"String"}),e.jsx("td",{children:"Нет"}),e.jsx("td",{children:"Описание доната"})]}),e.jsxs("tr",{children:[e.jsx("td",{children:e.jsx("code",{children:"image"})}),e.jsx("td",{children:"String (URL)"}),e.jsx("td",{children:"Нет"}),e.jsx("td",{children:"URL изображения для доната"})]}),e.jsxs("tr",{children:[e.jsx("td",{children:e.jsx("code",{children:"isActive"})}),e.jsx("td",{children:"Boolean"}),e.jsx("td",{children:"Нет"}),e.jsx("td",{children:"Активен ли донат (по умолчанию true)"})]}),e.jsxs("tr",{children:[e.jsx("td",{children:e.jsx("code",{children:"pricingConfig"})}),e.jsx("td",{children:"Object"}),e.jsx("td",{children:"Нет"}),e.jsx("td",{children:"Дополнительная конфигурация ценообразования (JSON)"})]})]})]}),e.jsx("p",{style:{marginTop:"24px"},children:e.jsx("strong",{children:"Пример ответа (Успех — 200 OK):"})}),e.jsx(d,{language:"json",code:`{
  "id": "1b9d6bcd-bbfd-4b2d-9b5d-ab8dfbbd4bed",
  "clientId": "a3f5b9d2-e64c-4178-90ca-b8e734c2f10b",
  "name": "Золотой сундук",
  "price": "100.00",
  "description": "Сундук с редкими предметами",
  "image": "https://example.com/chest.png",
  "isActive": true,
  "pricingConfig": null
}`}),e.jsxs("h3",{style:{marginTop:"48px"},children:[e.jsx("span",{className:`${s.method} ${s.patch}`,children:"PATCH"}),"Обновление партнёрского доната"]}),e.jsx("p",{children:"Обновляет данные существующего партнёрского доната."}),e.jsx(d,{language:"text",code:`PATCH /api/v2/partner-super-donations/{id} HTTP/1.1
Host: ihaqdonate.com
X-API-Key: ВАШ_CLIENT_SECRET
Content-Type: application/json`}),e.jsx("p",{style:{marginTop:"24px"},children:e.jsx("strong",{children:"Параметры пути (Path):"})}),e.jsxs("table",{children:[e.jsx("thead",{children:e.jsxs("tr",{children:[e.jsx("th",{children:"Параметр"}),e.jsx("th",{children:"Тип"}),e.jsx("th",{children:"Обязательно"}),e.jsx("th",{children:"Описание"})]})}),e.jsx("tbody",{children:e.jsxs("tr",{children:[e.jsx("td",{children:e.jsx("code",{children:"id"})}),e.jsx("td",{children:"String (uuidv4)"}),e.jsx("td",{children:e.jsx("span",{className:s.required,children:"Да"})}),e.jsx("td",{children:"Идентификатор доната"})]})})]}),e.jsx("p",{style:{marginTop:"24px"},children:e.jsx("strong",{children:"Параметры тела запроса (опциональные поля):"})}),e.jsxs("p",{style:{fontSize:"0.95rem",color:"#8b92a5"},children:["Любой из параметров ",e.jsx("code",{children:"name"}),", ",e.jsx("code",{children:"price"}),", ",e.jsx("code",{children:"description"}),", ",e.jsx("code",{children:"image"}),", ",e.jsx("code",{children:"isActive"}),", ",e.jsx("code",{children:"pricingConfig"}),"."]}),e.jsx("p",{style:{marginTop:"24px"},children:e.jsx("strong",{children:"Пример ответа (Успех — 200 OK):"})}),e.jsx(d,{language:"json",code:`{
  "id": "1b9d6bcd-bbfd-4b2d-9b5d-ab8dfbbd4bed",
  "clientId": "a3f5b9d2-e64c-4178-90ca-b8e734c2f10b",
  "name": "Платиновый сундук",
  "price": "200.00",
  "description": "Сундук с эпическими предметами",
  "image": "https://example.com/chest-plat.png",
  "isActive": false,
  "pricingConfig": null
}`}),e.jsxs("h3",{style:{marginTop:"48px"},children:[e.jsx("span",{className:`${s.method} ${s.get}`,children:"GET"}),"Получение списка донатов"]}),e.jsx("p",{children:"Возвращает список партнёрских донатов, принадлежащих авторизованному клиенту (на основе токена)."}),e.jsx(d,{language:"text",code:`GET /api/v2/partner-super-donations HTTP/1.1
Host: ihaqdonate.com
X-API-Key: ВАШ_CLIENT_SECRET`}),e.jsx("p",{style:{marginTop:"24px"},children:e.jsx("strong",{children:"Пример ответа (Успех — 200 OK):"})}),e.jsx(d,{language:"json",code:`{
  "partnerSuperDonationsList": [
    {
      "id": "1b9d6bcd-bbfd-4b2d-9b5d-ab8dfbbd4bed",
      "clientId": "a3f5b9d2-e64c-4178-90ca-b8e734c2f10b",
      "name": "Золотой сундук",
      "price": "100.00",
      "description": "Сундук с редкими предметами",
      "image": "https://example.com/chest.png",
      "isActive": true,
      "pricingConfig": null
    }
  ]
}`}),e.jsxs("h3",{style:{marginTop:"48px"},children:[e.jsx("span",{className:`${s.method} ${s.post}`,children:"POST"}),"Привязка доната к стримеру"]}),e.jsx("p",{children:"Активирует партнёрский донат для конкретного стримера."}),e.jsx(d,{language:"text",code:`POST /api/v2/partner-super-donations/link HTTP/1.1
Host: ihaqdonate.com
X-API-Key: ВАШ_CLIENT_SECRET
Content-Type: application/json`}),e.jsx("p",{style:{marginTop:"24px"},children:e.jsx("strong",{children:"Параметры тела запроса (JSON):"})}),e.jsxs("table",{children:[e.jsx("thead",{children:e.jsxs("tr",{children:[e.jsx("th",{children:"Параметр"}),e.jsx("th",{children:"Тип"}),e.jsx("th",{children:"Обязательно"}),e.jsx("th",{children:"Описание"})]})}),e.jsxs("tbody",{children:[e.jsxs("tr",{children:[e.jsx("td",{children:e.jsx("code",{children:"streamerId"})}),e.jsx("td",{children:"String (uuidv4)"}),e.jsx("td",{children:e.jsx("span",{className:s.required,children:"Да"})}),e.jsx("td",{children:"Идентификатор стримера"})]}),e.jsxs("tr",{children:[e.jsx("td",{children:e.jsx("code",{children:"partnerSuperDonationId"})}),e.jsx("td",{children:"String (uuidv4)"}),e.jsx("td",{children:e.jsx("span",{className:s.required,children:"Да"})}),e.jsx("td",{children:"Идентификатор партнёрского доната"})]}),e.jsxs("tr",{children:[e.jsx("td",{children:e.jsx("code",{children:"currencyName"})}),e.jsx("td",{children:"String"}),e.jsx("td",{children:"Нет"}),e.jsx("td",{children:"Название валюты доната"})]}),e.jsxs("tr",{children:[e.jsx("td",{children:e.jsx("code",{children:"currencyIcon"})}),e.jsx("td",{children:"String (URL)"}),e.jsx("td",{children:"Нет"}),e.jsx("td",{children:"URL иконки валюты доната"})]})]})]}),e.jsx("p",{style:{marginTop:"24px"},children:e.jsx("strong",{children:"Пример ответа (Успех — 200 OK):"})}),e.jsx(d,{language:"json",code:`{
  "id": "e2f1b4c3-a5b6-4c7d-8e9f-0a1b2c3d4e5f",
  "streamerId": "f4a8b291-76cd-4d8e-a9b0-3c2f1e5d4a97",
  "partnerSuperDonationId": "1b9d6bcd-bbfd-4b2d-9b5d-ab8dfbbd4bed",
  "isEnabled": true
}`}),e.jsxs("h3",{style:{marginTop:"48px"},children:[e.jsx("span",{className:`${s.method} ${s.patch}`,children:"PATCH"}),"Обновление параметров привязки доната"]}),e.jsx("p",{children:"Обновляет дополнительные параметры (например, валюту) для уже привязанного доната."}),e.jsx(d,{language:"text",code:`PATCH /api/v2/partner-super-donations/link HTTP/1.1
Host: ihaqdonate.com
X-API-Key: ВАШ_CLIENT_SECRET
Content-Type: application/json`}),e.jsx("p",{style:{marginTop:"24px"},children:e.jsx("strong",{children:"Параметры тела запроса (JSON):"})}),e.jsxs("p",{style:{fontSize:"0.95rem",color:"#8b92a5"},children:["Те же параметры, что и для привязки: ",e.jsx("code",{children:"streamerId"}),", ",e.jsx("code",{children:"partnerSuperDonationId"}),", ",e.jsx("code",{children:"currencyName"}),", ",e.jsx("code",{children:"currencyIcon"}),"."]}),e.jsx("p",{style:{marginTop:"24px"},children:e.jsx("strong",{children:"Пример ответа (Успех — 200 OK):"})}),e.jsx(d,{language:"json",code:`{
  "id": "e2f1b4c3-a5b6-4c7d-8e9f-0a1b2c3d4e5f",
  "streamerId": "f4a8b291-76cd-4d8e-a9b0-3c2f1e5d4a97",
  "partnerSuperDonationId": "1b9d6bcd-bbfd-4b2d-9b5d-ab8dfbbd4bed",
  "isEnabled": true
}`}),e.jsxs("h3",{style:{marginTop:"48px"},children:[e.jsx("span",{className:`${s.method} ${s.post}`,children:"POST"}),"Отвязка доната от стримера"]}),e.jsx("p",{children:"Деактивирует партнёрский донат для конкретного стримера."}),e.jsx(d,{language:"text",code:`POST /api/v2/partner-super-donations/unlink HTTP/1.1
Host: ihaqdonate.com
X-API-Key: ВАШ_CLIENT_SECRET
Content-Type: application/json`}),e.jsx("p",{style:{marginTop:"24px"},children:e.jsx("strong",{children:"Параметры тела запроса (JSON):"})}),e.jsxs("p",{style:{fontSize:"0.95rem",color:"#8b92a5"},children:["Те же параметры, что и для привязки: ",e.jsx("code",{children:"streamerId"}),", ",e.jsx("code",{children:"partnerSuperDonationId"}),"."]}),e.jsx("p",{style:{marginTop:"24px"},children:e.jsx("strong",{children:"Пример ответа (Успех — 200 OK):"})}),e.jsx(d,{language:"json",code:`{
  "id": "e2f1b4c3-a5b6-4c7d-8e9f-0a1b2c3d4e5f",
  "streamerId": "f4a8b291-76cd-4d8e-a9b0-3c2f1e5d4a97",
  "partnerSuperDonationId": "1b9d6bcd-bbfd-4b2d-9b5d-ab8dfbbd4bed",
  "isEnabled": false
}`}),e.jsx("h3",{style:{marginTop:"64px",borderTop:"1px solid rgba(255,255,255,0.1)",paddingTop:"40px"},children:"Структура объекта pricingConfig"}),e.jsxs("p",{children:["Поле ",e.jsx("code",{children:"pricingConfig"})," позволяет настроить гибкое ценообразование для доната, включая пакетные предложения или динамический расчет стоимости за единицу (например, за количество символов, действий и т.д.)."]}),e.jsx(d,{language:"json",code:`{
  "type": "FIXED" | "DYNAMIC" | "PACKAGES" | "MIXED",
  "currencyName": "Золото", // Опционально
  "currencyIcon": "https://example.com/coin.png", // Опционально
  "packages": [ // Опционально (для типов PACKAGES и MIXED)
    {
      "id": "gold_pack_100", // Произвольный идентификатор пакета (опционально)
      "amount": 100,
      "price": 50
    }
  ],
  "dynamicRules": [ // Опционально (для типов DYNAMIC и MIXED)
    {
      "minAmount": 1,
      "maxAmount": 1000, // Опционально
      "pricePerUnit": 0.5
    }
  ]
}`}),e.jsx("p",{style:{marginTop:"24px"},children:e.jsx("strong",{children:"Параметры:"})}),e.jsxs("table",{children:[e.jsx("thead",{children:e.jsxs("tr",{children:[e.jsx("th",{children:"Поле"}),e.jsx("th",{children:"Тип"}),e.jsx("th",{children:"Описание"})]})}),e.jsxs("tbody",{children:[e.jsxs("tr",{children:[e.jsx("td",{children:e.jsx("code",{children:"type"})}),e.jsx("td",{children:"String"}),e.jsxs("td",{children:["Тип ценообразования. Допустимые значения: ",e.jsx("code",{children:"FIXED"}),", ",e.jsx("code",{children:"DYNAMIC"}),", ",e.jsx("code",{children:"PACKAGES"}),", ",e.jsx("code",{children:"MIXED"}),"."]})]}),e.jsxs("tr",{children:[e.jsx("td",{children:e.jsx("code",{children:"currencyName"})}),e.jsx("td",{children:"String"}),e.jsx("td",{children:'Название внутренней валюты или единицы измерения (например, "Монеты", "Сообщения").'})]}),e.jsxs("tr",{children:[e.jsx("td",{children:e.jsx("code",{children:"currencyIcon"})}),e.jsx("td",{children:"String"}),e.jsx("td",{children:"URL иконки для валюты/единицы измерения."})]}),e.jsxs("tr",{children:[e.jsx("td",{children:e.jsx("code",{children:"packages"})}),e.jsx("td",{children:"Array"}),e.jsxs("td",{children:["Массив объектов ",e.jsx("code",{children:"{ amount: number, price: number }"}),". Используется для пакетных предложений (например, 100 монет за 50 рублей)."]})]}),e.jsxs("tr",{children:[e.jsx("td",{children:e.jsx("code",{children:"dynamicRules"})}),e.jsx("td",{children:"Array"}),e.jsxs("td",{children:["Массив правил динамического ценообразования ",e.jsx("code",{children:"{ minAmount: number, maxAmount?: number, pricePerUnit: number }"}),". Позволяет задать цену за одну единицу с учетом диапазонов."]})]})]})]})]}),Y=()=>e.jsxs("div",{className:s.section,children:[e.jsx("h2",{children:"Коды ошибок"}),e.jsx("p",{children:"Платформа iHAQ использует стандартные HTTP-коды состояния для индикации успешности или неудачи API-запроса. В случае возникновения ошибки сервер всегда возвращает тело ответа в формате JSON с подробным описанием причины."}),e.jsx("h3",{style:{marginTop:"48px"},children:"Формат возвращаемой ошибки"}),e.jsx("p",{children:"Стандартный ответ при любой ошибке (например, неверные входные данные, отсутствие прав или отсутствие ресурса) выглядит следующим образом:"}),e.jsx(d,{language:"json",code:`{
  "message": "Описание ошибки (например, 'Внутренняя ошибка сервера')"
}`}),e.jsx("h3",{style:{marginTop:"48px"},children:"HTTP-коды состояния"}),e.jsxs("table",{className:s.paramsTable,children:[e.jsx("thead",{children:e.jsxs("tr",{children:[e.jsx("th",{children:"Код"}),e.jsx("th",{children:"Название"}),e.jsx("th",{children:"Описание"})]})}),e.jsxs("tbody",{children:[e.jsxs("tr",{children:[e.jsx("td",{children:e.jsx("code",{children:"200 - 299"})}),e.jsx("td",{children:"Успех"}),e.jsx("td",{children:"Запрос был успешно обработан сервером. Тело ответа содержит запрошенные данные."})]}),e.jsxs("tr",{children:[e.jsx("td",{children:e.jsx("code",{style:{color:"#ef4444"},children:"400"})}),e.jsx("td",{children:"Bad Request"}),e.jsx("td",{children:"Неверный запрос. Обычно означает, что переданы некорректные параметры или тело запроса не прошло валидацию."})]}),e.jsxs("tr",{children:[e.jsx("td",{children:e.jsx("code",{style:{color:"#ef4444"},children:"401"})}),e.jsx("td",{children:"Unauthorized"}),e.jsxs("td",{children:["Отсутствует или недействителен токен авторизации. Убедитесь, что передаете правильный ",e.jsx("code",{children:"Authorization: Bearer <token>"}),"."]})]}),e.jsxs("tr",{children:[e.jsx("td",{children:e.jsx("code",{style:{color:"#ef4444"},children:"403"})}),e.jsx("td",{children:"Forbidden"}),e.jsx("td",{children:"У вас нет прав на выполнение данного действия или доступ к указанному ресурсу запрещен."})]}),e.jsxs("tr",{children:[e.jsx("td",{children:e.jsx("code",{style:{color:"#ef4444"},children:"404"})}),e.jsx("td",{children:"Not Found"}),e.jsx("td",{children:"Запрашиваемый ресурс не найден (например, неверный ID доната)."})]}),e.jsxs("tr",{children:[e.jsx("td",{children:e.jsx("code",{style:{color:"#ef4444"},children:"500"})}),e.jsx("td",{children:"Internal Server Error"}),e.jsx("td",{children:"Внутренняя ошибка сервера. Возникает редко из-за непредвиденных сбоев на стороне iHAQ."})]})]})]})]}),re=()=>{const[r,h]=m.useState("websockets");return e.jsxs("div",{className:l.developersPage,children:[e.jsx("div",{className:l.backgroundGlow}),e.jsxs("div",{className:l.container,children:[e.jsx(H,{activeSection:r,setActiveSection:h}),e.jsxs("main",{className:l.content,children:[e.jsx("header",{className:l.header,children:e.jsxs("div",{style:{display:"flex",justifyContent:"space-between",alignItems:"center"},children:[e.jsxs("div",{children:[e.jsx("h1",{children:"Документация для разработчиков"}),e.jsx("p",{children:"Интегрируйте возможности iHAQ в ваши приложения"})]}),e.jsx("div",{style:{fontSize:"0.85rem",color:"#8b92a5",background:"rgba(255,255,255,0.05)",padding:"6px 12px",borderRadius:"6px"},children:"Обновлено: 15 июня 2026 г."})]})}),e.jsxs("div",{className:l.sectionContainer,children:[r==="oauth"&&e.jsx(Q,{}),r==="websockets"&&e.jsx(F,{}),r==="errors"&&e.jsx(Y,{}),r==="partner-donations"&&e.jsx(Z,{}),r==="webhooks-v2"&&e.jsx(V,{})]})]})]})]})};export{re as DevelopersPage};