diff --git a/.changeset/silent-eels-agree.md b/.changeset/silent-eels-agree.md new file mode 100644 index 0000000000..2134b8ee55 --- /dev/null +++ b/.changeset/silent-eels-agree.md @@ -0,0 +1,5 @@ +--- +'@chainlink/gmci-adapter': major +--- + +Wintermute EA diff --git a/packages/sources/gmci/src/config/index.ts b/packages/sources/gmci/src/config/index.ts index 2c292ba6ad..f001ec4c96 100644 --- a/packages/sources/gmci/src/config/index.ts +++ b/packages/sources/gmci/src/config/index.ts @@ -1,15 +1,28 @@ import { AdapterConfig } from '@chainlink/external-adapter-framework/config' export const config = new AdapterConfig({ - API_KEY: { + GMCI_API_KEY: { description: 'An API key for Data Provider', type: 'string', required: true, sensitive: true, }, - WS_API_ENDPOINT: { + GMCI_WS_API_ENDPOINT: { description: 'WS endpoint for GMCI Data Provider', type: 'string', + required: false, + default: 'wss://api.gmci.co/private', + }, + WINTERMUTE_API_KEY: { + description: 'An API key for Data Provider', + type: 'string', required: true, + sensitive: true, + }, + WINTERMUTE_WS_API_ENDPOINT: { + description: 'WS endpoint for GMCI Data Provider', + type: 'string', + required: false, + default: 'wss://generic-alb-ty.api.wintermute-rfq.xyz:15494/private', }, }) diff --git a/packages/sources/gmci/src/endpoint/gmci.ts b/packages/sources/gmci/src/endpoint/gmci.ts new file mode 100644 index 0000000000..0071709556 --- /dev/null +++ b/packages/sources/gmci/src/endpoint/gmci.ts @@ -0,0 +1,10 @@ +import { AdapterEndpoint } from '@chainlink/external-adapter-framework/adapter' +import { gmciTransport } from '../transport/gmci' +import { inputParameters } from './shared' + +export const endpoint = new AdapterEndpoint({ + name: 'gmci', + aliases: [], + transport: gmciTransport, + inputParameters, +}) diff --git a/packages/sources/gmci/src/endpoint/index.ts b/packages/sources/gmci/src/endpoint/index.ts index 11a44912b4..37216f49bd 100644 --- a/packages/sources/gmci/src/endpoint/index.ts +++ b/packages/sources/gmci/src/endpoint/index.ts @@ -1 +1,2 @@ -export { endpoint as price } from './price' +export { endpoint as gmci } from './gmci' +export { endpoint as wintermute } from './wintermute' diff --git a/packages/sources/gmci/src/endpoint/price.ts b/packages/sources/gmci/src/endpoint/shared.ts similarity index 69% rename from packages/sources/gmci/src/endpoint/price.ts rename to packages/sources/gmci/src/endpoint/shared.ts index 4c61d4cdaa..38d1d6e565 100644 --- a/packages/sources/gmci/src/endpoint/price.ts +++ b/packages/sources/gmci/src/endpoint/shared.ts @@ -1,7 +1,5 @@ -import { AdapterEndpoint } from '@chainlink/external-adapter-framework/adapter' import { InputParameters } from '@chainlink/external-adapter-framework/validation' import { config } from '../config' -import { transport } from '../transport/price' export const inputParameters = new InputParameters( { @@ -31,10 +29,3 @@ export type BaseEndpointTypes = { Response: GMCIResultResponse Settings: typeof config.settings } - -export const endpoint = new AdapterEndpoint({ - name: 'price', - aliases: [], - transport: transport, - inputParameters, -}) diff --git a/packages/sources/gmci/src/endpoint/wintermute.ts b/packages/sources/gmci/src/endpoint/wintermute.ts new file mode 100644 index 0000000000..669e45c90e --- /dev/null +++ b/packages/sources/gmci/src/endpoint/wintermute.ts @@ -0,0 +1,10 @@ +import { AdapterEndpoint } from '@chainlink/external-adapter-framework/adapter' +import { wintermuteTransport } from '../transport/wintermute' +import { inputParameters } from './shared' + +export const endpoint = new AdapterEndpoint({ + name: 'wintermute', + aliases: [], + transport: wintermuteTransport, + inputParameters, +}) diff --git a/packages/sources/gmci/src/index.ts b/packages/sources/gmci/src/index.ts index 909b82c265..008bda1163 100644 --- a/packages/sources/gmci/src/index.ts +++ b/packages/sources/gmci/src/index.ts @@ -1,13 +1,13 @@ import { expose, ServerInstance } from '@chainlink/external-adapter-framework' import { Adapter } from '@chainlink/external-adapter-framework/adapter' import { config } from './config' -import { price } from './endpoint' +import { gmci, wintermute } from './endpoint' export const adapter = new Adapter({ - defaultEndpoint: price.name, + defaultEndpoint: gmci.name, name: 'GMCI', config, - endpoints: [price], + endpoints: [gmci, wintermute], }) export const server = (): Promise => expose(adapter) diff --git a/packages/sources/gmci/src/transport/gmci.ts b/packages/sources/gmci/src/transport/gmci.ts new file mode 100644 index 0000000000..75f7e3709c --- /dev/null +++ b/packages/sources/gmci/src/transport/gmci.ts @@ -0,0 +1,18 @@ +import { EndpointContext } from '@chainlink/external-adapter-framework/adapter' +import { + WebSocketTransport, + WebSocketTransportConfig, +} from '@chainlink/external-adapter-framework/transports' +import { baseOptions, WsTransportTypes } from './shared' + +export const options: WebSocketTransportConfig = { + ...baseOptions, + url: (context: EndpointContext) => context.adapterSettings.GMCI_WS_API_ENDPOINT, + options: async (context: EndpointContext) => ({ + headers: { + 'X-GMCI-API-KEY': context.adapterSettings.GMCI_API_KEY, + }, + }), +} + +export const gmciTransport = new WebSocketTransport(options) diff --git a/packages/sources/gmci/src/transport/price.ts b/packages/sources/gmci/src/transport/shared.ts similarity index 70% rename from packages/sources/gmci/src/transport/price.ts rename to packages/sources/gmci/src/transport/shared.ts index 8e5d3642b4..e92be0b146 100644 --- a/packages/sources/gmci/src/transport/price.ts +++ b/packages/sources/gmci/src/transport/shared.ts @@ -1,10 +1,7 @@ -import { EndpointContext } from '@chainlink/external-adapter-framework/adapter' -import { - WebSocketTransport, - WebSocketTransportConfig, -} from '@chainlink/external-adapter-framework/transports' +// import { WebSocketTransportConfig } from '@chainlink/external-adapter-framework/transports' import { makeLogger } from '@chainlink/external-adapter-framework/util' -import { BaseEndpointTypes } from '../endpoint/price' +import { TypeFromDefinition } from '@chainlink/external-adapter-framework/validation/input-params' +import { BaseEndpointTypes } from '../endpoint/shared' import { convertTimetoUnixMs } from './util' export interface PriceMessage { @@ -42,14 +39,7 @@ export type WsTransportTypes = BaseEndpointTypes & { const logger = makeLogger('GmciTransport') -export const options: WebSocketTransportConfig = { - url: (context: EndpointContext) => context.adapterSettings.WS_API_ENDPOINT, - options: async (context: EndpointContext) => ({ - headers: { - 'X-GMCI-API-KEY': context.adapterSettings.API_KEY, - }, - }), - +export const baseOptions = { handlers: { message(message: WsResponse) { if (message.success === false) { @@ -81,14 +71,14 @@ export const options: WebSocketTransportConfig = { }, builders: { - subscribeMessage: (params) => { + subscribeMessage: (params: TypeFromDefinition) => { return { op: 'subscribe', args: [`price.${params.symbol}`.toLowerCase()], } }, - unsubscribeMessage: (params) => { + unsubscribeMessage: (params: TypeFromDefinition) => { return { op: 'unsubscribe', args: [`price.${params.symbol}`.toLowerCase()], @@ -96,5 +86,3 @@ export const options: WebSocketTransportConfig = { }, }, } - -export const transport = new WebSocketTransport(options) diff --git a/packages/sources/gmci/src/transport/wintermute.ts b/packages/sources/gmci/src/transport/wintermute.ts new file mode 100644 index 0000000000..ee1a1f0826 --- /dev/null +++ b/packages/sources/gmci/src/transport/wintermute.ts @@ -0,0 +1,19 @@ +import { EndpointContext } from '@chainlink/external-adapter-framework/adapter' +import { + WebSocketTransport, + WebSocketTransportConfig, +} from '@chainlink/external-adapter-framework/transports' +import { baseOptions, WsTransportTypes } from './shared' + +export const options: WebSocketTransportConfig = { + ...baseOptions, + url: (context: EndpointContext) => + context.adapterSettings.WINTERMUTE_WS_API_ENDPOINT, + options: async (context: EndpointContext) => ({ + headers: { + 'X-GMCI-API-KEY': context.adapterSettings.WINTERMUTE_API_KEY, + }, + }), +} + +export const wintermuteTransport = new WebSocketTransport(options)