@gearbox-protocol/sdk 14.10.6 → 14.11.0-next.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.
Files changed (66) hide show
  1. package/dist/cjs/abi/errors.js +42 -2
  2. package/dist/cjs/preview/index.js +26 -0
  3. package/dist/cjs/preview/package.json +1 -0
  4. package/dist/cjs/preview/parse/classifyInnerOperations.js +130 -0
  5. package/dist/cjs/preview/parse/errors.js +47 -0
  6. package/dist/cjs/preview/parse/index.js +32 -0
  7. package/dist/cjs/preview/parse/parseCreditFacadeOperation.js +111 -0
  8. package/dist/cjs/preview/parse/parsePoolOperation.js +62 -0
  9. package/dist/cjs/preview/parse/parseTransaction.js +46 -0
  10. package/dist/cjs/preview/parse/types.js +30 -0
  11. package/dist/cjs/preview/prerequisites/AllowancePrerequisite.js +78 -0
  12. package/dist/cjs/preview/prerequisites/BalancePrerequisite.js +77 -0
  13. package/dist/cjs/preview/prerequisites/Prerequisite.js +85 -0
  14. package/dist/cjs/preview/prerequisites/buildPrerequisites.js +141 -0
  15. package/dist/cjs/preview/prerequisites/index.js +32 -0
  16. package/dist/cjs/preview/prerequisites/runPrerequisites.js +71 -0
  17. package/dist/cjs/preview/prerequisites/types.js +16 -0
  18. package/dist/cjs/preview/simulate/decodeSimulationError.js +64 -0
  19. package/dist/cjs/preview/simulate/extractERC20Transfers.js +47 -0
  20. package/dist/cjs/preview/simulate/index.js +28 -0
  21. package/dist/cjs/preview/simulate/simulatePoolOperation.js +94 -0
  22. package/dist/cjs/preview/simulate/types.js +16 -0
  23. package/dist/esm/abi/errors.js +40 -1
  24. package/dist/esm/preview/index.js +3 -0
  25. package/dist/esm/preview/package.json +1 -0
  26. package/dist/esm/preview/parse/classifyInnerOperations.js +108 -0
  27. package/dist/esm/preview/parse/errors.js +22 -0
  28. package/dist/esm/preview/parse/index.js +6 -0
  29. package/dist/esm/preview/parse/parseCreditFacadeOperation.js +91 -0
  30. package/dist/esm/preview/parse/parsePoolOperation.js +38 -0
  31. package/dist/esm/preview/parse/parseTransaction.js +25 -0
  32. package/dist/esm/preview/parse/types.js +6 -0
  33. package/dist/esm/preview/prerequisites/AllowancePrerequisite.js +57 -0
  34. package/dist/esm/preview/prerequisites/BalancePrerequisite.js +56 -0
  35. package/dist/esm/preview/prerequisites/Prerequisite.js +63 -0
  36. package/dist/esm/preview/prerequisites/buildPrerequisites.js +117 -0
  37. package/dist/esm/preview/prerequisites/index.js +6 -0
  38. package/dist/esm/preview/prerequisites/runPrerequisites.js +47 -0
  39. package/dist/esm/preview/prerequisites/types.js +0 -0
  40. package/dist/esm/preview/simulate/decodeSimulationError.js +44 -0
  41. package/dist/esm/preview/simulate/extractERC20Transfers.js +23 -0
  42. package/dist/esm/preview/simulate/index.js +4 -0
  43. package/dist/esm/preview/simulate/simulatePoolOperation.js +70 -0
  44. package/dist/esm/preview/simulate/types.js +0 -0
  45. package/dist/types/abi/errors.d.ts +57 -0
  46. package/dist/types/preview/index.d.ts +3 -0
  47. package/dist/types/preview/parse/classifyInnerOperations.d.ts +21 -0
  48. package/dist/types/preview/parse/errors.d.ts +17 -0
  49. package/dist/types/preview/parse/index.d.ts +6 -0
  50. package/dist/types/preview/parse/parseCreditFacadeOperation.d.ts +18 -0
  51. package/dist/types/preview/parse/parsePoolOperation.d.ts +15 -0
  52. package/dist/types/preview/parse/parseTransaction.d.ts +23 -0
  53. package/dist/types/preview/parse/types.d.ts +78 -0
  54. package/dist/types/preview/prerequisites/AllowancePrerequisite.d.ts +24 -0
  55. package/dist/types/preview/prerequisites/BalancePrerequisite.d.ts +23 -0
  56. package/dist/types/preview/prerequisites/Prerequisite.d.ts +60 -0
  57. package/dist/types/preview/prerequisites/buildPrerequisites.d.ts +16 -0
  58. package/dist/types/preview/prerequisites/index.d.ts +6 -0
  59. package/dist/types/preview/prerequisites/runPrerequisites.d.ts +12 -0
  60. package/dist/types/preview/prerequisites/types.d.ts +78 -0
  61. package/dist/types/preview/simulate/decodeSimulationError.d.ts +18 -0
  62. package/dist/types/preview/simulate/extractERC20Transfers.d.ts +11 -0
  63. package/dist/types/preview/simulate/index.d.ts +4 -0
  64. package/dist/types/preview/simulate/simulatePoolOperation.d.ts +30 -0
  65. package/dist/types/preview/simulate/types.d.ts +43 -0
  66. package/package.json +6 -1
