@emberai/onchain-actions-registry 2.0.0 → 3.0.0-alpha.1

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/index.cjs CHANGED
@@ -79,7 +79,6 @@ __export(index_exports, {
79
79
  SwapTokensRequestSchema: () => SwapTokensRequestSchema,
80
80
  SwapTokensResponseSchema: () => SwapTokensResponseSchema,
81
81
  TokenIdentifierSchema: () => TokenIdentifierSchema,
82
- TokenPositionSchema: () => TokenPositionSchema,
83
82
  TokenSchema: () => TokenSchema,
84
83
  TransactionPlanErrorSchema: () => TransactionPlanErrorSchema,
85
84
  TransactionPlanSchema: () => TransactionPlanSchema,
@@ -93,40 +92,357 @@ __export(index_exports, {
93
92
  });
94
93
  module.exports = __toCommonJS(index_exports);
95
94
 
96
- // src/registry.ts
97
- var PublicEmberPluginRegistry = class {
98
- plugins = [];
99
- deferredPlugins = [];
100
- /**
101
- * Register a new Ember plugin.
102
- * @param plugin The plugin to register.
103
- */
104
- registerPlugin(plugin) {
105
- this.plugins.push(plugin);
106
- }
107
- /**
108
- * Register a new deferred Ember plugin.
109
- * @param pluginPromise The promise resolving to the plugin to register.
110
- */
111
- registerDeferredPlugin(pluginPromise) {
112
- this.deferredPlugins.push(pluginPromise);
113
- }
114
- /**
115
- * Iterator for the registered Ember plugins.
116
- */
117
- async *getPlugins() {
118
- yield* this.plugins;
119
- for (const pluginPromise of this.deferredPlugins) {
120
- const plugin = await pluginPromise;
121
- this.registerPlugin(plugin);
122
- yield plugin;
123
- }
124
- this.deferredPlugins = [];
125
- }
126
- get emberPlugins() {
127
- return this.plugins;
128
- }
95
+ // src/aave-lending-plugin/adapter.ts
96
+ var import_contract_helpers2 = require("@aave/contract-helpers");
97
+ var import_ethers3 = require("ethers");
98
+
99
+ // src/core/schemas/core.ts
100
+ var import_zod2 = require("zod");
101
+
102
+ // src/core/schemas/enums.ts
103
+ var import_zod = require("zod");
104
+ var ChainTypeSchema = import_zod.z.enum(["UNSPECIFIED", "EVM", "SOLANA", "COSMOS"]);
105
+ var TransactionTypes = {
106
+ TRANSACTION_TYPE_UNSPECIFIED: "TRANSACTION_TYPE_UNSPECIFIED",
107
+ EVM_TX: "EVM_TX",
108
+ SOLANA_TX: "SOLANA_TX"
129
109
  };
110
+ var TransactionTypeSchema = import_zod.z.enum(
111
+ Object.values(TransactionTypes)
112
+ );
113
+
114
+ // src/core/schemas/core.ts
115
+ var TokenIdentifierSchema = import_zod2.z.object({
116
+ chainId: import_zod2.z.string(),
117
+ address: import_zod2.z.string()
118
+ });
119
+ var TokenSchema = import_zod2.z.object({
120
+ tokenUid: TokenIdentifierSchema,
121
+ name: import_zod2.z.string(),
122
+ symbol: import_zod2.z.string(),
123
+ isNative: import_zod2.z.boolean(),
124
+ decimals: import_zod2.z.number().int(),
125
+ iconUri: import_zod2.z.string().nullish(),
126
+ isVetted: import_zod2.z.boolean()
127
+ });
128
+ var ChainSchema = import_zod2.z.object({
129
+ chainId: import_zod2.z.string(),
130
+ type: ChainTypeSchema,
131
+ iconUri: import_zod2.z.string(),
132
+ nativeToken: TokenSchema,
133
+ httpRpcUrl: import_zod2.z.string(),
134
+ name: import_zod2.z.string(),
135
+ blockExplorerUrls: import_zod2.z.array(import_zod2.z.string())
136
+ });
137
+ var FeeBreakdownSchema = import_zod2.z.object({
138
+ serviceFee: import_zod2.z.string(),
139
+ slippageCost: import_zod2.z.string(),
140
+ total: import_zod2.z.string(),
141
+ feeDenomination: import_zod2.z.string()
142
+ });
143
+ var TransactionPlanSchema = import_zod2.z.object({
144
+ type: TransactionTypeSchema,
145
+ to: import_zod2.z.string(),
146
+ data: import_zod2.z.string(),
147
+ value: import_zod2.z.string(),
148
+ chainId: import_zod2.z.string()
149
+ });
150
+ var TransactionPlanErrorSchema = import_zod2.z.object({
151
+ code: import_zod2.z.string(),
152
+ message: import_zod2.z.string(),
153
+ details: import_zod2.z.record(import_zod2.z.string(), import_zod2.z.string())
154
+ });
155
+ var ProviderTrackingInfoSchema = import_zod2.z.object({
156
+ requestId: import_zod2.z.string(),
157
+ providerName: import_zod2.z.string(),
158
+ explorerUrl: import_zod2.z.string()
159
+ });
160
+ var SwapEstimationSchema = import_zod2.z.object({
161
+ effectivePrice: import_zod2.z.string(),
162
+ timeEstimate: import_zod2.z.string(),
163
+ expiration: import_zod2.z.string()
164
+ });
165
+ var ProviderTrackingStatusSchema = import_zod2.z.object({
166
+ requestId: import_zod2.z.string(),
167
+ transactionId: import_zod2.z.string(),
168
+ providerName: import_zod2.z.string(),
169
+ explorerUrl: import_zod2.z.string(),
170
+ status: import_zod2.z.string()
171
+ });
172
+
173
+ // src/core/schemas/lending.ts
174
+ var import_zod3 = require("zod");
175
+ var BorrowTokensRequestSchema = import_zod3.z.object({
176
+ borrowToken: TokenSchema,
177
+ amount: import_zod3.z.bigint(),
178
+ walletAddress: import_zod3.z.string()
179
+ });
180
+ var BorrowTokensResponseSchema = import_zod3.z.object({
181
+ currentBorrowApy: import_zod3.z.string(),
182
+ liquidationThreshold: import_zod3.z.string(),
183
+ feeBreakdown: FeeBreakdownSchema.optional(),
184
+ transactions: import_zod3.z.array(TransactionPlanSchema)
185
+ });
186
+ var RepayTokensRequestSchema = import_zod3.z.object({
187
+ repayToken: TokenSchema,
188
+ amount: import_zod3.z.bigint(),
189
+ walletAddress: import_zod3.z.string()
190
+ });
191
+ var RepayTokensResponseSchema = import_zod3.z.object({
192
+ feeBreakdown: FeeBreakdownSchema.optional(),
193
+ transactions: import_zod3.z.array(TransactionPlanSchema)
194
+ });
195
+ var SupplyTokensRequestSchema = import_zod3.z.object({
196
+ supplyToken: TokenSchema,
197
+ amount: import_zod3.z.bigint(),
198
+ walletAddress: import_zod3.z.string()
199
+ });
200
+ var SupplyTokensResponseSchema = import_zod3.z.object({
201
+ feeBreakdown: FeeBreakdownSchema.optional(),
202
+ transactions: import_zod3.z.array(TransactionPlanSchema)
203
+ });
204
+ var WithdrawTokensRequestSchema = import_zod3.z.object({
205
+ tokenToWithdraw: TokenSchema,
206
+ amount: import_zod3.z.bigint(),
207
+ walletAddress: import_zod3.z.string()
208
+ });
209
+ var WithdrawTokensResponseSchema = import_zod3.z.object({
210
+ feeBreakdown: FeeBreakdownSchema.optional(),
211
+ transactions: import_zod3.z.array(TransactionPlanSchema)
212
+ });
213
+ var GetWalletLendingPositionsRequestSchema = import_zod3.z.object({
214
+ walletAddress: import_zod3.z.string()
215
+ });
216
+ var LendTokenDetailSchema = import_zod3.z.object({
217
+ tokenUid: TokenIdentifierSchema,
218
+ underlyingBalance: import_zod3.z.string(),
219
+ underlyingBalanceUsd: import_zod3.z.string(),
220
+ variableBorrows: import_zod3.z.string(),
221
+ variableBorrowsUsd: import_zod3.z.string(),
222
+ totalBorrows: import_zod3.z.string(),
223
+ totalBorrowsUsd: import_zod3.z.string()
224
+ });
225
+ var GetWalletLendingPositionsResponseSchema = import_zod3.z.object({
226
+ userReserves: import_zod3.z.array(LendTokenDetailSchema),
227
+ totalLiquidityUsd: import_zod3.z.string(),
228
+ totalCollateralUsd: import_zod3.z.string(),
229
+ totalBorrowsUsd: import_zod3.z.string(),
230
+ netWorthUsd: import_zod3.z.string(),
231
+ availableBorrowsUsd: import_zod3.z.string(),
232
+ currentLoanToValue: import_zod3.z.string(),
233
+ currentLiquidationThreshold: import_zod3.z.string(),
234
+ healthFactor: import_zod3.z.string()
235
+ });
236
+
237
+ // src/core/schemas/liquidity.ts
238
+ var import_zod4 = require("zod");
239
+ var LimitedLiquidityProvisionRangeSchema = import_zod4.z.object({
240
+ minPrice: import_zod4.z.string(),
241
+ maxPrice: import_zod4.z.string()
242
+ });
243
+ var LiquidityProvisionRangeSchema = import_zod4.z.discriminatedUnion("type", [
244
+ import_zod4.z.object({
245
+ type: import_zod4.z.literal("full")
246
+ }),
247
+ import_zod4.z.object({
248
+ type: import_zod4.z.literal("limited"),
249
+ minPrice: import_zod4.z.string(),
250
+ maxPrice: import_zod4.z.string()
251
+ })
252
+ ]);
253
+ var LiquidityPositionRangeSchema = import_zod4.z.object({
254
+ fromPrice: import_zod4.z.string(),
255
+ toPrice: import_zod4.z.string()
256
+ });
257
+ var LiquiditySuppliedTokenSchema = import_zod4.z.object({
258
+ tokenUid: TokenIdentifierSchema,
259
+ suppliedAmount: import_zod4.z.string(),
260
+ owedTokens: import_zod4.z.string()
261
+ });
262
+ var LiquidityPositionSchema = import_zod4.z.object({
263
+ poolIdentifier: TokenIdentifierSchema,
264
+ operator: import_zod4.z.string(),
265
+ suppliedTokens: import_zod4.z.array(LiquiditySuppliedTokenSchema),
266
+ price: import_zod4.z.string(),
267
+ providerId: import_zod4.z.string(),
268
+ positionRange: LiquidityPositionRangeSchema.optional()
269
+ });
270
+ var LiquidityPoolTokens = import_zod4.z.object({
271
+ tokenUid: TokenIdentifierSchema
272
+ });
273
+ var LiquidityPoolSchema = import_zod4.z.object({
274
+ identifier: TokenIdentifierSchema,
275
+ tokens: import_zod4.z.array(LiquidityPoolTokens),
276
+ price: import_zod4.z.string(),
277
+ providerId: import_zod4.z.string()
278
+ });
279
+ var LiquidityPayTokensSchema = import_zod4.z.object({
280
+ token: TokenSchema,
281
+ supplyAmount: import_zod4.z.bigint()
282
+ });
283
+ var SupplyLiquidityRequestSchema = import_zod4.z.object({
284
+ walletAddress: import_zod4.z.string(),
285
+ poolToken: TokenSchema,
286
+ payTokens: import_zod4.z.array(LiquidityPayTokensSchema),
287
+ range: LiquidityProvisionRangeSchema.optional()
288
+ });
289
+ var SupplyLiquidityResponseSchema = import_zod4.z.object({
290
+ transactions: import_zod4.z.array(TransactionPlanSchema),
291
+ poolIdentifier: TokenIdentifierSchema
292
+ });
293
+ var WithdrawLiquidityRequestSchema = import_zod4.z.object({
294
+ poolToken: TokenSchema,
295
+ walletAddress: import_zod4.z.string()
296
+ });
297
+ var WithdrawLiquidityResponseSchema = import_zod4.z.object({
298
+ transactions: import_zod4.z.array(TransactionPlanSchema),
299
+ chainId: import_zod4.z.string()
300
+ });
301
+ var GetWalletLiquidityPositionsRequestSchema = import_zod4.z.object({
302
+ walletAddress: import_zod4.z.string()
303
+ });
304
+ var GetWalletLiquidityPositionsResponseSchema = import_zod4.z.object({
305
+ positions: import_zod4.z.array(LiquidityPositionSchema)
306
+ });
307
+ var GetLiquidityPoolsResponseSchema = import_zod4.z.object({
308
+ liquidityPools: import_zod4.z.array(LiquidityPoolSchema)
309
+ });
310
+
311
+ // src/core/schemas/perpetuals.ts
312
+ var import_orders = require("@gmx-io/sdk/types/orders");
313
+ var import_zod5 = require("zod");
314
+ var DecreasePositionSwapTypeSchema = import_zod5.z.nativeEnum(import_orders.DecreasePositionSwapType);
315
+ var PositionSideSchema = import_zod5.z.union([import_zod5.z.literal("long"), import_zod5.z.literal("short")]);
316
+ var PositionSchema = import_zod5.z.object({
317
+ chainId: import_zod5.z.string(),
318
+ key: import_zod5.z.string(),
319
+ contractKey: import_zod5.z.string(),
320
+ account: import_zod5.z.string(),
321
+ marketAddress: import_zod5.z.string(),
322
+ collateralTokenAddress: import_zod5.z.string(),
323
+ sizeInUsd: import_zod5.z.string(),
324
+ sizeInTokens: import_zod5.z.string(),
325
+ collateralAmount: import_zod5.z.string(),
326
+ pendingBorrowingFeesUsd: import_zod5.z.string(),
327
+ increasedAtTime: import_zod5.z.string(),
328
+ decreasedAtTime: import_zod5.z.string(),
329
+ positionSide: PositionSideSchema,
330
+ isLong: import_zod5.z.boolean(),
331
+ fundingFeeAmount: import_zod5.z.string(),
332
+ claimableLongTokenAmount: import_zod5.z.string(),
333
+ claimableShortTokenAmount: import_zod5.z.string(),
334
+ isOpening: import_zod5.z.boolean().optional(),
335
+ pnl: import_zod5.z.string(),
336
+ positionFeeAmount: import_zod5.z.string(),
337
+ traderDiscountAmount: import_zod5.z.string(),
338
+ uiFeeAmount: import_zod5.z.string(),
339
+ data: import_zod5.z.string().optional()
340
+ });
341
+ var PositionsDataSchema = import_zod5.z.array(PositionSchema);
342
+ var OrderSchema = import_zod5.z.object({
343
+ chainId: import_zod5.z.string(),
344
+ key: import_zod5.z.string(),
345
+ account: import_zod5.z.string(),
346
+ callbackContract: import_zod5.z.string(),
347
+ initialCollateralTokenAddress: import_zod5.z.string(),
348
+ marketAddress: import_zod5.z.string(),
349
+ decreasePositionSwapType: DecreasePositionSwapTypeSchema,
350
+ receiver: import_zod5.z.string(),
351
+ swapPath: import_zod5.z.array(import_zod5.z.string()),
352
+ contractAcceptablePrice: import_zod5.z.string(),
353
+ contractTriggerPrice: import_zod5.z.string(),
354
+ callbackGasLimit: import_zod5.z.string(),
355
+ executionFee: import_zod5.z.string(),
356
+ initialCollateralDeltaAmount: import_zod5.z.string(),
357
+ minOutputAmount: import_zod5.z.string(),
358
+ sizeDeltaUsd: import_zod5.z.string(),
359
+ updatedAtTime: import_zod5.z.string(),
360
+ isFrozen: import_zod5.z.boolean(),
361
+ positionSide: PositionSideSchema,
362
+ orderType: import_zod5.z.nativeEnum(import_orders.OrderType),
363
+ shouldUnwrapNativeToken: import_zod5.z.boolean(),
364
+ autoCancel: import_zod5.z.boolean(),
365
+ data: import_zod5.z.string().optional(),
366
+ uiFeeReceiver: import_zod5.z.string(),
367
+ validFromTime: import_zod5.z.string(),
368
+ title: import_zod5.z.string().optional()
369
+ });
370
+ var OrdersDataSchema = import_zod5.z.array(OrderSchema);
371
+ var CreatePerpetualsPositionRequestSchema = import_zod5.z.object({
372
+ amount: import_zod5.z.bigint(),
373
+ walletAddress: import_zod5.z.string(),
374
+ chainId: import_zod5.z.string(),
375
+ marketAddress: import_zod5.z.string(),
376
+ payTokenAddress: import_zod5.z.string(),
377
+ collateralTokenAddress: import_zod5.z.string(),
378
+ referralCode: import_zod5.z.string().optional(),
379
+ limitPrice: import_zod5.z.string().optional(),
380
+ leverage: import_zod5.z.string()
381
+ });
382
+ var CreatePerpetualsPositionResponseSchema = import_zod5.z.object({
383
+ transactions: import_zod5.z.array(TransactionPlanSchema)
384
+ });
385
+ var GetPerpetualsMarketsPositionsRequestSchema = import_zod5.z.object({
386
+ walletAddress: import_zod5.z.string().describe("User's wallet address")
387
+ });
388
+ var GetPerpetualsMarketsPositionsResponseSchema = import_zod5.z.object({
389
+ positions: PositionsDataSchema
390
+ });
391
+ var GetPerpetualsMarketsOrdersRequestSchema = import_zod5.z.object({
392
+ walletAddress: import_zod5.z.string().describe("User's wallet address")
393
+ });
394
+ var GetPerpetualsMarketsOrdersResponseSchema = import_zod5.z.object({
395
+ orders: OrdersDataSchema
396
+ });
397
+ var ClosePerpetualsOrdersRequestSchema = import_zod5.z.object({
398
+ walletAddress: import_zod5.z.string().describe("User's wallet address"),
399
+ key: import_zod5.z.string()
400
+ });
401
+ var ClosePerpetualsOrdersResponseSchema = import_zod5.z.object({
402
+ transactions: import_zod5.z.array(TransactionPlanSchema)
403
+ });
404
+ var GetPerpetualsMarketsRequestSchema = import_zod5.z.object({
405
+ chainIds: import_zod5.z.array(import_zod5.z.string())
406
+ });
407
+ var PerpetualMarketSchema = import_zod5.z.object({
408
+ marketToken: TokenIdentifierSchema,
409
+ indexToken: TokenIdentifierSchema,
410
+ longToken: TokenIdentifierSchema,
411
+ shortToken: TokenIdentifierSchema,
412
+ longFundingFee: import_zod5.z.string(),
413
+ shortFundingFee: import_zod5.z.string(),
414
+ longBorrowingFee: import_zod5.z.string(),
415
+ shortBorrowingFee: import_zod5.z.string(),
416
+ chainId: import_zod5.z.string(),
417
+ name: import_zod5.z.string()
418
+ });
419
+ var GetPerpetualsMarketsResponseSchema = import_zod5.z.object({
420
+ markets: import_zod5.z.array(PerpetualMarketSchema)
421
+ });
422
+
423
+ // src/core/schemas/swap.ts
424
+ var import_zod6 = require("zod");
425
+ var SwapTokensRequestSchema = import_zod6.z.object({
426
+ fromToken: TokenSchema,
427
+ toToken: TokenSchema,
428
+ amount: import_zod6.z.bigint(),
429
+ limitPrice: import_zod6.z.string().optional(),
430
+ slippageTolerance: import_zod6.z.string().optional(),
431
+ expiration: import_zod6.z.string().optional(),
432
+ recipient: import_zod6.z.string()
433
+ });
434
+ var SwapTokensResponseSchema = import_zod6.z.object({
435
+ fromToken: TokenSchema,
436
+ toToken: TokenSchema,
437
+ exactFromAmount: import_zod6.z.string(),
438
+ displayFromAmount: import_zod6.z.string(),
439
+ exactToAmount: import_zod6.z.string(),
440
+ displayToAmount: import_zod6.z.string(),
441
+ transactions: import_zod6.z.array(TransactionPlanSchema),
442
+ feeBreakdown: FeeBreakdownSchema.optional(),
443
+ estimation: SwapEstimationSchema.optional(),
444
+ providerTracking: ProviderTrackingInfoSchema.optional()
445
+ });
130
446
 
131
447
  // src/aave-lending-plugin/chain.ts
132
448
  var import_ethers = require("ethers");
@@ -149,6 +465,23 @@ var Chain = class {
149
465
  }
150
466
  };
151
467
 
468
+ // src/aave-lending-plugin/dataProvider.ts
469
+ var import_contract_helpers = require("@aave/contract-helpers");
470
+ var UI_POOL_DATA_PROVIDER_INTERFACE_PER_CHAIN = {
471
+ 11155111: import_contract_helpers.LegacyUiPoolDataProvider,
472
+ 42161: import_contract_helpers.UiPoolDataProvider,
473
+ 1: import_contract_helpers.UiPoolDataProvider
474
+ };
475
+ var getUiPoolDataProviderImpl = (chainId) => {
476
+ const res = UI_POOL_DATA_PROVIDER_INTERFACE_PER_CHAIN[chainId];
477
+ if (!res) {
478
+ throw new Error(
479
+ "UI_POOL_DATA_PROVIDER_INTERFACE_PER_CHAIN does not contain this chain ID. Edit providers/aave/dataProvider.ts."
480
+ );
481
+ }
482
+ return res;
483
+ };
484
+
152
485
  // src/aave-lending-plugin/market.ts
153
486
  var markets = __toESM(require("@bgd-labs/aave-address-book"), 1);
154
487
  var marketMap = {
@@ -167,77 +500,11 @@ var getMarket = (chainId) => {
167
500
  `AAVE: no market found for chain ID ${chainId}: modify providers/aave/market.ts`
168
501
  );
169
502
  }
170
- const market = markets[marketKey];
171
- if (!market) {
172
- throw new Error(`No such market: ${marketKey}`);
173
- }
174
- return market;
175
- };
176
-
177
- // src/aave-lending-plugin/userSummary.ts
178
- var import_math_utils = require("@aave/math-utils");
179
- function formatNumeric(value) {
180
- const num = parseFloat(value);
181
- if (Number.isInteger(num)) return num.toString();
182
- return parseFloat(num.toFixed(2)).toString();
183
- }
184
- var UserSummary = class {
185
- reserves;
186
- /**
187
- * @param userReservesResponse - The response from getUserReservesHumanized.
188
- * @param reservesResponse - The response from getReservesHumanized.
189
- */
190
- constructor(userReservesResponse, reservesResponse) {
191
- const currentTimestamp = Date.now() / 1e3;
192
- const formattedReserves = (0, import_math_utils.formatReserves)({
193
- reserves: reservesResponse.reservesData,
194
- currentTimestamp,
195
- marketReferenceCurrencyDecimals: reservesResponse.baseCurrencyData.marketReferenceCurrencyDecimals,
196
- marketReferencePriceInUsd: reservesResponse.baseCurrencyData.marketReferenceCurrencyPriceInUsd
197
- });
198
- this.reserves = (0, import_math_utils.formatUserSummary)({
199
- currentTimestamp,
200
- marketReferencePriceInUsd: reservesResponse.baseCurrencyData.marketReferenceCurrencyPriceInUsd,
201
- marketReferenceCurrencyDecimals: reservesResponse.baseCurrencyData.marketReferenceCurrencyDecimals,
202
- userReserves: userReservesResponse.userReserves,
203
- formattedReserves,
204
- userEmodeCategoryId: userReservesResponse.userEmodeCategoryId
205
- });
206
- }
207
- toHumanReadable() {
208
- let output = "User Positions:\n";
209
- output += `Total Liquidity (USD): ${formatNumeric(this.reserves.totalLiquidityUSD)}
210
- `;
211
- output += `Total Collateral (USD): ${formatNumeric(this.reserves.totalCollateralUSD)}
212
- `;
213
- output += `Total Borrows (USD): ${formatNumeric(this.reserves.totalBorrowsUSD)}
214
- `;
215
- output += `Net Worth (USD): ${formatNumeric(this.reserves.netWorthUSD)}
216
- `;
217
- output += `Health Factor: ${formatNumeric(this.reserves.healthFactor)}
218
-
219
- `;
220
- output += "Deposits:\n";
221
- for (const entry of this.reserves.userReservesData) {
222
- if (parseFloat(entry.scaledATokenBalance) > 0) {
223
- const underlying = entry.underlyingBalance;
224
- const underlyingUSD = entry.underlyingBalanceUSD ? formatNumeric(entry.underlyingBalanceUSD) : "N/A";
225
- output += `- ${entry.reserve.symbol}: ${underlying} (USD: ${underlyingUSD})
226
- `;
227
- }
228
- }
229
- output += "\nLoans:\n";
230
- for (const entry of this.reserves.userReservesData) {
231
- const borrow = entry.totalBorrows || "0";
232
- if (parseFloat(borrow) > 0) {
233
- const totalBorrows = entry.totalBorrows;
234
- const totalBorrowsUSD = entry.totalBorrowsUSD ? formatNumeric(entry.totalBorrowsUSD) : "N/A";
235
- output += `- ${entry.reserve.symbol}: ${totalBorrows} (USD: ${totalBorrowsUSD})
236
- `;
237
- }
238
- }
239
- return output;
240
- }
503
+ const market = markets[marketKey];
504
+ if (!market) {
505
+ throw new Error(`No such market: ${marketKey}`);
506
+ }
507
+ return market;
241
508
  };
242
509
 
243
510
  // src/aave-lending-plugin/populateTransaction.ts
@@ -608,407 +875,99 @@ function getAaveError(code) {
608
875
  return null;
609
876
  }
610
877
 
611
- // src/aave-lending-plugin/populateTransaction.ts
612
- async function populateTransaction(tx) {
613
- let txData = null;
614
- try {
615
- txData = await tx.tx();
616
- } catch (e) {
617
- const errorCode = (e.reason || "").split(" ").pop();
618
- const aaveError = getAaveError(errorCode);
619
- if (aaveError !== null) {
620
- throw aaveError;
621
- } else {
622
- throw e;
623
- }
624
- }
625
- return {
626
- value: import_ethers2.ethers.BigNumber.from(txData.value || 0),
627
- from: txData.from,
628
- to: txData.to,
629
- data: txData.data
630
- };
631
- }
632
-
633
- // src/aave-lending-plugin/dataProvider.ts
634
- var import_ethers3 = require("ethers");
635
- var import_contract_helpers = require("@aave/contract-helpers");
636
- var UI_POOL_DATA_PROVIDER_INTERFACE_PER_CHAIN = {
637
- 11155111: import_contract_helpers.LegacyUiPoolDataProvider,
638
- 42161: import_contract_helpers.UiPoolDataProvider,
639
- 1: import_contract_helpers.UiPoolDataProvider
640
- };
641
- var getUiPoolDataProviderImpl = (chainId) => {
642
- const res = UI_POOL_DATA_PROVIDER_INTERFACE_PER_CHAIN[chainId];
643
- if (!res) {
644
- throw new Error(
645
- "UI_POOL_DATA_PROVIDER_INTERFACE_PER_CHAIN does not contain this chain ID. Edit providers/aave/dataProvider.ts."
646
- );
647
- }
648
- return res;
649
- };
650
-
651
- // src/aave-lending-plugin/adapter.ts
652
- var import_ethers4 = require("ethers");
653
- var import_contract_helpers2 = require("@aave/contract-helpers");
654
-
655
- // src/core/schemas/core.ts
656
- var import_zod2 = require("zod");
657
-
658
- // src/core/schemas/enums.ts
659
- var import_zod = require("zod");
660
- var ChainTypeSchema = import_zod.z.enum(["UNSPECIFIED", "EVM", "SOLANA", "COSMOS"]);
661
- var TransactionTypes = {
662
- TRANSACTION_TYPE_UNSPECIFIED: "TRANSACTION_TYPE_UNSPECIFIED",
663
- EVM_TX: "EVM_TX",
664
- SOLANA_TX: "SOLANA_TX"
665
- };
666
- var TransactionTypeSchema = import_zod.z.enum(
667
- Object.values(TransactionTypes)
668
- );
669
-
670
- // src/core/schemas/core.ts
671
- var TokenIdentifierSchema = import_zod2.z.object({
672
- chainId: import_zod2.z.string(),
673
- address: import_zod2.z.string()
674
- });
675
- var TokenSchema = import_zod2.z.object({
676
- tokenUid: TokenIdentifierSchema,
677
- name: import_zod2.z.string(),
678
- symbol: import_zod2.z.string(),
679
- isNative: import_zod2.z.boolean(),
680
- decimals: import_zod2.z.number().int(),
681
- iconUri: import_zod2.z.string().nullish(),
682
- isVetted: import_zod2.z.boolean()
683
- });
684
- var ChainSchema = import_zod2.z.object({
685
- chainId: import_zod2.z.string(),
686
- type: ChainTypeSchema,
687
- iconUri: import_zod2.z.string(),
688
- nativeToken: TokenSchema,
689
- httpRpcUrl: import_zod2.z.string(),
690
- name: import_zod2.z.string(),
691
- blockExplorerUrls: import_zod2.z.array(import_zod2.z.string())
692
- });
693
- var FeeBreakdownSchema = import_zod2.z.object({
694
- serviceFee: import_zod2.z.string(),
695
- slippageCost: import_zod2.z.string(),
696
- total: import_zod2.z.string(),
697
- feeDenomination: import_zod2.z.string()
698
- });
699
- var TransactionPlanSchema = import_zod2.z.object({
700
- type: TransactionTypeSchema,
701
- to: import_zod2.z.string(),
702
- data: import_zod2.z.string(),
703
- value: import_zod2.z.string(),
704
- chainId: import_zod2.z.string()
705
- });
706
- var TransactionPlanErrorSchema = import_zod2.z.object({
707
- code: import_zod2.z.string(),
708
- message: import_zod2.z.string(),
709
- details: import_zod2.z.record(import_zod2.z.string(), import_zod2.z.string())
710
- });
711
- var ProviderTrackingInfoSchema = import_zod2.z.object({
712
- requestId: import_zod2.z.string(),
713
- providerName: import_zod2.z.string(),
714
- explorerUrl: import_zod2.z.string()
715
- });
716
- var SwapEstimationSchema = import_zod2.z.object({
717
- effectivePrice: import_zod2.z.string(),
718
- timeEstimate: import_zod2.z.string(),
719
- expiration: import_zod2.z.string()
720
- });
721
- var ProviderTrackingStatusSchema = import_zod2.z.object({
722
- requestId: import_zod2.z.string(),
723
- transactionId: import_zod2.z.string(),
724
- providerName: import_zod2.z.string(),
725
- explorerUrl: import_zod2.z.string(),
726
- status: import_zod2.z.string()
727
- });
728
-
729
- // src/core/schemas/lending.ts
730
- var import_zod3 = require("zod");
731
- var BorrowTokensRequestSchema = import_zod3.z.object({
732
- borrowToken: TokenSchema,
733
- amount: import_zod3.z.bigint(),
734
- walletAddress: import_zod3.z.string()
735
- });
736
- var BorrowTokensResponseSchema = import_zod3.z.object({
737
- currentBorrowApy: import_zod3.z.string(),
738
- liquidationThreshold: import_zod3.z.string(),
739
- feeBreakdown: FeeBreakdownSchema.optional(),
740
- transactions: import_zod3.z.array(TransactionPlanSchema)
741
- });
742
- var RepayTokensRequestSchema = import_zod3.z.object({
743
- repayToken: TokenSchema,
744
- amount: import_zod3.z.bigint(),
745
- walletAddress: import_zod3.z.string()
746
- });
747
- var RepayTokensResponseSchema = import_zod3.z.object({
748
- feeBreakdown: FeeBreakdownSchema.optional(),
749
- transactions: import_zod3.z.array(TransactionPlanSchema)
750
- });
751
- var SupplyTokensRequestSchema = import_zod3.z.object({
752
- supplyToken: TokenSchema,
753
- amount: import_zod3.z.bigint(),
754
- walletAddress: import_zod3.z.string()
755
- });
756
- var SupplyTokensResponseSchema = import_zod3.z.object({
757
- feeBreakdown: FeeBreakdownSchema.optional(),
758
- transactions: import_zod3.z.array(TransactionPlanSchema)
759
- });
760
- var WithdrawTokensRequestSchema = import_zod3.z.object({
761
- tokenToWithdraw: TokenSchema,
762
- amount: import_zod3.z.bigint(),
763
- walletAddress: import_zod3.z.string()
764
- });
765
- var WithdrawTokensResponseSchema = import_zod3.z.object({
766
- feeBreakdown: FeeBreakdownSchema.optional(),
767
- transactions: import_zod3.z.array(TransactionPlanSchema)
768
- });
769
- var TokenPositionSchema = import_zod3.z.object({
770
- underlyingToken: TokenSchema,
771
- borrowRate: import_zod3.z.string(),
772
- supplyBalance: import_zod3.z.string(),
773
- borrowBalance: import_zod3.z.string(),
774
- valueUsd: import_zod3.z.string()
775
- });
776
- var GetWalletLendingPositionsRequestSchema = import_zod3.z.object({
777
- walletAddress: import_zod3.z.string()
778
- });
779
- var LendTokenDetailSchema = import_zod3.z.object({
780
- token: TokenSchema,
781
- underlyingBalance: import_zod3.z.string(),
782
- underlyingBalanceUsd: import_zod3.z.string(),
783
- variableBorrows: import_zod3.z.string(),
784
- variableBorrowsUsd: import_zod3.z.string(),
785
- totalBorrows: import_zod3.z.string(),
786
- totalBorrowsUsd: import_zod3.z.string()
787
- });
788
- var GetWalletLendingPositionsResponseSchema = import_zod3.z.object({
789
- userReserves: import_zod3.z.array(LendTokenDetailSchema),
790
- totalLiquidityUsd: import_zod3.z.string(),
791
- totalCollateralUsd: import_zod3.z.string(),
792
- totalBorrowsUsd: import_zod3.z.string(),
793
- netWorthUsd: import_zod3.z.string(),
794
- availableBorrowsUsd: import_zod3.z.string(),
795
- currentLoanToValue: import_zod3.z.string(),
796
- currentLiquidationThreshold: import_zod3.z.string(),
797
- healthFactor: import_zod3.z.string()
798
- });
799
-
800
- // src/core/schemas/liquidity.ts
801
- var import_zod4 = require("zod");
802
- var LimitedLiquidityProvisionRangeSchema = import_zod4.z.object({
803
- minPrice: import_zod4.z.string(),
804
- maxPrice: import_zod4.z.string()
805
- });
806
- var LiquidityProvisionRangeSchema = import_zod4.z.discriminatedUnion("type", [
807
- import_zod4.z.object({
808
- type: import_zod4.z.literal("full")
809
- }),
810
- import_zod4.z.object({
811
- type: import_zod4.z.literal("limited"),
812
- minPrice: import_zod4.z.string(),
813
- maxPrice: import_zod4.z.string()
814
- })
815
- ]);
816
- var LiquidityPositionRangeSchema = import_zod4.z.object({
817
- fromPrice: import_zod4.z.string(),
818
- toPrice: import_zod4.z.string()
819
- });
820
- var LiquiditySuppliedTokenSchema = import_zod4.z.object({
821
- tokenUid: TokenIdentifierSchema,
822
- suppliedAmount: import_zod4.z.string(),
823
- owedTokens: import_zod4.z.string()
824
- });
825
- var LiquidityPositionSchema = import_zod4.z.object({
826
- poolIdentifier: TokenIdentifierSchema,
827
- operator: import_zod4.z.string(),
828
- suppliedTokens: import_zod4.z.array(LiquiditySuppliedTokenSchema),
829
- price: import_zod4.z.string(),
830
- providerId: import_zod4.z.string(),
831
- positionRange: LiquidityPositionRangeSchema.optional()
832
- });
833
- var LiquidityPoolTokens = import_zod4.z.object({
834
- tokenUid: TokenIdentifierSchema
835
- });
836
- var LiquidityPoolSchema = import_zod4.z.object({
837
- identifier: TokenIdentifierSchema,
838
- tokens: import_zod4.z.array(LiquidityPoolTokens),
839
- price: import_zod4.z.string(),
840
- providerId: import_zod4.z.string()
841
- });
842
- var LiquidityPayTokensSchema = import_zod4.z.object({
843
- token: TokenSchema,
844
- supplyAmount: import_zod4.z.bigint()
845
- });
846
- var SupplyLiquidityRequestSchema = import_zod4.z.object({
847
- walletAddress: import_zod4.z.string(),
848
- poolToken: TokenSchema,
849
- payTokens: import_zod4.z.array(LiquidityPayTokensSchema),
850
- range: LiquidityProvisionRangeSchema.optional()
851
- });
852
- var SupplyLiquidityResponseSchema = import_zod4.z.object({
853
- transactions: import_zod4.z.array(TransactionPlanSchema),
854
- poolIdentifier: TokenIdentifierSchema
855
- });
856
- var WithdrawLiquidityRequestSchema = import_zod4.z.object({
857
- poolToken: TokenSchema,
858
- walletAddress: import_zod4.z.string()
859
- });
860
- var WithdrawLiquidityResponseSchema = import_zod4.z.object({
861
- transactions: import_zod4.z.array(TransactionPlanSchema),
862
- chainId: import_zod4.z.string()
863
- });
864
- var GetWalletLiquidityPositionsRequestSchema = import_zod4.z.object({
865
- walletAddress: import_zod4.z.string()
866
- });
867
- var GetWalletLiquidityPositionsResponseSchema = import_zod4.z.object({
868
- positions: import_zod4.z.array(LiquidityPositionSchema)
869
- });
870
- var GetLiquidityPoolsResponseSchema = import_zod4.z.object({
871
- liquidityPools: import_zod4.z.array(LiquidityPoolSchema)
872
- });
878
+ // src/aave-lending-plugin/populateTransaction.ts
879
+ async function populateTransaction(tx) {
880
+ let txData = null;
881
+ try {
882
+ txData = await tx.tx();
883
+ } catch (unknownError) {
884
+ const reason = typeof unknownError === "object" && unknownError !== null && "reason" in unknownError && typeof unknownError.reason === "string" ? unknownError.reason : "";
885
+ const errorCode = reason.split(" ").pop();
886
+ const aaveError = getAaveError(errorCode);
887
+ if (aaveError !== null) {
888
+ throw aaveError;
889
+ } else {
890
+ throw unknownError;
891
+ }
892
+ }
893
+ if (!txData) {
894
+ throw new Error("Failed to populate transaction");
895
+ }
896
+ return {
897
+ value: import_ethers2.ethers.BigNumber.from(txData.value ?? 0),
898
+ from: txData.from,
899
+ to: txData.to,
900
+ data: txData.data
901
+ };
902
+ }
873
903
 
874
- // src/core/schemas/perpetuals.ts
875
- var import_zod5 = require("zod");
876
- var import_orders = require("@gmx-io/sdk/types/orders");
877
- var DecreasePositionSwapTypeSchema = import_zod5.z.nativeEnum(import_orders.DecreasePositionSwapType);
878
- var PositionSideSchema = import_zod5.z.union([import_zod5.z.literal("long"), import_zod5.z.literal("short")]);
879
- var PositionSchema = import_zod5.z.object({
880
- chainId: import_zod5.z.string(),
881
- key: import_zod5.z.string(),
882
- contractKey: import_zod5.z.string(),
883
- account: import_zod5.z.string(),
884
- marketAddress: import_zod5.z.string(),
885
- collateralTokenAddress: import_zod5.z.string(),
886
- sizeInUsd: import_zod5.z.string(),
887
- sizeInTokens: import_zod5.z.string(),
888
- collateralAmount: import_zod5.z.string(),
889
- pendingBorrowingFeesUsd: import_zod5.z.string(),
890
- increasedAtTime: import_zod5.z.string(),
891
- decreasedAtTime: import_zod5.z.string(),
892
- positionSide: PositionSideSchema,
893
- isLong: import_zod5.z.boolean(),
894
- fundingFeeAmount: import_zod5.z.string(),
895
- claimableLongTokenAmount: import_zod5.z.string(),
896
- claimableShortTokenAmount: import_zod5.z.string(),
897
- isOpening: import_zod5.z.boolean().optional(),
898
- pnl: import_zod5.z.string(),
899
- positionFeeAmount: import_zod5.z.string(),
900
- traderDiscountAmount: import_zod5.z.string(),
901
- uiFeeAmount: import_zod5.z.string(),
902
- data: import_zod5.z.string().optional()
903
- });
904
- var PositionsDataSchema = import_zod5.z.array(PositionSchema);
905
- var OrderSchema = import_zod5.z.object({
906
- chainId: import_zod5.z.string(),
907
- key: import_zod5.z.string(),
908
- account: import_zod5.z.string(),
909
- callbackContract: import_zod5.z.string(),
910
- initialCollateralTokenAddress: import_zod5.z.string(),
911
- marketAddress: import_zod5.z.string(),
912
- decreasePositionSwapType: DecreasePositionSwapTypeSchema,
913
- receiver: import_zod5.z.string(),
914
- swapPath: import_zod5.z.array(import_zod5.z.string()),
915
- contractAcceptablePrice: import_zod5.z.string(),
916
- contractTriggerPrice: import_zod5.z.string(),
917
- callbackGasLimit: import_zod5.z.string(),
918
- executionFee: import_zod5.z.string(),
919
- initialCollateralDeltaAmount: import_zod5.z.string(),
920
- minOutputAmount: import_zod5.z.string(),
921
- sizeDeltaUsd: import_zod5.z.string(),
922
- updatedAtTime: import_zod5.z.string(),
923
- isFrozen: import_zod5.z.boolean(),
924
- positionSide: PositionSideSchema,
925
- orderType: import_zod5.z.nativeEnum(import_orders.OrderType),
926
- shouldUnwrapNativeToken: import_zod5.z.boolean(),
927
- autoCancel: import_zod5.z.boolean(),
928
- data: import_zod5.z.string().optional(),
929
- uiFeeReceiver: import_zod5.z.string(),
930
- validFromTime: import_zod5.z.string(),
931
- title: import_zod5.z.string().optional()
932
- });
933
- var OrdersDataSchema = import_zod5.z.array(OrderSchema);
934
- var CreatePerpetualsPositionRequestSchema = import_zod5.z.object({
935
- amount: import_zod5.z.bigint(),
936
- walletAddress: import_zod5.z.string(),
937
- chainId: import_zod5.z.string(),
938
- marketAddress: import_zod5.z.string(),
939
- payTokenAddress: import_zod5.z.string(),
940
- collateralTokenAddress: import_zod5.z.string(),
941
- referralCode: import_zod5.z.string().optional(),
942
- limitPrice: import_zod5.z.string().optional(),
943
- leverage: import_zod5.z.string()
944
- });
945
- var CreatePerpetualsPositionResponseSchema = import_zod5.z.object({
946
- transactions: import_zod5.z.array(TransactionPlanSchema)
947
- });
948
- var GetPerpetualsMarketsPositionsRequestSchema = import_zod5.z.object({
949
- walletAddress: import_zod5.z.string().describe("User's wallet address")
950
- });
951
- var GetPerpetualsMarketsPositionsResponseSchema = import_zod5.z.object({
952
- positions: PositionsDataSchema
953
- });
954
- var GetPerpetualsMarketsOrdersRequestSchema = import_zod5.z.object({
955
- walletAddress: import_zod5.z.string().describe("User's wallet address")
956
- });
957
- var GetPerpetualsMarketsOrdersResponseSchema = import_zod5.z.object({
958
- orders: OrdersDataSchema
959
- });
960
- var ClosePerpetualsOrdersRequestSchema = import_zod5.z.object({
961
- walletAddress: import_zod5.z.string().describe("User's wallet address"),
962
- key: import_zod5.z.string()
963
- });
964
- var ClosePerpetualsOrdersResponseSchema = import_zod5.z.object({
965
- transactions: import_zod5.z.array(TransactionPlanSchema)
966
- });
967
- var GetPerpetualsMarketsRequestSchema = import_zod5.z.object({
968
- chainIds: import_zod5.z.array(import_zod5.z.string())
969
- });
970
- var PerpetualMarketSchema = import_zod5.z.object({
971
- marketToken: TokenIdentifierSchema,
972
- indexToken: TokenIdentifierSchema,
973
- longToken: TokenIdentifierSchema,
974
- shortToken: TokenIdentifierSchema,
975
- longFundingFee: import_zod5.z.string(),
976
- shortFundingFee: import_zod5.z.string(),
977
- longBorrowingFee: import_zod5.z.string(),
978
- shortBorrowingFee: import_zod5.z.string(),
979
- chainId: import_zod5.z.string(),
980
- name: import_zod5.z.string()
981
- });
982
- var GetPerpetualsMarketsResponseSchema = import_zod5.z.object({
983
- markets: import_zod5.z.array(PerpetualMarketSchema)
984
- });
904
+ // src/aave-lending-plugin/userSummary.ts
905
+ var import_math_utils = require("@aave/math-utils");
906
+ function formatNumeric(value) {
907
+ const num = parseFloat(value);
908
+ if (Number.isInteger(num)) return num.toString();
909
+ return parseFloat(num.toFixed(2)).toString();
910
+ }
911
+ var UserSummary = class {
912
+ reserves;
913
+ /**
914
+ * @param userReservesResponse - The response from getUserReservesHumanized.
915
+ * @param reservesResponse - The response from getReservesHumanized.
916
+ */
917
+ constructor(userReservesResponse, reservesResponse) {
918
+ const currentTimestamp = Date.now() / 1e3;
919
+ const formattedReserves = (0, import_math_utils.formatReserves)({
920
+ reserves: reservesResponse.reservesData,
921
+ currentTimestamp,
922
+ marketReferenceCurrencyDecimals: reservesResponse.baseCurrencyData.marketReferenceCurrencyDecimals,
923
+ marketReferencePriceInUsd: reservesResponse.baseCurrencyData.marketReferenceCurrencyPriceInUsd
924
+ });
925
+ this.reserves = (0, import_math_utils.formatUserSummary)({
926
+ currentTimestamp,
927
+ marketReferencePriceInUsd: reservesResponse.baseCurrencyData.marketReferenceCurrencyPriceInUsd,
928
+ marketReferenceCurrencyDecimals: reservesResponse.baseCurrencyData.marketReferenceCurrencyDecimals,
929
+ userReserves: userReservesResponse.userReserves,
930
+ formattedReserves,
931
+ userEmodeCategoryId: userReservesResponse.userEmodeCategoryId
932
+ });
933
+ }
934
+ toHumanReadable() {
935
+ let output = "User Positions:\n";
936
+ output += `Total Liquidity (USD): ${formatNumeric(this.reserves.totalLiquidityUSD)}
937
+ `;
938
+ output += `Total Collateral (USD): ${formatNumeric(this.reserves.totalCollateralUSD)}
939
+ `;
940
+ output += `Total Borrows (USD): ${formatNumeric(this.reserves.totalBorrowsUSD)}
941
+ `;
942
+ output += `Net Worth (USD): ${formatNumeric(this.reserves.netWorthUSD)}
943
+ `;
944
+ output += `Health Factor: ${formatNumeric(this.reserves.healthFactor)}
985
945
 
986
- // src/core/schemas/swap.ts
987
- var import_zod6 = require("zod");
988
- var SwapTokensRequestSchema = import_zod6.z.object({
989
- fromToken: TokenSchema,
990
- toToken: TokenSchema,
991
- amount: import_zod6.z.bigint(),
992
- limitPrice: import_zod6.z.string().optional(),
993
- slippageTolerance: import_zod6.z.string().optional(),
994
- expiration: import_zod6.z.string().optional(),
995
- recipient: import_zod6.z.string()
996
- });
997
- var SwapTokensResponseSchema = import_zod6.z.object({
998
- fromToken: TokenSchema,
999
- toToken: TokenSchema,
1000
- exactFromAmount: import_zod6.z.string(),
1001
- displayFromAmount: import_zod6.z.string(),
1002
- exactToAmount: import_zod6.z.string(),
1003
- displayToAmount: import_zod6.z.string(),
1004
- transactions: import_zod6.z.array(TransactionPlanSchema),
1005
- feeBreakdown: FeeBreakdownSchema.optional(),
1006
- estimation: SwapEstimationSchema.optional(),
1007
- providerTracking: ProviderTrackingInfoSchema.optional()
1008
- });
946
+ `;
947
+ output += "Deposits:\n";
948
+ for (const entry of this.reserves.userReservesData) {
949
+ if (parseFloat(entry.scaledATokenBalance) > 0) {
950
+ const underlying = entry.underlyingBalance;
951
+ const underlyingUSD = entry.underlyingBalanceUSD ? formatNumeric(entry.underlyingBalanceUSD) : "N/A";
952
+ output += `- ${entry.reserve.symbol}: ${underlying} (USD: ${underlyingUSD})
953
+ `;
954
+ }
955
+ }
956
+ output += "\nLoans:\n";
957
+ for (const entry of this.reserves.userReservesData) {
958
+ const borrow = entry.totalBorrows || "0";
959
+ if (parseFloat(borrow) > 0) {
960
+ const totalBorrows = entry.totalBorrows;
961
+ const totalBorrowsUSD = entry.totalBorrowsUSD ? formatNumeric(entry.totalBorrowsUSD) : "N/A";
962
+ output += `- ${entry.reserve.symbol}: ${totalBorrows} (USD: ${totalBorrowsUSD})
963
+ `;
964
+ }
965
+ }
966
+ return output;
967
+ }
968
+ };
1009
969
 
1010
970
  // src/aave-lending-plugin/adapter.ts
1011
- var import_locales = require("zod/v4/locales");
1012
971
  var AAVE_ETH_PLACEHOLDER = "0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE";
1013
972
  var AAVEAdapter = class {
1014
973
  chain;
@@ -1056,7 +1015,7 @@ var AAVEAdapter = class {
1056
1015
  const reservesResponse = await this.getReserves();
1057
1016
  let reserveLiquidationThreshold = null;
1058
1017
  for (const reserve of reservesResponse.reservesData) {
1059
- const token = import_ethers4.ethers.utils.getAddress(reserve.underlyingAsset);
1018
+ const token = import_ethers3.ethers.utils.getAddress(reserve.underlyingAsset);
1060
1019
  if (token === normalizedTokenAddress) {
1061
1020
  reserveLiquidationThreshold = reserve.reserveLiquidationThreshold;
1062
1021
  }
@@ -1074,7 +1033,7 @@ var AAVEAdapter = class {
1074
1033
  async createRepayTransaction(params) {
1075
1034
  const { repayToken, amount, walletAddress: from } = params;
1076
1035
  const normalizedAsset = this.normalizeTokenAddress(repayToken);
1077
- const txs = await this.repay(normalizedAsset, amount.toString(), from);
1036
+ const txs = await this.repay(normalizedAsset, amount.toString(), from, repayToken.decimals);
1078
1037
  return {
1079
1038
  transactions: txs.map((t) => transactionPlanFromEthers(this.chain.id.toString(), t))
1080
1039
  };
@@ -1082,7 +1041,12 @@ var AAVEAdapter = class {
1082
1041
  async createRepayTransactionWithATokens(params) {
1083
1042
  const { repayToken, amount, walletAddress: from } = params;
1084
1043
  const normalizedAsset = this.normalizeTokenAddress(repayToken);
1085
- const txs = await this.repayWithATokens(normalizedAsset, amount.toString(), from);
1044
+ const txs = await this.repayWithATokens(
1045
+ normalizedAsset,
1046
+ amount.toString(),
1047
+ from,
1048
+ repayToken.decimals
1049
+ );
1086
1050
  return {
1087
1051
  transactions: txs.map((t) => transactionPlanFromEthers(this.chain.id.toString(), t))
1088
1052
  };
@@ -1098,14 +1062,6 @@ var AAVEAdapter = class {
1098
1062
  WETH_GATEWAY: this.market.WETH_GATEWAY
1099
1063
  });
1100
1064
  }
1101
- async getTokenData(address) {
1102
- let targetAddress = address;
1103
- if (address === AAVE_ETH_PLACEHOLDER) {
1104
- const poolData = await this.getPool(address);
1105
- targetAddress = poolData.tokenAddress;
1106
- }
1107
- return await this.getPoolBundle().erc20Service.getTokenData(targetAddress);
1108
- }
1109
1065
  getPoolDataProvider() {
1110
1066
  const provider = this.getProvider();
1111
1067
  const DataProviderImpl = getUiPoolDataProviderImpl(this.chain.id);
@@ -1131,7 +1087,7 @@ var AAVEAdapter = class {
1131
1087
  throw new Error(`No wrapped native token configured for chain ${this.chain.id}`);
1132
1088
  }
1133
1089
  const wrappedNativeTokenReserve = reservesResponse.reservesData.find(
1134
- (r) => import_ethers4.ethers.utils.getAddress(r.underlyingAsset) === configuredWrappedNativeToken
1090
+ (r) => import_ethers3.ethers.utils.getAddress(r.underlyingAsset) === configuredWrappedNativeToken
1135
1091
  );
1136
1092
  if (!wrappedNativeTokenReserve) {
1137
1093
  throw new Error(`Wrapped native token reserve not found for native token operations`);
@@ -1139,7 +1095,7 @@ var AAVEAdapter = class {
1139
1095
  targetAsset = wrappedNativeTokenReserve.underlyingAsset;
1140
1096
  }
1141
1097
  const reserve = reservesResponse.reservesData.find(
1142
- (r) => import_ethers4.ethers.utils.getAddress(r.underlyingAsset) === import_ethers4.ethers.utils.getAddress(targetAsset)
1098
+ (r) => import_ethers3.ethers.utils.getAddress(r.underlyingAsset) === import_ethers3.ethers.utils.getAddress(targetAsset)
1143
1099
  );
1144
1100
  if (!reserve) {
1145
1101
  throw new Error(`Asset ${asset} not found in reserves`);
@@ -1182,22 +1138,11 @@ var AAVEAdapter = class {
1182
1138
  variableBorrowsUSD,
1183
1139
  totalBorrows,
1184
1140
  totalBorrowsUSD: totalBorrowsUSD2
1185
- } of userReservesData.filter((ur2) => ur2.underlyingBalanceUSD !== "0")) {
1186
- const tokenData = await this.getTokenData(reserve.underlyingAsset);
1141
+ } of userReservesData.filter((ur) => ur.underlyingBalanceUSD !== "0")) {
1187
1142
  userReservesFormatted.push({
1188
- token: {
1189
- // TODO: ideally we should populate this object somewhere else,
1190
- // returning only tokenUid in this adapter
1191
- tokenUid: {
1192
- address: reserve.underlyingAsset,
1193
- chainId: this.chain.id.toString()
1194
- },
1195
- isNative: false,
1196
- name: tokenData.name,
1197
- symbol: tokenData.symbol,
1198
- decimals: tokenData.decimals,
1199
- isVetted: true
1200
- // assuming aave only lets really good assets in
1143
+ tokenUid: {
1144
+ address: reserve.underlyingAsset,
1145
+ chainId: this.chain.id.toString()
1201
1146
  },
1202
1147
  underlyingBalance,
1203
1148
  underlyingBalanceUsd: underlyingBalanceUSD,
@@ -1220,7 +1165,7 @@ var AAVEAdapter = class {
1220
1165
  };
1221
1166
  }
1222
1167
  async _getUserSummary(userAddress) {
1223
- const validatedUser = import_ethers4.ethers.utils.getAddress(userAddress);
1168
+ const validatedUser = import_ethers3.ethers.utils.getAddress(userAddress);
1224
1169
  const poolDataProvider = this.getPoolDataProvider();
1225
1170
  const reservesResponse = await this.getReserves();
1226
1171
  const userReservesResponse = await poolDataProvider.getUserReservesHumanized({
@@ -1229,9 +1174,9 @@ var AAVEAdapter = class {
1229
1174
  });
1230
1175
  return new UserSummary(userReservesResponse, reservesResponse);
1231
1176
  }
1232
- async borrow(asset, amount, from) {
1233
- import_ethers4.ethers.utils.getAddress(asset);
1234
- import_ethers4.ethers.utils.getAddress(from);
1177
+ borrow(asset, amount, from) {
1178
+ import_ethers3.ethers.utils.getAddress(asset);
1179
+ import_ethers3.ethers.utils.getAddress(from);
1235
1180
  const bundle = this.getPoolBundle();
1236
1181
  const tx = bundle.borrowTxBuilder.generateTxData({
1237
1182
  user: from,
@@ -1239,7 +1184,7 @@ var AAVEAdapter = class {
1239
1184
  amount,
1240
1185
  interestRateMode: import_contract_helpers2.InterestRate.Variable
1241
1186
  });
1242
- return [tx];
1187
+ return Promise.resolve([tx]);
1243
1188
  }
1244
1189
  async createApproval({
1245
1190
  asset,
@@ -1267,8 +1212,8 @@ var AAVEAdapter = class {
1267
1212
  return approvalTx;
1268
1213
  }
1269
1214
  async supply(asset, amount, from) {
1270
- import_ethers4.ethers.utils.getAddress(asset);
1271
- import_ethers4.ethers.utils.getAddress(from);
1215
+ import_ethers3.ethers.utils.getAddress(asset);
1216
+ import_ethers3.ethers.utils.getAddress(from);
1272
1217
  const bundle = this.getPoolBundle();
1273
1218
  const approvalTx = await this.createApproval({
1274
1219
  asset,
@@ -1284,11 +1229,11 @@ var AAVEAdapter = class {
1284
1229
  });
1285
1230
  return (approvalTx ? [approvalTx] : []).concat([tx]);
1286
1231
  }
1287
- async repay(asset, amount_formatted, from) {
1288
- import_ethers4.ethers.utils.getAddress(asset);
1289
- import_ethers4.ethers.utils.getAddress(from);
1232
+ async repay(asset, amount_formatted, from, tokenDecimals) {
1233
+ import_ethers3.ethers.utils.getAddress(asset);
1234
+ import_ethers3.ethers.utils.getAddress(from);
1290
1235
  const bundle = this.getPoolBundle();
1291
- const amount = import_ethers4.utils.parseUnits(amount_formatted, (await this.getTokenData(asset)).decimals).toString();
1236
+ const amount = import_ethers3.utils.parseUnits(amount_formatted, tokenDecimals).toString();
1292
1237
  const tx = bundle.repayTxBuilder.generateTxData({
1293
1238
  user: from,
1294
1239
  reserve: asset,
@@ -1304,12 +1249,11 @@ var AAVEAdapter = class {
1304
1249
  });
1305
1250
  return (approvalTx ? [approvalTx] : []).concat([tx]);
1306
1251
  }
1307
- async repayWithATokens(asset, amount_formatted, from) {
1308
- import_ethers4.ethers.utils.getAddress(asset);
1309
- import_ethers4.ethers.utils.getAddress(from);
1252
+ async repayWithATokens(asset, amount_formatted, from, tokenDecimals) {
1253
+ import_ethers3.ethers.utils.getAddress(asset);
1254
+ import_ethers3.ethers.utils.getAddress(from);
1310
1255
  const bundle = this.getPoolBundle();
1311
- const tokenData = await this.getTokenData(asset);
1312
- const amount = import_ethers4.utils.parseUnits(amount_formatted, tokenData.decimals).toString();
1256
+ const amount = import_ethers3.utils.parseUnits(amount_formatted, tokenDecimals).toString();
1313
1257
  const tx = bundle.repayWithATokensTxBuilder.generateTxData({
1314
1258
  user: from,
1315
1259
  reserve: asset,
@@ -1319,9 +1263,9 @@ var AAVEAdapter = class {
1319
1263
  return [tx];
1320
1264
  }
1321
1265
  async withdraw(asset, amount, to, from) {
1322
- import_ethers4.ethers.utils.getAddress(asset);
1323
- import_ethers4.ethers.utils.getAddress(to);
1324
- import_ethers4.ethers.utils.getAddress(from);
1266
+ import_ethers3.ethers.utils.getAddress(asset);
1267
+ import_ethers3.ethers.utils.getAddress(to);
1268
+ import_ethers3.ethers.utils.getAddress(from);
1325
1269
  const pool = this.getPoolContract();
1326
1270
  const txs = await pool.withdraw({
1327
1271
  user: from,
@@ -1466,6 +1410,41 @@ function registerAave(chainConfig, registry) {
1466
1410
  );
1467
1411
  }
1468
1412
 
1413
+ // src/registry.ts
1414
+ var PublicEmberPluginRegistry = class {
1415
+ plugins = [];
1416
+ deferredPlugins = [];
1417
+ /**
1418
+ * Register a new Ember plugin.
1419
+ * @param plugin The plugin to register.
1420
+ */
1421
+ registerPlugin(plugin) {
1422
+ this.plugins.push(plugin);
1423
+ }
1424
+ /**
1425
+ * Register a new deferred Ember plugin.
1426
+ * @param pluginPromise The promise resolving to the plugin to register.
1427
+ */
1428
+ registerDeferredPlugin(pluginPromise) {
1429
+ this.deferredPlugins.push(pluginPromise);
1430
+ }
1431
+ /**
1432
+ * Iterator for the registered Ember plugins.
1433
+ */
1434
+ async *getPlugins() {
1435
+ yield* this.plugins;
1436
+ for (const pluginPromise of this.deferredPlugins) {
1437
+ const plugin = await pluginPromise;
1438
+ this.registerPlugin(plugin);
1439
+ yield plugin;
1440
+ }
1441
+ this.deferredPlugins = [];
1442
+ }
1443
+ get emberPlugins() {
1444
+ return this.plugins;
1445
+ }
1446
+ };
1447
+
1469
1448
  // src/index.ts
1470
1449
  function initializePublicRegistry(chainConfigs) {
1471
1450
  const registry = new PublicEmberPluginRegistry();
@@ -1525,7 +1504,6 @@ function initializePublicRegistry(chainConfigs) {
1525
1504
  SwapTokensRequestSchema,
1526
1505
  SwapTokensResponseSchema,
1527
1506
  TokenIdentifierSchema,
1528
- TokenPositionSchema,
1529
1507
  TokenSchema,
1530
1508
  TransactionPlanErrorSchema,
1531
1509
  TransactionPlanSchema,