From 63c2eb89270fef25c4aebf1141ef4a4ab0392462 Mon Sep 17 00:00:00 2001 From: 21in7 Date: Mon, 2 Mar 2026 16:11:33 +0900 Subject: [PATCH] feat: add listenKey create/keepalive/delete methods to exchange Made-with: Cursor --- src/exchange.py | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/src/exchange.py b/src/exchange.py index 046b2fd..ebf206a 100644 --- a/src/exchange.py +++ b/src/exchange.py @@ -172,3 +172,31 @@ class BinanceFuturesClient: except Exception as e: logger.warning(f"펀딩비 조회 실패 (무시): {e}") return None + + async def create_listen_key(self) -> str: + """POST /fapi/v1/listenKey — listenKey 신규 발급""" + loop = asyncio.get_event_loop() + result = await loop.run_in_executor( + None, + lambda: self.client.futures_stream_get_listen_key(), + ) + return result + + async def keepalive_listen_key(self, listen_key: str) -> None: + """PUT /fapi/v1/listenKey — listenKey 만료 연장 (60분 → 리셋)""" + loop = asyncio.get_event_loop() + await loop.run_in_executor( + None, + lambda: self.client.futures_stream_keepalive(listenKey=listen_key), + ) + + async def delete_listen_key(self, listen_key: str) -> None: + """DELETE /fapi/v1/listenKey — listenKey 삭제 (정상 종료 시)""" + loop = asyncio.get_event_loop() + try: + await loop.run_in_executor( + None, + lambda: self.client.futures_stream_close(listenKey=listen_key), + ) + except Exception as e: + logger.warning(f"listenKey 삭제 실패 (무시): {e}")