Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
24 commits
Select commit Hold shift + click to select a range
3ebea0f
fix(coinmetrics-lwba): apply RDD symbol overrides that were being dro…
cl-efornaciari Sep 10, 2026
32bcc9f
chore(coinmetrics): bump ea-framework to 2.19.1 for both packages
cl-efornaciari Sep 10, 2026
a994633
chore: move the token-allocation v3 adapter set to ea-framework 2.19.1
cl-efornaciari Sep 11, 2026
ecd2fc8
revert framework bump
cl-efornaciari Sep 15, 2026
dc45be9
reverts version bump for coinmetrics & coinmetrics-lwba
cl-efornaciari Sep 15, 2026
21bb623
fixes gitignore
cl-efornaciari Sep 15, 2026
623f8e7
Merge branch 'main' into feature/DF-26795/coinmetrics-lwba-request-ov…
cl-efornaciari Sep 15, 2026
85ee66d
address PR comments
cl-efornaciari Sep 29, 2026
0bdfd2f
update changeset
cl-efornaciari Sep 29, 2026
2008f59
Merge branch 'main' into feature/DF-26795/coinmetrics-lwba-request-ov…
cl-efornaciari Sep 29, 2026
4cf2d3f
fixes customOutputValidation assignment after instantiation
cl-efornaciari Sep 29, 2026
1e0fcd9
chore: bump ea-framework to 2.20.0 for coinmetrics and the token-allo…
cl-efornaciari Oct 1, 2026
d296a7c
Merge branch 'main' into feature/DF-26795/coinmetrics-lwba-request-ov…
app-token-issuer-data-feeds[bot] Oct 1, 2026
7c79f7b
Merge branch 'main' into feature/DF-26795/coinmetrics-lwba-request-ov…
app-token-issuer-data-feeds[bot] Oct 1, 2026
bd569e2
Merge branch 'main' into feature/DF-26795/coinmetrics-lwba-request-ov…
app-token-issuer-data-feeds[bot] Oct 1, 2026
c997dad
Merge branch 'main' into feature/DF-26795/coinmetrics-lwba-request-ov…
app-token-issuer-data-feeds[bot] Oct 1, 2026
10eec81
Merge branch 'main' into feature/DF-26795/coinmetrics-lwba-request-ov…
app-token-issuer-data-feeds[bot] Oct 1, 2026
389ff95
Merge branch 'main' into feature/DF-26795/coinmetrics-lwba-request-ov…
app-token-issuer-data-feeds[bot] Oct 1, 2026
35e8937
Merge branch 'main' into feature/DF-26795/coinmetrics-lwba-request-ov…
app-token-issuer-data-feeds[bot] Oct 1, 2026
cac2c06
Merge branch 'main' into feature/DF-26795/coinmetrics-lwba-request-ov…
app-token-issuer-data-feeds[bot] Oct 2, 2026
247360a
Merge branch 'main' into feature/DF-26795/coinmetrics-lwba-request-ov…
app-token-issuer-data-feeds[bot] Oct 6, 2026
b045acf
Merge branch 'main' into feature/DF-26795/coinmetrics-lwba-request-ov…
app-token-issuer-data-feeds[bot] Oct 7, 2026
c16ed74
Merge branch 'main' into feature/DF-26795/coinmetrics-lwba-request-ov…
app-token-issuer-data-feeds[bot] Oct 8, 2026
fbfdf0f
Merge branch 'main' into feature/DF-26795/coinmetrics-lwba-request-ov…
app-token-issuer-data-feeds[bot] Oct 8, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
17 changes: 17 additions & 0 deletions .changeset/olive-moons-search.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
---
'@chainlink/coinmetrics-lwba-adapter': patch
'@chainlink/coinmetrics-adapter': patch
'@chainlink/blocksize-capital-adapter': patch
'@chainlink/cfbenchmarks-adapter': patch
'@chainlink/coingecko-adapter': patch
'@chainlink/coinmarketcap-adapter': patch
'@chainlink/coinpaprika-adapter': patch
'@chainlink/cryptocompare-adapter': patch
'@chainlink/finage-adapter': patch
'@chainlink/kaiko-adapter': patch
'@chainlink/ncfx-adapter': patch
'@chainlink/tiingo-adapter': patch
'@chainlink/token-allocation-adapter': patch
---

