@defisaver/positions-sdk 2.1.169-custom-fetching-dev → 2.1.169-custom-fetching-2-dev

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.
@@ -51,8 +51,9 @@ function getCustomDeFiData(provider_1, network_1, defaultProvider_1, addresses_1
51
51
  const has = (protocol) => protocols.includes(protocol);
52
52
  const isMainnet = network === common_1.NetworkNumber.Eth;
53
53
  const isFluidSupported = [common_1.NetworkNumber.Eth, common_1.NetworkNumber.Arb, common_1.NetworkNumber.Base, common_1.NetworkNumber.Plasma].includes(network);
54
- const client = (0, viem_1.getViemProvider)(provider, network, { batch: { multicall: { batchSize } } });
55
- const defaultClient = (0, viem_1.getViemProvider)(defaultProvider, network, { batch: { multicall: { batchSize } } });
54
+ const pin = (p) => (options.blockNumber !== undefined ? (0, viem_1.pinProviderBlock)(p, options.blockNumber) : p);
55
+ const client = (0, viem_1.getViemProvider)(pin(provider), network, { batch: { multicall: { batchSize } } });
56
+ const defaultClient = (0, viem_1.getViemProvider)(pin(defaultProvider), network, { batch: { multicall: { batchSize } } });
56
57
  const aaveV3Markets = has(types_1.PortfolioProtocol.AaveV3)
57
58
  ? [types_1.AaveVersions.AaveV3, types_1.AaveVersions.AaveV3Lido, types_1.AaveVersions.AaveV3Etherfi].map((v) => (0, markets_1.AaveMarkets)(network)[v]).filter((m) => m.chainIds.includes(network))
58
59
  : [];
@@ -4403,6 +4403,8 @@ export declare const getViemProvider: (provider: EthereumProvider, network: Netw
4403
4403
  uid?: undefined;
4404
4404
  } & import("viem").ExactPartial<Pick<import("viem").PublicActions<import("viem").Transport, undefined, undefined>, "getBlockNumber" | "call" | "createContractEventFilter" | "createEventFilter" | "estimateContractGas" | "estimateGas" | "getBlock" | "getChainId" | "getContractEvents" | "getEnsText" | "getFilterChanges" | "getGasPrice" | "getLogs" | "getTransaction" | "getTransactionCount" | "getTransactionReceipt" | "prepareTransactionRequest" | "readContract" | "sendRawTransaction" | "simulateContract" | "uninstallFilter" | "watchBlockNumber" | "watchContractEvent"> & Pick<import("viem").WalletActions<undefined, undefined>, "sendTransaction" | "writeContract">>>(fn: (client: import("viem").Client<import("viem").Transport, undefined, undefined, import("viem").PublicRpcSchema, import("viem").PublicActions<import("viem").Transport, undefined>>) => client) => import("viem").Client<import("viem").Transport, undefined, undefined, import("viem").PublicRpcSchema, { [K in keyof client]: client[K]; } & import("viem").PublicActions<import("viem").Transport, undefined>>;
4405
4405
  };
