From 10691ab0b8d82777547cdd2f52fc7a9fac9ffb42 Mon Sep 17 00:00:00 2001 From: cryptooda Date: Mon, 29 Dec 2025 16:58:32 +0700 Subject: [PATCH] Add endpoint for retrieving spot position history in GMX API. Enhance SpotBot to handle 404 errors gracefully when positions are not found in broker history, improving logging and user feedback for closed positions. --- .../src/plugins/custom/gmx.ts | 1 + .../src/routes/api/gmx/index.ts | 36 +++++++++++++++++++ 2 files changed, 37 insertions(+) diff --git a/src/Managing.Web3Proxy/src/plugins/custom/gmx.ts b/src/Managing.Web3Proxy/src/plugins/custom/gmx.ts index 37cffd1c..492d9e5c 100644 --- a/src/Managing.Web3Proxy/src/plugins/custom/gmx.ts +++ b/src/Managing.Web3Proxy/src/plugins/custom/gmx.ts @@ -631,6 +631,7 @@ declare module 'fastify' { swapGmxTokens: typeof swapGmxTokens; estimatePositionGasFee: typeof estimatePositionGasFee; getPositionHistory: typeof getPositionHistory; + getSpotPositionHistory: typeof getSpotPositionHistory; } } diff --git a/src/Managing.Web3Proxy/src/routes/api/gmx/index.ts b/src/Managing.Web3Proxy/src/routes/api/gmx/index.ts index 52abeebb..2a16284d 100644 --- a/src/Managing.Web3Proxy/src/routes/api/gmx/index.ts +++ b/src/Managing.Web3Proxy/src/routes/api/gmx/index.ts @@ -234,6 +234,42 @@ const plugin: FastifyPluginAsyncTypebox = async (fastify) => { ) }) + // Define route to get spot position history + fastify.get('/spot-position-history', { + schema: { + querystring: Type.Object({ + account: Type.String(), + pageIndex: Type.Optional(Type.Integer()), + pageSize: Type.Optional(Type.Integer()), + ticker: Type.Optional(Type.String()), + fromDateTime: Type.Optional(Type.String()), + toDateTime: Type.Optional(Type.String()) + }), + response: { + 200: Type.Object({ + success: Type.Boolean(), + positions: Type.Optional(Type.Array(Type.Any())), + pageIndex: Type.Optional(Type.Integer()), + pageSize: Type.Optional(Type.Integer()), + count: Type.Optional(Type.Integer()), + error: Type.Optional(Type.String()) + }) + } + } + }, async (request, reply) => { + const { account, pageIndex, pageSize, ticker, fromDateTime, toDateTime } = request.query + + return request.getSpotPositionHistory( + reply, + account, + pageIndex, + pageSize, + ticker, + fromDateTime, + toDateTime + ) + }) + // Define route to get gas fee estimation for opening a position fastify.get('/gas-fee', { schema: {