Skip to content

Commit

Permalink
Add market status
Browse files Browse the repository at this point in the history
  • Loading branch information
martin-cll committed Jul 25, 2024
1 parent 69c43d5 commit ef9f82d
Show file tree
Hide file tree
Showing 3 changed files with 80 additions and 2 deletions.
1 change: 1 addition & 0 deletions .tool-versions
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
nodejs 16.14.2
5 changes: 3 additions & 2 deletions src/adapter/index.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
export * from './basic'
export * from './price'
export * from './endpoint'
export * from './types'
export * from './lwba'
export * from './market-status'
export * from './price'
export * from './types'
76 changes: 76 additions & 0 deletions src/adapter/market-status.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,76 @@
import { TransportGenerics } from '../transports'
import { SingleNumberResultResponse } from '../util'
import { AdapterError } from '../validation/error'
import { InputParametersDefinition } from '../validation/input-params'
import { AdapterEndpoint } from './endpoint'
import { AdapterEndpointParams } from './index'

/**
* Type for the base input parameter config that any [[MarketStatusEndpoint]] must extend
*/
export type MarketStatusEndpointInputParametersDefinition = InputParametersDefinition

/**
* Base input parameter config that any [[MarketStatusEndpoint]] must extend
*/
export const marketStatusEndpointInputParametersDefinition = {
market: {
aliases: [],
type: 'string',
description: 'The name of the market',
required: true,
},
} as const satisfies MarketStatusEndpointInputParametersDefinition

export enum MarketStatus {
UNKNOWN = 0,
CLOSED = 1,
OPEN = 2,
}

/**
* Helper type structure that contains the different types passed to the generic parameters of a PriceEndpoint
*/
export type MarketStatusEndpointGenerics = TransportGenerics & {
Parameters: MarketStatusEndpointInputParametersDefinition
Response: SingleNumberResultResponse
}

export const DEFAULT_MARKET_STATUS_ALIASES = []

export const validateMarketStatusResponse = (marketStatus?: number): string => {
if (!marketStatus) {
return `Invariant violation. Response must contain the market status`
}
return ''
}

/**
* An MarketStatusEndpoint is a specific type of AdapterEndpoint. Meant to comply with standard practices for
* RWA (lightweight bid/ask) Data Feeds, its InputParameters must extend the basic ones (base/quote).
*/
export class MarketStatusEndpoint<
T extends MarketStatusEndpointGenerics,
> extends AdapterEndpoint<T> {
constructor(params: AdapterEndpointParams<T>) {
if (!params.aliases) {
params.aliases = []
}
for (const alias of DEFAULT_MARKET_STATUS_ALIASES) {
if (params.name !== alias && !params.aliases.includes(alias)) {
params.aliases.push(alias)
}
}

params.customOutputValidation = (output) => {
const data = output.data as SingleNumberResultResponse['Data']
const error = validateMarketStatusResponse(data.result)
if (error) {
throw new AdapterError({ statusCode: 500, message: error })
}
return undefined
}

super(params)
}
}

0 comments on commit ef9f82d

Please sign in to comment.