Skip to content
Snippets Groups Projects
Unverified Commit 7d78b806 authored by Mateusz Tyszczak's avatar Mateusz Tyszczak :scroll:
Browse files

Add impacted account provider

parent d5999511
No related branches found
No related tags found
1 merge request!26Bump wax and beekeeper versions
...@@ -15,6 +15,7 @@ export type { IBlockHeaderProviderData } from "./providers/block-header-provider ...@@ -15,6 +15,7 @@ export type { IBlockHeaderProviderData } from "./providers/block-header-provider
export type { IBlockProviderData } from "./providers/block-provider"; export type { IBlockProviderData } from "./providers/block-provider";
export type { IExchangeTransferMetadata, IExchangeTransferProviderData } from "./providers/exchange-transfer-provider"; export type { IExchangeTransferMetadata, IExchangeTransferProviderData } from "./providers/exchange-transfer-provider";
export type { IFeedPriceData, IFeedPriceProviderData } from "./providers/feed-price-provider"; export type { IFeedPriceData, IFeedPriceProviderData } from "./providers/feed-price-provider";
export type { IImpactedAccountProviderData, ImpactedAccountProvider, TImpactedAccountProvided } from "./providers/impacted-account-provider";
export type { export type {
IInternalMarketCancelOperation, IInternalMarketCreateOperation, IInternalMarketCancelOperation, IInternalMarketCreateOperation,
IInternalMarketProviderData, TInternalMarketOperation IInternalMarketProviderData, TInternalMarketOperation
......
import { TAccountName } from "@hiveio/wax";
import { WorkerBeeIterable } from "../../types/iterator";
import { ImpactedAccountClassifier } from "../classifiers";
import { TRegisterEvaluationContext } from "../classifiers/collector-classifier-base";
import { IOperationTransactionPair } from "../classifiers/operation-classifier";
import { DataEvaluationContext } from "../factories/data-evaluation-context";
import { ProviderBase } from "./provider-base";
export type TImpactedAccountProvided<TAccounts extends Array<TAccountName>> = {
[K in TAccounts[number]]: WorkerBeeIterable<IOperationTransactionPair>;
};
export interface IImpactedAccountProviderData<TAccounts extends Array<TAccountName>> {
impactedAccounts: TImpactedAccountProvided<TAccounts>;
};
export interface IImpactedAccountProviderOptions {
accounts: string[];
}
export class ImpactedAccountProvider<TAccounts extends Array<TAccountName> = Array<TAccountName>> extends ProviderBase<IImpactedAccountProviderOptions> {
public readonly accounts: string[] = [];
public pushOptions(options: IImpactedAccountProviderOptions): void {
this.accounts.push(...options.accounts);
}
public usedContexts(): Array<TRegisterEvaluationContext> {
return [
ImpactedAccountClassifier
];
}
public async provide(data: DataEvaluationContext): Promise<IImpactedAccountProviderData<TAccounts>> {
const result = {
impactedAccounts: {}
};
const { impactedAccounts } = await data.get(ImpactedAccountClassifier);
for(const account of this.accounts)
if (impactedAccounts[account] === undefined)
result.impactedAccounts[account] = new WorkerBeeIterable<IOperationTransactionPair>([]);
else // Copy the array to prevent the original from being modified
result.impactedAccounts[account] = new WorkerBeeIterable<IOperationTransactionPair>(Array.from(impactedAccounts[account].operations));
return result as IImpactedAccountProviderData<TAccounts>;
}
}
...@@ -30,6 +30,7 @@ import { BlockHeaderProvider } from "./chain-observers/providers/block-header-pr ...@@ -30,6 +30,7 @@ import { BlockHeaderProvider } from "./chain-observers/providers/block-header-pr
import { BlockProvider } from "./chain-observers/providers/block-provider"; import { BlockProvider } from "./chain-observers/providers/block-provider";
import { ExchangeTransferProvider } from "./chain-observers/providers/exchange-transfer-provider"; import { ExchangeTransferProvider } from "./chain-observers/providers/exchange-transfer-provider";
import { FeedPriceProvider } from "./chain-observers/providers/feed-price-provider"; import { FeedPriceProvider } from "./chain-observers/providers/feed-price-provider";
import { ImpactedAccountProvider } from "./chain-observers/providers/impacted-account-provider";
import { InternalMarketProvider } from "./chain-observers/providers/internal-market-provider"; import { InternalMarketProvider } from "./chain-observers/providers/internal-market-provider";
import { MentionedAccountProvider } from "./chain-observers/providers/mention-provider"; import { MentionedAccountProvider } from "./chain-observers/providers/mention-provider";
import { ProviderBase } from "./chain-observers/providers/provider-base"; import { ProviderBase } from "./chain-observers/providers/provider-base";
...@@ -203,8 +204,11 @@ export class QueenBee<TPreviousSubscriberData extends object = {}> { ...@@ -203,8 +204,11 @@ export class QueenBee<TPreviousSubscriberData extends object = {}> {
return this; return this;
} }
public onImpactedAccount(account: TAccountName): QueenBee<TPreviousSubscriberData> { public onImpactedAccount<
TAccount extends TAccountName
>(account: TAccountName): QueenBee<TPreviousSubscriberData & Awaited<ReturnType<ImpactedAccountProvider<[TAccount]>["provide"]>>> {
this.operands.push(new ImpactedAccountFilter(this.worker, account)); this.operands.push(new ImpactedAccountFilter(this.worker, account));
this.pushProvider(ImpactedAccountProvider, { accounts: [ account ] });
return this; return this;
} }
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment