@gearbox-protocol/sdk 17.13.0-next.6 → 17.13.0-next.7

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.
Files changed (53) hide show
  1. package/dist/cjs/model/analytics.schema.js +71 -7
  2. package/dist/cjs/model/index.js +5 -1
  3. package/dist/cjs/model/liquidations.schema.js +4 -3
  4. package/dist/cjs/model/opportunities.schema.js +1 -1
  5. package/dist/cjs/model/positions.schema.js +3 -0
  6. package/dist/cjs/offchain/analytics/OffchainAnalyticsPositions.js +8 -0
  7. package/dist/cjs/onchain/accounts/liquidations/LiquidationsService.js +15 -3
  8. package/dist/cjs/onchain/pools/PoolService.js +1 -0
  9. package/dist/cjs/onchain/positions/PositionsService.js +1 -0
  10. package/dist/cjs/onchain/validation/bundles/checkLiquidationEligibility.js +1 -0
  11. package/dist/cjs/onchain/validation/checks/checkPartiallyLiquidatable.js +1 -1
  12. package/dist/esm/dev/AccountOpener.js +1 -1
  13. package/dist/esm/dev/withdrawalUtils.js +1 -1
  14. package/dist/esm/history/trace/extractTransfers.js +1 -1
  15. package/dist/esm/model/analytics.schema.js +69 -9
  16. package/dist/esm/model/index.js +3 -3
  17. package/dist/esm/model/liquidations.schema.js +4 -3
  18. package/dist/esm/model/opportunities.schema.js +1 -1
  19. package/dist/esm/model/positions.schema.js +3 -0
  20. package/dist/esm/offchain/analytics/OffchainAnalyticsPositions.js +9 -1
  21. package/dist/esm/onchain/accounts/CreditAccountsServiceV310.js +2 -2
  22. package/dist/esm/onchain/accounts/liquidations/LiquidationsService.js +16 -4
  23. package/dist/esm/onchain/accounts/withdrawal-compressor/RedemptionLoggerV310Contract.js +1 -1
  24. package/dist/esm/onchain/accounts/withdrawal-compressor/WithdrawalCompressorV310Contract.js +1 -1
  25. package/dist/esm/onchain/accounts/withdrawal-compressor/WithdrawalCompressorV311Contract.js +1 -1
  26. package/dist/esm/onchain/accounts/withdrawal-compressor/WithdrawalCompressorV313Contract.js +1 -1
  27. package/dist/esm/onchain/base/TokensMeta.js +3 -3
  28. package/dist/esm/onchain/core/createAddressProvider.js +1 -1
  29. package/dist/esm/onchain/market/adapters/contracts/AccountMigratorAdapterContract.js +1 -1
  30. package/dist/esm/onchain/market/adapters/contracts/ERC4626AdapterContract.js +1 -1
  31. package/dist/esm/onchain/market/credit/CreditFacadeV310BaseContract.js +1 -1
  32. package/dist/esm/onchain/market/pool/PoolV310Contract.js +1 -1
  33. package/dist/esm/onchain/market/rwa/createDegenNFT.js +1 -1
  34. package/dist/esm/onchain/market/zapper/IETHZapperContract.js +1 -1
  35. package/dist/esm/onchain/market/zapper/ZapperContract.js +1 -1
  36. package/dist/esm/onchain/pools/PoolService.js +1 -0
  37. package/dist/esm/onchain/positions/PositionsService.js +1 -0
  38. package/dist/esm/onchain/preview/preview/previewPoolPositionOperation.js +2 -2
  39. package/dist/esm/onchain/utils/viem/simulateWithPriceUpdates.js +1 -1
  40. package/dist/esm/onchain/validation/bundles/checkLiquidationEligibility.js +1 -0
  41. package/dist/esm/onchain/validation/checks/checkPartiallyLiquidatable.js +1 -1
  42. package/dist/types/model/analytics.d.ts +56 -2
  43. package/dist/types/model/analytics.schema.d.ts +169 -25
  44. package/dist/types/model/index.d.ts +4 -4
  45. package/dist/types/model/liquidations.d.ts +14 -5
  46. package/dist/types/model/liquidations.schema.d.ts +3 -1
  47. package/dist/types/model/opportunities.d.ts +1 -1
  48. package/dist/types/model/positions.d.ts +5 -0
  49. package/dist/types/model/positions.schema.d.ts +80 -0
  50. package/dist/types/offchain/analytics/OffchainAnalyticsPositions.d.ts +4 -1
  51. package/dist/types/offchain/analytics/types.d.ts +14 -1
  52. package/dist/types/onchain/validation/checks/checkPartiallyLiquidatable.d.ts +3 -2
  53. package/package.json +1 -1
@@ -2,6 +2,7 @@ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
2
  const require_onchain_utils_zod = require("../onchain/utils/zod.js");
3
3
  const require_model_primitives_schema = require("./primitives.schema.js");
4
4
  const require_model_charts_schema = require("./charts.schema.js");
5
+ const require_model_curators_schema = require("./curators.schema.js");
5
6
  const require_model_filters = require("./filters.js");
6
7
  const require_model_filters_schema = require("./filters.schema.js");
7
8
  const require_model_liquidations_schema = require("./liquidations.schema.js");
@@ -19,17 +20,39 @@ const analyticsPositionSortFieldSchema = zod_v4.z.enum([
19
20
  "totalValueUsd",
20
21
  "totalDebtUsd",
21
22
  "pnlUsd",
22
- "apy",
23
- "healthFactor",
24
- "leverage",
25
- "chainId",
26
- "name",
27
- "borrower"
23
+ "healthFactor"
28
24
  ]);
29
25
  /** {@link AnalyticsSortDirection} */
30
26
  const analyticsSortDirectionSchema = zod_v4.z.enum(["asc", "desc"]);
31
27
  const analyticsOwnerShape = { borrower: require_onchain_utils_zod.ZodAddress() };
32
28
  const addressSchema = zod_v4.z.custom((value) => typeof value === "string" && (0, viem.isAddress)(value, { strict: false }));
29
+ const addressParamSchema = zod_v4.z.string().refine((value) => (0, viem.isAddress)(value, { strict: false }), "invalid address");
30
+ /** {@link AnalyticsContractRef} */
31
+ const analyticsContractRefSchema = zod_v4.z.object({
32
+ chainId: require_model_primitives_schema.chainIdSchema,
33
+ address: addressSchema
34
+ });
35
+ const contractFilterSchema = zod_v4.z.union([analyticsContractRefSchema, zod_v4.z.array(analyticsContractRefSchema).readonly()]);
36
+ const contractFilterParamSchema = zod_v4.z.string().regex(/^$|^\d+:\w+(,\d+:\w+)*$/);
37
+ /** Decode comma-separated choices, preserving scalar reads and empty lists. */
38
+ function decodeChoices(param, decode) {
39
+ const choices = param === "" ? [] : param.split(",").map(decode);
40
+ return choices.length === 1 ? choices[0] : choices;
41
+ }
42
+ function encodeChoices(choices, encode) {
43
+ if (choices === void 0) return;
44
+ return [].concat(choices).map(encode).join(",");
45
+ }
46
+ function decodeContractRef(param) {
47
+ const [chainId, address] = param.split(":");
48
+ return {
49
+ chainId: Number(chainId),
50
+ address
51
+ };
52
+ }
53
+ function encodeContractRef(ref) {
54
+ return `${ref.chainId}:${ref.address}`;
55
+ }
33
56
  /** {@link AnalyticsPosition} */
