UNPKG

@golem-sdk/golem-js

Version:

NodeJS and WebBrowser SDK for building apps running on Golem Network

160 lines (159 loc) 3.86 kB
import { Logger } from "../../shared/utils"; import { ProviderInfo } from "../../market/agreement"; /** * Set of normalized scores for a provider. * * All values are between 0 and 1. * * Higher score is better. * * @experimental */ export interface ReputationProviderScores { /** Percentage of successful tasks in the last "period" (last N test runs?) */ successRate: number; /** Ping percentage that got responses. */ uptime: number; /** CPU single threaded benchmark score. */ cpuSingleThreadScore: number; /** CPU multi-thread benchmark score. */ cpuMultiThreadScore: number; } /** * Reputation provider entry. * @experimental */ export interface ReputationProviderEntry { provider: ProviderInfo; scores: ReputationProviderScores; } /** * Information about a rejected operator. * @experimental */ export interface ReputationRejectedOperator { operator: { walletAddress: string; }; reason?: string; } /** * Information about a rejected provider. * @experimental */ export interface ReputationRejectedProvider { provider: ProviderInfo; reason?: string; } /** * Information about untested provider. * @experimental */ export interface ReputationUntestedProvider { provider: ProviderInfo; scores: { uptime: number; }; } /** * Reputation data. * @experimental */ export interface ReputationData { testedProviders: ReputationProviderEntry[]; rejectedProviders?: ReputationRejectedProvider[]; rejectedOperators?: ReputationRejectedOperator[]; untestedProviders?: ReputationUntestedProvider[]; } /** * Options for the proposal filter. * @experimental */ export interface ProposalFilterOptions { /** * Should providers with no reputation data be accepted. * * Default is false if there are listed providers, true if there are no listed providers. */ acceptUnlisted?: boolean; /** * Minimum weighted score a provider on the list needs to have in order to not get rejected. * * Default is `DEFAULT_PROPOSAL_MIN_SCORE`. */ min?: number; } /** * Options for the agreement selector. * @experimental */ export interface ProposalSelectorOptions { /** * The size of top provider pool used to pick a random one. * * If you want to just use the best available one, set this to 1. * * Default is `DEFAULT_AGREEMENT_TOP_POOL_SIZE`. */ topPoolSize?: number; } /** * Weights used to calculate the score for providers. * @experimental */ export type ReputationWeights = Partial<ReputationProviderScores>; /** * Mixin for objects with reputation weights. * @experimental */ export interface ReputationWeightsMixin { weights?: ReputationWeights; } /** * Preset configuration for reputation system. * * @experimental */ export interface ReputationPreset { offerProposalFilter?: ProposalFilterOptions & ReputationWeightsMixin; offerProposalSelector?: ProposalSelectorOptions & ReputationWeightsMixin; } /** * Interface for predefined reputation presets. * * @experimental */ export interface ReputationPresets { compute: ReputationPreset; service: ReputationPreset; } /** * Names of predefined reputation presets. * * @experimental */ export type ReputationPresetName = keyof ReputationPresets; /** * Configuration for ReputationSystem class. * * @experimental */ export interface ReputationConfig { /** * Reputation service URL */ url?: string; /** * Network to query data for. * * This is the main filter for the data. * * You can leave it empty if you are controlling the payment network through `PAYMENT_NETWORK` environment variable. */ paymentNetwork?: string; /** * Logger to use. */ logger?: Logger; preset?: ReputationPresetName; }