@circle-fin/app-kit 1.15.2 → 1.16.0

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 (60) hide show
  1. package/CHANGELOG.md +59 -0
  2. package/README.md +5 -2
  3. package/borrow.cjs +28028 -0
  4. package/borrow.cjs.map +1 -0
  5. package/borrow.d.cts +10723 -0
  6. package/borrow.d.mts +10723 -0
  7. package/borrow.d.ts +10723 -0
  8. package/borrow.mjs +28000 -0
  9. package/borrow.mjs.map +1 -0
  10. package/bridge.cjs +1942 -290
  11. package/bridge.d.cts +157 -12
  12. package/bridge.d.mts +157 -12
  13. package/bridge.d.ts +157 -12
  14. package/bridge.mjs +1942 -290
  15. package/chains.cjs +70 -3
  16. package/chains.d.cts +2 -0
  17. package/chains.d.mts +2 -0
  18. package/chains.d.ts +2 -0
  19. package/chains.mjs +70 -3
  20. package/context.cjs +1 -0
  21. package/context.d.cts +157 -12
  22. package/context.d.mts +157 -12
  23. package/context.d.ts +157 -12
  24. package/context.mjs +1 -0
  25. package/earn.cjs +5466 -3459
  26. package/earn.d.cts +1112 -983
  27. package/earn.d.mts +1112 -983
  28. package/earn.d.ts +1112 -983
  29. package/earn.mjs +5466 -3459
  30. package/estimateBridge.cjs +1940 -288
  31. package/estimateBridge.d.cts +157 -12
  32. package/estimateBridge.d.mts +157 -12
  33. package/estimateBridge.d.ts +157 -12
  34. package/estimateBridge.mjs +1940 -288
  35. package/estimateSwap.cjs +8497 -6831
  36. package/estimateSwap.d.cts +157 -12
  37. package/estimateSwap.d.mts +157 -12
  38. package/estimateSwap.d.ts +157 -12
  39. package/estimateSwap.mjs +8498 -6832
  40. package/index.cjs +30741 -18498
  41. package/index.d.cts +22724 -2322
  42. package/index.d.mts +22724 -2322
  43. package/index.d.ts +22724 -2322
  44. package/index.mjs +30682 -18492
  45. package/package.json +17 -7
  46. package/server.cjs +113 -22
  47. package/server.d.cts +10 -9
  48. package/server.d.mts +10 -9
  49. package/server.d.ts +10 -9
  50. package/server.mjs +113 -22
  51. package/swap.cjs +8497 -6831
  52. package/swap.d.cts +157 -12
  53. package/swap.d.mts +157 -12
  54. package/swap.d.ts +157 -12
  55. package/swap.mjs +8498 -6832
  56. package/unifiedBalance.cjs +457 -128
  57. package/unifiedBalance.d.cts +108 -11
  58. package/unifiedBalance.d.mts +108 -11
  59. package/unifiedBalance.d.ts +108 -11
  60. package/unifiedBalance.mjs +457 -128