34
57
  const analyticsPositionSchema = zod_v4.z.discriminatedUnion("kind", [
35
58
  zod_v4.z.object({
@@ -48,6 +71,10 @@ const analyticsPositionSchema = zod_v4.z.discriminatedUnion("kind", [
48
71
  /** {@link AnalyticsPositionListOptions} */
49
72
  const analyticsPositionListOptionsSchema = zod_v4.z.object({
50
73
  borrower: addressSchema.optional(),
74
+ pool: contractFilterSchema.optional(),
75
+ creditManager: contractFilterSchema.optional(),
76
+ asset: contractFilterSchema.optional(),
77
+ curator: require_model_filters_schema.filterable(zod_v4.z.union([require_model_curators_schema.curatorNameSchema, zod_v4.z.array(require_model_curators_schema.curatorNameSchema).readonly()])).optional(),
51
78
  kind: require_model_filters_schema.filterable(require_model_positions_schema.positionKindSchema).optional(),
52
79
  isZeroDebt: require_model_filters_schema.filterable(zod_v4.z.boolean()).optional(),
53
80
  chainIds: zod_v4.z.array(require_model_primitives_schema.chainIdSchema).optional(),
@@ -59,9 +86,16 @@ const analyticsPositionListOptionsSchema = zod_v4.z.object({
59
86
  });
60
87
  /**
61
88
  * {@link AnalyticsPositionListOptions} as URL query parameters.
89
+ * Pool, credit manager and asset choices are comma-separated `chainId:address`
90
+ * references; curator choices are comma-separated names. An empty string
91
+ * carries an empty list rather than an unrestricted condition.
62
92
  **/
63
93
  const analyticsPositionListQueryParamsSchema = zod_v4.z.object({
64
- borrower: zod_v4.z.string().refine((value) => (0, viem.isAddress)(value, { strict: false }), "invalid address").optional(),
94
+ borrower: addressParamSchema.optional(),
95
+ pool: contractFilterParamSchema.optional(),
96
+ creditManager: contractFilterParamSchema.optional(),
97
+ asset: contractFilterParamSchema.optional(),
98
+ curator: zod_v4.z.string().optional(),
65
99
  kind: require_model_positions_schema.positionKindSchema.optional(),
66
100
  isZeroDebt: zod_v4.z.enum(["true", "false"]).optional(),
67
101
  chainIds: zod_v4.z.string().regex(/^$|^\d+(,\d+)*$/).optional(),
@@ -78,6 +112,10 @@ const analyticsPositionListQueryParamsSchema = zod_v4.z.object({
78
112
  const analyticsPositionListQuerySchema = zod_v4.z.codec(analyticsPositionListQueryParamsSchema, analyticsPositionListOptionsSchema, {
79
113
  decode: (params) => ({
80
114
  ...params.borrower === void 0 ? {} : { borrower: params.borrower },
115
+ ...params.pool === void 0 ? {} : { pool: decodeChoices(params.pool, decodeContractRef) },
116
+ ...params.creditManager === void 0 ? {} : { creditManager: decodeChoices(params.creditManager, decodeContractRef) },
117
+ ...params.asset === void 0 ? {} : { asset: decodeChoices(params.asset, decodeContractRef) },
118
+ ...params.curator === void 0 ? {} : { curator: decodeChoices(params.curator, (name) => name) },
81
119
  ...params.kind === void 0 ? {} : { kind: params.kind },
82
120
  ...params.isZeroDebt === void 0 ? {} : { isZeroDebt: params.isZeroDebt === "true" },
83
121
  ...params.chainIds === void 0 ? {} : { chainIds: params.chainIds === "" ? [] : params.chainIds.split(",").map(Number) },
@@ -89,6 +127,10 @@ const analyticsPositionListQuerySchema = zod_v4.z.codec(analyticsPositionListQue
89
127
  }),
90
128
  encode: (options) => ({
91
129
  borrower: options.borrower,
130
+ pool: encodeChoices(options.pool, encodeContractRef),
131
+ creditManager: encodeChoices(options.creditManager, encodeContractRef),
132
+ asset: encodeChoices(options.asset, encodeContractRef),
133
+ curator: require_model_filters.isFilterSet(options.curator) ? encodeChoices(options.curator, (name) => name) : void 0,
92
134
  kind: require_model_filters.isFilterSet(options.kind) ? options.kind : void 0,
93
135
  isZeroDebt: require_model_filters_schema.encodeFlag(options.isZeroDebt),
94
136
  chainIds: options.chainIds?.join(","),
@@ -106,6 +148,24 @@ const analyticsPositionPageSchema = zod_v4.z.object({
106
148
  offset: zod_v4.z.number().int().nonnegative(),
107
149
  limit: zod_v4.z.number().int().positive().max(100)
108
150
  });
151
+ /** {@link AnalyticsContractOption} */
152
+ const analyticsContractOptionSchema = zod_v4.z.object({
153
+ chainId: require_model_primitives_schema.chainIdSchema,
154
+ address: require_onchain_utils_zod.ZodAddress(),
155
+ name: zod_v4.z.string()
156
+ });
157
+ /** {@link AnalyticsPositionFilterOptions} */
158
+ const analyticsPositionFilterOptionsSchema = zod_v4.z.object({
159
+ pools: zod_v4.z.array(analyticsContractOptionSchema),
160
+ creditManagers: zod_v4.z.array(analyticsContractOptionSchema),
161
+ assets: zod_v4.z.array(require_model_primitives_schema.tokenSchema),
162
+ curators: zod_v4.z.array(require_model_curators_schema.curatorNameSchema)
163
+ });
164
+ /** Chain scope of a filter-options read, shared by the client and backend. */
165
+ const analyticsPositionFilterOptionsQuerySchema = zod_v4.z.codec(analyticsPositionListQueryParamsSchema.pick({ chainIds: true }), analyticsPositionListOptionsSchema.pick({ chainIds: true }), {
166
+ decode: (params) => params.chainIds === void 0 ? {} : { chainIds: params.chainIds === "" ? [] : params.chainIds.split(",").map(Number) },
167
+ encode: (filter) => ({ chainIds: filter.chainIds?.join(",") })
168
+ });
109
169
  /**
110
170
  * {@link AnalyticsChartQuery}
111
171
  *
@@ -151,6 +211,10 @@ exports.ANALYTICS_POSITIONS_MAX_LIMIT = ANALYTICS_POSITIONS_MAX_LIMIT;
151
211
  exports.analyticsChartQueryOptionsSchema = analyticsChartQueryOptionsSchema;
152
212
  exports.analyticsChartQueryParamsSchema = analyticsChartQueryParamsSchema;
153
213
  exports.analyticsChartQuerySchema = analyticsChartQuerySchema;
214
+ exports.analyticsContractOptionSchema = analyticsContractOptionSchema;
215
+ exports.analyticsContractRefSchema = analyticsContractRefSchema;
216
+ exports.analyticsPositionFilterOptionsQuerySchema = analyticsPositionFilterOptionsQuerySchema;
217
+ exports.analyticsPositionFilterOptionsSchema = analyticsPositionFilterOptionsSchema;
154
218
  exports.analyticsPositionListOptionsSchema = analyticsPositionListOptionsSchema;
155
219
  exports.analyticsPositionListQueryParamsSchema = analyticsPositionListQueryParamsSchema;
156
220
  exports.analyticsPositionListQuerySchema = analyticsPositionListQuerySchema;
@@ -4,9 +4,9 @@ const require_model_charts = require("./charts.js");
4
4
  const require_model_compare_schema = require("./compare.schema.js");
5
5
  const require_model_primitives_schema = require("./primitives.schema.js");
6
6
  const require_model_charts_schema = require("./charts.schema.js");
7
+ const require_model_curators_schema = require("./curators.schema.js");
7
8
  const require_model_filters = require("./filters.js");
8
9
  const require_model_filters_schema = require("./filters.schema.js");
9
- const require_model_curators_schema = require("./curators.schema.js");
10
10
  const require_model_liquidations_schema = require("./liquidations.schema.js");
11
11
  const require_model_rwa = require("./rwa.js");
12
12
  const require_model_rwa_schema = require("./rwa.schema.js");
@@ -56,6 +56,10 @@ exports.amountSchema = require_model_primitives_schema.amountSchema;
56
56
  exports.analyticsChartQueryOptionsSchema = require_model_analytics_schema.analyticsChartQueryOptionsSchema;
57
57
  exports.analyticsChartQueryParamsSchema = require_model_analytics_schema.analyticsChartQueryParamsSchema;
58
58
  exports.analyticsChartQuerySchema = require_model_analytics_schema.analyticsChartQuerySchema;
59
+ exports.analyticsContractOptionSchema = require_model_analytics_schema.analyticsContractOptionSchema;
60
+ exports.analyticsContractRefSchema = require_model_analytics_schema.analyticsContractRefSchema;
61
+ exports.analyticsPositionFilterOptionsQuerySchema = require_model_analytics_schema.analyticsPositionFilterOptionsQuerySchema;
62
+ exports.analyticsPositionFilterOptionsSchema = require_model_analytics_schema.analyticsPositionFilterOptionsSchema;
59
63
  exports.analyticsPositionListOptionsSchema = require_model_analytics_schema.analyticsPositionListOptionsSchema;
60
64
  exports.analyticsPositionListQueryParamsSchema = require_model_analytics_schema.analyticsPositionListQueryParamsSchema;
61
65
  exports.analyticsPositionListQuerySchema = require_model_analytics_schema.analyticsPositionListQuerySchema;
@@ -1,8 +1,8 @@
1
1
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
2
  const require_onchain_utils_zod = require("../onchain/utils/zod.js");
3
3
  const require_model_primitives_schema = require("./primitives.schema.js");
4
- const require_model_filters_schema = require("./filters.schema.js");
5
4
  const require_model_curators_schema = require("./curators.schema.js");
5
+ const require_model_filters_schema = require("./filters.schema.js");
6
6
  let zod_v4 = require("zod/v4");
7
7
  //#region src/model/liquidations.schema.ts
8
8
  /**
@@ -36,7 +36,8 @@ const liquidatableAccountSchema = zod_v4.z.object({
36
36
  estimatedProfit: require_model_primitives_schema.tokenAmountSchema,
37
37
  isDelayed: zod_v4.z.boolean(),
38
38
  paused: zod_v4.z.boolean(),
39
- rwa: zod_v4.z.boolean()
39
+ rwa: zod_v4.z.boolean(),
40
+ isPartiallyLiquidatable: zod_v4.z.boolean()
40
41
  });
41
42
  /**
42
43
  * {@link InstantReceivedAsset}
@@ -87,7 +88,7 @@ const liquidationDetailsSchema = zod_v4.z.object({
87
88
  kycProtocol: zod_v4.z.string().optional(),
88
89
  kycToken: require_model_primitives_schema.tokenSchema.optional(),
89
90
  approve: liquidationApprovalSchema.optional(),
90
- isPartiallyLiquidatable: zod_v4.z.boolean().optional()
91
+ isPartial: zod_v4.z.boolean()
91
92
  });
92
93
  //#endregion
93
94
  exports.delayedReceivedAssetSchema = delayedReceivedAssetSchema;
@@ -2,9 +2,9 @@ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
2
  const require_onchain_utils_zod = require("../onchain/utils/zod.js");
3
3
  const require_model_compare_schema = require("./compare.schema.js");
4
4
  const require_model_primitives_schema = require("./primitives.schema.js");
5
+ const require_model_curators_schema = require("./curators.schema.js");
5
6
  const require_model_filters = require("./filters.js");
6
7
  const require_model_filters_schema = require("./filters.schema.js");
7
- const require_model_curators_schema = require("./curators.schema.js");
8
8
  const require_model_rwa_schema = require("./rwa.schema.js");
9
9
  let zod_v4 = require("zod/v4");
10
10
  //#region src/model/opportunities.schema.ts
@@ -2,6 +2,7 @@ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
2
  const require_onchain_utils_zod = require("../onchain/utils/zod.js");
3
3
  const require_model_compare_schema = require("./compare.schema.js");
4
4
  const require_model_primitives_schema = require("./primitives.schema.js");
5
+ const require_model_curators_schema = require("./curators.schema.js");
5
6
  const require_model_filters = require("./filters.js");
6
7
  const require_model_filters_schema = require("./filters.schema.js");
7
8
  const require_model_liquidations_schema = require("./liquidations.schema.js");
@@ -67,6 +68,7 @@ const positionCollateralSchema = zod_v4.z.object({
67
68
  const poolPositionSchema = zod_v4.z.object({
68
69
  kind: zod_v4.z.literal("pool"),
69
70
  name: zod_v4.z.string(),
71
+ curator: require_model_curators_schema.curatorSchema,
70
72
  chainId: require_model_primitives_schema.chainIdSchema,
71
73
  pool: require_onchain_utils_zod.ZodAddress(),
72
74
  underlyingToken: require_model_primitives_schema.underlyingTokenSchema,
@@ -97,6 +99,7 @@ const borrowRateBreakdownSchema = zod_v4.z.object({
97
99
  const strategyPositionSchema = zod_v4.z.object({
98
100
  kind: zod_v4.z.literal("strategy"),
99
101
  name: require_model_compare_schema.backendPreferred(zod_v4.z.string()),
102
+ curator: require_model_curators_schema.curatorSchema,
100
103
  chainId: require_model_primitives_schema.chainIdSchema,
101
104
  creditManager: require_onchain_utils_zod.ZodAddress(),
102
105
  creditAccount: require_onchain_utils_zod.ZodAddress(),
@@ -8,6 +8,14 @@ var OffchainAnalyticsPositions = class extends require_offchain_AbstractOffchain
8
8
  constructor(options) {
9
9
  super("OffchainAnalyticsPositions", options);
10
10
  }
11
+ /** {@inheritDoc IOffchainAnalyticsPositions.filterOptions} */
12
+ async filterOptions(filter) {
13
+ return this.get({
14
+ path: "/v2/analytics/positions/filter-options",
15
+ query: zod_v4.z.encode(require_model_analytics_schema.analyticsPositionFilterOptionsQuerySchema, { chainIds: this.scopedChainIds(filter) }),
16
+ schema: require_model_analytics_schema.analyticsPositionFilterOptionsSchema
17
+ });
18
+ }
11
19
  /** {@inheritDoc IOffchainAnalyticsPositions.list} */
12
20
  async list(options) {
13
21
  return this.get({
@@ -71,7 +71,8 @@ var LiquidationsService = class extends require_onchain_base_SDKConstruct.SDKCon
71
71
  isCreditAccountFrozen: data.isCreditAccountFrozen,
72
72
  kycProtocol: data.kycProtocol || void 0,
73
73
  kycToken: require_onchain_utils_hex.hexEq(data.kycToken, "0x0000000000000000000000000000000000000000") ? void 0 : this.sdk.tokensMeta.getToken(data.kycToken),
74
- approve: this.#liquidationApproval(data, suite, priceOracle)
74
+ approve: this.#liquidationApproval(data, suite, priceOracle),
75
+ isPartial: false
75
76
  };
76
77
  }
77
78
  /**
@@ -152,7 +153,8 @@ var LiquidationsService = class extends require_onchain_base_SDKConstruct.SDKCon
152
153
  spender: suite.creditManager.address,
153
154
  ...priceOracle.toTokenAmount(underlying, repaidAmount * (require_onchain_constants_math.PERCENTAGE_FACTOR + require_onchain_accounts_liquidations_constants.LIQUIDATION_APPROVAL_BUFFER) / require_onchain_constants_math.PERCENTAGE_FACTOR)
154
155
  },
155
- isPartiallyLiquidatable
156
+ isPartiallyLiquidatable,
157
+ isPartial: true
156
158
  };
157
159
  }
158
160
  /**
@@ -419,9 +421,19 @@ var LiquidationsService = class extends require_onchain_base_SDKConstruct.SDKCon
419
421
  },
420
422
  isDelayed: ca.tokens.some((t) => t.balance > 10n && this.#isWithdrawalPhantom(t.token)),
421
423
  paused: suite.creditFacade.isPaused,
422
- rwa: market.rwa
424
+ rwa: market.rwa,
425
+ isPartiallyLiquidatable: this.#isPartiallyLiquidatable(ca, suite)
423
426
  };
424
427
  }
428
+ #isPartiallyLiquidatable(ca, suite) {
429
+ if (suite.market.rwa) return false;
430
+ try {
431
+ return this.#getPartialLiquidationParams(ca, suite, {}).isPartiallyLiquidatable;
432
+ } catch (e) {
433
+ this.logger?.debug(e, `credit account ${this.labelAddress(ca.creditAccount)} cannot be partially liquidated`);
434
+ return false;
435
+ }
436
+ }
425
437
  #isWithdrawalPhantom(token) {
426
438
  return !!this.sdk.withdrawalCompressor?.getWithdrawalSourceToken(token);
427
439
  }
@@ -398,6 +398,7 @@ var PoolService = class extends require_onchain_base_SDKConstruct.SDKConstruct {
398
398
  return {
399
399
  kind: "pool",
400
400
  name: this.sdk.tokensMeta.mustGetToken(pool.address).name,
401
+ curator: market.curator,
401
402
  chainId: this.chainId,
402
403
  pool: pool.address,
403
404
  underlyingToken: market.underlyingToken,
@@ -315,6 +315,7 @@ var PositionsService = class extends require_onchain_base_SDKConstruct.SDKConstr
315
315
  creditAccount: ca.creditAccount,
316
316
  underlyingToken: token,
317
317
  name: suite.accountStrategyName(ca.creditAccount),
318
+ curator: market.curator,
318
319
  targetCollateral: suite.accountTargetCollateral(ca.creditAccount),
319
320
  leverage: require_onchain_market_math.calcPositionLeverage(totalValue, totalDebtValue),
320
321
  borrowApy: require_onchain_market_math.calcBorrowApy(pool.baseInterestRate, suite.creditManager.feeInterest),
@@ -19,6 +19,7 @@ function checkLiquidationEligibility(input) {
19
19
  creditAccount: details.creditAccount
20
20
  }),
21
21
  ...require_onchain_validation_checks_checkPartiallyLiquidatable.checkPartiallyLiquidatable({
22
+ isPartial: details.isPartial,
22
23
  partiallyLiquidatable: details.isPartiallyLiquidatable,
23
24
  creditAccount: details.creditAccount
24
25
  }),
@@ -7,7 +7,7 @@ require("../../../model/index.js");
7
7
  * leaving less than the minimum debt is refused.
8
8
  */
9
9
  function checkPartiallyLiquidatable(args) {
10
- return args.partiallyLiquidatable === false ? [require_model_errors_liquidation_errors.partialLiquidationImpossible(args.creditAccount)] : [];
10
+ return args.isPartial && !args.partiallyLiquidatable ? [require_model_errors_liquidation_errors.partialLiquidationImpossible(args.creditAccount)] : [];
11
11
  }
12
12
  //#endregion
13
13
  exports.checkPartiallyLiquidatable = checkPartiallyLiquidatable;
@@ -1,5 +1,5 @@
1
- import { iCreditFacadeV310Abi } from "../abi/310/generated.js";
2
1
  import { ierc20Abi } from "../abi/iERC20.js";
2
+ import { iCreditFacadeV310Abi } from "../abi/310/generated.js";
3
3
  import { AddressMap } from "../onchain/utils/AddressMap.js";
4
4
  import { AddressSet } from "../onchain/utils/AddressSet.js";
5
5
  import { AssetsMap } from "../onchain/utils/AssetsMap.js";
@@ -1,6 +1,6 @@
1
+ import { iWithdrawalCompressorV313Abi } from "../abi/IWithdrawalCompressorV313.js";
1
2
  import { getNetworkType } from "../onchain/chain/chains.js";
2
3
  import { getWithdrawalCompressorAddress } from "../onchain/accounts/withdrawal-compressor/addresses.js";
3
- import { iWithdrawalCompressorV313Abi } from "../abi/IWithdrawalCompressorV313.js";
4
4
  import "../onchain/index.js";
5
5
  import { iMidasDataFeedAbi, iMidasRedemptionVaultAbi, midasGatewayAbi, midasRedeemerAbi, midasRedemptionVaultPhantomTokenAbi, securitizeRedeemerAbi, securitizeRedemptionGatewayAbi, securitizeRedemptionPhantomTokenAbi } from "./withdrawalAbi.js";
6
6
  import { erc20Abi, hexToString, parseAbi, parseEther } from "viem";
@@ -1,5 +1,5 @@
1
- import { iCreditFacadeV310Abi } from "../../abi/310/generated.js";
2
1
  import { ierc20Abi } from "../../abi/iERC20.js";
2
+ import { iCreditFacadeV310Abi } from "../../abi/310/generated.js";
3
3
  import { AddressMap } from "../../onchain/utils/AddressMap.js";
4
4
  import "../../onchain/index.js";
5
5
  import { UnexpectedFacadeEventOrderError } from "./errors.js";
@@ -1,6 +1,7 @@
1
1
  import { ZodAddress } from "../onchain/utils/zod.js";
2
- import { assetTypeSchema, chainIdSchema } from "./primitives.schema.js";
2
+ import { assetTypeSchema, chainIdSchema, tokenSchema } from "./primitives.schema.js";
3
3
  import { chartRangeSchema, protocolChartMetricSchema } from "./charts.schema.js";
4
+ import { curatorNameSchema } from "./curators.schema.js";
4
5
  import { isFilterSet } from "./filters.js";
5
6
  import { encodeFlag, filterable } from "./filters.schema.js";
6
7
  import { liquidationPositionSchema } from "./liquidations.schema.js";
@@ -18,17 +19,39 @@ const analyticsPositionSortFieldSchema = z.enum([
18
19
  "totalValueUsd",
19
20
  "totalDebtUsd",
20
21
  "pnlUsd",
21
- "apy",
22
- "healthFactor",
23
- "leverage",
24
- "chainId",
25
- "name",
26
- "borrower"
22
+ "healthFactor"
27
23
  ]);
28
24
  /** {@link AnalyticsSortDirection} */
29
25
  const analyticsSortDirectionSchema = z.enum(["asc", "desc"]);
30
26
  const analyticsOwnerShape = { borrower: ZodAddress() };
31
27
  const addressSchema = z.custom((value) => typeof value === "string" && isAddress(value, { strict: false }));
28
+ const addressParamSchema = z.string().refine((value) => isAddress(value, { strict: false }), "invalid address");
29
+ /** {@link AnalyticsContractRef} */
30
+ const analyticsContractRefSchema = z.object({
31
+ chainId: chainIdSchema,
32
+ address: addressSchema
33
+ });
34
+ const contractFilterSchema = z.union([analyticsContractRefSchema, z.array(analyticsContractRefSchema).readonly()]);
35
+ const contractFilterParamSchema = z.string().regex(/^$|^\d+:\w+(,\d+:\w+)*$/);
36
+ /** Decode comma-separated choices, preserving scalar reads and empty lists. */
37
+ function decodeChoices(param, decode) {
38
+ const choices = param === "" ? [] : param.split(",").map(decode);
39
+ return choices.length === 1 ? choices[0] : choices;
40
+ }
41
+ function encodeChoices(choices, encode) {
42
+ if (choices === void 0) return;
43
+ return [].concat(choices).map(encode).join(",");
44
+ }
45
+ function decodeContractRef(param) {
46
+ const [chainId, address] = param.split(":");
47
+ return {
48
+ chainId: Number(chainId),
49
+ address
50
+ };
51
+ }
52
+ function encodeContractRef(ref) {
53
+ return `${ref.chainId}:${ref.address}`;
54
+ }
32
55
  /** {@link AnalyticsPosition} */
33
56
  const analyticsPositionSchema = z.discriminatedUnion("kind", [
34
57
  z.object({
@@ -47,6 +70,10 @@ const analyticsPositionSchema = z.discriminatedUnion("kind", [
47
70
  /** {@link AnalyticsPositionListOptions} */
48
71
  const analyticsPositionListOptionsSchema = z.object({
49
72
  borrower: addressSchema.optional(),
73
+ pool: contractFilterSchema.optional(),
74
+ creditManager: contractFilterSchema.optional(),
75
+ asset: contractFilterSchema.optional(),
76
+ curator: filterable(z.union([curatorNameSchema, z.array(curatorNameSchema).readonly()])).optional(),
50
77
  kind: filterable(positionKindSchema).optional(),
51
78
  isZeroDebt: filterable(z.boolean()).optional(),
52
79
  chainIds: z.array(chainIdSchema).optional(),
@@ -58,9 +85,16 @@ const analyticsPositionListOptionsSchema = z.object({
58
85
  });
59
86
  /**
60
87
  * {@link AnalyticsPositionListOptions} as URL query parameters.
88
+ * Pool, credit manager and asset choices are comma-separated `chainId:address`
89
+ * references; curator choices are comma-separated names. An empty string
90
+ * carries an empty list rather than an unrestricted condition.
61
91
  **/
62
92
  const analyticsPositionListQueryParamsSchema = z.object({
63
- borrower: z.string().refine((value) => isAddress(value, { strict: false }), "invalid address").optional(),
93
+ borrower: addressParamSchema.optional(),
94
+ pool: contractFilterParamSchema.optional(),
95
+ creditManager: contractFilterParamSchema.optional(),
96
+ asset: contractFilterParamSchema.optional(),
97
+ curator: z.string().optional(),
64
98
  kind: positionKindSchema.optional(),
65
99
  isZeroDebt: z.enum(["true", "false"]).optional(),
66
100
  chainIds: z.string().regex(/^$|^\d+(,\d+)*$/).optional(),
@@ -77,6 +111,10 @@ const analyticsPositionListQueryParamsSchema = z.object({
77
111
  const analyticsPositionListQuerySchema = z.codec(analyticsPositionListQueryParamsSchema, analyticsPositionListOptionsSchema, {
78
112
  decode: (params) => ({
79
113
  ...params.borrower === void 0 ? {} : { borrower: params.borrower },
114
+ ...params.pool === void 0 ? {} : { pool: decodeChoices(params.pool, decodeContractRef) },
115
+ ...params.creditManager === void 0 ? {} : { creditManager: decodeChoices(params.creditManager, decodeContractRef) },
116
+ ...params.asset === void 0 ? {} : { asset: decodeChoices(params.asset, decodeContractRef) },
117
+ ...params.curator === void 0 ? {} : { curator: decodeChoices(params.curator, (name) => name) },
80
118
  ...params.kind === void 0 ? {} : { kind: params.kind },
81
119
  ...params.isZeroDebt === void 0 ? {} : { isZeroDebt: params.isZeroDebt === "true" },
82
120
  ...params.chainIds === void 0 ? {} : { chainIds: params.chainIds === "" ? [] : params.chainIds.split(",").map(Number) },
@@ -88,6 +126,10 @@ const analyticsPositionListQuerySchema = z.codec(analyticsPositionListQueryParam
88
126
  }),
89
127
  encode: (options) => ({
90
128
  borrower: options.borrower,
129
+ pool: encodeChoices(options.pool, encodeContractRef),
130
+ creditManager: encodeChoices(options.creditManager, encodeContractRef),
131
+ asset: encodeChoices(options.asset, encodeContractRef),
132
+ curator: isFilterSet(options.curator) ? encodeChoices(options.curator, (name) => name) : void 0,
91
133
  kind: isFilterSet(options.kind) ? options.kind : void 0,
92
134
  isZeroDebt: encodeFlag(options.isZeroDebt),
93
135
  chainIds: options.chainIds?.join(","),
@@ -105,6 +147,24 @@ const analyticsPositionPageSchema = z.object({
105
147
  offset: z.number().int().nonnegative(),
106
148
  limit: z.number().int().positive().max(100)
107
149
  });
150
+ /** {@link AnalyticsContractOption} */
151
+ const analyticsContractOptionSchema = z.object({
152
+ chainId: chainIdSchema,
153
+ address: ZodAddress(),
154
+ name: z.string()
155
+ });
156
+ /** {@link AnalyticsPositionFilterOptions} */
157
+ const analyticsPositionFilterOptionsSchema = z.object({
158
+ pools: z.array(analyticsContractOptionSchema),
159
+ creditManagers: z.array(analyticsContractOptionSchema),
160
+ assets: z.array(tokenSchema),
161
+ curators: z.array(curatorNameSchema)
162
+ });
163
+ /** Chain scope of a filter-options read, shared by the client and backend. */
164
+ const analyticsPositionFilterOptionsQuerySchema = z.codec(analyticsPositionListQueryParamsSchema.pick({ chainIds: true }), analyticsPositionListOptionsSchema.pick({ chainIds: true }), {
165
+ decode: (params) => params.chainIds === void 0 ? {} : { chainIds: params.chainIds === "" ? [] : params.chainIds.split(",").map(Number) },
166
+ encode: (filter) => ({ chainIds: filter.chainIds?.join(",") })
167
+ });
108
168
  /**
109
169
  * {@link AnalyticsChartQuery}
110
170
  *
@@ -145,4 +205,4 @@ const analyticsChartQuerySchema = z.codec(analyticsChartQueryParamsSchema, analy
145
205
  })
146
206
  });
147
207
  //#endregion
148
- export { ANALYTICS_POSITIONS_DEFAULT_LIMIT, ANALYTICS_POSITIONS_MAX_LIMIT, analyticsChartQueryOptionsSchema, analyticsChartQueryParamsSchema, analyticsChartQuerySchema, analyticsPositionListOptionsSchema, analyticsPositionListQueryParamsSchema, analyticsPositionListQuerySchema, analyticsPositionPageSchema, analyticsPositionSchema, analyticsPositionSortFieldSchema, analyticsSortDirectionSchema };
208
+ export { ANALYTICS_POSITIONS_DEFAULT_LIMIT, ANALYTICS_POSITIONS_MAX_LIMIT, analyticsChartQueryOptionsSchema, analyticsChartQueryParamsSchema, analyticsChartQuerySchema, analyticsContractOptionSchema, analyticsContractRefSchema, analyticsPositionFilterOptionsQuerySchema, analyticsPositionFilterOptionsSchema, analyticsPositionListOptionsSchema, analyticsPositionListQueryParamsSchema, analyticsPositionListQuerySchema, analyticsPositionPageSchema, analyticsPositionSchema, analyticsPositionSortFieldSchema, analyticsSortDirectionSchema };
@@ -3,15 +3,15 @@ import { CHART_METRIC_UNITS, CHART_RANGES, CHART_UNAVAILABLE_CODES, POOL_OPPORTU
3
3
  import { backendPreferred, compareTagOf, offchainOnly, onchainOnly, tolerance } from "./compare.schema.js";
4
4
  import { amountSchema, assetTypeSchema, bpsSchema, chainIdSchema, leverageSchema, timestampSchema, tokenAmountSchema, tokenSchema, txCallSchema, underlyingTokenSchema } from "./primitives.schema.js";
5
5
  import { chartBundleSchemaFor, chartDenominationSchema, chartMetricSchema, chartQueryCodec, chartQueryParamsSchema, chartQuerySchema, chartRangeSchema, chartSeriesSchema, chartValueSchema, chartWindowSchema, poolOpportunityChartMetricSchema, poolPositionChartMetricSchema, protocolChartMetricSchema, strategyOpportunityChartMetricSchema, strategyPositionChartMetricSchema } from "./charts.schema.js";
6
+ import { curatorNameSchema, curatorSchema } from "./curators.schema.js";
6
7
  import { FILTER_ALL, isFilterSet } from "./filters.js";
7
8
  import { booleanParamSchema, encodeFlag, filterAllSchema, filterable } from "./filters.schema.js";
8
- import { curatorNameSchema, curatorSchema } from "./curators.schema.js";
9
9
  import { delayedReceivedAssetSchema, instantReceivedAssetSchema, liquidatableAccountFilterSchema, liquidatableAccountSchema, liquidationApprovalSchema, liquidationDetailsSchema, liquidationPositionSchema, receivedAssetSchema } from "./liquidations.schema.js";
10
10
  import { KYC_REGISTRATION_LINKS, RWA_FACTORY_SECURITIZE, RWA_FACTORY_TYPES, RWA_PROTOCOLS, SECURITIZE_REGISTER_VAULT_TYPES } from "./rwa.js";
11
11
  import { kycRequirementSchema, rwaProtocolSchema } from "./rwa.schema.js";
12
12
  import { apyBreakdownSchema, opportunityBaseSchema, opportunityDetailSchema, opportunityFilterQueryParamsSchema, opportunityFilterQuerySchema, opportunityFilterSchema, opportunityKeySchema, opportunityKindSchema, opportunitySchema, opportunityTotalsSchema, pointRewardsSchema, pointsProgramSchema, poolOpportunityDetailSchema, poolOpportunityKeySchema, poolOpportunitySchema, priceFeedDataSchema, priceFeedSummarySchema, quotaAssetSchema, rateCurvePointSchema, rateCurveSchema, rewardsSchema, strategyOpportunityDetailSchema, strategyOpportunityKeySchema, strategyOpportunitySchema, tokenRewardsSchema } from "./opportunities.schema.js";
13
13
  import { borrowRateBreakdownSchema, pnlBreakdownSchema, pointsProgramPnLSchema, pointsRewardsPnLSchema, poolPositionKeySchema, poolPositionSchema, positionCollateralSchema, positionFilterQueryParamsSchema, positionFilterQuerySchema, positionFilterSchema, positionKeySchema, positionKindSchema, positionSchema, positionTransactionKindSchema, positionTransactionSchema, positionsTotalsSchema, rewardsPnLSchema, strategyPositionKeySchema, strategyPositionSchema, tokenQuotaRateSchema, tokenRewardsPnLSchema } from "./positions.schema.js";
14
- import { ANALYTICS_POSITIONS_DEFAULT_LIMIT, ANALYTICS_POSITIONS_MAX_LIMIT, analyticsChartQueryOptionsSchema, analyticsChartQueryParamsSchema, analyticsChartQuerySchema, analyticsPositionListOptionsSchema, analyticsPositionListQueryParamsSchema, analyticsPositionListQuerySchema, analyticsPositionPageSchema, analyticsPositionSchema, analyticsPositionSortFieldSchema, analyticsSortDirectionSchema } from "./analytics.schema.js";
14
+ import { ANALYTICS_POSITIONS_DEFAULT_LIMIT, ANALYTICS_POSITIONS_MAX_LIMIT, analyticsChartQueryOptionsSchema, analyticsChartQueryParamsSchema, analyticsChartQuerySchema, analyticsContractOptionSchema, analyticsContractRefSchema, analyticsPositionFilterOptionsQuerySchema, analyticsPositionFilterOptionsSchema, analyticsPositionListOptionsSchema, analyticsPositionListQueryParamsSchema, analyticsPositionListQuerySchema, analyticsPositionPageSchema, analyticsPositionSchema, analyticsPositionSortFieldSchema, analyticsSortDirectionSchema } from "./analytics.schema.js";
15
15
  import "./curators.js";
16
16
  import "./delayed-intents.js";
17
17
  import { creditAccountFrozen, liquidatorNotEligible, notEmergencyLiquidator, partialLiquidationImpossible } from "./errors/liquidation-errors.js";
@@ -33,4 +33,4 @@ import { safeValue, sdkErr, sdkOk } from "./result.js";
33
33
  import "./rewards.js";
34
34
  import "./withdrawals.js";
35
35
  import { positionClaimableWithdrawalSchema, positionPendingWithdrawalSchema, positionWithdrawalsSchema, withdrawalOutputAmountSchema } from "./withdrawals.schema.js";
36
- export { ANALYTICS_POSITIONS_DEFAULT_LIMIT, ANALYTICS_POSITIONS_MAX_LIMIT, CHART_METRIC_UNITS, CHART_RANGES, CHART_UNAVAILABLE_CODES, FILTER_ALL, KYC_REGISTRATION_LINKS, POOL_OPPORTUNITY_CHART_METRICS, POOL_POSITION_CHART_METRICS, PROTOCOL_CHART_METRICS, RWA_FACTORY_SECURITIZE, RWA_FACTORY_TYPES, RWA_PROTOCOLS, SECURITIZE_REGISTER_VAULT_TYPES, STRATEGY_OPPORTUNITY_CHART_METRICS, STRATEGY_POSITION_CHART_METRICS, STRATEGY_POSITION_COLLATERAL_ERROR, accountNotMidasGreenlisted, amountSchema, analyticsChartQueryOptionsSchema, analyticsChartQueryParamsSchema, analyticsChartQuerySchema, analyticsPositionListOptionsSchema, analyticsPositionListQueryParamsSchema, analyticsPositionListQuerySchema, analyticsPositionPageSchema, analyticsPositionSchema, analyticsPositionSortFieldSchema, analyticsSortDirectionSchema, apyBreakdownSchema, asEstimated, assetTypeSchema, backendPreferred, booleanParamSchema, borrowRateBreakdownSchema, bpsSchema, chainFailedSchema, chainIdSchema, chainMetadataSchema, chainSucceededSchema, chartBundleSchemaFor, chartDenominationSchema, chartMetricSchema, chartQueryCodec, chartQueryParamsSchema, chartQuerySchema, chartRangeSchema, chartSeriesSchema, chartValueSchema, chartWindowSchema, compareTagOf, creditAccountFrozen, creditAccountNotEmpty, creditAccountNotFound, creditManagerPaused, curatorNameSchema, curatorSchema, dataSourceSchema, debtOutOfRange, delayedReceivedAssetSchema, encodeFlag, filterAllSchema, filterable, forbiddenToken, instantReceivedAssetSchema, insufficientAllowance, insufficientBalance, insufficientCollateral, insufficientPoolLiquidity, isFilterSet, kycRequirementSchema, leverageOutOfRange, leverageSchema, liquidatableAccountFilterSchema, liquidatableAccountSchema, liquidationApprovalSchema, liquidationDetailsSchema, liquidationPositionId, liquidationPositionSchema, liquidatorNotEligible, malformedTransaction, marketExpired, matchesLiquidatableAccountFilter, matchesOpportunityFilter, matchesPositionFilter, multipleDelayedWithdrawals, noDelayedRoute, noRecordedIntent, noStrategyTargetCollateral, notEmergencyLiquidator, noticeKindSchema, noticeSchema, offchainOnly, onchainOnly, opportunityBaseSchema, opportunityDetailSchema, opportunityFilterQueryParamsSchema, opportunityFilterQuerySchema, opportunityFilterSchema, opportunityId, opportunityKeySchema, opportunityKindSchema, opportunitySchema, opportunityTotalsSchema, partialLiquidationImpossible, pnlBreakdownSchema, pointRewardsSchema, pointsProgramPnLSchema, pointsProgramSchema, pointsRewardsPnLSchema, poolOpportunityChartMetricSchema, poolOpportunityDetailSchema, poolOpportunityId, poolOpportunityKeySchema, poolOpportunitySchema, poolPaused, poolPositionChartMetricSchema, poolPositionId, poolPositionKeySchema, poolPositionSchema, poolSunset, positionClaimableWithdrawalSchema, positionCollateralSchema, positionFilterQueryParamsSchema, positionFilterQuerySchema, positionFilterSchema, positionId, positionKeySchema, positionKindSchema, positionPendingWithdrawalSchema, positionSchema, positionTransactionKindSchema, positionTransactionSchema, positionWithdrawalsSchema, positionsTotalsSchema, priceFeedDataSchema, priceFeedSummarySchema, protocolChartMetricSchema, quotaAboveMax, quotaAssetSchema, quotaCountExceeded, quotaInactive, quotaLimitReached, quotaUnchanged, rateCurvePointSchema, rateCurveSchema, receivedAssetSchema, reservePriceLimited, responseMetadataSchema, responseSchema, rewardsPnLSchema, rewardsSchema, rwaOpenRequirementsNotMet, rwaProtocolSchema, safeValue, sdkErr, sdkOk, strategyOpportunityChartMetricSchema, strategyOpportunityDetailSchema, strategyOpportunityId, strategyOpportunityKeySchema, strategyOpportunitySchema, strategyPositionChartMetricSchema, strategyPositionId, strategyPositionKeySchema, strategyPositionSchema, timestampSchema, tokenAmountSchema, tokenQuotaRateSchema, tokenRewardsPnLSchema, tokenRewardsSchema, tokenSchema, tolerance, txCallSchema, underlyingTokenSchema, unexpectedFailure, unpriceableTokenError, unsupportedCollateralToken, unsupportedTokenPair, withdrawalInProgress, withdrawalOutputAmountSchema };
36
+ export { ANALYTICS_POSITIONS_DEFAULT_LIMIT, ANALYTICS_POSITIONS_MAX_LIMIT, CHART_METRIC_UNITS, CHART_RANGES, CHART_UNAVAILABLE_CODES, FILTER_ALL, KYC_REGISTRATION_LINKS, POOL_OPPORTUNITY_CHART_METRICS, POOL_POSITION_CHART_METRICS, PROTOCOL_CHART_METRICS, RWA_FACTORY_SECURITIZE, RWA_FACTORY_TYPES, RWA_PROTOCOLS, SECURITIZE_REGISTER_VAULT_TYPES, STRATEGY_OPPORTUNITY_CHART_METRICS, STRATEGY_POSITION_CHART_METRICS, STRATEGY_POSITION_COLLATERAL_ERROR, accountNotMidasGreenlisted, amountSchema, analyticsChartQueryOptionsSchema, analyticsChartQueryParamsSchema, analyticsChartQuerySchema, analyticsContractOptionSchema, analyticsContractRefSchema, analyticsPositionFilterOptionsQuerySchema, analyticsPositionFilterOptionsSchema, analyticsPositionListOptionsSchema, analyticsPositionListQueryParamsSchema, analyticsPositionListQuerySchema, analyticsPositionPageSchema, analyticsPositionSchema, analyticsPositionSortFieldSchema, analyticsSortDirectionSchema, apyBreakdownSchema, asEstimated, assetTypeSchema, backendPreferred, booleanParamSchema, borrowRateBreakdownSchema, bpsSchema, chainFailedSchema, chainIdSchema, chainMetadataSchema, chainSucceededSchema, chartBundleSchemaFor, chartDenominationSchema, chartMetricSchema, chartQueryCodec, chartQueryParamsSchema, chartQuerySchema, chartRangeSchema, chartSeriesSchema, chartValueSchema, chartWindowSchema, compareTagOf, creditAccountFrozen, creditAccountNotEmpty, creditAccountNotFound, creditManagerPaused, curatorNameSchema, curatorSchema, dataSourceSchema, debtOutOfRange, delayedReceivedAssetSchema, encodeFlag, filterAllSchema, filterable, forbiddenToken, instantReceivedAssetSchema, insufficientAllowance, insufficientBalance, insufficientCollateral, insufficientPoolLiquidity, isFilterSet, kycRequirementSchema, leverageOutOfRange, leverageSchema, liquidatableAccountFilterSchema, liquidatableAccountSchema, liquidationApprovalSchema, liquidationDetailsSchema, liquidationPositionId, liquidationPositionSchema, liquidatorNotEligible, malformedTransaction, marketExpired, matchesLiquidatableAccountFilter, matchesOpportunityFilter, matchesPositionFilter, multipleDelayedWithdrawals, noDelayedRoute, noRecordedIntent, noStrategyTargetCollateral, notEmergencyLiquidator, noticeKindSchema, noticeSchema, offchainOnly, onchainOnly, opportunityBaseSchema, opportunityDetailSchema, opportunityFilterQueryParamsSchema, opportunityFilterQuerySchema, opportunityFilterSchema, opportunityId, opportunityKeySchema, opportunityKindSchema, opportunitySchema, opportunityTotalsSchema, partialLiquidationImpossible, pnlBreakdownSchema, pointRewardsSchema, pointsProgramPnLSchema, pointsProgramSchema, pointsRewardsPnLSchema, poolOpportunityChartMetricSchema, poolOpportunityDetailSchema, poolOpportunityId, poolOpportunityKeySchema, poolOpportunitySchema, poolPaused, poolPositionChartMetricSchema, poolPositionId, poolPositionKeySchema, poolPositionSchema, poolSunset, positionClaimableWithdrawalSchema, positionCollateralSchema, positionFilterQueryParamsSchema, positionFilterQuerySchema, positionFilterSchema, positionId, positionKeySchema, positionKindSchema, positionPendingWithdrawalSchema, positionSchema, positionTransactionKindSchema, positionTransactionSchema, positionWithdrawalsSchema, positionsTotalsSchema, priceFeedDataSchema, priceFeedSummarySchema, protocolChartMetricSchema, quotaAboveMax, quotaAssetSchema, quotaCountExceeded, quotaInactive, quotaLimitReached, quotaUnchanged, rateCurvePointSchema, rateCurveSchema, receivedAssetSchema, reservePriceLimited, responseMetadataSchema, responseSchema, rewardsPnLSchema, rewardsSchema, rwaOpenRequirementsNotMet, rwaProtocolSchema, safeValue, sdkErr, sdkOk, strategyOpportunityChartMetricSchema, strategyOpportunityDetailSchema, strategyOpportunityId, strategyOpportunityKeySchema, strategyOpportunitySchema, strategyPositionChartMetricSchema, strategyPositionId, strategyPositionKeySchema, strategyPositionSchema, timestampSchema, tokenAmountSchema, tokenQuotaRateSchema, tokenRewardsPnLSchema, tokenRewardsSchema, tokenSchema, tolerance, txCallSchema, underlyingTokenSchema, unexpectedFailure, unpriceableTokenError, unsupportedCollateralToken, unsupportedTokenPair, withdrawalInProgress, withdrawalOutputAmountSchema };
@@ -1,7 +1,7 @@
1
1
  import { ZodAddress } from "../onchain/utils/zod.js";
2
2
  import { assetTypeSchema, bpsSchema, chainIdSchema, timestampSchema, tokenAmountSchema, tokenSchema, txCallSchema, underlyingTokenSchema } from "./primitives.schema.js";
3
- import { filterable } from "./filters.schema.js";
4
3
  import { curatorSchema } from "./curators.schema.js";
4
+ import { filterable } from "./filters.schema.js";
5
5
  import { z } from "zod/v4";
6
6
  //#region src/model/liquidations.schema.ts
7
7
  /**
@@ -35,7 +35,8 @@ const liquidatableAccountSchema = z.object({
35
35
  estimatedProfit: tokenAmountSchema,
36
36
  isDelayed: z.boolean(),
37
37
  paused: z.boolean(),
38
- rwa: z.boolean()
38
+ rwa: z.boolean(),
39
+ isPartiallyLiquidatable: z.boolean()
39
40
  });
40
41
  /**
41
42
  * {@link InstantReceivedAsset}
@@ -86,7 +87,7 @@ const liquidationDetailsSchema = z.object({
86
87
  kycProtocol: z.string().optional(),
87
88
  kycToken: tokenSchema.optional(),
88
89
  approve: liquidationApprovalSchema.optional(),
89
- isPartiallyLiquidatable: z.boolean().optional()
90
+ isPartial: z.boolean()
90
91
  });
91
92
  //#endregion
92
93
  export { delayedReceivedAssetSchema, instantReceivedAssetSchema, liquidatableAccountFilterSchema, liquidatableAccountSchema, liquidationApprovalSchema, liquidationDetailsSchema, liquidationPositionSchema, receivedAssetSchema };
@@ -1,9 +1,9 @@
1
1
  import { ZodAddress } from "../onchain/utils/zod.js";
2
2
  import { offchainOnly, onchainOnly, tolerance } from "./compare.schema.js";
3
3
  import { amountSchema, assetTypeSchema, bpsSchema, chainIdSchema, leverageSchema, timestampSchema, tokenSchema, underlyingTokenSchema } from "./primitives.schema.js";
4
+ import { curatorSchema } from "./curators.schema.js";
4
5
  import { isFilterSet } from "./filters.js";
5
6
  import { booleanParamSchema, encodeFlag, filterable } from "./filters.schema.js";
6
- import { curatorSchema } from "./curators.schema.js";
7
7
  import { kycRequirementSchema } from "./rwa.schema.js";
8
8
  import { z } from "zod/v4";
9
9
  //#region src/model/opportunities.schema.ts
@@ -1,6 +1,7 @@
1
1
  import { ZodAddress, ZodBigInt, ZodHex } from "../onchain/utils/zod.js";
2
2
  import { backendPreferred, offchainOnly, onchainOnly, tolerance } from "./compare.schema.js";
3
3
  import { assetTypeSchema, bpsSchema, chainIdSchema, leverageSchema, timestampSchema, tokenAmountSchema, tokenSchema, underlyingTokenSchema } from "./primitives.schema.js";
4
+ import { curatorSchema } from "./curators.schema.js";
4
5
  import { isFilterSet } from "./filters.js";
5
6
  import { booleanParamSchema, encodeFlag, filterable } from "./filters.schema.js";
6
7
  import { delayedReceivedAssetSchema, liquidationPositionSchema } from "./liquidations.schema.js";
@@ -66,6 +67,7 @@ const positionCollateralSchema = z.object({
66
67
  const poolPositionSchema = z.object({
67
68
  kind: z.literal("pool"),
68
69
  name: z.string(),
70
+ curator: curatorSchema,
69
71
  chainId: chainIdSchema,
70
72
  pool: ZodAddress(),
71
73
  underlyingToken: underlyingTokenSchema,
@@ -96,6 +98,7 @@ const borrowRateBreakdownSchema = z.object({
96
98
  const strategyPositionSchema = z.object({
97
99
  kind: z.literal("strategy"),
98
100
  name: backendPreferred(z.string()),
101
+ curator: curatorSchema,
99
102
  chainId: chainIdSchema,
100
103
  creditManager: ZodAddress(),
101
104
  creditAccount: ZodAddress(),
@@ -1,4 +1,4 @@
1
- import { analyticsPositionListQuerySchema, analyticsPositionPageSchema } from "../../model/analytics.schema.js";
1
+ import { analyticsPositionFilterOptionsQuerySchema, analyticsPositionFilterOptionsSchema, analyticsPositionListQuerySchema, analyticsPositionPageSchema } from "../../model/analytics.schema.js";
2
2
  import { AbstractOffchainNamespace } from "../AbstractOffchainNamespace.js";
3
3
  import { z } from "zod/v4";
4
4
  //#region src/offchain/analytics/OffchainAnalyticsPositions.ts
@@ -7,6 +7,14 @@ var OffchainAnalyticsPositions = class extends AbstractOffchainNamespace {
7
7
  constructor(options) {
8
8
  super("OffchainAnalyticsPositions", options);
9
9
  }
10
+ /** {@inheritDoc IOffchainAnalyticsPositions.filterOptions} */
11
+ async filterOptions(filter) {
12
+ return this.get({
13
+ path: "/v2/analytics/positions/filter-options",
14
+ query: z.encode(analyticsPositionFilterOptionsQuerySchema, { chainIds: this.scopedChainIds(filter) }),
15
+ schema: analyticsPositionFilterOptionsSchema
16
+ });
17
+ }
10
18
  /** {@inheritDoc IOffchainAnalyticsPositions.list} */
11
19
  async list(options) {
12
20
  return this.get({
@@ -1,3 +1,5 @@
1
+ import { iBaseRewardPoolAbi } from "../../abi/iBaseRewardPool.js";
2
+ import { ierc4626AdapterAbi } from "../../abi/ierc4626Adapter.js";
1
3
  import { AP_REWARDS_COMPRESSOR } from "../constants/address-provider.js";
2
4
  import { ADDRESS_0X0 } from "../constants/addresses.js";
3
5
  import { MAX_UINT256 } from "../constants/math.js";
@@ -8,8 +10,6 @@ import "../base/index.js";
8
10
  import { AccountBotsService } from "./bots/AccountBotsService.js";
9
11
  import "./bots/index.js";
10
12
  import { rewardsCompressorAbi } from "../../abi/compressors/rewardsCompressor.js";
11
- import { iBaseRewardPoolAbi } from "../../abi/iBaseRewardPool.js";
12
- import { ierc4626AdapterAbi } from "../../abi/ierc4626Adapter.js";
13
13
  import { expectedBalanceDeltas } from "../market/credit/expectedBalanceDeltas.js";
14
14
  import "../market/index.js";
15
15
  import { CreditAccountCompressor } from "./credit-account-compressor/CreditAccountCompressor.js";