Skip to content

Commit 7e614b5

Browse files
Adds LibreCapital nav EA (#3924)
* Adds EA for LibreCapital * Adds date validation * Refactors to use SubscribeTransport for multi HTTP requests * Adds unit tests, addreses feedback * Increases cache max age * Adds unit tests for transport nav and improvements * Addresses comments --------- Co-authored-by: mmcallister-cll <139181225+mmcallister-cll@users.noreply.github.com>
1 parent 62c911c commit 7e614b5

28 files changed

+1008
-3
lines changed

.changeset/shiny-points-melt.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
'@chainlink/nav-libre-adapter': major
3+
---
4+
5+
Adds NAV adapter for LibreCapital

.pnp.cjs

Lines changed: 31 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.
Binary file not shown.

packages/sources/nav-libre/CHANGELOG.md

Whitespace-only changes.

packages/sources/nav-libre/README.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
# Chainlink External Adapter for nav-libre
2+
3+
This README will be generated automatically when code is merged to `main`. If you would like to generate a preview of the README, please run `yarn generate:readme nav-libre`.
Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
{
2+
"name": "@chainlink/nav-libre-adapter",
3+
"version": "0.0.0",
4+
"description": "Chainlink nav-libre adapter.",
5+
"keywords": [
6+
"Chainlink",
7+
"LINK",
8+
"blockchain",
9+
"oracle",
10+
"nav-libre"
11+
],
12+
"main": "dist/index.js",
13+
"types": "dist/index.d.ts",
14+
"files": [
15+
"dist"
16+
],
17+
"repository": {
18+
"url": "https://github.com/smartcontractkit/external-adapters-js",
19+
"type": "git"
20+
},
21+
"license": "MIT",
22+
"scripts": {
23+
"clean": "rm -rf dist && rm -f tsconfig.tsbuildinfo",
24+
"prepack": "yarn build",
25+
"build": "tsc -b",
26+
"server": "node -e 'require(\"./index.js\").server()'",
27+
"server:dist": "node -e 'require(\"./dist/index.js\").server()'",
28+
"start": "yarn server:dist"
29+
},
30+
"devDependencies": {
31+
"@types/crypto-js": "^4",
32+
"@types/jest": "^29.5.14",
33+
"@types/node": "22.14.1",
34+
"nock": "13.5.6",
35+
"typescript": "5.8.3"
36+
},
37+
"dependencies": {
38+
"@chainlink/external-adapter-framework": "2.6.0",
39+
"crypto-js": "^4.2.0",
40+
"date-fns": "^4.1.0",
41+
"tslib": "2.4.1",
42+
"uuid": "^11.1.0"
43+
}
44+
}
Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
import { AdapterConfig } from '@chainlink/external-adapter-framework/config'
2+
3+
export const config = new AdapterConfig(
4+
{
5+
API_KEY: {
6+
description: 'An API key for Data Provider',
7+
type: 'string',
8+
required: true,
9+
sensitive: true,
10+
},
11+
SECRET_KEY: {
12+
description: 'A key for Data Provider used in hashing the API key',
13+
type: 'string',
14+
required: true,
15+
sensitive: true,
16+
},
17+
API_ENDPOINT: {
18+
description: 'An API endpoint for Data Provider',
19+
type: 'string',
20+
default: 'https://api.navfundservices.com',
21+
},
22+
BACKGROUND_EXECUTE_MS: {
23+
description:
24+
'The amount of time the background execute should sleep before performing the next request',
25+
type: 'number',
26+
default: 120_000, // one call per two minute
27+
},
28+
},
29+
{
30+
envDefaultOverrides: {
31+
CACHE_MAX_AGE: 900_000, // 15 minute cache
32+
RETRY: 0, // Disables retry on Framework
33+
},
34+
},
35+
)
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
export { endpoint as nav } from './nav'
Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
import { AdapterEndpoint } from '@chainlink/external-adapter-framework/adapter'
2+
import { InputParameters } from '@chainlink/external-adapter-framework/validation'
3+
import { config } from '../config'
4+
import { navLibreTransport } from '../transport/nav'
5+
6+
export const inputParameters = new InputParameters(
7+
{
8+
globalFundID: {
9+
required: true,
10+
type: 'number',
11+
description: 'The global fund ID for the Libre fund',
12+
},
13+
},
14+
[
15+
{
16+
globalFundID: 1234,
17+
},
18+
],
19+
)
20+
export type BaseEndpointTypes = {
21+
Parameters: typeof inputParameters.definition
22+
Response: {
23+
Result: number
24+
Data: {
25+
navPerShare: number
26+
navDate: string
27+
globalFundID: number
28+
}
29+
}
30+
Settings: typeof config.settings
31+
}
32+
33+
export const endpoint = new AdapterEndpoint({
34+
name: 'nav',
35+
transport: navLibreTransport,
36+
inputParameters,
37+
})
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
import { expose, ServerInstance } from '@chainlink/external-adapter-framework'
2+
import { Adapter } from '@chainlink/external-adapter-framework/adapter'
3+
import { config } from './config'
4+
import { nav } from './endpoint'
5+
6+
export const adapter = new Adapter({
7+
defaultEndpoint: nav.name,
8+
name: 'NAV_LIBRE',
9+
config,
10+
endpoints: [nav],
11+
})
12+
13+
export const server = (): Promise<ServerInstance | undefined> => expose(adapter)

0 commit comments

Comments
 (0)