@kamino-finance/klend-sdk 5.13.24 → 5.14.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -8,6 +8,7 @@ export type MarketConfigType = {
8
8
  description: string;
9
9
  lendingMarket: string;
10
10
  lookupTable: string;
11
+ isCurated: boolean;
11
12
  };
12
13
  export type ReserveConfigResponse = {
13
14
  liquidityToken: {
@@ -1 +1 @@
1
- {"version":3,"file":"shared.d.ts","sourceRoot":"","sources":["../../src/classes/shared.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,OAAO,MAAM,YAAY,CAAC;AACjC,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAC;AAElE,MAAM,MAAM,UAAU,GAAG,KAAK,CAAC,gBAAgB,CAAC,CAAC;AAEjD,MAAM,MAAM,gBAAgB,GAAG;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,OAAO,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa,EAAE,MAAM,CAAC;IACtB,WAAW,EAAE,MAAM,CAAC;CACrB,CAAC;AAEF,MAAM,MAAM,qBAAqB,GAAG;IAClC,cAAc,EAAE;QACd,MAAM,EAAE,MAAM,CAAC;QACf,IAAI,EAAE,MAAM,CAAC;KACd,CAAC;CACH,CAAC;AAEF,oBAAY,aAAa;IACvB,MAAM,WAAW;IACjB,QAAQ,aAAa;IACrB,MAAM,WAAW;CAClB;AAED,MAAM,MAAM,eAAe,GAAG;IAC5B,MAAM,EAAE,aAAa,CAAC;IACtB,WAAW,EAAE,SAAS,CAAC;IACvB,WAAW,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,CAAC;IAChC,WAAW,EAAE,MAAM,CAAC;IACpB,mBAAmB,EAAE,MAAM,CAAC;IAC5B,mBAAmB,EAAE,MAAM,CAAC;IAC5B,oBAAoB,EAAE,MAAM,CAAC;IAC7B,mBAAmB,EAAE,OAAO,CAAC;IAC7B,kBAAkB,EAAE,OAAO,CAAC;IAC5B,4BAA4B,EAAE,MAAM,CAAC;IACrC,2BAA2B,EAAE,MAAM,CAAC;IACpC,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,gBAAgB,EAAE,MAAM,CAAC;IACzB,uBAAuB,EAAE,OAAO,CAAC;IACjC,eAAe,EAAE,OAAO,CAAC;IACzB,YAAY,EAAE,MAAM,CAAC;CACtB,CAAC;AAEF,MAAM,MAAM,kBAAkB,GAAG;IAC/B,GAAG,EAAE,OAAO,CAAC;IACb,GAAG,EAAE,OAAO,CAAC;IACb,UAAU,EAAE,UAAU,CAAC;CACxB,CAAC;AAEF,MAAM,MAAM,eAAe,GAAG;IAC5B,OAAO,EAAE,OAAO,CAAC;IACjB,UAAU,EAAE,SAAS,EAAE,CAAC;CACzB,CAAC;AAEF,oBAAY,cAAc;IACxB,SAAS,cAAc;IACvB,SAAS,cAAc;CACxB;AAED,MAAM,MAAM,IAAI,GAAG;IACjB,YAAY,EAAE,OAAO,CAAC;IACtB,YAAY,EAAE,OAAO,CAAC;CACvB,CAAC;AAEF;;GAEG;AACH,MAAM,MAAM,WAAW,GAAG;IACxB;;OAEG;IACH,IAAI,EAAE,SAAS,CAAC;IAEhB;;OAEG;IACH,MAAM,EAAE,OAAO,CAAC;CACjB,CAAC"}
1
+ {"version":3,"file":"shared.d.ts","sourceRoot":"","sources":["../../src/classes/shared.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,OAAO,MAAM,YAAY,CAAC;AACjC,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAC;AAElE,MAAM,MAAM,UAAU,GAAG,KAAK,CAAC,gBAAgB,CAAC,CAAC;AAEjD,MAAM,MAAM,gBAAgB,GAAG;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,OAAO,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa,EAAE,MAAM,CAAC;IACtB,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,OAAO,CAAC;CACpB,CAAC;AAEF,MAAM,MAAM,qBAAqB,GAAG;IAClC,cAAc,EAAE;QACd,MAAM,EAAE,MAAM,CAAC;QACf,IAAI,EAAE,MAAM,CAAC;KACd,CAAC;CACH,CAAC;AAEF,oBAAY,aAAa;IACvB,MAAM,WAAW;IACjB,QAAQ,aAAa;IACrB,MAAM,WAAW;CAClB;AAED,MAAM,MAAM,eAAe,GAAG;IAC5B,MAAM,EAAE,aAAa,CAAC;IACtB,WAAW,EAAE,SAAS,CAAC;IACvB,WAAW,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,CAAC;IAChC,WAAW,EAAE,MAAM,CAAC;IACpB,mBAAmB,EAAE,MAAM,CAAC;IAC5B,mBAAmB,EAAE,MAAM,CAAC;IAC5B,oBAAoB,EAAE,MAAM,CAAC;IAC7B,mBAAmB,EAAE,OAAO,CAAC;IAC7B,kBAAkB,EAAE,OAAO,CAAC;IAC5B,4BAA4B,EAAE,MAAM,CAAC;IACrC,2BAA2B,EAAE,MAAM,CAAC;IACpC,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,gBAAgB,EAAE,MAAM,CAAC;IACzB,uBAAuB,EAAE,OAAO,CAAC;IACjC,eAAe,EAAE,OAAO,CAAC;IACzB,YAAY,EAAE,MAAM,CAAC;CACtB,CAAC;AAEF,MAAM,MAAM,kBAAkB,GAAG;IAC/B,GAAG,EAAE,OAAO,CAAC;IACb,GAAG,EAAE,OAAO,CAAC;IACb,UAAU,EAAE,UAAU,CAAC;CACxB,CAAC;AAEF,MAAM,MAAM,eAAe,GAAG;IAC5B,OAAO,EAAE,OAAO,CAAC;IACjB,UAAU,EAAE,SAAS,EAAE,CAAC;CACzB,CAAC;AAEF,oBAAY,cAAc;IACxB,SAAS,cAAc;IACvB,SAAS,cAAc;CACxB;AAED,MAAM,MAAM,IAAI,GAAG;IACjB,YAAY,EAAE,OAAO,CAAC;IACtB,YAAY,EAAE,OAAO,CAAC;CACvB,CAAC;AAEF;;GAEG;AACH,MAAM,MAAM,WAAW,GAAG;IACxB;;OAEG;IACH,IAAI,EAAE,SAAS,CAAC;IAEhB;;OAEG;IACH,MAAM,EAAE,OAAO,CAAC;CACjB,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"shared.js","sourceRoot":"","sources":["../../src/classes/shared.ts"],"names":[],"mappings":";;;AAqBA,IAAY,aAIX;AAJD,WAAY,aAAa;IACvB,kCAAiB,CAAA;IACjB,sCAAqB,CAAA;IACrB,kCAAiB,CAAA;AACnB,CAAC,EAJW,aAAa,6BAAb,aAAa,QAIxB;AAiCD,IAAY,cAGX;AAHD,WAAY,cAAc;IACxB,yCAAuB,CAAA;IACvB,yCAAuB,CAAA;AACzB,CAAC,EAHW,cAAc,8BAAd,cAAc,QAGzB"}
1
+ {"version":3,"file":"shared.js","sourceRoot":"","sources":["../../src/classes/shared.ts"],"names":[],"mappings":";;;AAsBA,IAAY,aAIX;AAJD,WAAY,aAAa;IACvB,kCAAiB,CAAA;IACjB,sCAAqB,CAAA;IACrB,kCAAiB,CAAA;AACnB,CAAC,EAJW,aAAa,6BAAb,aAAa,QAIxB;AAiCD,IAAY,cAGX;AAHD,WAAY,cAAc;IACxB,yCAAuB,CAAA;IACvB,yCAAuB,CAAA;AACzB,CAAC,EAHW,cAAc,8BAAd,cAAc,QAGzB"}
@@ -1,14 +1,18 @@
1
1
  import { PublicKey } from '@solana/web3.js';
2
2
  import { ConfigType } from '../classes';
3
3
  import { IBackOffOptions } from 'exponential-backoff';
4
+ export type ApiFilterOptions = {
5
+ includeCurated?: boolean;
6
+ };
4
7
  /**
5
8
  * Fetch config from the API
6
9
  * A good place to start to find active klend markets without expensive RPC calls
7
10
  *
8
11
  * @param programId - The program id to retrieve config for
9
12
  * @param source - CDN is a json file hosted in the cloud, API is a webserver
13
+ * @param filterOptions - Config options to filter markets by
10
14
  */
11
- export declare function getMarketsFromApi(programId?: PublicKey, source?: 'API' | 'CDN'): Promise<ConfigType>;
15
+ export declare function getMarketsFromApi(programId?: PublicKey, source?: 'API' | 'CDN', filterOptions?: ApiFilterOptions): Promise<ConfigType>;
12
16
  export declare const KAMINO_CDN_RETRY: Partial<IBackOffOptions>;
13
17
  export declare const KAMINO_API_RETRY: Partial<IBackOffOptions>;
14
18
  //# sourceMappingURL=api.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../../src/utils/api.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAE5C,OAAO,EAAE,UAAU,EAAiB,MAAM,YAAY,CAAC;AAEvD,OAAO,EAAE,eAAe,EAAW,MAAM,qBAAqB,CAAC;AAG/D;;;;;;GAMG;AACH,wBAAsB,iBAAiB,CACrC,SAAS,GAAE,SAAsB,EACjC,MAAM,GAAE,KAAK,GAAG,KAAa,GAC5B,OAAO,CAAC,UAAU,CAAC,CAarB;AAED,eAAO,MAAM,gBAAgB,EAAE,OAAO,CAAC,eAAe,CAYrD,CAAC;AAEF,eAAO,MAAM,gBAAgB,EAAE,OAAO,CAAC,eAAe,CAYrD,CAAC"}
1
+ {"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../../src/utils/api.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAE5C,OAAO,EAAE,UAAU,EAAiB,MAAM,YAAY,CAAC;AAEvD,OAAO,EAAE,eAAe,EAAW,MAAM,qBAAqB,CAAC;AAG/D,MAAM,MAAM,gBAAgB,GAAG;IAC7B,cAAc,CAAC,EAAE,OAAO,CAAC;CAC1B,CAAC;AAEF;;;;;;;GAOG;AACH,wBAAsB,iBAAiB,CACrC,SAAS,GAAE,SAAsB,EACjC,MAAM,GAAE,KAAK,GAAG,KAAa,EAC7B,aAAa,GAAE,gBAAqB,GACnC,OAAO,CAAC,UAAU,CAAC,CAqBrB;AAED,eAAO,MAAM,gBAAgB,EAAE,OAAO,CAAC,eAAe,CAYrD,CAAC;AAEF,eAAO,MAAM,gBAAgB,EAAE,OAAO,CAAC,eAAe,CAYrD,CAAC"}
package/dist/utils/api.js CHANGED
@@ -16,17 +16,26 @@ const lib_1 = require("../lib");
16
16
  *
17
17
  * @param programId - The program id to retrieve config for
18
18
  * @param source - CDN is a json file hosted in the cloud, API is a webserver
19
+ * @param filterOptions - Config options to filter markets by
19
20
  */
20
- async function getMarketsFromApi(programId = lib_1.PROGRAM_ID, source = 'CDN') {
21
- let configs = {};
21
+ async function getMarketsFromApi(programId = lib_1.PROGRAM_ID, source = 'CDN', filterOptions = {}) {
22
+ const defaultedFilterOptions = {
23
+ includeCurated: filterOptions.includeCurated || true
24
+ };
25
+ let unfilteredConfigs = {};
22
26
  if (source === 'CDN') {
23
- configs = (await (0, exponential_backoff_1.backOff)(() => axios_1.default.get(utils_1.CDN_ENDPOINT), exports.KAMINO_CDN_RETRY)).data[programId.toString()];
27
+ unfilteredConfigs = (await (0, exponential_backoff_1.backOff)(() => axios_1.default.get(utils_1.CDN_ENDPOINT), exports.KAMINO_CDN_RETRY)).data[programId.toString()];
24
28
  }
25
- if (!configs || (0, classes_1.isEmptyObject)(configs)) {
29
+ if (!unfilteredConfigs || (0, classes_1.isEmptyObject)(unfilteredConfigs)) {
26
30
  const API_ENDPOINT = (0, utils_1.getApiEndpoint)(programId);
27
- configs = (await (0, exponential_backoff_1.backOff)(() => axios_1.default.get(API_ENDPOINT), exports.KAMINO_API_RETRY)).data;
31
+ unfilteredConfigs = (await (0, exponential_backoff_1.backOff)(() => axios_1.default.get(API_ENDPOINT), exports.KAMINO_API_RETRY)).data;
28
32
  }
29
- return configs;
33
+ return unfilteredConfigs.filter((c) => {
34
+ if (!defaultedFilterOptions.includeCurated) {
35
+ return !c.isCurated;
36
+ }
37
+ return true;
38
+ });
30
39
  }
31
40
  exports.KAMINO_CDN_RETRY = {
32
41
  maxDelay: 1000,
@@ -1 +1 @@
1
- {"version":3,"file":"api.js","sourceRoot":"","sources":["../../src/utils/api.ts"],"names":[],"mappings":";;;;;;AAcA,8CAgBC;AA7BD,kDAA0B;AAC1B,wCAAuD;AACvD,oCAAwD;AACxD,6DAA+D;AAC/D,gCAAoC;AAEpC;;;;;;GAMG;AACI,KAAK,UAAU,iBAAiB,CACrC,YAAuB,gBAAU,EACjC,SAAwB,KAAK;IAE7B,IAAI,OAAO,GAAe,EAAgB,CAAC;IAE3C,IAAI,MAAM,KAAK,KAAK,EAAE,CAAC;QACrB,OAAO,GAAG,CAAC,MAAM,IAAA,6BAAO,EAAC,GAAG,EAAE,CAAC,eAAK,CAAC,GAAG,CAAC,oBAAY,CAAC,EAAE,wBAAgB,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,CAAe,CAAC;IACtH,CAAC;IAED,IAAI,CAAC,OAAO,IAAI,IAAA,uBAAa,EAAC,OAAO,CAAC,EAAE,CAAC;QACvC,MAAM,YAAY,GAAG,IAAA,sBAAc,EAAC,SAAS,CAAC,CAAC;QAC/C,OAAO,GAAG,CAAC,MAAM,IAAA,6BAAO,EAAC,GAAG,EAAE,CAAC,eAAK,CAAC,GAAG,CAAC,YAAY,CAAC,EAAE,wBAAgB,CAAC,CAAC,CAAC,IAAkB,CAAC;IAChG,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC;AAEY,QAAA,gBAAgB,GAA6B;IACxD,QAAQ,EAAE,IAAI;IACd,aAAa,EAAE,CAAC;IAChB,aAAa,EAAE,EAAE;IACjB,KAAK,EAAE,CAAC,CAAM,EAAE,aAAqB,EAAE,EAAE;QACvC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAChB,OAAO,CAAC,IAAI,CAAC;YACX,aAAa;YACb,OAAO,EAAE,8DAA8D;SACxE,CAAC,CAAC;QACH,OAAO,IAAI,CAAC;IACd,CAAC;CACF,CAAC;AAEW,QAAA,gBAAgB,GAA6B;IACxD,QAAQ,EAAE,IAAI;IACd,aAAa,EAAE,CAAC;IAChB,aAAa,EAAE,EAAE;IACjB,KAAK,EAAE,CAAC,CAAM,EAAE,aAAqB,EAAE,EAAE;QACvC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAChB,OAAO,CAAC,IAAI,CAAC;YACX,aAAa;YACb,OAAO,EAAE,sEAAsE;SAChF,CAAC,CAAC;QACH,OAAO,IAAI,CAAC;IACd,CAAC;CACF,CAAC"}
1
+ {"version":3,"file":"api.js","sourceRoot":"","sources":["../../src/utils/api.ts"],"names":[],"mappings":";;;;;;AAmBA,8CAyBC;AA3CD,kDAA0B;AAC1B,wCAAuD;AACvD,oCAAwD;AACxD,6DAA+D;AAC/D,gCAAoC;AAMpC;;;;;;;GAOG;AACI,KAAK,UAAU,iBAAiB,CACrC,YAAuB,gBAAU,EACjC,SAAwB,KAAK,EAC7B,gBAAkC,EAAE;IAEpC,MAAM,sBAAsB,GAA+B;QACzD,cAAc,EAAE,aAAa,CAAC,cAAc,IAAI,IAAI;KACrD,CAAC;IAEF,IAAI,iBAAiB,GAAe,EAAgB,CAAC;IACrD,IAAI,MAAM,KAAK,KAAK,EAAE,CAAC;QACrB,iBAAiB,GAAG,CAAC,MAAM,IAAA,6BAAO,EAAC,GAAG,EAAE,CAAC,eAAK,CAAC,GAAG,CAAC,oBAAY,CAAC,EAAE,wBAAgB,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,CAAe,CAAC;IAChI,CAAC;IAED,IAAI,CAAC,iBAAiB,IAAI,IAAA,uBAAa,EAAC,iBAAiB,CAAC,EAAE,CAAC;QAC3D,MAAM,YAAY,GAAG,IAAA,sBAAc,EAAC,SAAS,CAAC,CAAC;QAC/C,iBAAiB,GAAG,CAAC,MAAM,IAAA,6BAAO,EAAC,GAAG,EAAE,CAAC,eAAK,CAAC,GAAG,CAAC,YAAY,CAAC,EAAE,wBAAgB,CAAC,CAAC,CAAC,IAAkB,CAAC;IAC1G,CAAC;IAED,OAAO,iBAAiB,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE;QACpC,IAAI,CAAC,sBAAsB,CAAC,cAAc,EAAE,CAAC;YAC3C,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC;QACtB,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC,CAAC,CAAC;AACL,CAAC;AAEY,QAAA,gBAAgB,GAA6B;IACxD,QAAQ,EAAE,IAAI;IACd,aAAa,EAAE,CAAC;IAChB,aAAa,EAAE,EAAE;IACjB,KAAK,EAAE,CAAC,CAAM,EAAE,aAAqB,EAAE,EAAE;QACvC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAChB,OAAO,CAAC,IAAI,CAAC;YACX,aAAa;YACb,OAAO,EAAE,8DAA8D;SACxE,CAAC,CAAC;QACH,OAAO,IAAI,CAAC;IACd,CAAC;CACF,CAAC;AAEW,QAAA,gBAAgB,GAA6B;IACxD,QAAQ,EAAE,IAAI;IACd,aAAa,EAAE,CAAC;IAChB,aAAa,EAAE,EAAE;IACjB,KAAK,EAAE,CAAC,CAAM,EAAE,aAAqB,EAAE,EAAE;QACvC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAChB,OAAO,CAAC,IAAI,CAAC;YACX,aAAa;YACb,OAAO,EAAE,sEAAsE;SAChF,CAAC,CAAC;QACH,OAAO,IAAI,CAAC;IACd,CAAC;CACF,CAAC"}
@@ -10,7 +10,7 @@ export declare const TOTAL_NUMBER_OF_IDS_TO_CHECK = 25;
10
10
  export type ENV = 'mainnet-beta' | 'devnet' | 'localnet';
11
11
  export declare function isENV(value: any): value is ENV;
12
12
  export declare function getApiEndpoint(programId: PublicKey): string;
13
- export declare const CDN_ENDPOINT = "https://cdn.kamino.finance/kamino_lend_config_v2.json";
13
+ export declare const CDN_ENDPOINT = "https://cdn.kamino.finance/kamino_lend_config_v3.json";
14
14
  export declare const ONE_HUNDRED_PCT_IN_BPS = 10000;
15
15
  export declare function getProgramId(env?: 'mainnet-beta' | 'staging'): PublicKey;
16
16
  /**
@@ -29,7 +29,7 @@ function getApiEndpoint(programId) {
29
29
  return `https://api.hubbleprotocol.io/v2/kamino-market/?programId=${programId.toString()}`;
30
30
  }
31
31
  }
32
- exports.CDN_ENDPOINT = 'https://cdn.kamino.finance/kamino_lend_config_v2.json';
32
+ exports.CDN_ENDPOINT = 'https://cdn.kamino.finance/kamino_lend_config_v3.json';
33
33
  exports.ONE_HUNDRED_PCT_IN_BPS = 10_000;
34
34
  function getProgramId(env = 'mainnet-beta') {
35
35
  if (env === 'mainnet-beta') {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@kamino-finance/klend-sdk",
3
- "version": "5.13.24",
3
+ "version": "5.14.0",
4
4
  "description": "Typescript SDK for interacting with the Kamino Lending (klend) protocol",
5
5
  "repository": {
6
6
  "type": "git",
@@ -10,6 +10,7 @@ export type MarketConfigType = {
10
10
  description: string;
11
11
  lendingMarket: string;
12
12
  lookupTable: string;
13
+ isCurated: boolean;
13
14
  };
14
15
 
15
16
  export type ReserveConfigResponse = {
package/src/utils/api.ts CHANGED
@@ -5,29 +5,43 @@ import { CDN_ENDPOINT, getApiEndpoint } from '../utils';
5
5
  import { IBackOffOptions, backOff } from 'exponential-backoff';
6
6
  import { PROGRAM_ID } from '../lib';
7
7
 
8
+ export type ApiFilterOptions = {
9
+ includeCurated?: boolean;
10
+ };
11
+
8
12
  /**
9
13
  * Fetch config from the API
10
14
  * A good place to start to find active klend markets without expensive RPC calls
11
15
  *
12
16
  * @param programId - The program id to retrieve config for
13
17
  * @param source - CDN is a json file hosted in the cloud, API is a webserver
18
+ * @param filterOptions - Config options to filter markets by
14
19
  */
15
20
  export async function getMarketsFromApi(
16
21
  programId: PublicKey = PROGRAM_ID,
17
- source: 'API' | 'CDN' = 'CDN'
22
+ source: 'API' | 'CDN' = 'CDN',
23
+ filterOptions: ApiFilterOptions = {},
18
24
  ): Promise<ConfigType> {
19
- let configs: ConfigType = {} as ConfigType;
25
+ const defaultedFilterOptions: Required<ApiFilterOptions> = {
26
+ includeCurated: filterOptions.includeCurated || true
27
+ };
20
28
 
29
+ let unfilteredConfigs: ConfigType = {} as ConfigType;
21
30
  if (source === 'CDN') {
22
- configs = (await backOff(() => axios.get(CDN_ENDPOINT), KAMINO_CDN_RETRY)).data[programId.toString()] as ConfigType;
31
+ unfilteredConfigs = (await backOff(() => axios.get(CDN_ENDPOINT), KAMINO_CDN_RETRY)).data[programId.toString()] as ConfigType;
23
32
  }
24
33
 
25
- if (!configs || isEmptyObject(configs)) {
34
+ if (!unfilteredConfigs || isEmptyObject(unfilteredConfigs)) {
26
35
  const API_ENDPOINT = getApiEndpoint(programId);
27
- configs = (await backOff(() => axios.get(API_ENDPOINT), KAMINO_API_RETRY)).data as ConfigType;
36
+ unfilteredConfigs = (await backOff(() => axios.get(API_ENDPOINT), KAMINO_API_RETRY)).data as ConfigType;
28
37
  }
29
38
 
30
- return configs;
39
+ return unfilteredConfigs.filter((c) => {
40
+ if (!defaultedFilterOptions.includeCurated) {
41
+ return !c.isCurated;
42
+ }
43
+ return true;
44
+ });
31
45
  }
32
46
 
33
47
  export const KAMINO_CDN_RETRY: Partial<IBackOffOptions> = {
@@ -27,7 +27,7 @@ export function getApiEndpoint(programId: PublicKey) {
27
27
  }
28
28
  }
29
29
 
30
- export const CDN_ENDPOINT = 'https://cdn.kamino.finance/kamino_lend_config_v2.json';
30
+ export const CDN_ENDPOINT = 'https://cdn.kamino.finance/kamino_lend_config_v3.json';
31
31
 
32
32
  export const ONE_HUNDRED_PCT_IN_BPS = 10_000;
33
33