Skip to content

Commit

Permalink
New market status endpoint
Browse files Browse the repository at this point in the history
  • Loading branch information
martin-cll committed Jul 29, 2024
1 parent 970e2af commit 397291a
Show file tree
Hide file tree
Showing 5 changed files with 587 additions and 477 deletions.
1 change: 1 addition & 0 deletions .tool-versions
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
nodejs 22.1.0
8 changes: 4 additions & 4 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -14,8 +14,8 @@
"pino-pretty": "9.1.0",
"prom-client": "13.2.0",
"redlock": "5.0.0-beta.2",
"yeoman-generator": "3.1.1",
"ws": "8.9.0"
"ws": "8.9.0",
"yeoman-generator": "3.1.1"
},
"scripts": {
"build": "mkdir -p ./dist/src && cp package.json dist/src && cp README.md dist/src && tsc && yarn build-generator",
Expand All @@ -39,6 +39,7 @@
"@types/node": "18.15.13",
"@types/sinonjs__fake-timers": "8.1.2",
"@types/ws": "8.5.3",
"@types/yeoman-generator": "5.2.11",
"@typescript-eslint/eslint-plugin": "5.59.0",
"@typescript-eslint/parser": "5.59.0",
"ava": "5.2.0",
Expand All @@ -52,8 +53,7 @@
"ts-node": "10.9.1",
"ts-node-dev": "2.0.0",
"typedoc": "0.23.21",
"typescript": "5.0.4",
"@types/yeoman-generator": "5.2.11"
"typescript": "5.0.4"
},
"prettier": {
"semi": false,
Expand Down
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)
}
}
Loading

0 comments on commit 397291a

Please sign in to comment.