Family API clients
Модулі відправки запитів до партнерського API всередині кожного Family-сервісу. Це не один універсальний class для всіх transport-ів.
У family-golden:
PartnerApiModule— transport і session infrastructure для партнерського API;AdminApiService— явні admin-операції; зараз реалізованоlogin();OfficialApiClient— HTTP login, parsing відповіді та отриманняJSESSIONID;OfficialSessionStore— зберіганняJSESSIONIDу Redis.
GWT transport додаємо окремо лише тоді, коли переносимо операцію, якої немає в Official API. Перелік наявних Golden-запитів зафіксований у family-golden/src/admins/golden-partner-api-audit.md.
Задача
- Отримати сформований HTTP або GraphQL request та контекст авторизації: admin або TU.
- Знайти credentials і актуальну session для цього контексту.
- За потреби виконати login або refresh.
- Додати до запиту потрібні cookies або token і відправити його партнеру.
- Зберегти оновлені cookies/tokens.
- При помилці авторизації оновити session і один раз повторити запит.
Кожен partner API має власний список операцій і типізовані методи. Бізнес-модулі викликають ці методи, а не передають сирі command, URL або body.
Admin: поточна авторизація
Golden
- Credentials: числовий
id_apiіpassword. - Простий
AgencyHelperприймаєlogin/passу кожному запиті й не використовує збережену session. - GWT RPC потребує
JSESSIONIDіkeyD.keyDзавантажується з актуального JS-модуля Golden; це технічний ключ GWT, а не credentials. - Новий Official API виконує команду
login, отримуєJSESSIONIDі використовує її для наступних команд. - У новому Family-сервісі session зберігається в Redis за
golden:official:session:admin:{login}. При втраті session виконується login і один retry. - Поточна перевірка credentials завжди робить новий login. Кешована session не може підтвердити новий пароль.
- GWT лишається окремим legacy transport тільки для операцій, яких немає в Official API.
Prime
- Credentials:
emailіpassword; login-запит також передає порожнюcaptcha. - Login повертає
result,refreshTokenі cookies. Поточна реалізація використовує cookies, аrefreshTokenне зберігає і не використовує. - Cookies зберігаються в Redis як
cookie::{email}з TTL 10 хвилин і додаються до кожного запиту. - При
401сервіс повторно читає адмінку за email, виконує login і один раз повторює запит.
Chathouse
- Credentials:
secret_idіsecret_key. - Login повертає
access_tokenіexpires_in; cookies не використовуються. - Token зберігається в Redis як
token::{adminId}з TTLexpires_inі передається якAuthorization: Bearer <token>. - API має окремий
/refresh. Поточний код уміє робити refresh перед завершенням token, але для admin token не записуєexpires_at; після зникнення token із Redis фактично виконується новий login.
Udate
- Credentials:
emailіpassword; login-запит також передає порожнюcaptcha. - Login повертає cookie
token. Інші cookies із відповіді не зберігаються. - Cookie зберігається в Redis як
cookie::{adminId}з TTL 10 днів і додається до кожного REST або GraphQL-запиту. - Окремий refresh у поточній реалізації не використовується. Якщо cookie відсутня, REST повернув
401або GraphQL повернувunauthorized, сервіс повторно виконує login і повторює запит. - Після першого login запит
CurrentUserперевіряє адмінку та повертає їїulidіlegacyId.
TU: поточна авторизація
Golden
- Credentials: числовий
id_apiіpasswordсамої TU. - Поточний login викликає
usermodule/services/login, отримує cookies і зберігає їх у Redis якcookie::{ladyId_api}з TTL 24 години. - Наступні HTTP/GWT-запити додають збережені cookies. Для GWT RPC також використовуються
keyAc/keyD. - При
Access denied, завершеній session або іншій session-помилці сервіс повторно логінить TU і один раз повторює запит. - Нові workspace-запити через Official API використовують
login/pass → JSESSIONID. У Family-сервісі session зберігатиметься в Redis заgolden:official:session:tu:{login}.
Prime
- Credentials:
email,passwordіreferral_code; login-запит також передає порожнюcaptcha. - Login повертає
result,idUser,refreshTokenі cookies. Поточна реалізація використовує cookies, аrefreshTokenне використовує. - Cookies зберігаються в Redis як
cookie::{ladyMongoId}з TTL 10 хвилин і додаються до HTTP-запитів. - Cookie
tld-tokenокремо дістається зі збережених cookies для chat/media transport. - При
401сервіс читає TU з БД, повторює login і один раз повторює запит.
Chathouse
- Credentials TU:
emailіpassword. Режим оператора додатково потребує останнійauth_code; режим supervisor передаєis_admin=trueбез auth code. - Login повертає
access_tokenіexpires_in. Token разом з розрахованимexpires_atзберігається в Redis із TTLexpires_in. - Для operator session ключ має вигляд
token::{ladyMongoId}::operator, для supervisor session —token::{ladyMongoId}. - Запити передають
Authorization: Bearer <token>. Якщо до завершення token лишилося менше п’яти хвилин, виконується/refresh. - Якщо login повернув
401, поточний код через admin API встановлює партнеру password із нашої БД і повторює login.
Udate
- TU не має власних credentials і не логіниться напряму.
- Кожна активна TU призначається на suboperator. Запити від її імені виконуються через credentials і session цього suboperator.
- Suboperator логіниться через
email/password, отримує cookietoken, яка зберігається в Redis якcookie::{suboperatorId}з TTL 10 днів. - Якщо cookie відсутня, REST повернув
401або GraphQL повернувunauthorized, виконується повторний login і retry запиту. - Якщо credentials suboperator не збігаються, поточний production-flow змінює його password через admin API та повторює login.
Заповнити
- Перевірити, чи
JSESSIONIDнового Official login приймається старим GWT RPC. - Інтеграційно перевірити перенесені GWT-операції з валідною адмінкою.
- При перенесенні наступних операцій доповнювати каталог
family-golden/src/partner-api/README.md.