Skip to content

Commit

Permalink
feat: adds recent watches
Browse files Browse the repository at this point in the history
  • Loading branch information
R-K-H committed Aug 4, 2024
1 parent 35c2e93 commit dc49a92
Show file tree
Hide file tree
Showing 3 changed files with 119 additions and 3 deletions.
2 changes: 2 additions & 0 deletions lib/client/client.ts
Original file line number Diff line number Diff line change
Expand Up @@ -149,6 +149,8 @@ export interface FutarchyMarketsClient {
): Observable<{ orders: Order[]; totalOrders: number }>;
watchTwapPrices(marketKey: PublicKey): Observable<TwapObservation[]>;
watchSpotPrices(marketKey: PublicKey): Observable<SpotObservation[]>;
// watchCurrentSpotPrice(marketKey: PublicKey): Observable<SpotObservation[]>;
// watchConditionalSpotPrice(marketKey: PublicKey): Observable<SpotObservation[]>;
}

export interface FutarchyOrderbookMarketsClient<
Expand Down
117 changes: 115 additions & 2 deletions lib/client/indexer/markets.ts
Original file line number Diff line number Diff line change
Expand Up @@ -156,9 +156,9 @@ export class FutarchyIndexerMarketsClient implements FutarchyMarketsClient {
},
order_by: [
{
interv: "asc"
interv: "desc"
}
]
], limit: 1
},
token_amount: true,
market: {
Expand Down Expand Up @@ -421,6 +421,119 @@ export class FutarchyIndexerMarketsClient implements FutarchyMarketsClient {
limit: pageSizeValue
});
}
watchConditionalSpotPrice(
marketKey: PublicKey,
filters?: prices_chart_data_bool_exp
): Observable<SpotObservation[]> {
const { query, variables } = generateSubscriptionOp({
prices_chart_data: {
__args: {
where: {
market_acct: { _eq: marketKey.toString() },
prices_type: {
_in: ["conditional"]
},
...filters
},
order_by: [
{
interv: "desc"
}
],
limit: 1
},
interv: true,
price: true,
quote_amount: true,
base_amount: true
}
});

return new Observable((subscriber) => {
const subscriptionCleanup = this.graphqlWSClient.subscribe<{
prices_chart_data: {
interv: string;
price: number;
quote_amount: number;
base_amount: number;
}[];
}>(
{ query, variables },
{
next: (data) => {
const spotObservations =
data.data?.prices_chart_data?.map<SpotObservation>((d) => ({
priceUi: d.price,
createdAt: new Date(d.interv),
quoteAmount: d.quote_amount,
baseAmount: d.base_amount
}));
subscriber.next(spotObservations);
},
error: (error) => subscriber.error(error),
complete: () => subscriber.complete()
}
);
return () => subscriptionCleanup();
});
}

watchCurrentSpotPrice(
marketKey: PublicKey,
filters?: prices_chart_data_bool_exp
): Observable<SpotObservation[]> {
const { query, variables } = generateSubscriptionOp({
prices_chart_data: {
__args: {
where: {
market_acct: { _eq: marketKey.toString() },
prices_type: {
_in: ["spot"]
},
...filters
},
order_by: [
{
interv: "desc"
}
],
limit: 1
},
interv: true,
price: true,
quote_amount: true,
base_amount: true
}
});

return new Observable((subscriber) => {
const subscriptionCleanup = this.graphqlWSClient.subscribe<{
prices_chart_data: {
interv: string;
price: number;
quote_amount: number;
base_amount: number;
}[];
}>(
{ query, variables },
{
next: (data) => {
const spotObservations =
data.data?.prices_chart_data?.map<SpotObservation>((d) => ({
priceUi: d.price,
createdAt: new Date(d.interv),
quoteAmount: d.quote_amount,
baseAmount: d.base_amount
}));
subscriber.next(spotObservations);
},
error: (error) => subscriber.error(error),
complete: () => subscriber.complete()
}
);
return () => subscriptionCleanup();
});
}

watchSpotPrices(
marketKey: PublicKey,
Expand Down
3 changes: 2 additions & 1 deletion lib/client/indexer/proposals.ts
Original file line number Diff line number Diff line change
Expand Up @@ -351,7 +351,8 @@ export class FutarchyIndexerProposalsClient implements FutarchyProposalsClient {
{
created_at: "desc"
}
]
],
limit: 1
},
dao: {
dao_detail: {
Expand Down

0 comments on commit dc49a92

Please sign in to comment.