package/context.d.mts CHANGED
@@ -551,8 +551,23 @@ interface CCTPXChainConfig {
551
551
  * const contractType: KitContractType = 'bridge' // Valid
552
552
  * const invalidType: KitContractType = 'invalid' // TypeScript error
553
553
  * ```
554
- */
555
- type KitContractType = 'bridge' | 'adapter';
554
+ *
555
+ * @remarks
556
+ * `'senderPreservingBatcher'` carries a stricter requirement than the others,
557
+ * because setting it wrong fails silently rather than loudly. It must name a
558
+ * batching contract that preserves the calling EOA as `msg.sender` in every
559
+ * subcall — on Arc, the `Multicall3From` predeploy, which achieves that
560
+ * through the `CallFrom` precompile. The name is deliberately more specific
561
+ * than "batcher": the ubiquitous Multicall3 at
562
+ * `0xcA11bde05977b3631167028862bE2a173976CA11` has the same ABI and the same
563
+ * selectors but does **not** qualify, since each subcall would arrive as the
564
+ * Multicall3 contract, so a batched `approve` would grant an allowance from
565
+ * the batcher's own balance rather than from the user's — a field named just
566
+ * `batcher` would make that misconfiguration look valid. Leave
567
+ * `senderPreservingBatcher` unset on any chain lacking one; an unset field
568
+ * simply means callers fall back to submitting calls one at a time.
569
+ */
570
+ type KitContractType = 'bridge' | 'adapter' | 'senderPreservingBatcher';
556
571
  /**
557
572
  * Configuration for Gateway v1 contracts.
558
573
  *
@@ -1436,8 +1451,13 @@ type PreparedChainRequest = EvmPreparedChainRequest | SolanaPreparedChainRequest
1436
1451
  * Parameters for preparing an EVM contract execution.
1437
1452
  */
1438
1453
  type EvmPreparedChainRequestParams = {
1439
- /** The type of the prepared execution. */
1440
- type: 'evm';
1454
+ /**
1455
+ * The type of the prepared execution. Optional here because EVM is the
1456
+ * only chain type `Adapter.prepare()` implementations narrow their param
1457
+ * type to in practice — callers that only ever prepare EVM requests can
1458
+ * omit it rather than repeat a discriminator that never varies for them.
1459
+ */
1460
+ type?: 'evm';
1441
1461
  /** The ABI of the contract. */
1442
1462
  abi: Abi | string[];
1443
1463
  /** The address of the contract. */
@@ -2716,6 +2736,57 @@ interface EarnActionMap {
2716
2736
  readonly claimRewards: ExecuteEarnParams;
2717
2737
  }
2718
2738
 
2739
+ /** Permit standards accepted by Borrow Adapter executions. */
2740
+ declare enum BorrowPermitType {
2741
+ /** Tokens must be approved separately. */
2742
+ NONE = 0,
2743
+ /** EIP-2612 permit calldata accompanies the token input. */
2744
+ EIP2612 = 1
2745
+ }
2746
+ /** Token input forwarded by Borrow Kit to the Adapter Contract. */
2747
+ interface BorrowTokenInput {
2748
+ readonly permitType: BorrowPermitType;
2749
+ readonly token: `0x${string}`;
2750
+ readonly amount: bigint;
2751
+ readonly permitCalldata: `0x${string}`;
2752
+ }
2753
+ /** A single instruction in a Circle-signed Borrow execution. */
2754
+ interface BorrowInstruction {
2755
+ readonly target: `0x${string}`;
2756
+ readonly data: `0x${string}`;
2757
+ readonly value: string | bigint;
2758
+ readonly tokenIn: `0x${string}`;
2759
+ readonly amountToApprove: string | bigint;
2760
+ readonly tokenOut: `0x${string}`;
2761
+ readonly minTokenOut: string | bigint;
2762
+ }
2763
+ /** A token recipient in a Circle-signed Borrow execution. */
2764
+ interface BorrowTokenRecipient {
2765
+ readonly token: `0x${string}`;
2766
+ readonly beneficiary: `0x${string}`;
2767
+ }
2768
+ /** Circle-signed Borrow parameters forwarded to the Adapter Contract. */
2769
+ interface BorrowExecutionParams {
2770
+ readonly instructions: readonly BorrowInstruction[];
2771
+ readonly tokens: readonly BorrowTokenRecipient[];
2772
+ readonly execId: string | bigint;
2773
+ readonly deadline: string | bigint;
2774
+ readonly metadata: `0x${string}`;
2775
+ }
2776
+ /** Parameters for a service-signed Borrow Adapter execution. */
2777
+ interface ExecuteBorrowParams extends ActionParameters {
2778
+ readonly executeParams: BorrowExecutionParams;
2779
+ readonly tokenInputs: BorrowTokenInput[];
2780
+ readonly signature: `0x${string}`;
2781
+ }
2782
+ /** Borrow actions supported by EVM adapters. */
2783
+ interface BorrowActionMap {
2784
+ /** Execute a Circle-signed partial loan repayment. */
2785
+ readonly repay: ExecuteBorrowParams;
2786
+ /** Execute a Circle-signed borrow. */
2787
+ readonly execute: ExecuteBorrowParams;
2788
+ }
2789
+
2719
2790
  /**
2720
2791
  * Single instruction to execute within the Adapter Contract.
2721
2792
  *
@@ -3672,6 +3743,8 @@ interface NativeActionMap {
3672
3743
  * @see {@link ActionPayload} for extracting payload types
3673
3744
  */
3674
3745
  interface ActionMap {
3746
+ /** Borrow operations that execute service-signed payloads. */
3747
+ readonly borrow: BorrowActionMap;
3675
3748
  /** CCTP-specific operations with automatic address resolution. */
3676
3749
  readonly cctp: CCTPActionMap;
3677
3750
  /** CCTPx operations (CrossChainTokenService) for cross-chain transfers of registered tokens (Circle-issued or otherwise). */
@@ -3691,6 +3764,7 @@ interface ActionMap {
3691
3764
  /** Earn operations that execute service-signed payloads via the adapter contract. */
3692
3765
  readonly earn: EarnActionMap;
3693
3766
  }
3767
+
3694
3768
  /**
3695
3769
  * Determine if a type represents an action parameter object (leaf node).
3696
3770
  *
@@ -7225,6 +7299,26 @@ interface VaultQuery {
7225
7299
  /** On-chain vault contract address. */
7226
7300
  readonly vaultAddress: string;
7227
7301
  }
7302
+ /**
7303
+ * Fields shared by both {@link EarnGasFeeEstimate} variants.
7304
+ *
7305
+ * @example
7306
+ * ```typescript
7307
+ * const base: EarnGasFeeEstimateBase = {
7308
+ * name: 'Deposit',
7309
+ * token: 'ETH',
7310
+ * blockchain: 'Arc_Testnet',
7311
+ * }
7312
+ * ```
7313
+ */
7314
+ interface EarnGasFeeEstimateBase {
7315
+ /** The earn step being estimated, e.g. "Approve", "Deposit", "Withdraw". */
7316
+ readonly name: string;
7317
+ /** Native token used to pay gas fees, e.g. "ETH". */
7318
+ readonly token: string;
7319
+ /** Blockchain where this gas fee applies. */
7320
+ readonly blockchain: ChainDefinition['chain'];
7321
+ }
7228
7322
  /**
7229
7323
  * Sort order for a vault discovery query.
7230
7324
  *
@@ -7239,6 +7333,51 @@ interface VaultQuery {
7239
7333
  */
7240
7334
  type ExploreVaultsSortBy = 'apy' | 'tvl' | 'name';
7241
7335
 
7336
+ /**
7337
+ * Estimated gas details for one transaction in a kit-level Earn quote, with
7338
+ * every amount as a decimal string so quote results stay JSON-serializable.
7339
+ *
7340
+ * @example
7341
+ * ```typescript
7342
+ * const gas: EarnEstimatedGas = { gas: '73567', gasPrice: '20003763738', fee: '1471616886913446' }
7343
+ * ```
7344
+ */
7345
+ interface EarnEstimatedGas {
7346
+ /** Estimated gas units as a decimal string, e.g. '73567'. */
7347
+ readonly gas: string;
7348
+ /** Estimated price per gas unit as a decimal string in wei. */
7349
+ readonly gasPrice: string;
7350
+ /** Total estimated fee as a decimal string in wei. */
7351
+ readonly fee: string;
7352
+ }
7353
+ /**
7354
+ * Estimated native gas fee for one transaction in an Earn quote.
7355
+ *
7356
+ * A discriminated union on `fees`: a successful estimate carries
7357
+ * {@link EarnEstimatedGas} details and no `error`; a failed estimate carries
7358
+ * `fees: null` and a sanitized `error` message.
7359
+ *
7360
+ * @example
7361
+ * ```typescript
7362
+ * function describe(entry: EarnGasFeeEstimate): string {
7363
+ * if (entry.fees === null) {
7364
+ * return `${entry.name}: estimation failed (${entry.error})`
7365
+ * }
7366
+ * return `${entry.name}: ${entry.fees.fee} wei`
7367
+ * }
7368
+ * ```
7369
+ */
7370
+ type EarnGasFeeEstimate = (EarnGasFeeEstimateBase & {
7371
+ /** Estimated gas details with amounts formatted as decimal strings. */
7372
+ readonly fees: EarnEstimatedGas;
7373
+ /** Never present on a successful estimate. */
7374
+ readonly error?: never;
7375
+ }) | (EarnGasFeeEstimateBase & {
7376
+ /** Null because estimation failed. */
7377
+ readonly fees: null;
7378
+ /** Sanitized estimation error message. */
7379
+ readonly error: string;
7380
+ });
7242
7381
  /**
7243
7382
  * Adapter context for earn operations, constrained to earn-supported chains.
7244
7383
  *
@@ -7422,6 +7561,12 @@ interface SameChainDepositParams<TFromAdapterCapabilities extends AdapterCapabil
7422
7561
  * @example '100.50' for 100.50 USDC
7423
7562
  */
7424
7563
  readonly amount: string;
7564
+ /**
7565
+ * Gas fee estimates from a prior {@link getDepositQuote} call. When provided,
7566
+ * the pre-broadcast gas reserve check uses the actual estimated cost instead
7567
+ * of the conservative fallback reserve.
7568
+ */
7569
+ readonly gasFees?: readonly EarnGasFeeEstimate[] | undefined;
7425
7570
  /** Optional earn configuration. */
7426
7571
  readonly config?: EarnConfig | undefined;
7427
7572
  }
@@ -8016,8 +8161,8 @@ interface AppKitContext {
8016
8161
  *
8017
8162
  * This property stores event handlers that are registered via the AppKit's
8018
8163
  * `on()` method. Handlers are grouped by operation type. The runtime buckets
8019
- * are `bridge` and `earn`; the context can add more operation buckets as
8020
- * AppKit wires action handlers for additional kits.
8164
+ * are `bridge`, `earn`, and `borrow`; the context can add more operation
8165
+ * buckets as AppKit wires action handlers for additional kits.
8021
8166
  *
8022
8167
  * Within each operation bucket, handlers are keyed by action name (for
8023
8168
  * example, `bridge.approve` or `earn.deposit`) or `*` for wildcard handlers.
@@ -8036,13 +8181,13 @@ interface AppKitContext {
8036
8181
  * // Earn handlers are registered with EarnKit when earn operations run
8037
8182
  * ```
8038
8183
  */
8039
- actions: Record<'bridge' | 'earn', Record<string, ((payload: unknown) => void)[]>>;
8184
+ actions: Record<'bridge' | 'earn' | 'borrow', Record<string, ((payload: unknown) => void)[]>>;
8040
8185
  /**
8041
- * Disable success analytics for the underlying EarnKit, SwapKit, and
8042
- * UnifiedBalanceKit.
8186
+ * Disable success analytics for the underlying EarnKit, SwapKit,
8187
+ * BorrowKit, and UnifiedBalanceKit.
8043
8188
  *
8044
- * When `true`, completed earn, swap, and unified balance operations will not
8045
- * POST analytics events. This does not disable error reporting; use
8189
+ * When `true`, completed earn, swap, borrow, and unified balance operations
8190
+ * will not POST analytics events. This does not disable error reporting; use
8046
8191
  * {@link AppKitContext.disableErrorReporting} for that. Defaults to `false`.
8047
8192
  *
8048
8193
  * @defaultValue false
@@ -8052,7 +8197,7 @@ interface AppKitContext {
8052
8197
  * Disable error telemetry for all sub-kits.
8053
8198
  *
8054
8199
  * When `true`, none of the underlying kits (BridgeKit, SwapKit, EarnKit,
8055
- * UnifiedBalanceKit) will POST error details to the telemetry
8200
+ * BorrowKit, UnifiedBalanceKit) will POST error details to the telemetry
8056
8201
  * endpoint when operations throw. Defaults to `false` (enabled).
8057
8202
  *
8058
8203
  * @defaultValue false
package/context.d.ts CHANGED
@@ -551,8 +551,23 @@ interface CCTPXChainConfig {
551
551
  * const contractType: KitContractType = 'bridge' // Valid
552
552
  * const invalidType: KitContractType = 'invalid' // TypeScript error
553
553
  * ```
554
- */
555
- type KitContractType = 'bridge' | 'adapter';
554
+ *
555
+ * @remarks
556
+ * `'senderPreservingBatcher'` carries a stricter requirement than the others,
557
+ * because setting it wrong fails silently rather than loudly. It must name a
558
+ * batching contract that preserves the calling EOA as `msg.sender` in every
559
+ * subcall — on Arc, the `Multicall3From` predeploy, which achieves that
560
+ * through the `CallFrom` precompile. The name is deliberately more specific
561
+ * than "batcher": the ubiquitous Multicall3 at
562
+ * `0xcA11bde05977b3631167028862bE2a173976CA11` has the same ABI and the same
563
+ * selectors but does **not** qualify, since each subcall would arrive as the
564
+ * Multicall3 contract, so a batched `approve` would grant an allowance from
565
+ * the batcher's own balance rather than from the user's — a field named just
566
+ * `batcher` would make that misconfiguration look valid. Leave
567
+ * `senderPreservingBatcher` unset on any chain lacking one; an unset field
568
+ * simply means callers fall back to submitting calls one at a time.
569
+ */
570
+ type KitContractType = 'bridge' | 'adapter' | 'senderPreservingBatcher';
556
571
  /**
557
572
  * Configuration for Gateway v1 contracts.
558
573
  *
@@ -1436,8 +1451,13 @@ type PreparedChainRequest = EvmPreparedChainRequest | SolanaPreparedChainRequest
1436
1451
  * Parameters for preparing an EVM contract execution.
1437
1452
  */
1438
1453
  type EvmPreparedChainRequestParams = {
1439
- /** The type of the prepared execution. */
1440
- type: 'evm';
1454
+ /**
1455
+ * The type of the prepared execution. Optional here because EVM is the
1456
+ * only chain type `Adapter.prepare()` implementations narrow their param
1457
+ * type to in practice — callers that only ever prepare EVM requests can
1458
+ * omit it rather than repeat a discriminator that never varies for them.
1459
+ */
1460
+ type?: 'evm';
1441
1461
  /** The ABI of the contract. */
1442
1462
  abi: Abi | string[];
1443
1463
  /** The address of the contract. */
@@ -2716,6 +2736,57 @@ interface EarnActionMap {
2716
2736
  readonly claimRewards: ExecuteEarnParams;
2717
2737
  }
2718
2738
 
2739
+ /** Permit standards accepted by Borrow Adapter executions. */
2740
+ declare enum BorrowPermitType {
2741
+ /** Tokens must be approved separately. */
2742
+ NONE = 0,
2743
+ /** EIP-2612 permit calldata accompanies the token input. */
2744
+ EIP2612 = 1
2745
+ }
2746
+ /** Token input forwarded by Borrow Kit to the Adapter Contract. */
2747
+ interface BorrowTokenInput {
2748
+ readonly permitType: BorrowPermitType;
2749
+ readonly token: `0x${string}`;
2750
+ readonly amount: bigint;
2751
+ readonly permitCalldata: `0x${string}`;
2752
+ }
2753
+ /** A single instruction in a Circle-signed Borrow execution. */
2754
+ interface BorrowInstruction {
2755
+ readonly target: `0x${string}`;
2756
+ readonly data: `0x${string}`;
2757
+ readonly value: string | bigint;
2758
+ readonly tokenIn: `0x${string}`;
2759
+ readonly amountToApprove: string | bigint;
2760
+ readonly tokenOut: `0x${string}`;
2761
+ readonly minTokenOut: string | bigint;
2762
+ }
2763
+ /** A token recipient in a Circle-signed Borrow execution. */
2764
+ interface BorrowTokenRecipient {
2765
+ readonly token: `0x${string}`;
2766
+ readonly beneficiary: `0x${string}`;
2767
+ }
2768
+ /** Circle-signed Borrow parameters forwarded to the Adapter Contract. */
2769
+ interface BorrowExecutionParams {
2770
+ readonly instructions: readonly BorrowInstruction[];
2771
+ readonly tokens: readonly BorrowTokenRecipient[];
2772
+ readonly execId: string | bigint;
2773
+ readonly deadline: string | bigint;
2774
+ readonly metadata: `0x${string}`;
2775
+ }
2776
+ /** Parameters for a service-signed Borrow Adapter execution. */
2777
+ interface ExecuteBorrowParams extends ActionParameters {
2778
+ readonly executeParams: BorrowExecutionParams;
2779
+ readonly tokenInputs: BorrowTokenInput[];
2780
+ readonly signature: `0x${string}`;
2781
+ }
2782
+ /** Borrow actions supported by EVM adapters. */
2783
+ interface BorrowActionMap {
2784
+ /** Execute a Circle-signed partial loan repayment. */
2785
+ readonly repay: ExecuteBorrowParams;
2786
+ /** Execute a Circle-signed borrow. */
2787
+ readonly execute: ExecuteBorrowParams;
2788
+ }
2789
+
2719
2790
  /**
2720
2791
  * Single instruction to execute within the Adapter Contract.
2721
2792
  *
@@ -3672,6 +3743,8 @@ interface NativeActionMap {
3672
3743
  * @see {@link ActionPayload} for extracting payload types
3673
3744
  */
3674
3745
  interface ActionMap {
3746
+ /** Borrow operations that execute service-signed payloads. */
3747
+ readonly borrow: BorrowActionMap;
3675
3748
  /** CCTP-specific operations with automatic address resolution. */
3676
3749
  readonly cctp: CCTPActionMap;
3677
3750
  /** CCTPx operations (CrossChainTokenService) for cross-chain transfers of registered tokens (Circle-issued or otherwise). */
@@ -3691,6 +3764,7 @@ interface ActionMap {
3691
3764
  /** Earn operations that execute service-signed payloads via the adapter contract. */
3692
3765
  readonly earn: EarnActionMap;
3693
3766
  }
3767
+
3694
3768
  /**
3695
3769
  * Determine if a type represents an action parameter object (leaf node).
3696
3770
  *
@@ -7225,6 +7299,26 @@ interface VaultQuery {
7225
7299
  /** On-chain vault contract address. */
7226
7300
  readonly vaultAddress: string;
7227
7301
  }
7302
+ /**
7303
+ * Fields shared by both {@link EarnGasFeeEstimate} variants.
7304
+ *
7305
+ * @example
7306
+ * ```typescript
7307
+ * const base: EarnGasFeeEstimateBase = {
7308
+ * name: 'Deposit',
7309
+ * token: 'ETH',
7310
+ * blockchain: 'Arc_Testnet',
7311
+ * }
7312
+ * ```
7313
+ */
7314
+ interface EarnGasFeeEstimateBase {
7315
+ /** The earn step being estimated, e.g. "Approve", "Deposit", "Withdraw". */
7316
+ readonly name: string;
7317
+ /** Native token used to pay gas fees, e.g. "ETH". */
7318
+ readonly token: string;
7319
+ /** Blockchain where this gas fee applies. */
7320
+ readonly blockchain: ChainDefinition['chain'];
7321
+ }
7228
7322
  /**
7229
7323
  * Sort order for a vault discovery query.
7230
7324
  *
@@ -7239,6 +7333,51 @@ interface VaultQuery {
7239
7333
  */
7240
7334
  type ExploreVaultsSortBy = 'apy' | 'tvl' | 'name';
7241
7335
 
7336
+ /**
7337
+ * Estimated gas details for one transaction in a kit-level Earn quote, with
7338
+ * every amount as a decimal string so quote results stay JSON-serializable.
7339
+ *
7340
+ * @example
7341
+ * ```typescript
7342
+ * const gas: EarnEstimatedGas = { gas: '73567', gasPrice: '20003763738', fee: '1471616886913446' }
7343
+ * ```
7344
+ */
7345
+ interface EarnEstimatedGas {
7346
+ /** Estimated gas units as a decimal string, e.g. '73567'. */
7347
+ readonly gas: string;
7348
+ /** Estimated price per gas unit as a decimal string in wei. */
7349
+ readonly gasPrice: string;
7350
+ /** Total estimated fee as a decimal string in wei. */
7351
+ readonly fee: string;
7352
+ }
7353
+ /**
7354
+ * Estimated native gas fee for one transaction in an Earn quote.
7355
+ *
7356
+ * A discriminated union on `fees`: a successful estimate carries
7357
+ * {@link EarnEstimatedGas} details and no `error`; a failed estimate carries
7358
+ * `fees: null` and a sanitized `error` message.
7359
+ *
7360
+ * @example
7361
+ * ```typescript
7362
+ * function describe(entry: EarnGasFeeEstimate): string {
7363
+ * if (entry.fees === null) {
7364
+ * return `${entry.name}: estimation failed (${entry.error})`
7365
+ * }
7366
+ * return `${entry.name}: ${entry.fees.fee} wei`
7367
+ * }
7368
+ * ```
7369
+ */
7370
+ type EarnGasFeeEstimate = (EarnGasFeeEstimateBase & {
7371
+ /** Estimated gas details with amounts formatted as decimal strings. */
7372
+ readonly fees: EarnEstimatedGas;
7373
+ /** Never present on a successful estimate. */
7374
+ readonly error?: never;
7375
+ }) | (EarnGasFeeEstimateBase & {
7376
+ /** Null because estimation failed. */
7377
+ readonly fees: null;
7378
+ /** Sanitized estimation error message. */
7379
+ readonly error: string;
7380
+ });
7242
7381
  /**
7243
7382
  * Adapter context for earn operations, constrained to earn-supported chains.
7244
7383
  *
@@ -7422,6 +7561,12 @@ interface SameChainDepositParams<TFromAdapterCapabilities extends AdapterCapabil
7422
7561
  * @example '100.50' for 100.50 USDC
7423
7562
  */
7424
7563
  readonly amount: string;
7564
+ /**
7565
+ * Gas fee estimates from a prior {@link getDepositQuote} call. When provided,
7566
+ * the pre-broadcast gas reserve check uses the actual estimated cost instead
7567
+ * of the conservative fallback reserve.
7568
+ */
7569
+ readonly gasFees?: readonly EarnGasFeeEstimate[] | undefined;
7425
7570
  /** Optional earn configuration. */
7426
7571
  readonly config?: EarnConfig | undefined;
7427
7572
  }
@@ -8016,8 +8161,8 @@ interface AppKitContext {
8016
8161
  *
8017
8162
  * This property stores event handlers that are registered via the AppKit's
8018
8163
  * `on()` method. Handlers are grouped by operation type. The runtime buckets
8019
- * are `bridge` and `earn`; the context can add more operation buckets as
8020
- * AppKit wires action handlers for additional kits.
8164
+ * are `bridge`, `earn`, and `borrow`; the context can add more operation
8165
+ * buckets as AppKit wires action handlers for additional kits.
8021
8166
  *
8022
8167
  * Within each operation bucket, handlers are keyed by action name (for
8023
8168
  * example, `bridge.approve` or `earn.deposit`) or `*` for wildcard handlers.
@@ -8036,13 +8181,13 @@ interface AppKitContext {
8036
8181
  * // Earn handlers are registered with EarnKit when earn operations run
8037
8182
  * ```
8038
8183
  */
8039
- actions: Record<'bridge' | 'earn', Record<string, ((payload: unknown) => void)[]>>;
8184
+ actions: Record<'bridge' | 'earn' | 'borrow', Record<string, ((payload: unknown) => void)[]>>;
8040
8185
  /**
8041
- * Disable success analytics for the underlying EarnKit, SwapKit, and
8042
- * UnifiedBalanceKit.
8186
+ * Disable success analytics for the underlying EarnKit, SwapKit,
8187
+ * BorrowKit, and UnifiedBalanceKit.
8043
8188
  *
8044
- * When `true`, completed earn, swap, and unified balance operations will not
8045
- * POST analytics events. This does not disable error reporting; use
8189
+ * When `true`, completed earn, swap, borrow, and unified balance operations
8190
+ * will not POST analytics events. This does not disable error reporting; use
8046
8191
  * {@link AppKitContext.disableErrorReporting} for that. Defaults to `false`.
8047
8192
  *
8048
8193
  * @defaultValue false
@@ -8052,7 +8197,7 @@ interface AppKitContext {
8052
8197
  * Disable error telemetry for all sub-kits.
8053
8198
  *
8054
8199
  * When `true`, none of the underlying kits (BridgeKit, SwapKit, EarnKit,
8055
- * UnifiedBalanceKit) will POST error details to the telemetry
8200
+ * BorrowKit, UnifiedBalanceKit) will POST error details to the telemetry
8056
8201
  * endpoint when operations throw. Defaults to `false` (enabled).
8057
8202
  *
8058
8203
  * @defaultValue false
package/context.mjs CHANGED
@@ -60,6 +60,7 @@ if (typeof window !== 'undefined' && typeof window.Buffer === 'undefined') {
60
60
  actions: {
61
61
  bridge: {},
62
62
  earn: {},
63
+ borrow: {},
63
64
  ...params.actions
64
65
  }
65
66
  };