Apply RDD symbol overrides that were being silently dropped in coinmetrics-lwba, and move the token-allocation v3 adapter set to ea-framework 2.20.0
2 changes: 1 addition & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -39,4 +39,4 @@ packages/k6/src/config/http.json
# AI dirs
.claude
.opencode
skills
Comment thread
cl-efornaciari marked this conversation as resolved.
skills
26 changes: 13 additions & 13 deletions .pnp.cjs

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion packages/non-deployable/token-allocation/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -47,7 +47,7 @@
"tslib": "^2.3.1"
},
"devDependencies": {
"@chainlink/external-adapter-framework": "2.17.1",
"@chainlink/external-adapter-framework": "2.20.0",
"@types/jest": "^29.5.14",
"@types/node": "22.14.1",
"nock": "13.5.6",
Expand Down
2 changes: 1 addition & 1 deletion packages/sources/blocksize-capital/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@
"start": "yarn server:dist"
},
"dependencies": {
"@chainlink/external-adapter-framework": "2.17.1",
"@chainlink/external-adapter-framework": "2.20.0",
"tslib": "^2.3.1"
},
"devDependencies": {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,12 +2,13 @@

exports[`websocket lwba endpoint should return error (LWBA invariant violation) 1`] = `
{
"error": {
"message": "Invariant violation. Mid price must be between bid and ask prices. Got: (bid: 123.123, mid: 123.125, ask: 123.124)",
"name": "AdapterLWBAError",
"errorMessage": "Invariant violation. Mid price must be between bid and ask prices. Got: (bid: 123.123, mid: 123.125, ask: 123.124)",
"statusCode": 502,
"timestamps": {
"providerDataReceivedUnixMs": 3042,
"providerDataStreamEstablishedUnixMs": 2020,
"providerIndicatedTimeUnixMs": 1693425803029,
},
"status": "errored",
"statusCode": 500,
}
`;

Expand Down
2 changes: 1 addition & 1 deletion packages/sources/cfbenchmarks/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@
"start": "yarn server:dist"
},
"dependencies": {
"@chainlink/external-adapter-framework": "2.17.1",
"@chainlink/external-adapter-framework": "2.20.0",
"tslib": "2.4.1"
},
"devDependencies": {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -32,12 +32,13 @@ exports[`websocket crypto endpoint with override should return success 1`] = `

exports[`websocket lwba endpoint should return error (LWBA violation) 1`] = `
{
"error": {
"message": "Invariant violation. Mid price must be between bid and ask prices. Got: (bid: 1.123, mid: 1.1635, ask: 1.125)",
"name": "AdapterLWBAError",
"errorMessage": "Invariant violation. Mid price must be between bid and ask prices. Got: (bid: 1.123, mid: 1.1635, ask: 1.125)",
"statusCode": 502,
"timestamps": {
"providerDataReceivedUnixMs": 1018,
"providerDataStreamEstablishedUnixMs": 1010,
"providerIndicatedTimeUnixMs": 1677876163000,
},
"status": "errored",
"statusCode": 500,
}
`;

Expand Down
Original file line number Diff line number Diff line change
@@ -1,12 +1,12 @@
import { mockWebSocketServer } from './fixtures'
Comment thread
cl-efornaciari marked this conversation as resolved.
import { WebSocketClassProvider } from '@chainlink/external-adapter-framework/transports'
import {
TestAdapter,
setEnvVariables,
mockWebSocketProvider,
MockWebsocketServer,
setEnvVariables,
TestAdapter,
} from '@chainlink/external-adapter-framework/util/testing-utils'
import { WebSocketClassProvider } from '@chainlink/external-adapter-framework/transports'
import FakeTimers from '@sinonjs/fake-timers'
import { mockWebSocketServer } from './fixtures'

describe('websocket', () => {
let mockWsServer: MockWebsocketServer | undefined
Expand Down Expand Up @@ -124,7 +124,9 @@ describe('websocket', () => {

it('should return error (LWBA violation)', async () => {
const response = await testAdapter.request(dataLwbaInvariantViolation)
expect(response.statusCode).toEqual(500)
// ea-framework >= 2.19.1 rejects invariant-violating quotes in LwbaEndpoint.resultValidator,
// at cache-write time, so the cached entry is a 502 rather than a 500 thrown on the read path.
expect(response.statusCode).toEqual(502)
expect(response.json()).toMatchSnapshot()
})
})
Expand Down
2 changes: 1 addition & 1 deletion packages/sources/coingecko/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@
"start": "yarn server:dist"
},
"dependencies": {
"@chainlink/external-adapter-framework": "2.17.1",
"@chainlink/external-adapter-framework": "2.20.0",
"tslib": "2.4.1"
},
"devDependencies": {
Expand Down
2 changes: 1 addition & 1 deletion packages/sources/coinmarketcap/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@
"start": "yarn server:dist"
},
"dependencies": {
"@chainlink/external-adapter-framework": "2.17.1",
"@chainlink/external-adapter-framework": "2.20.0",
"tslib": "^2.3.1"
},
"devDependencies": {
Expand Down
2 changes: 1 addition & 1 deletion packages/sources/coinmetrics-lwba/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,7 @@
},
"dependencies": {
"@chainlink/coinmetrics-adapter": "workspace:*",
"@chainlink/external-adapter-framework": "2.17.1",
"@chainlink/external-adapter-framework": "2.20.0",
"tslib": "2.4.1"
}
}
38 changes: 19 additions & 19 deletions packages/sources/coinmetrics-lwba/src/index.ts
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import { makeConfig } from '@chainlink/coinmetrics-adapter/config'
import { endpoint } from '@chainlink/coinmetrics-adapter/endpoint/lwba'
import { endpointParameters } from '@chainlink/coinmetrics-adapter/endpoint/lwba'
import { expose, ServerInstance } from '@chainlink/external-adapter-framework'
import { Adapter } from '@chainlink/external-adapter-framework/adapter'
import { Adapter, LwbaEndpoint } from '@chainlink/external-adapter-framework/adapter'
import { AdapterResponse } from '@chainlink/external-adapter-framework/util/types'
import { AdapterError } from '@chainlink/external-adapter-framework/validation/error'

Expand All @@ -14,28 +14,28 @@ export const config = makeConfig({
},
})

const newEndpoint = Object.assign(Object.create(Object.getPrototypeOf(endpoint)), endpoint)
newEndpoint.aliases.push('crypto', 'price')
const originalValidate = endpoint.customOutputValidation
newEndpoint.customOutputValidation = (resp: AdapterResponse): AdapterError | undefined => {
const err = originalValidate?.(resp)
if (err) {
return err
}
if (!resp.errorMessage) {
const mid = (resp.data as any)?.mid
if (mid !== undefined) {
resp.result = mid
// Construct a fresh endpoint instead of cloning the coinmetrics one: the AdapterEndpoint
// constructor binds requestTransforms (symbolOverrider) to the instance it creates, and only
// this instance is initialize()d, so RDD overrides resolve against this adapter's name.
export const endpoint = new LwbaEndpoint({
...endpointParameters,
aliases: [...endpointParameters.aliases, 'crypto', 'price'],
customOutputValidation: (resp: AdapterResponse): AdapterError | undefined => {
if (!resp.errorMessage) {
const mid = (resp.data as any)?.mid
if (mid !== undefined) {
resp.result = mid
}
}
}
return undefined // no validation error
}
return // no validation error
},
})

export const adapter = new Adapter({
defaultEndpoint: newEndpoint.name,
defaultEndpoint: endpoint.name,
name: 'COINMETRICS_LWBA',
config,
endpoints: [newEndpoint],
endpoints: [endpoint],
rateLimiting: {
tiers: {
community: {
Expand Down
40 changes: 27 additions & 13 deletions packages/sources/coinmetrics-lwba/test-payload.json
Original file line number Diff line number Diff line change
@@ -1,15 +1,29 @@
{
"requests": [{
"from": "ETH",
"to": "USD",
"endpoint": "crypto-lwba"
}, {
"from": "ETH",
"to": "USD",
"endpoint": "crypto"
}, {
"from": "ETH",
"to": "USD",
"endpoint": "price"
}]
"requests": [
{
"from": "ETH",
"to": "USD",
"endpoint": "crypto-lwba"
},
{
"from": "ETH",
"to": "USD",
"endpoint": "crypto"
},
{
"from": "ETH",
"to": "USD",
"endpoint": "price"
},
{
"from": "FRAX",
"to": "USD",
"endpoint": "crypto",
"overrides": {
"coinmetrics-lwba": {
"FRAX": "frax_frax"
}
}
}
]
}
Original file line number Diff line number Diff line change
Expand Up @@ -53,11 +53,17 @@ exports[`crypto-lwba websocket happy path returns a successful response for pric

exports[`crypto-lwba websocket invariant violation handling handles a violation payload from the stream 1`] = `
{
"error": {
"message": "Invariant violation. Mid price must be between bid and ask prices. Got: (bid: 1562.3384315992228, mid: 1562.3733948803842, ask: 1562.2733948803843)",
"name": "AdapterLWBAError",
"data": {
"ask": 1562.4083581615457,
"bid": 1562.3384315992228,
"mid": 1562.3733948803842,
},
"result": 1562.3733948803842,
"statusCode": 200,
"timestamps": {
"providerDataReceivedUnixMs": 1024,
"providerDataStreamEstablishedUnixMs": 1010,
"providerIndicatedTimeUnixMs": 1678248273750,
},
"status": "errored",
"statusCode": 500,
}
`;
Loading
Loading