@gearbox-protocol/sdk 18.2.0-next.1 → 18.2.0-next.3
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.
- package/dist/cjs/abi/compressors/subcompressors/liquidation/treehouseLiquidationSubcompressor.js +179 -0
- package/dist/cjs/abi/compressors/subcompressors/withdrawal/treehouseWithdrawalSubcompressor.js +534 -0
- package/dist/cjs/abi/router/treehouseWorker.js +885 -0
- package/dist/cjs/onchain/market/adapters/abi/actionAbi.js +1 -0
- package/dist/cjs/onchain/market/adapters/abi/conctructorAbi.js +3 -0
- package/dist/cjs/onchain/market/adapters/types.js +3 -0
- package/dist/cjs/permissionless/api/oracles/PermissionlessOracles.js +47 -0
- package/dist/cjs/permissionless/api/oracles/schemas.js +43 -1
- package/dist/esm/abi/compressors/subcompressors/liquidation/treehouseLiquidationSubcompressor.js +178 -0
- package/dist/esm/abi/compressors/subcompressors/withdrawal/treehouseWithdrawalSubcompressor.js +533 -0
- package/dist/esm/abi/router/treehouseWorker.js +884 -0
- package/dist/esm/onchain/market/adapters/abi/actionAbi.js +1 -0
- package/dist/esm/onchain/market/adapters/abi/conctructorAbi.js +3 -0
- package/dist/esm/onchain/market/adapters/types.js +3 -0
- package/dist/esm/permissionless/api/oracles/PermissionlessOracles.js +48 -1
- package/dist/esm/permissionless/api/oracles/schemas.js +40 -2
- package/dist/types/abi/compressors/subcompressors/liquidation/treehouseLiquidationSubcompressor.d.ts +148 -0
- package/dist/types/abi/compressors/subcompressors/withdrawal/treehouseWithdrawalSubcompressor.d.ts +440 -0
- package/dist/types/abi/router/treehouseWorker.d.ts +728 -0
- package/dist/types/onchain/market/adapters/types.d.ts +4 -1
- package/dist/types/permissionless/api/index.d.ts +2 -2
- package/dist/types/permissionless/api/oracles/PermissionlessOracles.d.ts +38 -1
- package/dist/types/permissionless/api/oracles/index.d.ts +2 -2
- package/dist/types/permissionless/api/oracles/schemas.d.ts +81 -0
- package/dist/types/permissionless/api/oracles/types.d.ts +159 -0
- package/dist/types/permissionless/index.d.ts +2 -2
- package/package.json +4 -3
|
@@ -15,7 +15,7 @@ export interface IAdapterContract extends IBaseContract {
|
|
|
15
15
|
openingCalls(): Promise<MultiCall[]>;
|
|
16
16
|
}
|
|
17
17
|
export type VersionedAbi = Record<number, readonly AbiParameter[]>;
|
|
18
|
-
export type AdapterContractType = "ADAPTER::ACCOUNT_MIGRATOR" | "ADAPTER::BALANCER_V3_ROUTER" | "ADAPTER::BALANCER_V3_WRAPPER" | "ADAPTER::CAMELOT_V3_ROUTER" | "ADAPTER::CURVE_STABLE_NG" | "ADAPTER::CURVE_V1_2ASSETS" | "ADAPTER::CURVE_V1_3ASSETS" | "ADAPTER::CURVE_V1_4ASSETS" | "ADAPTER::CURVE_V1_STECRV_POOL" | "ADAPTER::CVX_V1_BASE_REWARD_POOL" | "ADAPTER::CVX_V1_BOOSTER" | "ADAPTER::DAI_USDS_EXCHANGE" | "ADAPTER::ERC4626_VAULT" | "ADAPTER::ERC4626_VAULT_REFERRAL" | "ADAPTER::FLUID_DEX" | "ADAPTER::INFINIFI_GATEWAY" | "ADAPTER::INFINIFI_UNWINDING" | "ADAPTER::KELP_DEPOSIT_POOL" | "ADAPTER::KELP_WITHDRAWAL" | "ADAPTER::LIDO_V1" | "ADAPTER::LIDO_WSTETH_V1" | "ADAPTER::MELLOW_CLAIMER" | "ADAPTER::MELLOW_DVV" | "ADAPTER::MELLOW_ERC4626_VAULT" | "ADAPTER::MELLOW_WRAPPER" | "ADAPTER::MIDAS_GATEWAY" | "ADAPTER::MIDAS_ISSUANCE_VAULT" | "ADAPTER::MIDAS_REDEMPTION_VAULT" | "ADAPTER::PENDLE_ROUTER" | "ADAPTER::SECURITIZE_ONRAMP" | "ADAPTER::SECURITIZE_REDEMPTION" | "ADAPTER::STAKING_REWARDS" | "ADAPTER::TRADERJOE_ROUTER" | "ADAPTER::UNISWAP_V2_ROUTER" | "ADAPTER::UNISWAP_V3_ROUTER" | "ADAPTER::UNISWAP_V4_GATEWAY" | "ADAPTER::UPSHIFT_VAULT" | "ADAPTER::VELODROME_V2_ROUTER";
|
|
18
|
+
export type AdapterContractType = "ADAPTER::ACCOUNT_MIGRATOR" | "ADAPTER::BALANCER_V3_ROUTER" | "ADAPTER::BALANCER_V3_WRAPPER" | "ADAPTER::CAMELOT_V3_ROUTER" | "ADAPTER::CURVE_STABLE_NG" | "ADAPTER::CURVE_V1_2ASSETS" | "ADAPTER::CURVE_V1_3ASSETS" | "ADAPTER::CURVE_V1_4ASSETS" | "ADAPTER::CURVE_V1_STECRV_POOL" | "ADAPTER::CVX_V1_BASE_REWARD_POOL" | "ADAPTER::CVX_V1_BOOSTER" | "ADAPTER::DAI_USDS_EXCHANGE" | "ADAPTER::ERC4626_VAULT" | "ADAPTER::ERC4626_VAULT_REFERRAL" | "ADAPTER::FLUID_DEX" | "ADAPTER::INFINIFI_GATEWAY" | "ADAPTER::INFINIFI_UNWINDING" | "ADAPTER::KELP_DEPOSIT_POOL" | "ADAPTER::KELP_WITHDRAWAL" | "ADAPTER::LIDO_V1" | "ADAPTER::LIDO_WSTETH_V1" | "ADAPTER::MELLOW_CLAIMER" | "ADAPTER::MELLOW_DVV" | "ADAPTER::MELLOW_ERC4626_VAULT" | "ADAPTER::MELLOW_WRAPPER" | "ADAPTER::MIDAS_GATEWAY" | "ADAPTER::MIDAS_ISSUANCE_VAULT" | "ADAPTER::MIDAS_REDEMPTION_VAULT" | "ADAPTER::PENDLE_ROUTER" | "ADAPTER::SECURITIZE_ONRAMP" | "ADAPTER::SECURITIZE_REDEMPTION" | "ADAPTER::STAKING_REWARDS" | "ADAPTER::TRADERJOE_ROUTER" | "ADAPTER::TREEHOUSE_FASTLANE" | "ADAPTER::TREEHOUSE_GATEWAY" | "ADAPTER::TREEHOUSE_ROUTER" | "ADAPTER::UNISWAP_V2_ROUTER" | "ADAPTER::UNISWAP_V3_ROUTER" | "ADAPTER::UNISWAP_V4_GATEWAY" | "ADAPTER::UPSHIFT_VAULT" | "ADAPTER::VELODROME_V2_ROUTER";
|
|
19
19
|
export declare enum AdapterType {
|
|
20
20
|
ACCOUNT_MIGRATOR = "ACCOUNT_MIGRATOR",
|
|
21
21
|
BALANCER_V3_ROUTER = "BALANCER_V3_ROUTER",
|
|
@@ -50,6 +50,9 @@ export declare enum AdapterType {
|
|
|
50
50
|
SECURITIZE_REDEMPTION = "SECURITIZE_REDEMPTION",
|
|
51
51
|
STAKING_REWARDS = "STAKING_REWARDS",
|
|
52
52
|
TRADERJOE_ROUTER = "TRADERJOE_ROUTER",
|
|
53
|
+
TREEHOUSE_FASTLANE = "TREEHOUSE_FASTLANE",
|
|
54
|
+
TREEHOUSE_GATEWAY = "TREEHOUSE_GATEWAY",
|
|
55
|
+
TREEHOUSE_ROUTER = "TREEHOUSE_ROUTER",
|
|
53
56
|
UNISWAP_V2_ROUTER = "UNISWAP_V2_ROUTER",
|
|
54
57
|
UNISWAP_V3_ROUTER = "UNISWAP_V3_ROUTER",
|
|
55
58
|
UNISWAP_V4_GATEWAY = "UNISWAP_V4_GATEWAY",
|
|
@@ -5,7 +5,7 @@ import { AttachChainsArgs, ChainScope, ChainSummaryArgs, PermissionlessChain, Pe
|
|
|
5
5
|
import { ChainsNamespace } from "./chains/ChainsNamespace.js";
|
|
6
6
|
import { DeployArgs, DeployContractArgs, DeployPriceFeedArgs, PreparedDeployment, PreparedPriceFeedDeployment } from "./deploy/types.js";
|
|
7
7
|
import { DEFAULT_DEPLOY_SALT, PermissionlessDeploy, priceFeedSalt } from "./deploy/PermissionlessDeploy.js";
|
|
8
|
-
import { GetPricesArgs, PermissionlessAsset, PermissionlessPriceFeedAsset, PermissionlessPriceFeedDetails, PermissionlessPriceFeedMarket, PermissionlessPriceFeedMarketCaps, PermissionlessPriceFeedStore, PermissionlessPrices, PriceFeedArgs } from "./oracles/types.js";
|
|
8
|
+
import { AssetArgs, GetPricesArgs, PermissionlessAsset, PermissionlessAssetDetails, PermissionlessAssetMarket, PermissionlessAssetMarketFeed, PermissionlessAssetPrices, PermissionlessPriceFeedAsset, PermissionlessPriceFeedDetails, PermissionlessPriceFeedMarket, PermissionlessPriceFeedMarketCaps, PermissionlessPriceFeedStore, PermissionlessPrices, PriceFeedArgs } from "./oracles/types.js";
|
|
9
9
|
import { GET_PRICES_CHUNK_SIZE, GET_PRICES_GAS_LIMIT_BY_CHAIN_ID, PermissionlessOracles } from "./oracles/PermissionlessOracles.js";
|
|
10
10
|
import { AddFeedsArgs, ChangeNamesArgs, ChangeStalenessPeriodsArgs, ForbidFeedsArgs, InstanceTxsArgs, PriceFeedPair } from "./transactions/types.js";
|
|
11
11
|
import { InstanceOwnerTransactions } from "./transactions/InstanceOwnerTransactions.js";
|
|
@@ -17,4 +17,4 @@ import "./deploy/index.js";
|
|
|
17
17
|
import { PermissionlessChainUnreachableError, PermissionlessNotAttachedError, PriceFeedNotInStoreError, PriceFeedSaltMissingError, PriceFeedStalenessUnknownError } from "./errors.js";
|
|
18
18
|
import "./oracles/index.js";
|
|
19
19
|
import "./transactions/index.js";
|
|
20
|
-
export { AddFeedsArgs, AttachChainsArgs, ChainScope, ChainSummaryArgs, ChainsNamespace, ChangeNamesArgs, ChangeStalenessPeriodsArgs, DEFAULT_DEPLOY_SALT, DeployArgs, DeployContractArgs, DeployPriceFeedArgs, ForbidFeedsArgs, GET_PRICES_CHUNK_SIZE, GET_PRICES_GAS_LIMIT_BY_CHAIN_ID, GearboxPermissionless, GearboxPermissionlessOptions, GetPricesArgs, InstanceOwnerTransactions, InstanceTxsArgs, PermissionlessAnalytics, PermissionlessAsset, PermissionlessChain, PermissionlessChainSummary, PermissionlessChainUnreachableError, PermissionlessDeploy, PermissionlessNotAttachedError, PermissionlessOracles, PermissionlessPriceFeedAsset, PermissionlessPriceFeedDetails, PermissionlessPriceFeedMarket, PermissionlessPriceFeedMarketCaps, PermissionlessPriceFeedStore, PermissionlessPrices, PreparedDeployment, PreparedPriceFeedDeployment, PriceChartArgs, PriceFeedArgs, PriceFeedChartPoint, PriceFeedNotInStoreError, PriceFeedPair, PriceFeedPriceChart, PriceFeedSaltMissingError, PriceFeedStalenessUnknownError, deriveEffectiveStalenessPeriod, priceFeedSalt };
|
|
20
|
+
export { AddFeedsArgs, AssetArgs, AttachChainsArgs, ChainScope, ChainSummaryArgs, ChainsNamespace, ChangeNamesArgs, ChangeStalenessPeriodsArgs, DEFAULT_DEPLOY_SALT, DeployArgs, DeployContractArgs, DeployPriceFeedArgs, ForbidFeedsArgs, GET_PRICES_CHUNK_SIZE, GET_PRICES_GAS_LIMIT_BY_CHAIN_ID, GearboxPermissionless, GearboxPermissionlessOptions, GetPricesArgs, InstanceOwnerTransactions, InstanceTxsArgs, PermissionlessAnalytics, PermissionlessAsset, PermissionlessAssetDetails, PermissionlessAssetMarket, PermissionlessAssetMarketFeed, PermissionlessAssetPrices, PermissionlessChain, PermissionlessChainSummary, PermissionlessChainUnreachableError, PermissionlessDeploy, PermissionlessNotAttachedError, PermissionlessOracles, PermissionlessPriceFeedAsset, PermissionlessPriceFeedDetails, PermissionlessPriceFeedMarket, PermissionlessPriceFeedMarketCaps, PermissionlessPriceFeedStore, PermissionlessPrices, PreparedDeployment, PreparedPriceFeedDeployment, PriceChartArgs, PriceFeedArgs, PriceFeedChartPoint, PriceFeedNotInStoreError, PriceFeedPair, PriceFeedPriceChart, PriceFeedSaltMissingError, PriceFeedStalenessUnknownError, deriveEffectiveStalenessPeriod, priceFeedSalt };
|
|
@@ -2,7 +2,7 @@ import { PriceFeedData } from "../../../model/opportunities.js";
|
|
|
2
2
|
import { AbstractOffchainNamespace } from "../../../offchain/AbstractOffchainNamespace.js";
|
|
3
3
|
import { GearboxPermissionlessOptions } from "../types.js";
|
|
4
4
|
import { ChainsNamespace } from "../chains/ChainsNamespace.js";
|
|
5
|
-
import { GetPricesArgs, PermissionlessPriceFeedDetails, PermissionlessPriceFeedMarketCaps, PermissionlessPriceFeedStore, PermissionlessPrices, PriceFeedArgs } from "./types.js";
|
|
5
|
+
import { AssetArgs, GetPricesArgs, PermissionlessAssetDetails, PermissionlessAssetPrices, PermissionlessPriceFeedDetails, PermissionlessPriceFeedMarketCaps, PermissionlessPriceFeedStore, PermissionlessPrices, PriceFeedArgs } from "./types.js";
|
|
6
6
|
import { Address } from "viem";
|
|
7
7
|
//#region src/permissionless/api/oracles/PermissionlessOracles.d.ts
|
|
8
8
|
export declare const GET_PRICES_GAS_LIMIT_BY_CHAIN_ID: Record<number, bigint>;
|
|
@@ -48,6 +48,43 @@ export declare class PermissionlessOracles extends AbstractOffchainNamespace {
|
|
|
48
48
|
* here — it lives in whichever app wrote it.
|
|
49
49
|
**/
|
|
50
50
|
feed({ chainId, address }: PriceFeedArgs): Promise<PermissionlessPriceFeedDetails>;
|
|
51
|
+
/**
|
|
52
|
+
* One asset of the store: the feeds allowed for it, and the markets that
|
|
53
|
+
* take it as collateral.
|
|
54
|
+
*
|
|
55
|
+
* The mirror of {@link feed}, and the call to reach for when the question is
|
|
56
|
+
* "what prices this token and what is it backing" rather than "where is this
|
|
57
|
+
* feed used". Both read the same market slots; which end they are indexed
|
|
58
|
+
* from is the difference.
|
|
59
|
+
*
|
|
60
|
+
* ```ts
|
|
61
|
+
* const { priceFeeds, markets, quotaUsedUsd } =
|
|
62
|
+
* await permissionless.oracles.asset({ chainId: 1, address: token });
|
|
63
|
+
* ```
|
|
64
|
+
*
|
|
65
|
+
* @throws When the chain has no metadata for the address. An asset nothing
|
|
66
|
+
* was indexed for has no symbol or decimals, so there is no row to answer.
|
|
67
|
+
**/
|
|
68
|
+
asset({ chainId, address }: AssetArgs): Promise<PermissionlessAssetDetails>;
|
|
69
|
+
/**
|
|
70
|
+
* What each of one asset's feeds prices it at, and the market cap each of
|
|
71
|
+
* them implies.
|
|
72
|
+
*
|
|
73
|
+
* The asset-side counterpart of {@link feedMarketCaps}, and priced the same
|
|
74
|
+
* way: one `totalSupply` read for the asset and one price per feed, rather
|
|
75
|
+
* than the chain-wide pass {@link prices} makes.
|
|
76
|
+
*
|
|
77
|
+
* Several feeds for one asset do not have to agree — that is the point of
|
|
78
|
+
* having a reserve feed — so this answers per feed rather than picking one.
|
|
79
|
+
*
|
|
80
|
+
* ```ts
|
|
81
|
+
* const { prices, marketCaps } = await permissionless.oracles.assetPrices({
|
|
82
|
+
* chainId: 1,
|
|
83
|
+
* address: token,
|
|
84
|
+
* });
|
|
85
|
+
* ```
|
|
86
|
+
**/
|
|
87
|
+
assetPrices({ chainId, address }: AssetArgs): Promise<PermissionlessAssetPrices>;
|
|
51
88
|
/**
|
|
52
89
|
* The feeds one feed reads from, recursively.
|
|
53
90
|
*
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import { GetPricesArgs, PermissionlessAsset, PermissionlessPriceFeedAsset, PermissionlessPriceFeedDetails, PermissionlessPriceFeedMarket, PermissionlessPriceFeedMarketCaps, PermissionlessPriceFeedStore, PermissionlessPrices, PriceFeedArgs } from "./types.js";
|
|
1
|
+
import { AssetArgs, GetPricesArgs, PermissionlessAsset, PermissionlessAssetDetails, PermissionlessAssetMarket, PermissionlessAssetMarketFeed, PermissionlessAssetPrices, PermissionlessPriceFeedAsset, PermissionlessPriceFeedDetails, PermissionlessPriceFeedMarket, PermissionlessPriceFeedMarketCaps, PermissionlessPriceFeedStore, PermissionlessPrices, PriceFeedArgs } from "./types.js";
|
|
2
2
|
import { GET_PRICES_CHUNK_SIZE, GET_PRICES_GAS_LIMIT_BY_CHAIN_ID, PermissionlessOracles } from "./PermissionlessOracles.js";
|
|
3
|
-
export { GET_PRICES_CHUNK_SIZE, GET_PRICES_GAS_LIMIT_BY_CHAIN_ID, GetPricesArgs, PermissionlessAsset, PermissionlessOracles, PermissionlessPriceFeedAsset, PermissionlessPriceFeedDetails, PermissionlessPriceFeedMarket, PermissionlessPriceFeedMarketCaps, PermissionlessPriceFeedStore, PermissionlessPrices, PriceFeedArgs };
|
|
3
|
+
export { AssetArgs, GET_PRICES_CHUNK_SIZE, GET_PRICES_GAS_LIMIT_BY_CHAIN_ID, GetPricesArgs, PermissionlessAsset, PermissionlessAssetDetails, PermissionlessAssetMarket, PermissionlessAssetMarketFeed, PermissionlessAssetPrices, PermissionlessOracles, PermissionlessPriceFeedAsset, PermissionlessPriceFeedDetails, PermissionlessPriceFeedMarket, PermissionlessPriceFeedMarketCaps, PermissionlessPriceFeedStore, PermissionlessPrices, PriceFeedArgs };
|
|
@@ -89,6 +89,8 @@ export declare const priceFeedMarketSchema: z.ZodObject<{
|
|
|
89
89
|
reserve: z.ZodBoolean;
|
|
90
90
|
isUnderlying: z.ZodBoolean;
|
|
91
91
|
quotaLimit: z.ZodNullable<z.ZodNumber>;
|
|
92
|
+
quotaUsed: z.ZodNullable<z.ZodNumber>;
|
|
93
|
+
marketStalenessPeriod: z.ZodNullable<z.ZodNumber>;
|
|
92
94
|
}, z.core.$loose>;
|
|
93
95
|
/** {@link PermissionlessPriceFeedDetails} */
|
|
94
96
|
export declare const priceFeedDetailsSchema: z.ZodObject<{
|
|
@@ -118,6 +120,8 @@ export declare const priceFeedDetailsSchema: z.ZodObject<{
|
|
|
118
120
|
reserve: z.ZodBoolean;
|
|
119
121
|
isUnderlying: z.ZodBoolean;
|
|
120
122
|
quotaLimit: z.ZodNullable<z.ZodNumber>;
|
|
123
|
+
quotaUsed: z.ZodNullable<z.ZodNumber>;
|
|
124
|
+
marketStalenessPeriod: z.ZodNullable<z.ZodNumber>;
|
|
121
125
|
}, z.core.$loose>>;
|
|
122
126
|
}, z.core.$loose>;
|
|
123
127
|
/** {@link PermissionlessPriceFeedMarketCaps} */
|
|
@@ -125,4 +129,81 @@ export declare const priceFeedMarketCapsSchema: z.ZodObject<{
|
|
|
125
129
|
marketCaps: z.ZodType<Record<`0x${string}`, string | null>, unknown, z.core.$ZodTypeInternals<Record<`0x${string}`, string | null>, unknown>>;
|
|
126
130
|
time: z.ZodNumber;
|
|
127
131
|
}, z.core.$loose>;
|
|
132
|
+
/** {@link PermissionlessAssetMarketFeed} */
|
|
133
|
+
export declare const assetMarketFeedSchema: z.ZodObject<{
|
|
134
|
+
address: z.ZodCustom<`0x${string}`, `0x${string}`>;
|
|
135
|
+
name: z.ZodNullable<z.ZodString>;
|
|
136
|
+
inStore: z.ZodBoolean;
|
|
137
|
+
}, z.core.$loose>;
|
|
138
|
+
/** {@link PermissionlessAssetMarket} */
|
|
139
|
+
export declare const assetMarketSchema: z.ZodObject<{
|
|
140
|
+
market: z.ZodCustom<`0x${string}`, `0x${string}`>;
|
|
141
|
+
marketConfigurator: z.ZodCustom<`0x${string}`, `0x${string}`>;
|
|
142
|
+
curatorName: z.ZodNullable<z.ZodString>;
|
|
143
|
+
marketName: z.ZodNullable<z.ZodString>;
|
|
144
|
+
underlyingToken: z.ZodCustom<`0x${string}`, `0x${string}`>;
|
|
145
|
+
underlyingSymbol: z.ZodNullable<z.ZodString>;
|
|
146
|
+
isUnderlying: z.ZodBoolean;
|
|
147
|
+
isShutdown: z.ZodBoolean;
|
|
148
|
+
mainFeed: z.ZodNullable<z.ZodObject<{
|
|
149
|
+
address: z.ZodCustom<`0x${string}`, `0x${string}`>;
|
|
150
|
+
name: z.ZodNullable<z.ZodString>;
|
|
151
|
+
inStore: z.ZodBoolean;
|
|
152
|
+
}, z.core.$loose>>;
|
|
153
|
+
reserveFeed: z.ZodNullable<z.ZodObject<{
|
|
154
|
+
address: z.ZodCustom<`0x${string}`, `0x${string}`>;
|
|
155
|
+
name: z.ZodNullable<z.ZodString>;
|
|
156
|
+
inStore: z.ZodBoolean;
|
|
157
|
+
}, z.core.$loose>>;
|
|
158
|
+
quotaLimit: z.ZodNullable<z.ZodNumber>;
|
|
159
|
+
quotaUsed: z.ZodNullable<z.ZodNumber>;
|
|
160
|
+
}, z.core.$loose>;
|
|
161
|
+
/** {@link PermissionlessAssetDetails} */
|
|
162
|
+
export declare const assetDetailsSchema: z.ZodObject<{
|
|
163
|
+
chainId: z.ZodNumber;
|
|
164
|
+
asset: z.ZodObject<{
|
|
165
|
+
address: z.ZodCustom<`0x${string}`, `0x${string}`>;
|
|
166
|
+
symbol: z.ZodString;
|
|
167
|
+
name: z.ZodString;
|
|
168
|
+
decimals: z.ZodNumber;
|
|
169
|
+
}, z.core.$loose>;
|
|
170
|
+
priceFeeds: z.ZodArray<z.ZodObject<{
|
|
171
|
+
address: z.ZodCustom<`0x${string}`, `0x${string}`>;
|
|
172
|
+
contractType: z.ZodString;
|
|
173
|
+
version: z.ZodNumber;
|
|
174
|
+
deployedBy: z.ZodCustom<`0x${string}`, `0x${string}`>;
|
|
175
|
+
stalenessPeriod: z.ZodNumber;
|
|
176
|
+
name: z.ZodString;
|
|
177
|
+
}, z.core.$loose>>;
|
|
178
|
+
markets: z.ZodArray<z.ZodObject<{
|
|
179
|
+
market: z.ZodCustom<`0x${string}`, `0x${string}`>;
|
|
180
|
+
marketConfigurator: z.ZodCustom<`0x${string}`, `0x${string}`>;
|
|
181
|
+
curatorName: z.ZodNullable<z.ZodString>;
|
|
182
|
+
marketName: z.ZodNullable<z.ZodString>;
|
|
183
|
+
underlyingToken: z.ZodCustom<`0x${string}`, `0x${string}`>;
|
|
184
|
+
underlyingSymbol: z.ZodNullable<z.ZodString>;
|
|
185
|
+
isUnderlying: z.ZodBoolean;
|
|
186
|
+
isShutdown: z.ZodBoolean;
|
|
187
|
+
mainFeed: z.ZodNullable<z.ZodObject<{
|
|
188
|
+
address: z.ZodCustom<`0x${string}`, `0x${string}`>;
|
|
189
|
+
name: z.ZodNullable<z.ZodString>;
|
|
190
|
+
inStore: z.ZodBoolean;
|
|
191
|
+
}, z.core.$loose>>;
|
|
192
|
+
reserveFeed: z.ZodNullable<z.ZodObject<{
|
|
193
|
+
address: z.ZodCustom<`0x${string}`, `0x${string}`>;
|
|
194
|
+
name: z.ZodNullable<z.ZodString>;
|
|
195
|
+
inStore: z.ZodBoolean;
|
|
196
|
+
}, z.core.$loose>>;
|
|
197
|
+
quotaLimit: z.ZodNullable<z.ZodNumber>;
|
|
198
|
+
quotaUsed: z.ZodNullable<z.ZodNumber>;
|
|
199
|
+
}, z.core.$loose>>;
|
|
200
|
+
quotaLimitUsd: z.ZodNullable<z.ZodNumber>;
|
|
201
|
+
quotaUsedUsd: z.ZodNullable<z.ZodNumber>;
|
|
202
|
+
}, z.core.$loose>;
|
|
203
|
+
/** {@link PermissionlessAssetPrices} */
|
|
204
|
+
export declare const assetPricesSchema: z.ZodObject<{
|
|
205
|
+
prices: z.ZodType<Record<`0x${string}`, string | null>, unknown, z.core.$ZodTypeInternals<Record<`0x${string}`, string | null>, unknown>>;
|
|
206
|
+
marketCaps: z.ZodType<Record<`0x${string}`, string | null>, unknown, z.core.$ZodTypeInternals<Record<`0x${string}`, string | null>, unknown>>;
|
|
207
|
+
time: z.ZodNumber;
|
|
208
|
+
}, z.core.$loose>;
|
|
128
209
|
//#endregion
|
|
@@ -88,6 +88,33 @@ export interface PermissionlessPriceFeedMarket {
|
|
|
88
88
|
* answers.
|
|
89
89
|
*/
|
|
90
90
|
quotaLimit: number | null;
|
|
91
|
+
/**
|
|
92
|
+
* How much of {@link quotaLimit} the market's borrowers have actually taken,
|
|
93
|
+
* in the same units.
|
|
94
|
+
*
|
|
95
|
+
* The sum of every open credit account's current quota for this token across
|
|
96
|
+
* the credit managers borrowing from the market, so it is what the token is
|
|
97
|
+
* backing right now rather than what it is allowed to back.
|
|
98
|
+
*
|
|
99
|
+
* `null` only where {@link quotaLimit} is: a token nobody quotes reads as a
|
|
100
|
+
* zero against a limit, which is a different answer from a token the keeper
|
|
101
|
+
* holds no entry for at all.
|
|
102
|
+
*/
|
|
103
|
+
quotaUsed: number | null;
|
|
104
|
+
/**
|
|
105
|
+
* Staleness period this market's own price oracle holds for the slot, in
|
|
106
|
+
* seconds.
|
|
107
|
+
*
|
|
108
|
+
* The market's figure rather than the store's: a curator sets one per slot
|
|
109
|
+
* in their price oracle, and nothing obliges it to agree with the period the
|
|
110
|
+
* PriceFeedStore carries for the feed. A reader comparing the two is
|
|
111
|
+
* comparing two contracts, which is why both are reported.
|
|
112
|
+
*
|
|
113
|
+
* Read off the oracle when the route is answered rather than taken from the
|
|
114
|
+
* index — the slot's period is not indexed — so `null` means the oracle
|
|
115
|
+
* would not answer, not that it holds no period.
|
|
116
|
+
*/
|
|
117
|
+
marketStalenessPeriod: number | null;
|
|
91
118
|
}
|
|
92
119
|
/**
|
|
93
120
|
* One feed of the store, with everywhere the store lets it be used.
|
|
@@ -107,6 +134,133 @@ export interface PermissionlessPriceFeedDetails {
|
|
|
107
134
|
*/
|
|
108
135
|
markets: PermissionlessPriceFeedMarket[];
|
|
109
136
|
}
|
|
137
|
+
/**
|
|
138
|
+
* One feed as a market slot holds it.
|
|
139
|
+
*
|
|
140
|
+
* The store's view of the feed and not the feed itself: a market keeps
|
|
141
|
+
* pricing with whatever it was last pointed at, and nothing removes it from a
|
|
142
|
+
* market when the store drops it. {@link inStore} is what tells those apart,
|
|
143
|
+
* and the name survives either way because the store recorded it before.
|
|
144
|
+
**/
|
|
145
|
+
export interface PermissionlessAssetMarketFeed {
|
|
146
|
+
address: Address;
|
|
147
|
+
/**
|
|
148
|
+
* Display name the store recorded, or `null` for a feed it never carried —
|
|
149
|
+
* an aggregator a curator pointed a market straight at, say.
|
|
150
|
+
*/
|
|
151
|
+
name: string | null;
|
|
152
|
+
/**
|
|
153
|
+
* Whether the PriceFeedStore still carries the feed.
|
|
154
|
+
*
|
|
155
|
+
* `false` is the case worth showing: the market goes on pricing the asset
|
|
156
|
+
* with a feed the store has removed, or never had. Nothing on chain forbids
|
|
157
|
+
* that, which is exactly why it has to be visible.
|
|
158
|
+
*/
|
|
159
|
+
inStore: boolean;
|
|
160
|
+
}
|
|
161
|
+
/**
|
|
162
|
+
* One market that prices an asset, with both of the slots it may fill.
|
|
163
|
+
*
|
|
164
|
+
* A row per market rather than per `(market, role)`: the two roles are two
|
|
165
|
+
* columns of the same market's row, and the quota is the market's whatever
|
|
166
|
+
* feed holds which slot.
|
|
167
|
+
**/
|
|
168
|
+
export interface PermissionlessAssetMarket {
|
|
169
|
+
market: Address;
|
|
170
|
+
marketConfigurator: Address;
|
|
171
|
+
/** The configurator's own name, as the backend's sync recorded it. */
|
|
172
|
+
curatorName: string | null;
|
|
173
|
+
/** The market's own name, which is the name of its pool token. */
|
|
174
|
+
marketName: string | null;
|
|
175
|
+
/** The market's underlying, which its quota figures are denominated in. */
|
|
176
|
+
underlyingToken: Address;
|
|
177
|
+
/** `null` for an underlying the backend has no metadata row for. */
|
|
178
|
+
underlyingSymbol: string | null;
|
|
179
|
+
/** The asset is this market's own underlying, so it is not quota-managed. */
|
|
180
|
+
isUnderlying: boolean;
|
|
181
|
+
/**
|
|
182
|
+
* The market has been shut down.
|
|
183
|
+
*
|
|
184
|
+
* Still reported, and still counted in {@link
|
|
185
|
+
* PermissionlessAssetDetails.quotaUsedUsd}: a shut down market carries no
|
|
186
|
+
* new borrowing but its open accounts are quoting all the same.
|
|
187
|
+
*/
|
|
188
|
+
isShutdown: boolean;
|
|
189
|
+
/** The feed the market prices the asset with, or `null` if it has none. */
|
|
190
|
+
mainFeed: PermissionlessAssetMarketFeed | null;
|
|
191
|
+
/** The feed the market falls back to, or `null` if it has none. */
|
|
192
|
+
reserveFeed: PermissionlessAssetMarketFeed | null;
|
|
193
|
+
/**
|
|
194
|
+
* What the pool will take of the asset, in units of {@link underlyingToken}.
|
|
195
|
+
*
|
|
196
|
+
* `null` for an asset the quota keeper was never told a limit for, which the
|
|
197
|
+
* market's own underlying always is. A zero is a limit set to zero, and the
|
|
198
|
+
* two are different answers.
|
|
199
|
+
*/
|
|
200
|
+
quotaLimit: number | null;
|
|
201
|
+
/** How much of {@link quotaLimit} is actually taken, in the same units. */
|
|
202
|
+
quotaUsed: number | null;
|
|
203
|
+
}
|
|
204
|
+
/**
|
|
205
|
+
* One asset of the store: what prices it, and what it is used as collateral
|
|
206
|
+
* for.
|
|
207
|
+
*
|
|
208
|
+
* The counterpart of {@link PermissionlessPriceFeedDetails} — the same corner
|
|
209
|
+
* of the chain read from the asset's end instead of the feed's.
|
|
210
|
+
**/
|
|
211
|
+
export interface PermissionlessAssetDetails {
|
|
212
|
+
chainId: number;
|
|
213
|
+
asset: PermissionlessPriceFeedAsset;
|
|
214
|
+
/**
|
|
215
|
+
* Feeds the store currently allows for the asset.
|
|
216
|
+
*
|
|
217
|
+
* Only the store's. A feed a market still prices the asset with but the
|
|
218
|
+
* store has dropped is not here — it is on its market's row, flagged.
|
|
219
|
+
*/
|
|
220
|
+
priceFeeds: PriceFeed[];
|
|
221
|
+
/** Ordered by curator, then by market. */
|
|
222
|
+
markets: PermissionlessAssetMarket[];
|
|
223
|
+
/**
|
|
224
|
+
* Total quota limit across the markets still running, in USD.
|
|
225
|
+
*
|
|
226
|
+
* In USD and not in token units because there is no token to state it in: a
|
|
227
|
+
* limit is denominated in its own market's underlying, and an asset is
|
|
228
|
+
* routinely collateral in markets underlain by different tokens, so the
|
|
229
|
+
* figures are not comparable until each is priced. Each market's limit is
|
|
230
|
+
* converted at the price that market's own oracle holds for its underlying.
|
|
231
|
+
*
|
|
232
|
+
* Shut down markets are left out — their limits are not borrowable — and so
|
|
233
|
+
* are markets whose underlying could not be priced, which makes this a floor
|
|
234
|
+
* rather than an estimate. `null` when no market contributed at all.
|
|
235
|
+
*/
|
|
236
|
+
quotaLimitUsd: number | null;
|
|
237
|
+
/**
|
|
238
|
+
* Total quota actually taken across every market, in USD, converted the same
|
|
239
|
+
* way as {@link quotaLimitUsd}.
|
|
240
|
+
*
|
|
241
|
+
* Every market, including the shut down ones: debt outstanding is exposure
|
|
242
|
+
* whether or not the market still takes new borrowers.
|
|
243
|
+
*/
|
|
244
|
+
quotaUsedUsd: number | null;
|
|
245
|
+
}
|
|
246
|
+
/**
|
|
247
|
+
* What each of one asset's feeds says the asset is worth, and what the market
|
|
248
|
+
* values the asset at through each.
|
|
249
|
+
*
|
|
250
|
+
* Keyed by the lowercased feed address throughout. The asset is the one asked
|
|
251
|
+
* for, so a cap here is that feed's price times the asset's supply — the same
|
|
252
|
+
* figure {@link PermissionlessPriceFeedMarketCaps} answers from the other
|
|
253
|
+
* side, and the reason both exist is that a page shows one row per feed or one
|
|
254
|
+
* row per asset, never the full cross product.
|
|
255
|
+
*
|
|
256
|
+
* `null` is a read that failed, not a zero.
|
|
257
|
+
**/
|
|
258
|
+
export interface PermissionlessAssetPrices {
|
|
259
|
+
prices: Record<Address, string | null>;
|
|
260
|
+
marketCaps: Record<Address, string | null>;
|
|
261
|
+
/** When the backend computed the figures; they are read live, not indexed. */
|
|
262
|
+
time: number;
|
|
263
|
+
}
|
|
110
264
|
/**
|
|
111
265
|
* Market caps of one feed's assets, keyed by the lowercased asset address.
|
|
112
266
|
*
|
|
@@ -129,6 +283,11 @@ export interface PriceFeedArgs {
|
|
|
129
283
|
chainId: number;
|
|
130
284
|
address: Address;
|
|
131
285
|
}
|
|
286
|
+
/** Args of a read scoped to one asset. */
|
|
287
|
+
export interface AssetArgs {
|
|
288
|
+
chainId: number;
|
|
289
|
+
address: Address;
|
|
290
|
+
}
|
|
132
291
|
/** Args of {@link PermissionlessOracles.getPrices}. */
|
|
133
292
|
export interface GetPricesArgs {
|
|
134
293
|
chainId: number;
|
|
@@ -13,7 +13,7 @@ import "./core/index.js";
|
|
|
13
13
|
import { FunctionParams, ValueParams, encodeFunctionParams } from "./utils/abi-encoder.js";
|
|
14
14
|
import { DeployArgs, DeployContractArgs, DeployPriceFeedArgs, PreparedDeployment, PreparedPriceFeedDeployment } from "./api/deploy/types.js";
|
|
15
15
|
import { DEFAULT_DEPLOY_SALT, PermissionlessDeploy, priceFeedSalt } from "./api/deploy/PermissionlessDeploy.js";
|
|
16
|
-
import { GetPricesArgs, PermissionlessAsset, PermissionlessPriceFeedAsset, PermissionlessPriceFeedDetails, PermissionlessPriceFeedMarket, PermissionlessPriceFeedMarketCaps, PermissionlessPriceFeedStore, PermissionlessPrices, PriceFeedArgs } from "./api/oracles/types.js";
|
|
16
|
+
import { AssetArgs, GetPricesArgs, PermissionlessAsset, PermissionlessAssetDetails, PermissionlessAssetMarket, PermissionlessAssetMarketFeed, PermissionlessAssetPrices, PermissionlessPriceFeedAsset, PermissionlessPriceFeedDetails, PermissionlessPriceFeedMarket, PermissionlessPriceFeedMarketCaps, PermissionlessPriceFeedStore, PermissionlessPrices, PriceFeedArgs } from "./api/oracles/types.js";
|
|
17
17
|
import { GET_PRICES_CHUNK_SIZE, GET_PRICES_GAS_LIMIT_BY_CHAIN_ID, PermissionlessOracles } from "./api/oracles/PermissionlessOracles.js";
|
|
18
18
|
import { AddressProviderContract } from "./bindings/address-provider.js";
|
|
19
19
|
import { BytecodeRepositoryContract } from "./bindings/bytecode-repository.js";
|
|
@@ -54,4 +54,4 @@ import { getPrices } from "./utils/price-update/get-prices.js";
|
|
|
54
54
|
import { GetUpdatablePriceFeedsArgs, getUpdatablePriceFeeds } from "./utils/price-update/get-updatable-feeds.js";
|
|
55
55
|
import { normalizeSignature } from "./utils/signature.js";
|
|
56
56
|
import "./utils/index.js";
|
|
57
|
-
export { AccessMode, AddAssetParams, AddFeedsArgs, AddressProviderContract, Addresses, AllowTokenParams, ArchiveTransport, ArchiveTransportConfig, AttachChainsArgs, AuditEvent, Auditor, BYTECODE_REPOSITORY, Batch, Bytecode, BytecodeRepositoryContract, CCMConstructorParams, CROSS_CHAIN_GOVERNANCE, CROSS_CHAIN_MULTISIG, ChainScope, ChainSummaryArgs, ChainsNamespace, ChangeNamesArgs, ChangeStalenessPeriodsArgs, ConstructorParams, CreditManagerFees, CrossChainCall, CrossChainMultisigContract, DEFAULT_DEPLOY_SALT, DeployArgs, DeployContractArgs, DeployParams, DeployPriceFeedArgs, Deployment, DeploymentExtended, ForbidAdapterParams, ForbidFeedsArgs, ForbidTokenParams, FunctionParams, GET_PRICES_CHUNK_SIZE, GET_PRICES_GAS_LIMIT_BY_CHAIN_ID, GearboxPermissionless, GearboxPermissionlessOptions, GetPricesArgs, GetUpdatablePriceFeedsArgs, GovernorContract, INSTANCE_MANAGER, InputValueParams, InstanceManagerContract, InstanceOwnerTransactions, InstanceTxs, InstanceTxsArgs, MAINNET_CCM_CONSTRUCTOR_PARAMS, MAINNET_DEPLOYMENT_BLOCK, MAINNET_DEPLOYMENT_CCM_SALT, MAINNET_DEPLOYMENT_IM_SALT, MARKET_CONFIGURATOR_FACTORY, Market, MarketConfiguratorContract, MarketConfiguratorFactoryContract, PRICE_FEED_STORE, PUBLIC_CREATE2_FACTORY, PauseCreditManagerParams, PeripheryDomain, PermissionlessAnalytics, PermissionlessAsset, PermissionlessChain, PermissionlessChainSummary, PermissionlessChainUnreachableError, PermissionlessDeploy, PermissionlessNotAttachedError, PermissionlessOracles, PermissionlessPriceFeedAsset, PermissionlessPriceFeedDetails, PermissionlessPriceFeedMarket, PermissionlessPriceFeedMarketCaps, PermissionlessPriceFeedStore, PermissionlessPrices, PreparedDeployment, PreparedPriceFeedDeployment, PriceChartArgs, PriceFeed, PriceFeedArgs, PriceFeedChartPoint, PriceFeedConstructorParam, PriceFeedNotInStoreError, PriceFeedPair, PriceFeedParamType, PriceFeedParams, PriceFeedPriceChart, PriceFeedSaltMissingError, PriceFeedSetupParams, PriceFeedStalenessUnknownError, PriceFeedStoreContract, Proposal, QueuedAndExecutedTransaction, RecoveryMessage, RoutingManagerContract, SafeBatch, SafeMeta, SafeTx, SetExpirationDateParams, SetFeesParams, SetPriceFeedParams, SetReservePriceFeedParams, SetTokenQuotaIncreaseFeeParams, Signature, TOKEN_COMPRESSOR, TimeLockContract, TimelockTransaction, TimelockTxParams, TimelockTxs, TokenCompressorContract, TreasurySplitterContract, UnpauseCreditManagerParams, ValueParams, WithdrawalCompressorContract, calculateChecksum, checkCreate2Deployment, checkCreate2DeploymentAddress, chunkedLogsTransport, convertPercent, convertQueueBatchToExecuteTx, convertRawTxToSafeMultisigTx, createCallData, createCreate2DeployRawTx, deepJsonParse, deployUsingPublicCreate2, deriveEffectiveStalenessPeriod, encodeFunctionParams, formatBytecodeSize, formatBytecodeVersion, getBlockNumberByTimestamp, getCreate2AddressPublicFactory, getCreate2DeploymentAddress, getPriceUpdateTx, getPrices, getSafeBatch, getSafeBatches, getUpdatablePriceFeeds, handleSalt, normalizeSignature, priceFeedSalt, priceFeedSetupParams, shortenHash, significantTrunc };
|
|
57
|
+
export { AccessMode, AddAssetParams, AddFeedsArgs, AddressProviderContract, Addresses, AllowTokenParams, ArchiveTransport, ArchiveTransportConfig, AssetArgs, AttachChainsArgs, AuditEvent, Auditor, BYTECODE_REPOSITORY, Batch, Bytecode, BytecodeRepositoryContract, CCMConstructorParams, CROSS_CHAIN_GOVERNANCE, CROSS_CHAIN_MULTISIG, ChainScope, ChainSummaryArgs, ChainsNamespace, ChangeNamesArgs, ChangeStalenessPeriodsArgs, ConstructorParams, CreditManagerFees, CrossChainCall, CrossChainMultisigContract, DEFAULT_DEPLOY_SALT, DeployArgs, DeployContractArgs, DeployParams, DeployPriceFeedArgs, Deployment, DeploymentExtended, ForbidAdapterParams, ForbidFeedsArgs, ForbidTokenParams, FunctionParams, GET_PRICES_CHUNK_SIZE, GET_PRICES_GAS_LIMIT_BY_CHAIN_ID, GearboxPermissionless, GearboxPermissionlessOptions, GetPricesArgs, GetUpdatablePriceFeedsArgs, GovernorContract, INSTANCE_MANAGER, InputValueParams, InstanceManagerContract, InstanceOwnerTransactions, InstanceTxs, InstanceTxsArgs, MAINNET_CCM_CONSTRUCTOR_PARAMS, MAINNET_DEPLOYMENT_BLOCK, MAINNET_DEPLOYMENT_CCM_SALT, MAINNET_DEPLOYMENT_IM_SALT, MARKET_CONFIGURATOR_FACTORY, Market, MarketConfiguratorContract, MarketConfiguratorFactoryContract, PRICE_FEED_STORE, PUBLIC_CREATE2_FACTORY, PauseCreditManagerParams, PeripheryDomain, PermissionlessAnalytics, PermissionlessAsset, PermissionlessAssetDetails, PermissionlessAssetMarket, PermissionlessAssetMarketFeed, PermissionlessAssetPrices, PermissionlessChain, PermissionlessChainSummary, PermissionlessChainUnreachableError, PermissionlessDeploy, PermissionlessNotAttachedError, PermissionlessOracles, PermissionlessPriceFeedAsset, PermissionlessPriceFeedDetails, PermissionlessPriceFeedMarket, PermissionlessPriceFeedMarketCaps, PermissionlessPriceFeedStore, PermissionlessPrices, PreparedDeployment, PreparedPriceFeedDeployment, PriceChartArgs, PriceFeed, PriceFeedArgs, PriceFeedChartPoint, PriceFeedConstructorParam, PriceFeedNotInStoreError, PriceFeedPair, PriceFeedParamType, PriceFeedParams, PriceFeedPriceChart, PriceFeedSaltMissingError, PriceFeedSetupParams, PriceFeedStalenessUnknownError, PriceFeedStoreContract, Proposal, QueuedAndExecutedTransaction, RecoveryMessage, RoutingManagerContract, SafeBatch, SafeMeta, SafeTx, SetExpirationDateParams, SetFeesParams, SetPriceFeedParams, SetReservePriceFeedParams, SetTokenQuotaIncreaseFeeParams, Signature, TOKEN_COMPRESSOR, TimeLockContract, TimelockTransaction, TimelockTxParams, TimelockTxs, TokenCompressorContract, TreasurySplitterContract, UnpauseCreditManagerParams, ValueParams, WithdrawalCompressorContract, calculateChecksum, checkCreate2Deployment, checkCreate2DeploymentAddress, chunkedLogsTransport, convertPercent, convertQueueBatchToExecuteTx, convertRawTxToSafeMultisigTx, createCallData, createCreate2DeployRawTx, deepJsonParse, deployUsingPublicCreate2, deriveEffectiveStalenessPeriod, encodeFunctionParams, formatBytecodeSize, formatBytecodeVersion, getBlockNumberByTimestamp, getCreate2AddressPublicFactory, getCreate2DeploymentAddress, getPriceUpdateTx, getPrices, getSafeBatch, getSafeBatches, getUpdatablePriceFeeds, handleSalt, normalizeSignature, priceFeedSalt, priceFeedSetupParams, shortenHash, significantTrunc };
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@gearbox-protocol/sdk",
|
|
3
|
-
"version": "18.2.0-next.
|
|
3
|
+
"version": "18.2.0-next.3",
|
|
4
4
|
"description": "Gearbox SDK",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"repository": {
|
|
@@ -69,8 +69,9 @@
|
|
|
69
69
|
"dev": "tsdown --watch",
|
|
70
70
|
"example": "tsx scripts/example.ts | pino-pretty",
|
|
71
71
|
"list-opportunities": "tsx scripts/list-opportunities.ts",
|
|
72
|
-
"test:watch": "vitest --project unit",
|
|
73
|
-
"test:unit": "vitest run --project unit",
|
|
72
|
+
"test:watch": "vitest --project unit --project api",
|
|
73
|
+
"test:unit": "vitest run --project unit --project api",
|
|
74
|
+
"test:api": "vitest run --project api",
|
|
74
75
|
"test:e2e": "vitest run --project e2e",
|
|
75
76
|
"test:all": "vitest run",
|
|
76
77
|
"test": "vitest run",
|