4406
+ /** Rewrites 'latest' reads so a client built on this provider sees a fixed block. */
4407
+ export declare const pinProviderBlock: (provider: EthereumProvider, blockNumber: number | bigint) => EthereumProvider;
4406
4408
  export declare const setViemBlockNumber: (block: Blockish) => {
4407
4409
  blockNumber?: undefined;
4408
4410
  } | {
@@ -1,6 +1,15 @@
1
1
  "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
2
11
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.setViemBlockNumber = exports.getViemProvider = exports.getViemChain = void 0;
12
+ exports.setViemBlockNumber = exports.pinProviderBlock = exports.getViemProvider = exports.getViemChain = void 0;
4
13
  exports.encodeCalldata = encodeCalldata;
5
14
  const viem_1 = require("viem");
6
15
  const chains_1 = require("viem/chains");
@@ -26,6 +35,23 @@ const getViemChain = (network) => {
26
35
  exports.getViemChain = getViemChain;
27
36
  const getViemProvider = (provider, network, options) => (0, viem_1.createPublicClient)(Object.assign({ transport: (0, viem_1.custom)(provider), chain: (0, exports.getViemChain)(network) }, options));
28
37
  exports.getViemProvider = getViemProvider;
38
+ /** Rewrites 'latest' reads so a client built on this provider sees a fixed block. */
39
+ const pinProviderBlock = (provider, blockNumber) => {
40
+ const block = `0x${BigInt(blockNumber).toString(16)}`;
41
+ return {
42
+ request: (args) => __awaiter(void 0, void 0, void 0, function* () {
43
+ const params = [...(args.params || [])];
44
+ if (args.method === 'eth_blockNumber')
45
+ return block;
46
+ if (['eth_call', 'eth_getCode', 'eth_getBalance', 'eth_getStorageAt'].includes(args.method) && (params[1] === undefined || params[1] === 'latest'))
47
+ params[1] = block;
48
+ if (args.method === 'eth_getBlockByNumber' && params[0] === 'latest')
49
+ params[0] = block;
50
+ return provider.request(Object.assign(Object.assign({}, args), { params }));
51
+ }),
52
+ };
53
+ };
54
+ exports.pinProviderBlock = pinProviderBlock;
29
55
  const setViemBlockNumber = (block) => {
30
56
  if (block === 'latest')
31
57
  return {};
@@ -87,6 +87,8 @@ export interface CustomDeFiDataOptions {
87
87
  isSim?: boolean;
88
88
  /** viem multicall calldata cap in bytes; defaults to 250k (2k when isSim). */
89
89
  batchSize?: number;
90
+ /** Pins every read to this block; defaults to latest. */
91
+ blockNumber?: number;
90
92
  }
91
93
  export interface CustomDeFiData {
92
94
  positions: PortfolioPositionsData;
@@ -11,7 +11,7 @@ import Dec from 'decimal.js';
11
11
  import { NetworkNumber } from '../types/common';
12
12
  import { AaveMarkets, AaveV4Spokes, CompoundMarkets, CrvUsdMarkets, LiquityV2Markets, LlamaLendMarkets, MakerActiveIlks, MorphoBlueMarkets, MorphoMidnightMarkets, SparkMarkets, } from '../markets';
13
13
  import { AaveVersions, CompoundVersions, PortfolioProtocol, } from '../types';
14
- import { getViemProvider } from '../services/viem';
14
+ import { getViemProvider, pinProviderBlock } from '../services/viem';
15
15
  import { ZERO_ADDRESS } from '../constants';
16
16
  import { _getAaveV2AccountData, _getAaveV2MarketsData } from '../aaveV2';
17
17
  import { _getAaveV3AccountData, _getAaveV3MarketData, getStakeAaveData } from '../aaveV3';
@@ -45,8 +45,9 @@ export function getCustomDeFiData(provider_1, network_1, defaultProvider_1, addr
45
45
  const has = (protocol) => protocols.includes(protocol);
46
46
  const isMainnet = network === NetworkNumber.Eth;
47
47
  const isFluidSupported = [NetworkNumber.Eth, NetworkNumber.Arb, NetworkNumber.Base, NetworkNumber.Plasma].includes(network);
48
- const client = getViemProvider(provider, network, { batch: { multicall: { batchSize } } });
49
- const defaultClient = getViemProvider(defaultProvider, network, { batch: { multicall: { batchSize } } });
48
+ const pin = (p) => (options.blockNumber !== undefined ? pinProviderBlock(p, options.blockNumber) : p);
49
+ const client = getViemProvider(pin(provider), network, { batch: { multicall: { batchSize } } });
50
+ const defaultClient = getViemProvider(pin(defaultProvider), network, { batch: { multicall: { batchSize } } });
50
51
  const aaveV3Markets = has(PortfolioProtocol.AaveV3)
51
52
  ? [AaveVersions.AaveV3, AaveVersions.AaveV3Lido, AaveVersions.AaveV3Etherfi].map((v) => AaveMarkets(network)[v]).filter((m) => m.chainIds.includes(network))
52
53
  : [];
@@ -4393,6 +4393,8 @@ export declare const getViemProvider: (provider: EthereumProvider, network: Netw
4393
4393
  uid?: undefined;
4394
4394
  } & import("viem").ExactPartial<Pick<import("viem").PublicActions<import("viem").Transport, undefined, undefined>, "getBlockNumber" | "call" | "createContractEventFilter" | "createEventFilter" | "estimateContractGas" | "estimateGas" | "getBlock" | "getChainId" | "getContractEvents" | "getEnsText" | "getFilterChanges" | "getGasPrice" | "getLogs" | "getTransaction" | "getTransactionCount" | "getTransactionReceipt" | "prepareTransactionRequest" | "readContract" | "sendRawTransaction" | "simulateContract" | "uninstallFilter" | "watchBlockNumber" | "watchContractEvent"> & Pick<import("viem").WalletActions<undefined, undefined>, "sendTransaction" | "writeContract">>>(fn: (client: import("viem").Client<import("viem").Transport, undefined, undefined, import("viem").PublicRpcSchema, import("viem").PublicActions<import("viem").Transport, undefined>>) => client) => import("viem").Client<import("viem").Transport, undefined, undefined, import("viem").PublicRpcSchema, { [K in keyof client]: client[K]; } & import("viem").PublicActions<import("viem").Transport, undefined>>;
4395
4395
  };
4396
+ /** Rewrites 'latest' reads so a client built on this provider sees a fixed block. */
4397
+ export declare const pinProviderBlock: (provider: EthereumProvider, blockNumber: number | bigint) => EthereumProvider;
4396
4398
  export declare const setViemBlockNumber: (block: Blockish) => {
4397
4399
  blockNumber?: undefined;
4398
4400
  } | {
@@ -1,3 +1,12 @@
1
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
2
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
3
+ return new (P || (P = Promise))(function (resolve, reject) {
4
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
5
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
6
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
7
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
8
+ });
9
+ };
1
10
  import { createPublicClient, custom, encodeFunctionData, } from 'viem';
2
11
  import { arbitrum, base, mainnet, optimism, linea, plasma, } from 'viem/chains';
3
12
  import { NetworkNumber } from '../types/common';
@@ -20,6 +29,22 @@ export const getViemChain = (network) => {
20
29
  }
21
30
  };
22
31
  export const getViemProvider = (provider, network, options) => createPublicClient(Object.assign({ transport: custom(provider), chain: getViemChain(network) }, options));
32
+ /** Rewrites 'latest' reads so a client built on this provider sees a fixed block. */
33
+ export const pinProviderBlock = (provider, blockNumber) => {
34
+ const block = `0x${BigInt(blockNumber).toString(16)}`;
35
+ return {
36
+ request: (args) => __awaiter(void 0, void 0, void 0, function* () {
37
+ const params = [...(args.params || [])];
38
+ if (args.method === 'eth_blockNumber')
39
+ return block;
40
+ if (['eth_call', 'eth_getCode', 'eth_getBalance', 'eth_getStorageAt'].includes(args.method) && (params[1] === undefined || params[1] === 'latest'))
41
+ params[1] = block;
42
+ if (args.method === 'eth_getBlockByNumber' && params[0] === 'latest')
43
+ params[0] = block;
44
+ return provider.request(Object.assign(Object.assign({}, args), { params }));
45
+ }),
46
+ };
47
+ };
23
48
  export const setViemBlockNumber = (block) => {
24
49
  if (block === 'latest')
25
50
  return {};
@@ -87,6 +87,8 @@ export interface CustomDeFiDataOptions {
87
87
  isSim?: boolean;
88
88
  /** viem multicall calldata cap in bytes; defaults to 250k (2k when isSim). */
89
89
  batchSize?: number;
90
+ /** Pins every read to this block; defaults to latest. */
91
+ blockNumber?: number;
90
92
  }
91
93
  export interface CustomDeFiData {
92
94
  positions: PortfolioPositionsData;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@defisaver/positions-sdk",
3
- "version": "2.1.169-custom-fetching-dev",
3
+ "version": "2.1.169-custom-fetching-2-dev",
4
4
  "description": "",
5
5
  "main": "./cjs/index.js",
6
6
  "module": "./esm/index.js",
@@ -22,7 +22,7 @@ import {
22
22
  PortfolioPositionsData,
23
23
  PortfolioProtocol,
24
24
  } from '../types';
25
- import { getViemProvider } from '../services/viem';
25
+ import { getViemProvider, pinProviderBlock } from '../services/viem';
26
26
  import { ZERO_ADDRESS } from '../constants';
27
27
  import { _getAaveV2AccountData, _getAaveV2MarketsData } from '../aaveV2';
28
28
  import { _getAaveV3AccountData, _getAaveV3MarketData, getStakeAaveData } from '../aaveV3';
@@ -74,8 +74,9 @@ export async function getCustomDeFiData(
74
74
  const isMainnet = network === NetworkNumber.Eth;
75
75
  const isFluidSupported = [NetworkNumber.Eth, NetworkNumber.Arb, NetworkNumber.Base, NetworkNumber.Plasma].includes(network);
76
76
 
77
- const client = getViemProvider(provider, network, { batch: { multicall: { batchSize } } });
78
- const defaultClient = getViemProvider(defaultProvider, network, { batch: { multicall: { batchSize } } });
77
+ const pin = (p: EthereumProvider) => (options.blockNumber !== undefined ? pinProviderBlock(p, options.blockNumber) : p);
78
+ const client = getViemProvider(pin(provider), network, { batch: { multicall: { batchSize } } });
79
+ const defaultClient = getViemProvider(pin(defaultProvider), network, { batch: { multicall: { batchSize } } });
79
80
 
80
81
  const aaveV3Markets = has(PortfolioProtocol.AaveV3)
81
82
  ? [AaveVersions.AaveV3, AaveVersions.AaveV3Lido, AaveVersions.AaveV3Etherfi].map((v) => AaveMarkets(network)[v]).filter((m) => m.chainIds.includes(network))
@@ -34,6 +34,20 @@ export const getViemProvider = (provider: EthereumProvider, network: NetworkNumb
34
34
  ...options,
35
35
  });
36
36
 
37
+ /** Rewrites 'latest' reads so a client built on this provider sees a fixed block. */
38
+ export const pinProviderBlock = (provider: EthereumProvider, blockNumber: number | bigint): EthereumProvider => {
39
+ const block = `0x${BigInt(blockNumber).toString(16)}`;
40
+ return {
41
+ request: async (args: any) => {
42
+ const params = [...(args.params || [])];
43
+ if (args.method === 'eth_blockNumber') return block;
44
+ if (['eth_call', 'eth_getCode', 'eth_getBalance', 'eth_getStorageAt'].includes(args.method) && (params[1] === undefined || params[1] === 'latest')) params[1] = block;
45
+ if (args.method === 'eth_getBlockByNumber' && params[0] === 'latest') params[0] = block;
46
+ return provider.request({ ...args, params });
47
+ },
48
+ };
49
+ };
50
+
37
51
  export const setViemBlockNumber = (block: Blockish) => {
38
52
  if (block === 'latest') return {};
39
53
  return { blockNumber: BigInt(block) };
@@ -95,6 +95,8 @@ export interface CustomDeFiDataOptions {
95
95
  isSim?: boolean;
96
96
  /** viem multicall calldata cap in bytes; defaults to 250k (2k when isSim). */
97
97
  batchSize?: number;
98
+ /** Pins every read to this block; defaults to latest. */
99
+ blockNumber?: number;
98
100
  }
99
101
 
100
102
  export interface CustomDeFiData {