Skip to content

Commit 6345ea1

Browse files
committed
tests: Testing dynamic subscriber
1 parent 7f35f59 commit 6345ea1

File tree

4 files changed

+377
-2
lines changed

4 files changed

+377
-2
lines changed

src/dynamic-subscriber.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -112,6 +112,7 @@ export class DynamicAlgorandSubscriber<T> extends AlgorandSubscriber {
112112
syncedRoundRange: pollMetadata.syncedRoundRange,
113113
newWatermark: pollMetadata.newWatermark,
114114
currentRound: pollMetadata.currentRound,
115+
blockMetadata: pollMetadata.blockMetadata,
115116
subscribedTransactions: subscribedTransactions.sort(
116117
(a, b) => a['confirmed-round']! - b['confirmed-round']! || a['intra-round-offset']! - b['intra-round-offset']!,
117118
),

src/subscriptions.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -299,6 +299,7 @@ export async function getSubscribedTransactions(
299299
syncedRoundRange: pollMetadata.syncedRoundRange,
300300
newWatermark: pollMetadata.newWatermark,
301301
currentRound: pollMetadata.currentRound,
302+
blockMetadata: pollMetadata.blockMetadata,
302303
subscribedTransactions: catchupTransactions
303304
.concat(algodTransactions)
304305
.map((t) => processExtraSubscriptionTransactionFields(t, arc28EventsToProcess, subscription.arc28Events ?? [])),

src/types/subscription.ts

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import type { ApplicationOnComplete, TransactionResult } from '@algorandfoundation/algokit-utils/types/indexer'
22
import algosdk from 'algosdk'
3-
import { TransactionInBlock } from '../transform'
43
import { Arc28EventGroup, EmittedArc28Event } from './arc-28'
4+
import { TransactionInBlock } from './block'
55
import TransactionType = algosdk.TransactionType
66

77
/** The result of a single subscription pull/poll. */
@@ -116,6 +116,10 @@ export interface SubscriptionPollMetadata {
116116
blockTransactions?: TransactionInBlock[]
117117
/** The set of ARC-28 event groups to process against the subscribed transactions */
118118
arc28EventGroups: Arc28EventGroup[]
119+
/** The metadata about any blocks that were retrieved from algod as part
120+
* of the subscription poll.
121+
*/
122+
blockMetadata?: BlockMetadata[]
119123
}
120124

121125
/** Common parameters to control a single subscription pull/poll for both `AlgorandSubscriber` and `getSubscribedTransactions`. */
@@ -263,6 +267,9 @@ export interface TransactionSubscriptionParams extends CoreTransactionSubscripti
263267
watermark: number
264268
}
265269

270+
/** A function that returns a set of filters based on a given filter state and hierarchical poll level. */
271+
export type DynamicFilterLambda<T> = (state: T, pollLevel: number, watermark: number) => Promise<SubscriberConfigFilter<unknown>[]>
272+
266273
/** Configuration for a `DynamicAlgorandSubscriber` */
267274
export interface DynamicAlgorandSubscriberConfig<T> extends Omit<AlgorandSubscriberConfig, 'filters'> {
268275
/**
@@ -272,7 +279,7 @@ export interface DynamicAlgorandSubscriberConfig<T> extends Omit<AlgorandSubscri
272279
* @param watermark The current watermark being processed
273280
* @returns The set of filters to subscribe to / emit events for
274281
*/
275-
dynamicFilters: (state: T, pollLevel: number, watermark: number) => Promise<SubscriberConfigFilter<unknown>[]>
282+
dynamicFilters: DynamicFilterLambda<T>
276283

277284
/** Methods to retrieve and persist the current filter state so syncing is resilient */
278285
filterStatePersistence: {

0 commit comments

Comments
 (0)