damm-sdk 1.4.24 → 1.4.26

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.
@@ -76,5 +76,22 @@ export declare const repayToAaveV3Trx: <Asset = number | `0x${string}`>({ args,
76
76
  args: RepayAaveV3Args<Asset>;
77
77
  compact: boolean;
78
78
  }) => Unwrapable<Call>;
79
+ export type SetUserEModeOnAaveV3Args = Readonly<{
80
+ categoryId: number;
81
+ }>;
82
+ export declare const SetUserEModeOnAaveV3Calldata: ({ categoryId }: SetUserEModeOnAaveV3Args) => HexString;
83
+ export declare const setUserEModeOnAaveV3Trx: ({ poolAddress, args, }: {
84
+ poolAddress: Address;
85
+ args: SetUserEModeOnAaveV3Args;
86
+ }) => Unwrapable<Call>;
87
+ export type SetUserUseReserveAsCollateralOnAaveV3Args = Readonly<{
88
+ asset: Address;
89
+ useAsCollateral: boolean;
90
+ }>;
91
+ export declare const SetUserUseReserveAsCollateralOnAaveV3Calldata: ({ asset, useAsCollateral, }: SetUserUseReserveAsCollateralOnAaveV3Args) => HexString;
92
+ export declare const setUserUseReserveAsCollateralOnAaveV3Trx: ({ poolAddress, args, }: {
93
+ poolAddress: Address;
94
+ args: SetUserUseReserveAsCollateralOnAaveV3Args;
95
+ }) => Unwrapable<Call>;
79
96
  export {};
80
97
  //# sourceMappingURL=aave.v3.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"aave.v3.d.ts","sourceRoot":"","sources":["../../../src/integrations/aaveV3/aave.v3.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"aave.v3.d.ts","sourceRoot":"","sources":["../../../src/integrations/aaveV3/aave.v3.ts"],"names":[],"mappings":"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"}
@@ -44,11 +44,27 @@ export type EnsoRouteArgs = Readonly<{
44
44
  * string").
45
45
  */
46
46
  slippageBips: number;
47
- /** Optional Enso API key for 10 rps; no key = 1 rps global limit. */
48
- apiKey?: string;
47
+ /**
48
+ * Enso API key. **Required** to use this integration — calls without a
49
+ * key share a global 1 rps limit and fail often in production. Sign up
50
+ * at https://developers.enso.build.
51
+ *
52
+ * If this is falsy (undefined, empty string), `fetchEnsoRoute` throws
53
+ * `EnsoApiKeyMissingError` before hitting the network.
54
+ */
55
+ apiKey: string;
49
56
  /** Override the API base URL (useful for tests). */
50
57
  apiBase?: string;
51
58
  }>;