@@ -0,0 +1,78 @@
1
+ import type { Address } from "viem";
2
+ import type { OnchainSDK } from "../../sdk/index.js";
3
+ /**
4
+ * Extension point that ties each prerequisite kind to its detail payload.
5
+ *
6
+ * Adding a new prerequisite kind only requires a new entry here: the generic
7
+ * machinery below and the UI renderer registry both key off this map, so TS
8
+ * forces every consumer to handle the new kind.
9
+ *
10
+ * IMPORTANT: only add prerequisites that are *actionable by the transaction
11
+ * sender* (the LP provider or borrower). A valid prerequisite is one the user
12
+ * can resolve themselves before retrying, e.g. approve a token (`allowance`)
13
+ * or acquire/free up funds (`balance`). Do NOT add protocol- or admin-level
14
+ * state the user cannot change, such as pool pause status or available pool
15
+ * liquidity; those are not actionable and must not be listed as prerequisites.
16
+ */
17
+ export interface PrerequisiteDetailMap {
18
+ /** ERC-20 allowance from `owner` to `spender` must cover `required`. */
19
+ allowance: {
20
+ token: Address;
21
+ owner: Address;
22
+ spender: Address;
23
+ required: bigint;
24
+ /** On-chain allowance read; only present when the read succeeded. */
25
+ actual?: bigint;
26
+ };
27
+ /** ERC-20 balance of `owner` must cover `required`. */
28
+ balance: {
29
+ token: Address;
30
+ owner: Address;
31
+ required: bigint;
32
+ /** On-chain balance read; only present when the read succeeded. */
33
+ actual?: bigint;
34
+ };
35
+ }
36
+ export type PrerequisiteKind = keyof PrerequisiteDetailMap;
37
+ export type PrerequisiteDetail<K extends PrerequisiteKind = PrerequisiteKind> = PrerequisiteDetailMap[K];
38
+ /** Failure of the underlying on-chain read (revert, decode error, RPC error). */
39
+ export interface PrerequisiteError {
40
+ /** Decoded revert reason / error name, human-readable. */
41
+ reason: string;
42
+ /** Original error, kept for debugging. */
43
+ cause?: unknown;
44
+ }
45
+ export interface PrerequisiteBase<K extends PrerequisiteKind> {
46
+ id: string;
47
+ kind: K;
48
+ title: string;
49
+ detail: PrerequisiteDetail<K>;
50
+ }
51
+ /**
52
+ * Outcome of verifying a single prerequisite: either the read succeeded (a
53
+ * `satisfied` boolean) or it reverted/failed (an `error` with the revert
54
+ * reason). The two variants are mutually exclusive.
55
+ */
56
+ export type PrerequisiteResult<K extends PrerequisiteKind = PrerequisiteKind> = PrerequisiteBase<K> & ({
57
+ satisfied: boolean;
58
+ error?: undefined;
59
+ } | {
60
+ satisfied?: undefined;
61
+ error: PrerequisiteError;
62
+ });
63
+ /**
64
+ * Discriminated union over every prerequisite kind. Switching on `kind`
65
+ * narrows `detail` to the matching payload, so React components can render
66
+ * kind-specific details with full type safety.
67
+ */
68
+ export type AnyPrerequisiteResult = {
69
+ [K in PrerequisiteKind]: PrerequisiteResult<K>;
70
+ }[PrerequisiteKind];
71
+ /** Shared inputs for building and verifying prerequisites. */
72
+ export interface PrerequisiteContext {
73
+ sdk: OnchainSDK;
74
+ /** Address whose balances/allowances are checked (the tx sender). */
75
+ wallet: Address;
76
+ /** Block to read at; defaults to latest. Only set for testnet forks. */
77
+ blockNumber?: bigint;
78
+ }
@@ -0,0 +1,18 @@
1
+ import { type Hex } from "viem";
2
+ import type { SimulationError } from "./types.js";
3
+ /** Per-call slice of a `simulateCalls` failure we need to decode. */
4
+ export interface SimulationRevert {
5
+ error?: Error;
6
+ /** Raw revert return data, when present. */
7
+ data?: Hex;
8
+ }
9
+ /**
10
+ * Decodes a simulated transaction revert into a {@link SimulationError}.
11
+ *
12
+ * The simulated call is raw calldata (no ABI), so viem cannot decode the revert
13
+ * itself. We first try to decode the raw return bytes against the SDK's
14
+ * {@link errorAbis} (Gearbox protocol exceptions plus standard ERC-20 custom
15
+ * errors); failing that, we walk viem's error chain for a
16
+ * {@link ContractFunctionRevertedError} (covers `Error(string)` / `Panic`).
17
+ */
18
+ export declare function decodeSimulationError(revert: SimulationRevert): SimulationError;
@@ -0,0 +1,11 @@
1
+ import { type Address, type Log } from "viem";
2
+ import type { TokenTransfer } from "../../plugins/adapters/index.js";
3
+ /**
4
+ * Parses ERC-20 `Transfer` logs and keeps only those involving one of the
5
+ * watched addresses (as sender or receiver). A log that touches several watched
6
+ * addresses is still emitted once.
7
+ *
8
+ * @param logs - raw logs from the simulated call
9
+ * @param watch - addresses whose transfers we care about (e.g. wallet + recipient)
10
+ */
11
+ export declare function extractERC20Transfers(logs: Log[], watch: Address[]): TokenTransfer[];
@@ -0,0 +1,4 @@
1
+ export * from "./decodeSimulationError.js";
2
+ export * from "./extractERC20Transfers.js";
3
+ export * from "./simulatePoolOperation.js";
4
+ export * from "./types.js";
@@ -0,0 +1,30 @@
1
+ import { type Address, type Hex } from "viem";
2
+ import type { OnchainSDK } from "../../sdk/index.js";
3
+ import type { PoolOperation } from "../parse/index.js";
4
+ import type { PoolSimulationResult } from "./types.js";
5
+ export interface SimulatePoolOperationInput {
6
+ /** Only `client` is used, so any OnchainSDK works. */
7
+ sdk: OnchainSDK;
8
+ /** Parsed operation, used to resolve the underlying and pool tokens. */
9
+ operation: PoolOperation;
10
+ /** Target contract the calldata is sent to (the pool). */
11
+ to: Address;
12
+ /** Raw deposit/redeem calldata to simulate. */
13
+ calldata: Hex;
14
+ /** Wallet whose balance changes and transfers we track. */
15
+ wallet: Address;
16
+ /** Block to simulate at; defaults to latest. Only set for testnet forks. */
17
+ blockNumber?: bigint;
18
+ }
19
+ /**
20
+ * Simulates a pool deposit/redeem by sandwiching the raw calldata between
21
+ * `balanceOf(wallet)` reads of the underlying and pool (share) tokens.
22
+ *
23
+ * On success, returns the ERC-20 transfers emitted by the call that involve the
24
+ * wallet or the operation recipient (for merging into the parsed operation) and
25
+ * the balance changes grouped by watched address (wallet, plus the recipient
26
+ * when distinct); on revert, returns the decoded reason. Simulation runs against
27
+ * real chain state (no overrides), so an unmet prerequisite surfaces here as a
28
+ * failure.
29
+ */
30
+ export declare function simulatePoolOperation(input: SimulatePoolOperationInput): Promise<PoolSimulationResult>;
@@ -0,0 +1,43 @@
1
+ import type { Address } from "viem";
2
+ import type { TokenTransfer } from "../../plugins/adapters/index.js";
3
+ /**
4
+ * Change in an address's balance of a single token over the simulated call.
5
+ * `delta` is `after - before` (negative when the address spent the token).
6
+ */
7
+ export interface TokenBalanceChange {
8
+ token: Address;
9
+ before: bigint;
10
+ after: bigint;
11
+ delta: bigint;
12
+ }
13
+ /**
14
+ * Balance changes for a single watched address (e.g. the wallet or the
15
+ * operation recipient). Keyed purely by address; UI labeling is resolved
16
+ * separately by the presentation layer.
17
+ */
18
+ export interface AddressBalanceChanges {
19
+ address: Address;
20
+ changes: TokenBalanceChange[];
21
+ }
22
+ /** Decoded revert of the simulated transaction. */
23
+ export interface SimulationError {
24
+ /** Human-readable revert reason / error name. */
25
+ reason: string;
26
+ /** Original error, kept for debugging. */
27
+ cause?: unknown;
28
+ }
29
+ /**
30
+ * Outcome of simulating a pool operation. On success it carries the
31
+ * wallet-filtered ERC-20 transfers (to merge into the parsed operation) and the
32
+ * balance changes grouped by watched address; on failure it carries the decoded
33
+ * revert reason.
34
+ */
35
+ export type PoolSimulationResult = {
36
+ status: "success";
37
+ transfers: TokenTransfer[];
38
+ balanceChanges: AddressBalanceChanges[];
39
+ gasUsed: bigint;
40
+ } | {
41
+ status: "failure";
42
+ error: SimulationError;
43
+ };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@gearbox-protocol/sdk",
3
- "version": "14.10.6",
3
+ "version": "14.11.0-next.1",
4
4
  "description": "Gearbox SDK",
5
5
  "license": "MIT",
6
6
  "repository": {
@@ -44,6 +44,11 @@
44
44
  "import": "./dist/esm/permissionless/index.js",
45
45
  "default": "./dist/cjs/permissionless/index.js"
46
46
  },
47
+ "./preview": {
48
+ "types": "./dist/types/preview/index.d.ts",
49
+ "import": "./dist/esm/preview/index.js",
50
+ "default": "./dist/cjs/preview/index.js"
51
+ },
47
52
  "./common-utils": {
48
53
  "types": "./dist/types/common-utils/index.d.ts",
49
54
  "import": "./dist/esm/common-utils/index.js",