OfficialApi
src/golden/official-api/official-api.service.ts
HTTP-клієнт до партнерського API goldenbride.net. Через нього ходять усі запити що стосуються TU/RU/повідомлень/онлайну/фінансів. Викликається тільки внутрішньо (контролера нема): statistics-downloading, ai-notes, workspace.
Партнерський сервлет: AgencyHelperV2 — POST /usermodule/services/agencyhelper/v2. Вкладення листів — окремий REST /goldenbride/services/upload/attach.
Авторизація і сесія
id_api+password (з golden_admins / golden_ladies) → команда login видає JSESSIONID. Далі на кожен наступний запит шлемо лише куку JSESSIONID, а не login/pass.
- Сесії кешуються у пам’яті по
login(рядокid_api), TTL 3 хв (= idle-timeout сервера). ensureSession()піднімає сесію командоюlogin, якщо в кеші нема або застаріла. Тількиloginчитає login/pass — решта команд їх не передає.- При втраті сесії (
X-Missing-JSESSIONID: true, або 401 від REST, або тілоsuccess:falseз помилкою про сесію) — один автоматичний перелогін + ретрай. - Авторизації не вимагає лише
ping.countryраніше теж була публічною, але з 2026-07 партнер і для неї вимагає сесію (422Session expired or missingбез куки) — томуcountry()тепер приймає auth.
Чому так: партнер задеприкейтив неявний логін через login/pass на будь-якій команді. З ~2 тижні після релізу 2026-06-22 приймається лише
JSESSIONID. Тому ми логінимось явно командоюloginі переюзаємо куку.
Команди й ендпоінти
- Фінанси/профілі/чат/онлайн — команди
AgencyHelperV2(finances,chatHistory,getMail,getLady,getMan,getPaidAttach,getOnlineLadies,getLadies,online,blackList,loadLetter,saveLetter,send/status/stop,country). - Сесія —
login/logout/ping. - Вкладення листів — переїхали в
MediaApiService(media-api):getAttach()/deleteAttach()через REST/goldenbride/services/upload/attach. Deprecated-командиattach/deleteAttachнаAgencyHelperV2повністю прибрані з коду (enum і commands map).
Нюанси
chatHistory.media— для повідомлень з медіабібліотекиmessage === null, а медіа (фото/відео URL) приходить уresult[].media({type, small, large, url}). Уai-notesтакі повідомлення підставляються як[photo]/[video].- Rate-limit партнера —
send/status/stopобмежені 1 запит / 5 сек. Ліміт зачіпає іsaveLetter:sendодразу після нього відбивається тим самим 422 (перевірено e2e 2026-07-03). status/stopбез активної розсилки — партнер віддає урізане тіло (напр.{status:'end', id}або{status:'stop'}), томуcount/id/listв інтерфейсах опціональні.- Дрейф відповідей від доки партнера (зафіксовано e2e 2026-07-03): у фото-DTO зник
urlThumbnailSmall, додалисьuserIdі webp-URL; у листах зʼявивсяletterType; уchatHistory—timestamp; уgetManнемаpublicId;finances[].isFinishприходить лише для чат-операцій. - Помилки — усі неуспішні відповіді логуються у
golden_error_report(error-report). official-api-test.service.ts— smoke-харнес для CI/staging: проганяє основні команди по тестовій парі TU/RU і повертає{success, message, time}на кожну.official-api.e2e-spec.ts— повний e2e усіх команд проти живого партнера (npm run test:official): strictCheck відповідей по інтерфейсах, write-тести (saveLetter,send→status→stop) під прапорцемRUN_WRITES.