59
+ /**
60
+ * Thrown when `fetchEnsoRoute` is called without an API key. Without a
61
+ * key the caller shares Enso's global 1 rps limit and will hit 429 in
62
+ * production — we fail fast so the misconfiguration shows up immediately
63
+ * in logs instead of after a long, confusing 429 trail.
64
+ */
65
+ export declare class EnsoApiKeyMissingError extends Error {
66
+ constructor();
67
+ }
52
68
  export declare class EnsoRouteApiError extends Error {
53
69
  readonly status: number;
54
70
  readonly statusText: string;
@@ -1 +1 @@
1
- {"version":3,"file":"enso.route.api.d.ts","sourceRoot":"","sources":["../../../src/integrations/enso/enso.route.api.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AACpC,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAE7C,eAAO,MAAM,aAAa,4BAAsC,CAAC;AAEjE;;;;GAIG;AACH,MAAM,MAAM,iBAAiB,GAAG,QAAQ,CAAC;IACrC,EAAE,EAAE,QAAQ,CAAC;QACT,EAAE,EAAE,SAAS,CAAC;QACd,IAAI,EAAE,SAAS,CAAC;QAChB,KAAK,EAAE,MAAM,CAAC;KACjB,CAAC,CAAC;IACH,4EAA4E;IAC5E,SAAS,EAAE,MAAM,CAAC;IAClB,oFAAoF;IACpF,YAAY,EAAE,MAAM,CAAC;CACxB,CAAC,CAAC;AAEH,MAAM,MAAM,aAAa,GAAG,QAAQ,CAAC;IACjC,OAAO,EAAE,MAAM,CAAC;IAChB,2DAA2D;IAC3D,WAAW,EAAE,OAAO,CAAC;IACrB,oFAAoF;IACpF,QAAQ,EAAE,OAAO,CAAC;IAClB,OAAO,EAAE,OAAO,CAAC;IACjB,QAAQ,EAAE,OAAO,CAAC;IAClB,oEAAoE;IACpE,QAAQ,EAAE,MAAM,CAAC;IACjB;;;;;;OAMG;IACH,YAAY,EAAE,MAAM,CAAC;IACrB,qEAAqE;IACrE,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,oDAAoD;IACpD,OAAO,CAAC,EAAE,MAAM,CAAC;CACpB,CAAC,CAAC;AAEH,qBAAa,iBAAkB,SAAQ,KAAK;IACxC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC;gBAEf,EACR,MAAM,EACN,UAAU,EACV,OAAO,EACP,QAAQ,GACX,EAAE;QACC,MAAM,EAAE,MAAM,CAAC;QACf,UAAU,EAAE,MAAM,CAAC;QACnB,OAAO,EAAE,OAAO,CAAC;QACjB,QAAQ,EAAE,OAAO,CAAC;KACrB;CAQJ;AAED;;;;;GAKG;AACH,eAAO,MAAM,cAAc,SAAgB,aAAa,KAAG,QAAQ,iBAAiB,CA0CnF,CAAC"}
1
+ {"version":3,"file":"enso.route.api.d.ts","sourceRoot":"","sources":["../../../src/integrations/enso/enso.route.api.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AACpC,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAE7C,eAAO,MAAM,aAAa,4BAAsC,CAAC;AAEjE;;;;GAIG;AACH,MAAM,MAAM,iBAAiB,GAAG,QAAQ,CAAC;IACrC,EAAE,EAAE,QAAQ,CAAC;QACT,EAAE,EAAE,SAAS,CAAC;QACd,IAAI,EAAE,SAAS,CAAC;QAChB,KAAK,EAAE,MAAM,CAAC;KACjB,CAAC,CAAC;IACH,4EAA4E;IAC5E,SAAS,EAAE,MAAM,CAAC;IAClB,oFAAoF;IACpF,YAAY,EAAE,MAAM,CAAC;CACxB,CAAC,CAAC;AAEH,MAAM,MAAM,aAAa,GAAG,QAAQ,CAAC;IACjC,OAAO,EAAE,MAAM,CAAC;IAChB,2DAA2D;IAC3D,WAAW,EAAE,OAAO,CAAC;IACrB,oFAAoF;IACpF,QAAQ,EAAE,OAAO,CAAC;IAClB,OAAO,EAAE,OAAO,CAAC;IACjB,QAAQ,EAAE,OAAO,CAAC;IAClB,oEAAoE;IACpE,QAAQ,EAAE,MAAM,CAAC;IACjB;;;;;;OAMG;IACH,YAAY,EAAE,MAAM,CAAC;IACrB;;;;;;;OAOG;IACH,MAAM,EAAE,MAAM,CAAC;IACf,oDAAoD;IACpD,OAAO,CAAC,EAAE,MAAM,CAAC;CACpB,CAAC,CAAC;AAEH;;;;;GAKG;AACH,qBAAa,sBAAuB,SAAQ,KAAK;;CAKhD;AAED,qBAAa,iBAAkB,SAAQ,KAAK;IACxC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC;gBAEf,EACR,MAAM,EACN,UAAU,EACV,OAAO,EACP,QAAQ,GACX,EAAE;QACC,MAAM,EAAE,MAAM,CAAC;QACf,UAAU,EAAE,MAAM,CAAC;QACnB,OAAO,EAAE,OAAO,CAAC;QACjB,QAAQ,EAAE,OAAO,CAAC;KACrB;CAQJ;AAED;;;;;GAKG;AACH,eAAO,MAAM,cAAc,SAAgB,aAAa,KAAG,QAAQ,iBAAiB,CA+CnF,CAAC"}
package/package.json CHANGED
@@ -4,7 +4,7 @@
4
4
  "main": "./dist/index.cjs",
5
5
  "types": "./dist/index.d.ts",
6
6
  "type": "module",
7
- "version": "1.4.24",
7
+ "version": "1.4.26",
8
8
  "files": [
9
9
  "dist",
10
10
  "src",
@@ -241,3 +241,67 @@ export const repayToAaveV3Trx = <Asset = L1AaveV3AssetIdentifier | L2AaveV3Asset
241
241
  data,
242
242
  });
243
243
  };
244
+
245
+ // ─── setUserEMode(uint8 categoryId) ─────────────────────────────────────
246
+ //
247
+ // E-Mode lets correlated assets (wstETH/ETH, stable/stable, etc.) enjoy
248
+ // higher LTV and liquidation thresholds. categoryId 0 = exit E-Mode back
249
+ // to the standard market. Same selector on L1 and L2 pools — no packed-
250
+ // args variant needed.
251
+
252
+ export type SetUserEModeOnAaveV3Args = Readonly<{
253
+ categoryId: number;
254
+ }>;
255
+
256
+ export const SetUserEModeOnAaveV3Calldata = ({ categoryId }: SetUserEModeOnAaveV3Args): HexString => {
257
+ return poolInterface_L1.encodeFunctionData("setUserEMode", [categoryId]) as HexString;
258
+ };
259
+
260
+ export const setUserEModeOnAaveV3Trx = ({
261
+ poolAddress,
262
+ args,
263
+ }: {
264
+ poolAddress: Address;
265
+ args: SetUserEModeOnAaveV3Args;
266
+ }): Unwrapable<Call> => {
267
+ return createCall({
268
+ operation: 0,
269
+ to: poolAddress,
270
+ value: 0n,
271
+ data: SetUserEModeOnAaveV3Calldata(args),
272
+ });
273
+ };
274
+
275
+ // ─── setUserUseReserveAsCollateral(address asset, bool useAsCollateral) ─
276
+ //
277
+ // Opts the supplied reserve into / out of counting as collateral for the
278
+ // user's position. Required when the reserve's `usageAsCollateralEnabled`
279
+ // is true but the user wants to explicitly toggle it (e.g., isolation
280
+ // mode interactions). Same selector on L1 and L2.
281
+
282
+ export type SetUserUseReserveAsCollateralOnAaveV3Args = Readonly<{
283
+ asset: Address;
284
+ useAsCollateral: boolean;
285
+ }>;
286
+
287
+ export const SetUserUseReserveAsCollateralOnAaveV3Calldata = ({
288
+ asset,
289
+ useAsCollateral,
290
+ }: SetUserUseReserveAsCollateralOnAaveV3Args): HexString => {
291
+ return poolInterface_L1.encodeFunctionData("setUserUseReserveAsCollateral", [asset, useAsCollateral]) as HexString;
292
+ };
293
+
294
+ export const setUserUseReserveAsCollateralOnAaveV3Trx = ({
295
+ poolAddress,
296
+ args,
297
+ }: {
298
+ poolAddress: Address;
299
+ args: SetUserUseReserveAsCollateralOnAaveV3Args;
300
+ }): Unwrapable<Call> => {
301
+ return createCall({
302
+ operation: 0,
303
+ to: poolAddress,
304
+ value: 0n,
305
+ data: SetUserUseReserveAsCollateralOnAaveV3Calldata(args),
306
+ });
307
+ };
@@ -48,12 +48,32 @@ export type EnsoRouteArgs = Readonly<{
48
48
  * string").
49
49
  */
50
50
  slippageBips: number;
51
- /** Optional Enso API key for 10 rps; no key = 1 rps global limit. */
52
- apiKey?: string;
51
+ /**
52
+ * Enso API key. **Required** to use this integration — calls without a
53
+ * key share a global 1 rps limit and fail often in production. Sign up
54
+ * at https://developers.enso.build.
55
+ *
56
+ * If this is falsy (undefined, empty string), `fetchEnsoRoute` throws
57
+ * `EnsoApiKeyMissingError` before hitting the network.
58
+ */
59
+ apiKey: string;
53
60
  /** Override the API base URL (useful for tests). */
54
61
  apiBase?: string;
55
62
  }>;
56
63
 
64
+ /**
65
+ * Thrown when `fetchEnsoRoute` is called without an API key. Without a
66
+ * key the caller shares Enso's global 1 rps limit and will hit 429 in
67
+ * production — we fail fast so the misconfiguration shows up immediately
68
+ * in logs instead of after a long, confusing 429 trail.
69
+ */
70
+ export class EnsoApiKeyMissingError extends Error {
71
+ constructor() {
72
+ super("Enso API key required; pass `apiKey`.");
73
+ this.name = "EnsoApiKeyMissingError";
74
+ }
75
+ }
76
+
57
77
  export class EnsoRouteApiError extends Error {
58
78
  readonly status: number;
59
79
  readonly statusText: string;
@@ -99,6 +119,11 @@ export const fetchEnsoRoute = async (args: EnsoRouteArgs): Promise<EnsoRouteResp
99
119
  apiBase = ENSO_API_BASE,
100
120
  } = args;
101
121
 
122
+ // Fail fast if no API key — see EnsoApiKeyMissingError doc for rationale.
123
+ if (!apiKey) {
124
+ throw new EnsoApiKeyMissingError();
125
+ }
126
+
102
127
  const params = new URLSearchParams({
103
128
  chainId: String(chainId),
104
129
  fromAddress,
@@ -109,10 +134,10 @@ export const fetchEnsoRoute = async (args: EnsoRouteArgs): Promise<EnsoRouteResp
109
134
  slippage: String(slippageBips),
110
135
  });
111
136
 
112
- const headers: Record<string, string> = { Accept: "application/json" };
113
- if (apiKey) {
114
- headers["Authorization"] = `Bearer ${apiKey}`;
115
- }
137
+ const headers: Record<string, string> = {
138
+ Accept: "application/json",
139
+ Authorization: `Bearer ${apiKey}`,
140
+ };
116
141
 
117
142
  const response = await fetch(`${apiBase}/api/v1/shortcuts/route?${params.toString()}`, {
118
143
  headers,