diff --git a/package.json b/package.json index 9e6b812..2d9fd4c 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@compolabs/spark-orderbook-ts-sdk", - "version": "1.14.15", + "version": "1.14.16", "type": "module", "main": "./dist/index.сjs", "module": "./dist/index.js", diff --git a/src/SparkOrderbook.ts b/src/SparkOrderbook.ts index 1e64de1..debdd47 100644 --- a/src/SparkOrderbook.ts +++ b/src/SparkOrderbook.ts @@ -27,6 +27,7 @@ import { GetSortedLeaderboardQueryParams, GetTradeEventQueryParams, GetTradeOrderEventsParams, + GetUserPointQueryParams, GetUserScoreSnapshotParams, GraphClientConfig, MarketInfo, @@ -382,6 +383,9 @@ export class SparkOrderbook { return this.activeSentioApi.getSortedLeaderboardPnl(params); } + async getUserPoints(params: GetUserPointQueryParams) { + return this.activeSentioApi.getUserPoints(params); + } /** * @experimental * Returns the current instance to allow method chaining. diff --git a/src/interface.ts b/src/interface.ts index 1e7b9e1..4b8afb2 100644 --- a/src/interface.ts +++ b/src/interface.ts @@ -258,6 +258,16 @@ export interface GetLeaderboardPnlQueryParams { wallets: string[]; } +export interface GetUserPointQueryParams { + userAddress: string; + toTimestamp: number; + fromTimestamp: number; +} + +export interface UserPointsResponse { + result: string; +} + export interface GetSortedLeaderboardPnlQueryParams { side: string; timeline: string; diff --git a/src/query/sentioQuery.ts b/src/query/sentioQuery.ts index 5ac70ef..bedbf45 100644 --- a/src/query/sentioQuery.ts +++ b/src/query/sentioQuery.ts @@ -5,12 +5,14 @@ import { GetSortedLeaderboardPnlQueryParams, GetSortedLeaderboardQueryParams, GetTradeEventQueryParams, + GetUserPointQueryParams, GetUserScoreSnapshotParams, LeaderboardPnlResponse, RowSnapshot, RowTradeEvent, SentioApiParams, TraderVolumeResponse, + UserPointsResponse, } from "src/interface"; import { Fetch } from "src/utils/Fetch"; @@ -311,6 +313,40 @@ export class SentioQuery extends Fetch { headers, ); } + + async getUserPoints({ + userAddress, + fromTimestamp, + toTimestamp, + }: GetTradeEventQueryParams): Promise> { + const sqlQuery: sqlQueryParams = { + sqlQuery: { + sql: `SELECT (total_volume / latest_volume) * 400000 AS result FROM + (SELECT + SUM(te.volume) AS total_volume, + (SELECT volume + FROM TotalVolume_raw + ORDER BY timestamp DESC + LIMIT 1) AS latest_volume + FROM + TradeEvent te + WHERE + (te.seller = '${userAddress}' + OR te.buyer = '${userAddress}') + AND te.timestamp BETWEEN '${fromTimestamp}' AND '${toTimestamp}' + ) AS aggregated_data;`, + size: 10, + }, + }; + const headers: Record = { + "api-key": this.apiKey, + }; + return await this.post>( + sqlQuery, + "same-origin", + headers, + ); + } } export const getUserScoreSnapshotQuery = async ( @@ -372,3 +408,13 @@ export const getSortedLeaderboardPnlQuery = async ( ...params, }); }; + +export const getUserPointsQuery = async ( + params: GetUserPointQueryParams & SentioApiParams, +): Promise> => { + const { url, apiKey } = params; + const sentioQuery = new SentioQuery({ url, apiKey }); + return await sentioQuery.getUserPoints({ + ...params, + }); +}; diff --git a/src/sentioApi.ts b/src/sentioApi.ts index 34ce3c9..7a553dd 100644 --- a/src/sentioApi.ts +++ b/src/sentioApi.ts @@ -4,6 +4,7 @@ import { getSortedLeaderboardPnlQuery, getSortedLeaderboardQuery, getTradeEventQuery, + getUserPointsQuery, getUserScoreSnapshotQuery, } from "./query/sentioQuery"; import { @@ -12,6 +13,7 @@ import { GetSortedLeaderboardPnlQueryParams, GetSortedLeaderboardQueryParams, GetTradeEventQueryParams, + GetUserPointQueryParams, GetUserScoreSnapshotParams, SentioApiParams, } from "./interface"; @@ -75,4 +77,11 @@ export class SentioApi { apiKey: this.apiKey, }); }; + getUserPoints = (params: GetUserPointQueryParams) => { + return getUserPointsQuery({ + ...params, + url: this.url, + apiKey: this.apiKey, + }); + }; }