from services.api_client import JsonTransport class ScopedAuthClient: def __init__(self, base_url, client_type, session_store, transport=None, timeout=10): self.base_url = (base_url or '').rstrip('/') self.client_type = client_type self.session_store = session_store self.transport = transport or JsonTransport() self.timeout = int(timeout) def exchange(self, gateway_session_id, auth_code): session_key = self.build_session_key(gateway_session_id) response = self.transport.post_json( self.base_url + '/mcp/auth/exchange', { 'auth_code': auth_code, 'client_type': self.client_type, 'session_key': session_key, }, {}, self.timeout, ) data = response.get('data') or {} token = data.get('mcp_token') if (response.get('code') or '') == 'MCP_0000' and token: self.session_store.save(gateway_session_id, { 'session_key': session_key, 'mcp_token': token, 'admin_id': data.get('admin_id'), 'company_id': data.get('company_id'), 'client_type': self.client_type, 'expire_time': data.get('expire_time'), }) return response @staticmethod def build_session_key(gateway_session_id): return 'gws_' + str(gateway_session_id or '').strip()