@w3lib/solana-batch-call 0.3.0 → 0.5.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 (198) hide show
  1. package/CHANGELOG.md +43 -0
  2. package/README.md +304 -3
  3. package/dist/address.d.ts +2 -0
  4. package/dist/address.d.ts.map +1 -1
  5. package/dist/address.js +8 -0
  6. package/dist/address.js.map +1 -1
  7. package/dist/approvals.d.ts +129 -0
  8. package/dist/approvals.d.ts.map +1 -0
  9. package/dist/approvals.js +221 -0
  10. package/dist/approvals.js.map +1 -0
  11. package/dist/fees.d.ts +89 -0
  12. package/dist/fees.d.ts.map +1 -0
  13. package/dist/fees.js +166 -0
  14. package/dist/fees.js.map +1 -0
  15. package/dist/index.d.ts +1 -1
  16. package/dist/index.d.ts.map +1 -1
  17. package/dist/index.js +1 -1
  18. package/dist/index.js.map +1 -1
  19. package/dist/layout.d.ts +2 -0
  20. package/dist/layout.d.ts.map +1 -1
  21. package/dist/layout.js +2 -2
  22. package/dist/layout.js.map +1 -1
  23. package/dist/liquidity/amm.d.ts +7 -0
  24. package/dist/liquidity/amm.d.ts.map +1 -0
  25. package/dist/liquidity/amm.js +307 -0
  26. package/dist/liquidity/amm.js.map +1 -0
  27. package/dist/liquidity/clmm.d.ts +18 -0
  28. package/dist/liquidity/clmm.d.ts.map +1 -0
  29. package/dist/liquidity/clmm.js +85 -0
  30. package/dist/liquidity/clmm.js.map +1 -0
  31. package/dist/liquidity/common.d.ts +94 -0
  32. package/dist/liquidity/common.d.ts.map +1 -0
  33. package/dist/liquidity/common.js +228 -0
  34. package/dist/liquidity/common.js.map +1 -0
  35. package/dist/liquidity/index.d.ts +34 -0
  36. package/dist/liquidity/index.d.ts.map +1 -0
  37. package/dist/liquidity/index.js +157 -0
  38. package/dist/liquidity/index.js.map +1 -0
  39. package/dist/liquidity/orca.d.ts +6 -0
  40. package/dist/liquidity/orca.d.ts.map +1 -0
  41. package/dist/liquidity/orca.js +303 -0
  42. package/dist/liquidity/orca.js.map +1 -0
  43. package/dist/liquidity/raydiumClmm.d.ts +6 -0
  44. package/dist/liquidity/raydiumClmm.d.ts.map +1 -0
  45. package/dist/liquidity/raydiumClmm.js +307 -0
  46. package/dist/liquidity/raydiumClmm.js.map +1 -0
  47. package/dist/liquidity/types.d.ts +150 -0
  48. package/dist/liquidity/types.d.ts.map +1 -0
  49. package/dist/liquidity/types.js +2 -0
  50. package/dist/liquidity/types.js.map +1 -0
  51. package/dist/lp.d.ts +53 -15
  52. package/dist/lp.d.ts.map +1 -1
  53. package/dist/lp.js +15 -38
  54. package/dist/lp.js.map +1 -1
  55. package/dist/lpMath.d.ts +45 -0
  56. package/dist/lpMath.d.ts.map +1 -1
  57. package/dist/lpMath.js +189 -0
  58. package/dist/lpMath.js.map +1 -1
  59. package/dist/names.d.ts +68 -0
  60. package/dist/names.d.ts.map +1 -0
  61. package/dist/names.js +257 -0
  62. package/dist/names.js.map +1 -0
  63. package/dist/pools.d.ts +9 -0
  64. package/dist/pools.d.ts.map +1 -0
  65. package/dist/pools.js +45 -0
  66. package/dist/pools.js.map +1 -0
  67. package/dist/portfolio.d.ts +64 -0
  68. package/dist/portfolio.d.ts.map +1 -0
  69. package/dist/portfolio.js +57 -0
  70. package/dist/portfolio.js.map +1 -0
  71. package/dist/price.d.ts +90 -0
  72. package/dist/price.d.ts.map +1 -0
  73. package/dist/price.js +287 -0
  74. package/dist/price.js.map +1 -0
  75. package/dist/risk.d.ts +84 -0
  76. package/dist/risk.d.ts.map +1 -0
  77. package/dist/risk.js +211 -0
  78. package/dist/risk.js.map +1 -0
  79. package/dist/rpc.d.ts +2 -0
  80. package/dist/rpc.d.ts.map +1 -1
  81. package/dist/rpc.js +33 -9
  82. package/dist/rpc.js.map +1 -1
  83. package/dist/subpaths/approvals.d.ts +29 -0
  84. package/dist/subpaths/approvals.d.ts.map +1 -0
  85. package/dist/subpaths/approvals.js +30 -0
  86. package/dist/subpaths/approvals.js.map +1 -0
  87. package/dist/subpaths/fees.d.ts +23 -0
  88. package/dist/subpaths/fees.d.ts.map +1 -0
  89. package/dist/subpaths/fees.js +25 -0
  90. package/dist/subpaths/fees.js.map +1 -0
  91. package/dist/subpaths/liquidity.d.ts +23 -0
  92. package/dist/subpaths/liquidity.d.ts.map +1 -0
  93. package/dist/subpaths/liquidity.js +19 -0
  94. package/dist/subpaths/liquidity.js.map +1 -0
  95. package/dist/subpaths/lp.d.ts +1 -1
  96. package/dist/subpaths/lp.d.ts.map +1 -1
  97. package/dist/subpaths/lp.js +1 -1
  98. package/dist/subpaths/lp.js.map +1 -1
  99. package/dist/subpaths/names.d.ts +37 -0
  100. package/dist/subpaths/names.d.ts.map +1 -0
  101. package/dist/subpaths/names.js +27 -0
  102. package/dist/subpaths/names.js.map +1 -0
  103. package/dist/subpaths/price.d.ts +40 -0
  104. package/dist/subpaths/price.d.ts.map +1 -0
  105. package/dist/subpaths/price.js +43 -0
  106. package/dist/subpaths/price.js.map +1 -0
  107. package/dist/subpaths/risk.d.ts +28 -0
  108. package/dist/subpaths/risk.d.ts.map +1 -0
  109. package/dist/subpaths/risk.js +30 -0
  110. package/dist/subpaths/risk.js.map +1 -0
  111. package/dist/subpaths/swap.d.ts +22 -0
  112. package/dist/subpaths/swap.d.ts.map +1 -0
  113. package/dist/subpaths/swap.js +21 -0
  114. package/dist/subpaths/swap.js.map +1 -0
  115. package/dist/subpaths/write.d.ts +1 -1
  116. package/dist/subpaths/write.d.ts.map +1 -1
  117. package/dist/subpaths/write.js +1 -1
  118. package/dist/subpaths/write.js.map +1 -1
  119. package/dist/swap/amm.d.ts +20 -0
  120. package/dist/swap/amm.d.ts.map +1 -0
  121. package/dist/swap/amm.js +77 -0
  122. package/dist/swap/amm.js.map +1 -0
  123. package/dist/swap/clmmMath.d.ts +24 -0
  124. package/dist/swap/clmmMath.d.ts.map +1 -0
  125. package/dist/swap/clmmMath.js +82 -0
  126. package/dist/swap/clmmMath.js.map +1 -0
  127. package/dist/swap/common.d.ts +68 -0
  128. package/dist/swap/common.d.ts.map +1 -0
  129. package/dist/swap/common.js +65 -0
  130. package/dist/swap/common.js.map +1 -0
  131. package/dist/swap/cpmm.d.ts +28 -0
  132. package/dist/swap/cpmm.d.ts.map +1 -0
  133. package/dist/swap/cpmm.js +113 -0
  134. package/dist/swap/cpmm.js.map +1 -0
  135. package/dist/swap/index.d.ts +145 -0
  136. package/dist/swap/index.d.ts.map +1 -0
  137. package/dist/swap/index.js +349 -0
  138. package/dist/swap/index.js.map +1 -0
  139. package/dist/swap/orca.d.ts +50 -0
  140. package/dist/swap/orca.d.ts.map +1 -0
  141. package/dist/swap/orca.js +382 -0
  142. package/dist/swap/orca.js.map +1 -0
  143. package/dist/swap/raydiumClmm.d.ts +62 -0
  144. package/dist/swap/raydiumClmm.d.ts.map +1 -0
  145. package/dist/swap/raydiumClmm.js +447 -0
  146. package/dist/swap/raydiumClmm.js.map +1 -0
  147. package/dist/tradeCheck.d.ts +45 -0
  148. package/dist/tradeCheck.d.ts.map +1 -0
  149. package/dist/tradeCheck.js +131 -0
  150. package/dist/tradeCheck.js.map +1 -0
  151. package/dist/write/instructions.d.ts +7 -0
  152. package/dist/write/instructions.d.ts.map +1 -1
  153. package/dist/write/instructions.js +24 -1
  154. package/dist/write/instructions.js.map +1 -1
  155. package/dist/write/transaction.d.ts +23 -0
  156. package/dist/write/transaction.d.ts.map +1 -1
  157. package/dist/write/transaction.js +50 -0
  158. package/dist/write/transaction.js.map +1 -1
  159. package/package.json +41 -2
  160. package/src/address.ts +9 -0
  161. package/src/approvals.ts +358 -0
  162. package/src/fees.ts +259 -0
  163. package/src/index.ts +1 -1
  164. package/src/layout.ts +2 -2
  165. package/src/liquidity/amm.ts +353 -0
  166. package/src/liquidity/clmm.ts +108 -0
  167. package/src/liquidity/common.ts +285 -0
  168. package/src/liquidity/index.ts +177 -0
  169. package/src/liquidity/orca.ts +344 -0
  170. package/src/liquidity/raydiumClmm.ts +348 -0
  171. package/src/liquidity/types.ts +158 -0
  172. package/src/lp.ts +17 -52
  173. package/src/lpMath.ts +215 -0
  174. package/src/names.ts +329 -0
  175. package/src/pools.ts +43 -0
  176. package/src/portfolio.ts +124 -0
  177. package/src/price.ts +366 -0
  178. package/src/risk.ts +243 -0
  179. package/src/rpc.ts +36 -9
  180. package/src/subpaths/approvals.ts +47 -0
  181. package/src/subpaths/fees.ts +41 -0
  182. package/src/subpaths/liquidity.ts +45 -0
  183. package/src/subpaths/lp.ts +9 -0
  184. package/src/subpaths/names.ts +45 -0
  185. package/src/subpaths/price.ts +62 -0
  186. package/src/subpaths/risk.ts +36 -0
  187. package/src/subpaths/swap.ts +41 -0
  188. package/src/subpaths/write.ts +2 -0
  189. package/src/swap/amm.ts +88 -0
  190. package/src/swap/clmmMath.ts +96 -0
  191. package/src/swap/common.ts +113 -0
  192. package/src/swap/cpmm.ts +132 -0
  193. package/src/swap/index.ts +467 -0
  194. package/src/swap/orca.ts +397 -0
  195. package/src/swap/raydiumClmm.ts +464 -0
  196. package/src/tradeCheck.ts +166 -0
  197. package/src/write/instructions.ts +26 -1
  198. package/src/write/transaction.ts +62 -0
@@ -0,0 +1,30 @@
1
+ /**
2
+ * 授权管理(子路径 `@w3lib/solana-batch-call/approvals`):批量查地址的代币账户给出的授权(delegate)、可以关闭回收租金的空账户,
3
+ * 批量撤销 / 关闭。不放在主入口,不用时打包不会带上这部分代码;发送的代码按需加载。
4
+ *
5
+ * ```ts
6
+ * import { closeTokenAccounts, getApprovals, revokeApprovals } from '@w3lib/solana-batch-call/approvals'
7
+ *
8
+ * const list = await getApprovals(owner, { mints: [USDC, BONK] })
9
+ * await revokeApprovals(client, key, list)
10
+ * await closeTokenAccounts(client, key, list.filter((a) => a.amount === '0'))
11
+ * ```
12
+ */
13
+ import { approvals } from '../approvals.js';
14
+ import { resolve } from '../shortcuts.js';
15
+ export { approvals, buildCloses, buildRevokes, closeTokenAccounts, parseTokenAccountState, revokeApprovals, } from '../approvals.js';
16
+ export { closeAccount, harvestWithheldTokensToMint, revoke } from '../write/instructions.js';
17
+ /**
18
+ * 查地址的代币账户给出的授权和可以关闭的空账户,节点参数与 getBalances 相同。
19
+ *
20
+ * ```ts
21
+ * await getApprovals(owner, { mints: [USDC, BONK] }) // 指定代币:读 ATA,免费公共节点也能用
22
+ * await getApprovals(owner, { provider: 'https://my-rpc…' }) // 全部代币账户:需要支持 getTokenAccountsByOwner 的节点
23
+ * // [{ account, mint: USDC, symbol: 'USDC', delegate: 'GYFk…', delegatedAmount: '6993125', revocable: true, closable: false, closeBlocker: 'balance', … }]
24
+ * ```
25
+ */
26
+ export function getApprovals(owner, options = {}) {
27
+ const { client, own } = resolve(options, ['mints', 'all', 'signal']);
28
+ return approvals(client, owner, own);
29
+ }
30
+ //# sourceMappingURL=approvals.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"approvals.js","sourceRoot":"","sources":["../../src/subpaths/approvals.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AACH,OAAO,EAAE,SAAS,EAAkD,MAAM,iBAAiB,CAAA;AAC3F,OAAO,EAAE,OAAO,EAAwB,MAAM,iBAAiB,CAAA;AAE/D,OAAO,EACL,SAAS,EACT,WAAW,EACX,YAAY,EACZ,kBAAkB,EAClB,sBAAsB,EACtB,eAAe,GAQhB,MAAM,iBAAiB,CAAA;AACxB,OAAO,EAAE,YAAY,EAAE,2BAA2B,EAAE,MAAM,EAAE,MAAM,0BAA0B,CAAA;AAI5F;;;;;;;;GAQG;AACH,MAAM,UAAU,YAAY,CAAC,KAAa,EAAE,UAA+B,EAAE;IAC3E,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC,OAAO,EAAE,KAAK,EAAE,QAAQ,CAAC,CAAC,CAAA;IACpE,OAAO,SAAS,CAAC,MAAM,EAAE,KAAK,EAAE,GAAG,CAAC,CAAA;AACtC,CAAC"}
@@ -0,0 +1,23 @@
1
+ /**
2
+ * 手续费估算(子路径 `@w3lib/solana-batch-call/fees`):三档优先费建议,一笔交易的花费(基础费 + 优先费 + 新建账户的押金)。
3
+ * 不放在主入口,不用时打包不会带上这部分代码;模拟交易的代码按需加载。
4
+ *
5
+ * ```ts
6
+ * import { getCostEstimate, getFeeEstimate } from '@w3lib/solana-batch-call/fees'
7
+ *
8
+ * await getFeeEstimate({ accounts: [pool] })
9
+ * await getCostEstimate({ feePayer: owner, instructions })
10
+ * ```
11
+ */
12
+ import { type CostEstimate, type CostInput, type EstimateCostOptions, type EstimateFeesOptions, type PriorityFeeEstimate } from '../fees.js';
13
+ import { type ShortcutOptions } from '../shortcuts.js';
14
+ export { estimateCost, estimateFees, type CostEstimate, type CostInput, type CreatedAccount, type EstimateCostOptions, type EstimateFeesOptions, type FeeLevel, type PriorityFeeEstimate, } from '../fees.js';
15
+ export interface GetFeeEstimateOptions extends EstimateFeesOptions, ShortcutOptions {
16
+ }
17
+ /** 当前的三档优先费建议(micro-lamports / 计算单元),节点参数与 getBalances 相同 */
18
+ export declare function getFeeEstimate(options?: GetFeeEstimateOptions): Promise<PriorityFeeEstimate>;
19
+ export interface GetCostEstimateOptions extends EstimateCostOptions, ShortcutOptions {
20
+ }
21
+ /** 一笔交易的花费(基础费 + 优先费 + 新建账户的押金),模拟一次、不发送 */
22
+ export declare function getCostEstimate(input: CostInput, options?: GetCostEstimateOptions): Promise<CostEstimate>;
23
+ //# sourceMappingURL=fees.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fees.d.ts","sourceRoot":"","sources":["../../src/subpaths/fees.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AACH,OAAO,EAA8B,KAAK,YAAY,EAAE,KAAK,SAAS,EAAE,KAAK,mBAAmB,EAAE,KAAK,mBAAmB,EAAE,KAAK,mBAAmB,EAAE,MAAM,YAAY,CAAA;AACxK,OAAO,EAAW,KAAK,eAAe,EAAE,MAAM,iBAAiB,CAAA;AAE/D,OAAO,EACL,YAAY,EACZ,YAAY,EACZ,KAAK,YAAY,EACjB,KAAK,SAAS,EACd,KAAK,cAAc,EACnB,KAAK,mBAAmB,EACxB,KAAK,mBAAmB,EACxB,KAAK,QAAQ,EACb,KAAK,mBAAmB,GACzB,MAAM,YAAY,CAAA;AAEnB,MAAM,WAAW,qBAAsB,SAAQ,mBAAmB,EAAE,eAAe;CAAG;AAEtF,6DAA6D;AAC7D,wBAAgB,cAAc,CAAC,OAAO,GAAE,qBAA0B,GAAG,OAAO,CAAC,mBAAmB,CAAC,CAGhG;AAED,MAAM,WAAW,sBAAuB,SAAQ,mBAAmB,EAAE,eAAe;CAAG;AAEvF,4CAA4C;AAC5C,wBAAgB,eAAe,CAAC,KAAK,EAAE,SAAS,EAAE,OAAO,GAAE,sBAA2B,GAAG,OAAO,CAAC,YAAY,CAAC,CAG7G"}
@@ -0,0 +1,25 @@
1
+ /**
2
+ * 手续费估算(子路径 `@w3lib/solana-batch-call/fees`):三档优先费建议,一笔交易的花费(基础费 + 优先费 + 新建账户的押金)。
3
+ * 不放在主入口,不用时打包不会带上这部分代码;模拟交易的代码按需加载。
4
+ *
5
+ * ```ts
6
+ * import { getCostEstimate, getFeeEstimate } from '@w3lib/solana-batch-call/fees'
7
+ *
8
+ * await getFeeEstimate({ accounts: [pool] })
9
+ * await getCostEstimate({ feePayer: owner, instructions })
10
+ * ```
11
+ */
12
+ import { estimateCost, estimateFees } from '../fees.js';
13
+ import { resolve } from '../shortcuts.js';
14
+ export { estimateCost, estimateFees, } from '../fees.js';
15
+ /** 当前的三档优先费建议(micro-lamports / 计算单元),节点参数与 getBalances 相同 */
16
+ export function getFeeEstimate(options = {}) {
17
+ const { client, own } = resolve(options, ['accounts', 'percentiles', 'signal']);
18
+ return estimateFees(client, own);
19
+ }
20
+ /** 一笔交易的花费(基础费 + 优先费 + 新建账户的押金),模拟一次、不发送 */
21
+ export function getCostEstimate(input, options = {}) {
22
+ const { client, own } = resolve(options, ['percentiles', 'level', 'priorityFee', 'fees', 'signal']);
23
+ return estimateCost(client, input, own);
24
+ }
25
+ //# sourceMappingURL=fees.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fees.js","sourceRoot":"","sources":["../../src/subpaths/fees.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AACH,OAAO,EAAE,YAAY,EAAE,YAAY,EAAmH,MAAM,YAAY,CAAA;AACxK,OAAO,EAAE,OAAO,EAAwB,MAAM,iBAAiB,CAAA;AAE/D,OAAO,EACL,YAAY,EACZ,YAAY,GAQb,MAAM,YAAY,CAAA;AAInB,6DAA6D;AAC7D,MAAM,UAAU,cAAc,CAAC,UAAiC,EAAE;IAChE,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC,UAAU,EAAE,aAAa,EAAE,QAAQ,CAAC,CAAC,CAAA;IAC/E,OAAO,YAAY,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;AAClC,CAAC;AAID,4CAA4C;AAC5C,MAAM,UAAU,eAAe,CAAC,KAAgB,EAAE,UAAkC,EAAE;IACpF,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC,aAAa,EAAE,OAAO,EAAE,aAAa,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC,CAAA;IACnG,OAAO,YAAY,CAAC,MAAM,EAAE,KAAK,EAAE,GAAG,CAAC,CAAA;AACzC,CAAC"}
@@ -0,0 +1,23 @@
1
+ /**
2
+ * 添加 / 移除流动性(子路径 `@w3lib/solana-batch-call/liquidity`):Raydium CLMM、Orca Whirlpool(仓位 NFT),
3
+ * Raydium AMM v4、CPMM(LP 代币)。不放在主入口,不用时打包不会带上这部分代码。不依赖各 DEX 的 SDK。
4
+ *
5
+ * - build*:只读取、不签名,返回预计的数量和按顺序执行的指令,可以当作报价,也可以自己组交易发送
6
+ * - addLiquidity / removeLiquidity / collectFees:构建后签名发送(同 /write 的 batchCall),SOL 自动包装 / 解包
7
+ *
8
+ * ```ts
9
+ * import { getLpPositions } from '@w3lib/solana-batch-call/lp'
10
+ * import { addLiquidity, removeLiquidity } from '@w3lib/solana-batch-call/liquidity'
11
+ *
12
+ * await addLiquidity(client, secretKey, { protocol: 'raydium-clmm', pool, priceLower: 120, priceUpper: 180, amount0Formatted: '1' })
13
+ * const [position] = await getLpPositions(owner, { provider: rpc })
14
+ * await removeLiquidity(client, secretKey, { position, percent: 50 })
15
+ * ```
16
+ */
17
+ export { addLiquidity, buildAddLiquidity, buildCollectFees, buildRemoveLiquidity, collectFees, removeLiquidity } from '../liquidity/index.js';
18
+ export type { SolanaAddLiquidityParams, SolanaCollectFeesParams, SolanaIncreaseLiquidityParams, SolanaLiquidityOptions, SolanaLiquidityPlan, SolanaLiquidityResult, SolanaLiquiditySendOptions, SolanaLiquidityStep, SolanaLiquidityStepResult, SolanaNewPositionParams, SolanaPositionRef, SolanaRemoveLiquidityParams, } from '../liquidity/types.js';
19
+ export { getLiquidityForAmounts, getMaxAmounts, getMinAmounts, getMintAmounts, nearestUsableTick, priceToTick, sqrtPriceAtTick, tickAtSqrtPrice, type ClmmProgram, } from '../lpMath.js';
20
+ export type { SolanaLpPosition, SolanaLpProtocol, SolanaLpToken } from '../lp.js';
21
+ export type { Instruction } from '../write/transaction.js';
22
+ export type { SignerInput, WriteResult, WriteStatus } from '../subpaths/write.js';
23
+ //# sourceMappingURL=liquidity.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"liquidity.d.ts","sourceRoot":"","sources":["../../src/subpaths/liquidity.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AACH,OAAO,EAAE,YAAY,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,oBAAoB,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAA;AAC7I,YAAY,EACV,wBAAwB,EACxB,uBAAuB,EACvB,6BAA6B,EAC7B,sBAAsB,EACtB,mBAAmB,EACnB,qBAAqB,EACrB,0BAA0B,EAC1B,mBAAmB,EACnB,yBAAyB,EACzB,uBAAuB,EACvB,iBAAiB,EACjB,2BAA2B,GAC5B,MAAM,uBAAuB,CAAA;AAC9B,OAAO,EACL,sBAAsB,EACtB,aAAa,EACb,aAAa,EACb,cAAc,EACd,iBAAiB,EACjB,WAAW,EACX,eAAe,EACf,eAAe,EACf,KAAK,WAAW,GACjB,MAAM,cAAc,CAAA;AACrB,YAAY,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,aAAa,EAAE,MAAM,UAAU,CAAA;AACjF,YAAY,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAA;AAC1D,YAAY,EAAE,WAAW,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAA"}
@@ -0,0 +1,19 @@
1
+ /**
2
+ * 添加 / 移除流动性(子路径 `@w3lib/solana-batch-call/liquidity`):Raydium CLMM、Orca Whirlpool(仓位 NFT),
3
+ * Raydium AMM v4、CPMM(LP 代币)。不放在主入口,不用时打包不会带上这部分代码。不依赖各 DEX 的 SDK。
4
+ *
5
+ * - build*:只读取、不签名,返回预计的数量和按顺序执行的指令,可以当作报价,也可以自己组交易发送
6
+ * - addLiquidity / removeLiquidity / collectFees:构建后签名发送(同 /write 的 batchCall),SOL 自动包装 / 解包
7
+ *
8
+ * ```ts
9
+ * import { getLpPositions } from '@w3lib/solana-batch-call/lp'
10
+ * import { addLiquidity, removeLiquidity } from '@w3lib/solana-batch-call/liquidity'
11
+ *
12
+ * await addLiquidity(client, secretKey, { protocol: 'raydium-clmm', pool, priceLower: 120, priceUpper: 180, amount0Formatted: '1' })
13
+ * const [position] = await getLpPositions(owner, { provider: rpc })
14
+ * await removeLiquidity(client, secretKey, { position, percent: 50 })
15
+ * ```
16
+ */
17
+ export { addLiquidity, buildAddLiquidity, buildCollectFees, buildRemoveLiquidity, collectFees, removeLiquidity } from '../liquidity/index.js';
18
+ export { getLiquidityForAmounts, getMaxAmounts, getMinAmounts, getMintAmounts, nearestUsableTick, priceToTick, sqrtPriceAtTick, tickAtSqrtPrice, } from '../lpMath.js';
19
+ //# sourceMappingURL=liquidity.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"liquidity.js","sourceRoot":"","sources":["../../src/subpaths/liquidity.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AACH,OAAO,EAAE,YAAY,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,oBAAoB,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAA;AAe7I,OAAO,EACL,sBAAsB,EACtB,aAAa,EACb,aAAa,EACb,cAAc,EACd,iBAAiB,EACjB,WAAW,EACX,eAAe,EACf,eAAe,GAEhB,MAAM,cAAc,CAAA"}
@@ -12,7 +12,7 @@
12
12
  import { type LpPositionsOptions, type SolanaLpPosition } from '../lp.js';
13
13
  import { type ShortcutOptions } from '../shortcuts.js';
14
14
  export { ORCA_WHIRLPOOL_PROGRAM_ID, RAYDIUM_AMM_PROGRAM_ID, RAYDIUM_CLMM_PROGRAM_ID, RAYDIUM_CPMM_PROGRAM_ID, SOLANA_LP_PROTOCOLS, defillamaPrices, lpPositions, type LpPositionsOptions, type SolanaLpAmmPosition, type SolanaLpClmmPosition, type SolanaLpPosition, type SolanaLpProtocol, type SolanaLpToken, type SolanaPriceSource, } from '../lp.js';
15
- export { MAX_TICK, MIN_TICK, getAmountsForLiquidity, getFeeGrowthInside, getFeesOwed, orcaSqrtPriceAtTick, raydiumSqrtPriceAtTick, sqrtPriceToPrice, tickToPrice, type TickFeeData, } from '../lpMath.js';
15
+ export { MAX_TICK, MIN_TICK, getAmountsForLiquidity, getFeeGrowthInside, getFeesOwed, getLiquidityForAmounts, getMaxAmounts, getMinAmounts, getMintAmounts, nearestUsableTick, orcaSqrtPriceAtTick, priceToTick, raydiumSqrtPriceAtTick, sqrtPriceAtTick, sqrtPriceToPrice, tickAtSqrtPrice, tickToPrice, type ClmmProgram, type TickFeeData, } from '../lpMath.js';
16
16
  export interface GetLpPositionsOptions extends LpPositionsOptions, ShortcutOptions {
17
17
  }
18
18
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"lp.d.ts","sourceRoot":"","sources":["../../src/subpaths/lp.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AACH,OAAO,EAAe,KAAK,kBAAkB,EAAE,KAAK,gBAAgB,EAAE,MAAM,UAAU,CAAA;AACtF,OAAO,EAAW,KAAK,eAAe,EAAE,MAAM,iBAAiB,CAAA;AAE/D,OAAO,EACL,yBAAyB,EACzB,sBAAsB,EACtB,uBAAuB,EACvB,uBAAuB,EACvB,mBAAmB,EACnB,eAAe,EACf,WAAW,EACX,KAAK,kBAAkB,EACvB,KAAK,mBAAmB,EACxB,KAAK,oBAAoB,EACzB,KAAK,gBAAgB,EACrB,KAAK,gBAAgB,EACrB,KAAK,aAAa,EAClB,KAAK,iBAAiB,GACvB,MAAM,UAAU,CAAA;AACjB,OAAO,EACL,QAAQ,EACR,QAAQ,EACR,sBAAsB,EACtB,kBAAkB,EAClB,WAAW,EACX,mBAAmB,EACnB,sBAAsB,EACtB,gBAAgB,EAChB,WAAW,EACX,KAAK,WAAW,GACjB,MAAM,cAAc,CAAA;AAErB,MAAM,WAAW,qBAAsB,SAAQ,kBAAkB,EAAE,eAAe;CAAG;AAErF;;;;;;;;;;;GAWG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,GAAE,qBAA0B,GAAG,OAAO,CAAC,gBAAgB,EAAE,CAAC,CAI9G"}
1
+ {"version":3,"file":"lp.d.ts","sourceRoot":"","sources":["../../src/subpaths/lp.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AACH,OAAO,EAAe,KAAK,kBAAkB,EAAE,KAAK,gBAAgB,EAAE,MAAM,UAAU,CAAA;AACtF,OAAO,EAAW,KAAK,eAAe,EAAE,MAAM,iBAAiB,CAAA;AAE/D,OAAO,EACL,yBAAyB,EACzB,sBAAsB,EACtB,uBAAuB,EACvB,uBAAuB,EACvB,mBAAmB,EACnB,eAAe,EACf,WAAW,EACX,KAAK,kBAAkB,EACvB,KAAK,mBAAmB,EACxB,KAAK,oBAAoB,EACzB,KAAK,gBAAgB,EACrB,KAAK,gBAAgB,EACrB,KAAK,aAAa,EAClB,KAAK,iBAAiB,GACvB,MAAM,UAAU,CAAA;AACjB,OAAO,EACL,QAAQ,EACR,QAAQ,EACR,sBAAsB,EACtB,kBAAkB,EAClB,WAAW,EACX,sBAAsB,EACtB,aAAa,EACb,aAAa,EACb,cAAc,EACd,iBAAiB,EACjB,mBAAmB,EACnB,WAAW,EACX,sBAAsB,EACtB,eAAe,EACf,gBAAgB,EAChB,eAAe,EACf,WAAW,EACX,KAAK,WAAW,EAChB,KAAK,WAAW,GACjB,MAAM,cAAc,CAAA;AAErB,MAAM,WAAW,qBAAsB,SAAQ,kBAAkB,EAAE,eAAe;CAAG;AAErF;;;;;;;;;;;GAWG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,GAAE,qBAA0B,GAAG,OAAO,CAAC,gBAAgB,EAAE,CAAC,CAI9G"}
@@ -12,7 +12,7 @@
12
12
  import { lpPositions } from '../lp.js';
13
13
  import { resolve } from '../shortcuts.js';
14
14
  export { ORCA_WHIRLPOOL_PROGRAM_ID, RAYDIUM_AMM_PROGRAM_ID, RAYDIUM_CLMM_PROGRAM_ID, RAYDIUM_CPMM_PROGRAM_ID, SOLANA_LP_PROTOCOLS, defillamaPrices, lpPositions, } from '../lp.js';
15
- export { MAX_TICK, MIN_TICK, getAmountsForLiquidity, getFeeGrowthInside, getFeesOwed, orcaSqrtPriceAtTick, raydiumSqrtPriceAtTick, sqrtPriceToPrice, tickToPrice, } from '../lpMath.js';
15
+ export { MAX_TICK, MIN_TICK, getAmountsForLiquidity, getFeeGrowthInside, getFeesOwed, getLiquidityForAmounts, getMaxAmounts, getMinAmounts, getMintAmounts, nearestUsableTick, orcaSqrtPriceAtTick, priceToTick, raydiumSqrtPriceAtTick, sqrtPriceAtTick, sqrtPriceToPrice, tickAtSqrtPrice, tickToPrice, } from '../lpMath.js';
16
16
  /**
17
17
  * 查一个地址的 LP 仓位。
18
18
  *
@@ -1 +1 @@
1
- {"version":3,"file":"lp.js","sourceRoot":"","sources":["../../src/subpaths/lp.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AACH,OAAO,EAAE,WAAW,EAAkD,MAAM,UAAU,CAAA;AACtF,OAAO,EAAE,OAAO,EAAwB,MAAM,iBAAiB,CAAA;AAE/D,OAAO,EACL,yBAAyB,EACzB,sBAAsB,EACtB,uBAAuB,EACvB,uBAAuB,EACvB,mBAAmB,EACnB,eAAe,EACf,WAAW,GAQZ,MAAM,UAAU,CAAA;AACjB,OAAO,EACL,QAAQ,EACR,QAAQ,EACR,sBAAsB,EACtB,kBAAkB,EAClB,WAAW,EACX,mBAAmB,EACnB,sBAAsB,EACtB,gBAAgB,EAChB,WAAW,GAEZ,MAAM,cAAc,CAAA;AAIrB;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,cAAc,CAAC,KAAa,EAAE,UAAiC,EAAE;IAC/E,qCAAqC;IACrC,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC,WAAW,EAAE,OAAO,EAAE,OAAO,EAAE,eAAe,EAAE,QAAQ,EAAE,cAAc,EAAE,QAAQ,CAAC,CAAC,CAAA;IAC9H,OAAO,WAAW,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE,GAAG,GAAG,EAAE,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAA;AACnG,CAAC"}
1
+ {"version":3,"file":"lp.js","sourceRoot":"","sources":["../../src/subpaths/lp.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AACH,OAAO,EAAE,WAAW,EAAkD,MAAM,UAAU,CAAA;AACtF,OAAO,EAAE,OAAO,EAAwB,MAAM,iBAAiB,CAAA;AAE/D,OAAO,EACL,yBAAyB,EACzB,sBAAsB,EACtB,uBAAuB,EACvB,uBAAuB,EACvB,mBAAmB,EACnB,eAAe,EACf,WAAW,GAQZ,MAAM,UAAU,CAAA;AACjB,OAAO,EACL,QAAQ,EACR,QAAQ,EACR,sBAAsB,EACtB,kBAAkB,EAClB,WAAW,EACX,sBAAsB,EACtB,aAAa,EACb,aAAa,EACb,cAAc,EACd,iBAAiB,EACjB,mBAAmB,EACnB,WAAW,EACX,sBAAsB,EACtB,eAAe,EACf,gBAAgB,EAChB,eAAe,EACf,WAAW,GAGZ,MAAM,cAAc,CAAA;AAIrB;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,cAAc,CAAC,KAAa,EAAE,UAAiC,EAAE;IAC/E,qCAAqC;IACrC,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC,WAAW,EAAE,OAAO,EAAE,OAAO,EAAE,eAAe,EAAE,QAAQ,EAAE,cAAc,EAAE,QAAQ,CAAC,CAAC,CAAA;IAC9H,OAAO,WAAW,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE,GAAG,GAAG,EAAE,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAA;AACnG,CAAC"}
@@ -0,0 +1,37 @@
1
+ /**
2
+ * 域名解析(子路径 `@w3lib/solana-batch-call/names`):SNS(Bonfida,`.sns`),名字 → 地址、地址 → 主域名。
3
+ * 不放在主入口,不用时打包不会带上这部分代码。
4
+ *
5
+ * ```ts
6
+ * import { getAddressNames, getNameAddresses } from '@w3lib/solana-batch-call/names'
7
+ *
8
+ * await getNameAddresses(['bonfida.sns', 'toly.sns'])
9
+ * await getAddressNames([wallet])
10
+ * ```
11
+ */
12
+ import type { RequestOptions } from '../client.js';
13
+ import { type AddressName, type NamesOptions, type ResolvedName } from '../names.js';
14
+ import { type ShortcutOptions } from '../shortcuts.js';
15
+ export { NAME_PROGRAM_ID, SNS_ROOT_DOMAIN, lookupAddresses, resolveNames, snsDomainKey, type AddressName, type NameSource, type NamesOptions, type ResolvedName } from '../names.js';
16
+ export interface GetNamesOptions extends NamesOptions, ShortcutOptions {
17
+ }
18
+ /**
19
+ * 名字 → 地址,节点参数与 getBalances 相同。
20
+ *
21
+ * ```ts
22
+ * await getNameAddresses(['bonfida.sns', 'toly.sns'])
23
+ * // [{ name: 'bonfida.sns', normalized: 'bonfida.sns', address: 'Fw1E…Lb1v', owner: 'Fw1E…Lb1v', source: 'owner', service: 'sns' }, …]
24
+ * ```
25
+ */
26
+ export declare function getNameAddresses(names: readonly string[], options?: GetNamesOptions): Promise<ResolvedName[]>;
27
+ export interface GetAddressNamesOptions extends RequestOptions, ShortcutOptions {
28
+ }
29
+ /**
30
+ * 地址 → 主域名(核对过属于这个地址)。
31
+ *
32
+ * ```ts
33
+ * await getAddressNames([wallet]) // [{ address: wallet, name: 'bonfida.sns', service: 'sns' }]
34
+ * ```
35
+ */
36
+ export declare function getAddressNames(addresses: readonly string[], options?: GetAddressNamesOptions): Promise<AddressName[]>;
37
+ //# sourceMappingURL=names.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"names.d.ts","sourceRoot":"","sources":["../../src/subpaths/names.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AACH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,cAAc,CAAA;AAClD,OAAO,EAAiC,KAAK,WAAW,EAAE,KAAK,YAAY,EAAE,KAAK,YAAY,EAAE,MAAM,aAAa,CAAA;AACnH,OAAO,EAAW,KAAK,eAAe,EAAE,MAAM,iBAAiB,CAAA;AAE/D,OAAO,EAAE,eAAe,EAAE,eAAe,EAAE,eAAe,EAAE,YAAY,EAAE,YAAY,EAAE,KAAK,WAAW,EAAE,KAAK,UAAU,EAAE,KAAK,YAAY,EAAE,KAAK,YAAY,EAAE,MAAM,aAAa,CAAA;AAEpL,MAAM,WAAW,eAAgB,SAAQ,YAAY,EAAE,eAAe;CAAG;AAEzE;;;;;;;GAOG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,SAAS,MAAM,EAAE,EAAE,OAAO,GAAE,eAAoB,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC,CAGjH;AAED,MAAM,WAAW,sBAAuB,SAAQ,cAAc,EAAE,eAAe;CAAG;AAElF;;;;;;GAMG;AACH,wBAAgB,eAAe,CAAC,SAAS,EAAE,SAAS,MAAM,EAAE,EAAE,OAAO,GAAE,sBAA2B,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC,CAG1H"}
@@ -0,0 +1,27 @@
1
+ import { lookupAddresses, resolveNames } from '../names.js';
2
+ import { resolve } from '../shortcuts.js';
3
+ export { NAME_PROGRAM_ID, SNS_ROOT_DOMAIN, lookupAddresses, resolveNames, snsDomainKey } from '../names.js';
4
+ /**
5
+ * 名字 → 地址,节点参数与 getBalances 相同。
6
+ *
7
+ * ```ts
8
+ * await getNameAddresses(['bonfida.sns', 'toly.sns'])
9
+ * // [{ name: 'bonfida.sns', normalized: 'bonfida.sns', address: 'Fw1E…Lb1v', owner: 'Fw1E…Lb1v', source: 'owner', service: 'sns' }, …]
10
+ * ```
11
+ */
12
+ export function getNameAddresses(names, options = {}) {
13
+ const { client, own } = resolve(options, ['legacySol', 'allowPda', 'signal']);
14
+ return resolveNames(client, names, own);
15
+ }
16
+ /**
17
+ * 地址 → 主域名(核对过属于这个地址)。
18
+ *
19
+ * ```ts
20
+ * await getAddressNames([wallet]) // [{ address: wallet, name: 'bonfida.sns', service: 'sns' }]
21
+ * ```
22
+ */
23
+ export function getAddressNames(addresses, options = {}) {
24
+ const { client, own } = resolve(options, ['signal']);
25
+ return lookupAddresses(client, addresses, own);
26
+ }
27
+ //# sourceMappingURL=names.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"names.js","sourceRoot":"","sources":["../../src/subpaths/names.ts"],"names":[],"mappings":"AAYA,OAAO,EAAE,eAAe,EAAE,YAAY,EAA0D,MAAM,aAAa,CAAA;AACnH,OAAO,EAAE,OAAO,EAAwB,MAAM,iBAAiB,CAAA;AAE/D,OAAO,EAAE,eAAe,EAAE,eAAe,EAAE,eAAe,EAAE,YAAY,EAAE,YAAY,EAA2E,MAAM,aAAa,CAAA;AAIpL;;;;;;;GAOG;AACH,MAAM,UAAU,gBAAgB,CAAC,KAAwB,EAAE,UAA2B,EAAE;IACtF,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC,WAAW,EAAE,UAAU,EAAE,QAAQ,CAAC,CAAC,CAAA;IAC7E,OAAO,YAAY,CAAC,MAAM,EAAE,KAAK,EAAE,GAAG,CAAC,CAAA;AACzC,CAAC;AAID;;;;;;GAMG;AACH,MAAM,UAAU,eAAe,CAAC,SAA4B,EAAE,UAAkC,EAAE;IAChG,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAA;IACpD,OAAO,eAAe,CAAC,MAAM,EAAE,SAAS,EAAE,GAAG,CAAC,CAAA;AAChD,CAAC"}
@@ -0,0 +1,40 @@
1
+ /**
2
+ * 价格(子路径 `@w3lib/solana-batch-call/price`):代币的美元价格(DefiLlama 当前 / 历史价格,没有收录的从链上 Raydium / Orca 池子算)、
3
+ * 组合价格源、地址的资产总值。不放在主入口,不用时打包不会带上这部分代码。
4
+ *
5
+ * ```ts
6
+ * import { NATIVE_MINT } from '@w3lib/solana-batch-call'
7
+ * import { getPortfolio, getTokenPrices } from '@w3lib/solana-batch-call/price'
8
+ *
9
+ * await getTokenPrices([NATIVE_MINT, USDC, newToken])
10
+ * await getPortfolio(owner, { tokens: [NATIVE_MINT, USDC, JUP] })
11
+ * ```
12
+ */
13
+ import { type Portfolio, type PortfolioOptions } from '../portfolio.js';
14
+ import { type TokenPrice, type TokenPricesOptions } from '../price.js';
15
+ import { type ShortcutOptions } from '../shortcuts.js';
16
+ export { portfolio, type Portfolio, type PortfolioOptions, type PortfolioToken } from '../portfolio.js';
17
+ export { STABLECOINS, combinePrices, defillamaPrices, onchainPrices, tokenPrices, type DefillamaPriceOptions, type OnchainPriceOptions, type OnchainPriceProtocol, type SolanaPriceSource, type SolanaPriceSourceContext, type TokenPrice, type TokenPricesOptions, } from '../price.js';
18
+ export interface GetTokenPricesOptions extends TokenPricesOptions, ShortcutOptions {
19
+ }
20
+ /**
21
+ * 查代币的美元价格(SOL 用 NATIVE_MINT),节点参数与 getBalances 相同。
22
+ *
23
+ * ```ts
24
+ * await getTokenPrices([NATIVE_MINT, USDC])
25
+ * // [{ token: 'So111…112', native: true, price: 187.4, source: 'defillama' }, { token: USDC, native: false, price: 1, source: 'defillama' }]
26
+ * ```
27
+ */
28
+ export declare function getTokenPrices(mints: readonly string[], options?: GetTokenPricesOptions): Promise<TokenPrice[]>;
29
+ export interface GetPortfolioOptions extends PortfolioOptions, ShortcutOptions {
30
+ }
31
+ /**
32
+ * 地址的资产总值:代币余额 × 价格,可选加上 LP 仓位(lp: true)。
33
+ *
34
+ * ```ts
35
+ * await getPortfolio(owner, { tokens: [NATIVE_MINT, USDC, JUP] }) // 指定代币:免费公共节点也能用
36
+ * await getPortfolio(owner, { provider: 'https://my-rpc…', lp: true }) // 全部持仓 + LP:需要支持 getTokenAccountsByOwner 的节点
37
+ * ```
38
+ */
39
+ export declare function getPortfolio(owner: string, options?: GetPortfolioOptions): Promise<Portfolio>;
40
+ //# sourceMappingURL=price.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"price.d.ts","sourceRoot":"","sources":["../../src/subpaths/price.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AACH,OAAO,EAAa,KAAK,SAAS,EAAE,KAAK,gBAAgB,EAAE,MAAM,iBAAiB,CAAA;AAClF,OAAO,EAAe,KAAK,UAAU,EAAE,KAAK,kBAAkB,EAAE,MAAM,aAAa,CAAA;AACnF,OAAO,EAAW,KAAK,eAAe,EAAE,MAAM,iBAAiB,CAAA;AAE/D,OAAO,EAAE,SAAS,EAAE,KAAK,SAAS,EAAE,KAAK,gBAAgB,EAAE,KAAK,cAAc,EAAE,MAAM,iBAAiB,CAAA;AACvG,OAAO,EACL,WAAW,EACX,aAAa,EACb,eAAe,EACf,aAAa,EACb,WAAW,EACX,KAAK,qBAAqB,EAC1B,KAAK,mBAAmB,EACxB,KAAK,oBAAoB,EACzB,KAAK,iBAAiB,EACtB,KAAK,wBAAwB,EAC7B,KAAK,UAAU,EACf,KAAK,kBAAkB,GACxB,MAAM,aAAa,CAAA;AAEpB,MAAM,WAAW,qBAAsB,SAAQ,kBAAkB,EAAE,eAAe;CAAG;AAErF;;;;;;;GAOG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,SAAS,MAAM,EAAE,EAAE,OAAO,GAAE,qBAA0B,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC,CAInH;AAED,MAAM,WAAW,mBAAoB,SAAQ,gBAAgB,EAAE,eAAe;CAAG;AAEjF;;;;;;;GAOG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,GAAE,mBAAwB,GAAG,OAAO,CAAC,SAAS,CAAC,CAGjG"}
@@ -0,0 +1,43 @@
1
+ /**
2
+ * 价格(子路径 `@w3lib/solana-batch-call/price`):代币的美元价格(DefiLlama 当前 / 历史价格,没有收录的从链上 Raydium / Orca 池子算)、
3
+ * 组合价格源、地址的资产总值。不放在主入口,不用时打包不会带上这部分代码。
4
+ *
5
+ * ```ts
6
+ * import { NATIVE_MINT } from '@w3lib/solana-batch-call'
7
+ * import { getPortfolio, getTokenPrices } from '@w3lib/solana-batch-call/price'
8
+ *
9
+ * await getTokenPrices([NATIVE_MINT, USDC, newToken])
10
+ * await getPortfolio(owner, { tokens: [NATIVE_MINT, USDC, JUP] })
11
+ * ```
12
+ */
13
+ import { portfolio } from '../portfolio.js';
14
+ import { tokenPrices } from '../price.js';
15
+ import { resolve } from '../shortcuts.js';
16
+ export { portfolio } from '../portfolio.js';
17
+ export { STABLECOINS, combinePrices, defillamaPrices, onchainPrices, tokenPrices, } from '../price.js';
18
+ /**
19
+ * 查代币的美元价格(SOL 用 NATIVE_MINT),节点参数与 getBalances 相同。
20
+ *
21
+ * ```ts
22
+ * await getTokenPrices([NATIVE_MINT, USDC])
23
+ * // [{ token: 'So111…112', native: true, price: 187.4, source: 'defillama' }, { token: USDC, native: false, price: 1, source: 'defillama' }]
24
+ * ```
25
+ */
26
+ export function getTokenPrices(mints, options = {}) {
27
+ // fetch 同时给节点请求(客户端配置)和查价用,与 getLpPositions 一致
28
+ const { client, own } = resolve(options, ['sources', 'onError', 'signal']);
29
+ return tokenPrices(client, mints, { ...own, ...(options.fetch ? { fetch: options.fetch } : {}) });
30
+ }
31
+ /**
32
+ * 地址的资产总值:代币余额 × 价格,可选加上 LP 仓位(lp: true)。
33
+ *
34
+ * ```ts
35
+ * await getPortfolio(owner, { tokens: [NATIVE_MINT, USDC, JUP] }) // 指定代币:免费公共节点也能用
36
+ * await getPortfolio(owner, { provider: 'https://my-rpc…', lp: true }) // 全部持仓 + LP:需要支持 getTokenAccountsByOwner 的节点
37
+ * ```
38
+ */
39
+ export function getPortfolio(owner, options = {}) {
40
+ const { client, own } = resolve(options, ['tokens', 'sources', 'lp', 'minUsd', 'onPriceError', 'signal']);
41
+ return portfolio(client, owner, { ...own, ...(options.fetch ? { fetch: options.fetch } : {}) });
42
+ }
43
+ //# sourceMappingURL=price.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"price.js","sourceRoot":"","sources":["../../src/subpaths/price.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AACH,OAAO,EAAE,SAAS,EAAyC,MAAM,iBAAiB,CAAA;AAClF,OAAO,EAAE,WAAW,EAA4C,MAAM,aAAa,CAAA;AACnF,OAAO,EAAE,OAAO,EAAwB,MAAM,iBAAiB,CAAA;AAE/D,OAAO,EAAE,SAAS,EAA8D,MAAM,iBAAiB,CAAA;AACvG,OAAO,EACL,WAAW,EACX,aAAa,EACb,eAAe,EACf,aAAa,EACb,WAAW,GAQZ,MAAM,aAAa,CAAA;AAIpB;;;;;;;GAOG;AACH,MAAM,UAAU,cAAc,CAAC,KAAwB,EAAE,UAAiC,EAAE;IAC1F,+CAA+C;IAC/C,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC,SAAS,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC,CAAA;IAC1E,OAAO,WAAW,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE,GAAG,GAAG,EAAE,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAA;AACnG,CAAC;AAID;;;;;;;GAOG;AACH,MAAM,UAAU,YAAY,CAAC,KAAa,EAAE,UAA+B,EAAE;IAC3E,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,SAAS,EAAE,IAAI,EAAE,QAAQ,EAAE,cAAc,EAAE,QAAQ,CAAC,CAAC,CAAA;IACzG,OAAO,SAAS,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE,GAAG,GAAG,EAAE,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAA;AACjG,CAAC"}
@@ -0,0 +1,28 @@
1
+ /**
2
+ * 代币风险检查(子路径 `@w3lib/solana-batch-call/risk`):mint 的增发 / 冻结权限,Token-2022 扩展里影响持有人的设置
3
+ * (转账手续费、永久授权、转账 hook、不可转让、默认冻结、可暂停、保密转账、mint 可关闭等),可选持币集中度;
4
+ * tradeChecks 在主网模拟“买入 → 卖出”判断能不能卖(用 /swap,不用时打包不会带上)。不放在主入口,不用时打包不会带上这部分代码。
5
+ *
6
+ * ```ts
7
+ * import { getTokenRisks, getTradeChecks } from '@w3lib/solana-batch-call/risk'
8
+ *
9
+ * const [risk] = await getTokenRisks([mint])
10
+ * if (risk.flags.includes('permanent-delegate')) alert('发行方可以转走你的代币')
11
+ * const [trade] = await getTradeChecks([mint], { owner: myAddress })
12
+ * if (trade.honeypot) alert('卖不出')
13
+ * ```
14
+ */
15
+ import { type SolanaTokenRisk, type TokenRisksOptions } from '../risk.js';
16
+ import { type ShortcutOptions } from '../shortcuts.js';
17
+ import { type SolanaTradeCheck, type TradeCheckOptions } from '../tradeCheck.js';
18
+ export { parseRisk, tokenRisks, type SolanaTokenRisk, type TokenRisksOptions } from '../risk.js';
19
+ export { tradeChecks, type SolanaTradeCheck, type TradeCheckOptions, type TradeStage } from '../tradeCheck.js';
20
+ export interface GetTokenRisksOptions extends TokenRisksOptions, ShortcutOptions {
21
+ }
22
+ /** 检查代币的风险(一次 getMultipleAccounts),节点参数与 getBalances 相同 */
23
+ export declare function getTokenRisks(mints: readonly string[], options?: GetTokenRisksOptions): Promise<SolanaTokenRisk[]>;
24
+ export interface GetTradeChecksOptions extends TradeCheckOptions, ShortcutOptions {
25
+ }
26
+ /** 模拟买入再卖出,判断能不能交易,节点参数与 getBalances 相同 */
27
+ export declare function getTradeChecks(mints: readonly string[], options: GetTradeChecksOptions): Promise<SolanaTradeCheck[]>;
28
+ //# sourceMappingURL=risk.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"risk.d.ts","sourceRoot":"","sources":["../../src/subpaths/risk.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AACH,OAAO,EAAc,KAAK,eAAe,EAAE,KAAK,iBAAiB,EAAE,MAAM,YAAY,CAAA;AACrF,OAAO,EAAW,KAAK,eAAe,EAAE,MAAM,iBAAiB,CAAA;AAC/D,OAAO,EAAe,KAAK,gBAAgB,EAAE,KAAK,iBAAiB,EAAE,MAAM,kBAAkB,CAAA;AAE7F,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,KAAK,eAAe,EAAE,KAAK,iBAAiB,EAAE,MAAM,YAAY,CAAA;AAChG,OAAO,EAAE,WAAW,EAAE,KAAK,gBAAgB,EAAE,KAAK,iBAAiB,EAAE,KAAK,UAAU,EAAE,MAAM,kBAAkB,CAAA;AAE9G,MAAM,WAAW,oBAAqB,SAAQ,iBAAiB,EAAE,eAAe;CAAG;AAEnF,2DAA2D;AAC3D,wBAAgB,aAAa,CAAC,KAAK,EAAE,SAAS,MAAM,EAAE,EAAE,OAAO,GAAE,oBAAyB,GAAG,OAAO,CAAC,eAAe,EAAE,CAAC,CAGtH;AAED,MAAM,WAAW,qBAAsB,SAAQ,iBAAiB,EAAE,eAAe;CAAG;AAEpF,2CAA2C;AAC3C,wBAAgB,cAAc,CAAC,KAAK,EAAE,SAAS,MAAM,EAAE,EAAE,OAAO,EAAE,qBAAqB,GAAG,OAAO,CAAC,gBAAgB,EAAE,CAAC,CAGpH"}
@@ -0,0 +1,30 @@
1
+ /**
2
+ * 代币风险检查(子路径 `@w3lib/solana-batch-call/risk`):mint 的增发 / 冻结权限,Token-2022 扩展里影响持有人的设置
3
+ * (转账手续费、永久授权、转账 hook、不可转让、默认冻结、可暂停、保密转账、mint 可关闭等),可选持币集中度;
4
+ * tradeChecks 在主网模拟“买入 → 卖出”判断能不能卖(用 /swap,不用时打包不会带上)。不放在主入口,不用时打包不会带上这部分代码。
5
+ *
6
+ * ```ts
7
+ * import { getTokenRisks, getTradeChecks } from '@w3lib/solana-batch-call/risk'
8
+ *
9
+ * const [risk] = await getTokenRisks([mint])
10
+ * if (risk.flags.includes('permanent-delegate')) alert('发行方可以转走你的代币')
11
+ * const [trade] = await getTradeChecks([mint], { owner: myAddress })
12
+ * if (trade.honeypot) alert('卖不出')
13
+ * ```
14
+ */
15
+ import { tokenRisks } from '../risk.js';
16
+ import { resolve } from '../shortcuts.js';
17
+ import { tradeChecks } from '../tradeCheck.js';
18
+ export { parseRisk, tokenRisks } from '../risk.js';
19
+ export { tradeChecks } from '../tradeCheck.js';
20
+ /** 检查代币的风险(一次 getMultipleAccounts),节点参数与 getBalances 相同 */
21
+ export function getTokenRisks(mints, options = {}) {
22
+ const { client, own } = resolve(options, ['concentration', 'signal']);
23
+ return tokenRisks(client, mints, own);
24
+ }
25
+ /** 模拟买入再卖出,判断能不能交易,节点参数与 getBalances 相同 */
26
+ export function getTradeChecks(mints, options) {
27
+ const { client, own } = resolve(options, ['owner', 'amount', 'amountFormatted', 'protocols', 'intermediates', 'pools', 'discover', 'signal']);
28
+ return tradeChecks(client, mints, own);
29
+ }
30
+ //# sourceMappingURL=risk.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"risk.js","sourceRoot":"","sources":["../../src/subpaths/risk.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AACH,OAAO,EAAE,UAAU,EAAgD,MAAM,YAAY,CAAA;AACrF,OAAO,EAAE,OAAO,EAAwB,MAAM,iBAAiB,CAAA;AAC/D,OAAO,EAAE,WAAW,EAAiD,MAAM,kBAAkB,CAAA;AAE7F,OAAO,EAAE,SAAS,EAAE,UAAU,EAAgD,MAAM,YAAY,CAAA;AAChG,OAAO,EAAE,WAAW,EAAkE,MAAM,kBAAkB,CAAA;AAI9G,2DAA2D;AAC3D,MAAM,UAAU,aAAa,CAAC,KAAwB,EAAE,UAAgC,EAAE;IACxF,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC,eAAe,EAAE,QAAQ,CAAC,CAAC,CAAA;IACrE,OAAO,UAAU,CAAC,MAAM,EAAE,KAAK,EAAE,GAAG,CAAC,CAAA;AACvC,CAAC;AAID,2CAA2C;AAC3C,MAAM,UAAU,cAAc,CAAC,KAAwB,EAAE,OAA8B;IACrF,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC,OAAO,EAAE,QAAQ,EAAE,iBAAiB,EAAE,WAAW,EAAE,eAAe,EAAE,OAAO,EAAE,UAAU,EAAE,QAAQ,CAAC,CAAC,CAAA;IAC7I,OAAO,WAAW,CAAC,MAAM,EAAE,KAAK,EAAE,GAAwB,CAAC,CAAA;AAC7D,CAAC"}
@@ -0,0 +1,22 @@
1
+ /**
2
+ * 兑换(子路径 `@w3lib/solana-batch-call/swap`):在 Raydium CLMM、Orca Whirlpool、Raydium CPMM、Raydium AMM v4 的池子里找最好的路线
3
+ * (直接或经过 SOL / USDC / USDT 的两跳),本地报价并构建 / 发送兑换交易。不放在主入口,不用时打包不会带上这部分代码。不依赖各 DEX 的 SDK。
4
+ *
5
+ * ```ts
6
+ * import { NATIVE_MINT } from '@w3lib/solana-batch-call'
7
+ * import { getSwapQuote, swap } from '@w3lib/solana-batch-call/swap'
8
+ *
9
+ * const plan = await getSwapQuote(owner, { tokenIn: NATIVE_MINT, tokenOut: USDC, amountInFormatted: '0.5' })
10
+ * await swap(client, secretKey, { tokenIn: NATIVE_MINT, tokenOut: USDC, amountInFormatted: '0.5' }, { slippage: 0.01 })
11
+ * ```
12
+ */
13
+ import { type ShortcutOptions } from '../shortcuts.js';
14
+ import { type SolanaSwapOptions, type SolanaSwapParams, type SolanaSwapPlan } from '../swap/index.js';
15
+ export { SWAP_INTERMEDIATES, SWAP_PROTOCOLS, buildSwap, swap, type SolanaSwapHop, type SolanaSwapOptions, type SolanaSwapParams, type SolanaSwapPlan, type SolanaSwapProtocol, type SolanaSwapResult, type SolanaSwapRoute, type SolanaSwapSendOptions, type SolanaSwapStep, type SolanaSwapStepResult, } from '../swap/index.js';
16
+ export type { Instruction } from '../write/transaction.js';
17
+ export type { SignerInput, WriteResult, WriteStatus } from '../subpaths/write.js';
18
+ export interface GetSwapQuoteOptions extends SolanaSwapOptions, ShortcutOptions {
19
+ }
20
+ /** 报价并构建兑换的指令(同 buildSwap),节点参数与 getBalances 相同 */
21
+ export declare function getSwapQuote(owner: string, params: SolanaSwapParams, options?: GetSwapQuoteOptions): Promise<SolanaSwapPlan>;
22
+ //# sourceMappingURL=swap.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"swap.d.ts","sourceRoot":"","sources":["../../src/subpaths/swap.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AACH,OAAO,EAAW,KAAK,eAAe,EAAE,MAAM,iBAAiB,CAAA;AAC/D,OAAO,EAAa,KAAK,iBAAiB,EAAE,KAAK,gBAAgB,EAAE,KAAK,cAAc,EAAE,MAAM,kBAAkB,CAAA;AAEhH,OAAO,EACL,kBAAkB,EAClB,cAAc,EACd,SAAS,EACT,IAAI,EACJ,KAAK,aAAa,EAClB,KAAK,iBAAiB,EACtB,KAAK,gBAAgB,EACrB,KAAK,cAAc,EACnB,KAAK,kBAAkB,EACvB,KAAK,gBAAgB,EACrB,KAAK,eAAe,EACpB,KAAK,qBAAqB,EAC1B,KAAK,cAAc,EACnB,KAAK,oBAAoB,GAC1B,MAAM,kBAAkB,CAAA;AACzB,YAAY,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAA;AAC1D,YAAY,EAAE,WAAW,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAA;AAEjF,MAAM,WAAW,mBAAoB,SAAQ,iBAAiB,EAAE,eAAe;CAAG;AAElF,mDAAmD;AACnD,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,gBAAgB,EAAE,OAAO,GAAE,mBAAwB,GAAG,OAAO,CAAC,cAAc,CAAC,CAGhI"}
@@ -0,0 +1,21 @@
1
+ /**
2
+ * 兑换(子路径 `@w3lib/solana-batch-call/swap`):在 Raydium CLMM、Orca Whirlpool、Raydium CPMM、Raydium AMM v4 的池子里找最好的路线
3
+ * (直接或经过 SOL / USDC / USDT 的两跳),本地报价并构建 / 发送兑换交易。不放在主入口,不用时打包不会带上这部分代码。不依赖各 DEX 的 SDK。
4
+ *
5
+ * ```ts
6
+ * import { NATIVE_MINT } from '@w3lib/solana-batch-call'
7
+ * import { getSwapQuote, swap } from '@w3lib/solana-batch-call/swap'
8
+ *
9
+ * const plan = await getSwapQuote(owner, { tokenIn: NATIVE_MINT, tokenOut: USDC, amountInFormatted: '0.5' })
10
+ * await swap(client, secretKey, { tokenIn: NATIVE_MINT, tokenOut: USDC, amountInFormatted: '0.5' }, { slippage: 0.01 })
11
+ * ```
12
+ */
13
+ import { resolve } from '../shortcuts.js';
14
+ import { buildSwap } from '../swap/index.js';
15
+ export { SWAP_INTERMEDIATES, SWAP_PROTOCOLS, buildSwap, swap, } from '../swap/index.js';
16
+ /** 报价并构建兑换的指令(同 buildSwap),节点参数与 getBalances 相同 */
17
+ export function getSwapQuote(owner, params, options = {}) {
18
+ const { client, own } = resolve(options, ['slippage', 'native', 'protocols', 'intermediates', 'pools', 'discover', 'signal']);
19
+ return buildSwap(client, owner, params, own);
20
+ }
21
+ //# sourceMappingURL=swap.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"swap.js","sourceRoot":"","sources":["../../src/subpaths/swap.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AACH,OAAO,EAAE,OAAO,EAAwB,MAAM,iBAAiB,CAAA;AAC/D,OAAO,EAAE,SAAS,EAAsE,MAAM,kBAAkB,CAAA;AAEhH,OAAO,EACL,kBAAkB,EAClB,cAAc,EACd,SAAS,EACT,IAAI,GAWL,MAAM,kBAAkB,CAAA;AAMzB,mDAAmD;AACnD,MAAM,UAAU,YAAY,CAAC,KAAa,EAAE,MAAwB,EAAE,UAA+B,EAAE;IACrG,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC,UAAU,EAAE,QAAQ,EAAE,WAAW,EAAE,eAAe,EAAE,OAAO,EAAE,UAAU,EAAE,QAAQ,CAAC,CAAC,CAAA;IAC7H,OAAO,SAAS,CAAC,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,CAAC,CAAA;AAC9C,CAAC"}
@@ -15,7 +15,7 @@
15
15
  export { batchCall, type BatchCallMode, type BatchCallOptions, type WriteCall } from '../write/batch.js';
16
16
  export { batchCollect, type BatchCollectOptions, type CollectItemResult, type CollectResult } from '../write/collect.js';
17
17
  export { batchTransfer, type BatchTransferOptions, type TransferItem, type TransferMode, type TransferResult } from '../write/transfer.js';
18
- export { COMPUTE_BUDGET_PROGRAM_ID, closeAccount, createAssociatedTokenAccountIdempotent, setComputeUnitLimit, setComputeUnitPrice, systemTransfer, transferChecked, } from '../write/instructions.js';
18
+ export { COMPUTE_BUDGET_PROGRAM_ID, closeAccount, createAssociatedTokenAccountIdempotent, harvestWithheldTokensToMint, revoke, setComputeUnitLimit, setComputeUnitPrice, systemTransfer, transferChecked, } from '../write/instructions.js';
19
19
  export type { SendOptions, WriteResult, WriteStatus } from '../write/send.js';
20
20
  export type { SignerInput, WriteSigner } from '../write/signer.js';
21
21
  export type { AccountMeta, Instruction, InstructionInput } from '../write/transaction.js';
@@ -1 +1 @@
1
- {"version":3,"file":"write.d.ts","sourceRoot":"","sources":["../../src/subpaths/write.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AACH,OAAO,EAAE,SAAS,EAAE,KAAK,aAAa,EAAE,KAAK,gBAAgB,EAAE,KAAK,SAAS,EAAE,MAAM,mBAAmB,CAAA;AACxG,OAAO,EAAE,YAAY,EAAE,KAAK,mBAAmB,EAAE,KAAK,iBAAiB,EAAE,KAAK,aAAa,EAAE,MAAM,qBAAqB,CAAA;AACxH,OAAO,EAAE,aAAa,EAAE,KAAK,oBAAoB,EAAE,KAAK,YAAY,EAAE,KAAK,YAAY,EAAE,KAAK,cAAc,EAAE,MAAM,sBAAsB,CAAA;AAC1I,OAAO,EACL,yBAAyB,EACzB,YAAY,EACZ,sCAAsC,EACtC,mBAAmB,EACnB,mBAAmB,EACnB,cAAc,EACd,eAAe,GAChB,MAAM,0BAA0B,CAAA;AACjC,YAAY,EAAE,WAAW,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAA;AAC7E,YAAY,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAA;AAClE,YAAY,EAAE,WAAW,EAAE,WAAW,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAA"}
1
+ {"version":3,"file":"write.d.ts","sourceRoot":"","sources":["../../src/subpaths/write.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AACH,OAAO,EAAE,SAAS,EAAE,KAAK,aAAa,EAAE,KAAK,gBAAgB,EAAE,KAAK,SAAS,EAAE,MAAM,mBAAmB,CAAA;AACxG,OAAO,EAAE,YAAY,EAAE,KAAK,mBAAmB,EAAE,KAAK,iBAAiB,EAAE,KAAK,aAAa,EAAE,MAAM,qBAAqB,CAAA;AACxH,OAAO,EAAE,aAAa,EAAE,KAAK,oBAAoB,EAAE,KAAK,YAAY,EAAE,KAAK,YAAY,EAAE,KAAK,cAAc,EAAE,MAAM,sBAAsB,CAAA;AAC1I,OAAO,EACL,yBAAyB,EACzB,YAAY,EACZ,sCAAsC,EACtC,2BAA2B,EAC3B,MAAM,EACN,mBAAmB,EACnB,mBAAmB,EACnB,cAAc,EACd,eAAe,GAChB,MAAM,0BAA0B,CAAA;AACjC,YAAY,EAAE,WAAW,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAA;AAC7E,YAAY,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAA;AAClE,YAAY,EAAE,WAAW,EAAE,WAAW,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAA"}
@@ -15,5 +15,5 @@
15
15
  export { batchCall } from '../write/batch.js';
16
16
  export { batchCollect } from '../write/collect.js';
17
17
  export { batchTransfer } from '../write/transfer.js';
18
- export { COMPUTE_BUDGET_PROGRAM_ID, closeAccount, createAssociatedTokenAccountIdempotent, setComputeUnitLimit, setComputeUnitPrice, systemTransfer, transferChecked, } from '../write/instructions.js';
18
+ export { COMPUTE_BUDGET_PROGRAM_ID, closeAccount, createAssociatedTokenAccountIdempotent, harvestWithheldTokensToMint, revoke, setComputeUnitLimit, setComputeUnitPrice, systemTransfer, transferChecked, } from '../write/instructions.js';
19
19
  //# sourceMappingURL=write.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"write.js","sourceRoot":"","sources":["../../src/subpaths/write.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AACH,OAAO,EAAE,SAAS,EAA6D,MAAM,mBAAmB,CAAA;AACxG,OAAO,EAAE,YAAY,EAAwE,MAAM,qBAAqB,CAAA;AACxH,OAAO,EAAE,aAAa,EAAwF,MAAM,sBAAsB,CAAA;AAC1I,OAAO,EACL,yBAAyB,EACzB,YAAY,EACZ,sCAAsC,EACtC,mBAAmB,EACnB,mBAAmB,EACnB,cAAc,EACd,eAAe,GAChB,MAAM,0BAA0B,CAAA"}
1
+ {"version":3,"file":"write.js","sourceRoot":"","sources":["../../src/subpaths/write.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AACH,OAAO,EAAE,SAAS,EAA6D,MAAM,mBAAmB,CAAA;AACxG,OAAO,EAAE,YAAY,EAAwE,MAAM,qBAAqB,CAAA;AACxH,OAAO,EAAE,aAAa,EAAwF,MAAM,sBAAsB,CAAA;AAC1I,OAAO,EACL,yBAAyB,EACzB,YAAY,EACZ,sCAAsC,EACtC,2BAA2B,EAC3B,MAAM,EACN,mBAAmB,EACnB,mBAAmB,EACnB,cAAc,EACd,eAAe,GAChB,MAAM,0BAA0B,CAAA"}
@@ -0,0 +1,20 @@
1
+ import { type AccountInfo } from '../layout.js';
2
+ import { type SwapPool } from './common.js';
3
+ interface AmmState {
4
+ address: string;
5
+ status: bigint;
6
+ swapFeeNumerator: bigint;
7
+ swapFeeDenominator: bigint;
8
+ needTakePnl0: bigint;
9
+ needTakePnl1: bigint;
10
+ openTime: bigint;
11
+ vault0: string;
12
+ vault1: string;
13
+ mint0: string;
14
+ mint1: string;
15
+ }
16
+ /** AmmInfo(无判别符):status 0、fees.swap_fee 176 / 184、need_take_pnl_coin 192、need_take_pnl_pc 200、pool_open_time 224、vault 336 / 368、mint 400 / 432 */
17
+ export declare function parseAmmV4Pool(account: AccountInfo): AmmState | null;
18
+ export declare function ammV4Pool(state: AmmState): SwapPool;
19
+ export {};
20
+ //# sourceMappingURL=amm.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"amm.d.ts","sourceRoot":"","sources":["../../src/swap/amm.ts"],"names":[],"mappings":"AAKA,OAAO,EAAqB,KAAK,WAAW,EAAE,MAAM,cAAc,CAAA;AAIlE,OAAO,EAAqH,KAAK,QAAQ,EAAE,MAAM,aAAa,CAAA;AAS9J,UAAU,QAAQ;IAChB,OAAO,EAAE,MAAM,CAAA;IACf,MAAM,EAAE,MAAM,CAAA;IACd,gBAAgB,EAAE,MAAM,CAAA;IACxB,kBAAkB,EAAE,MAAM,CAAA;IAC1B,YAAY,EAAE,MAAM,CAAA;IACpB,YAAY,EAAE,MAAM,CAAA;IACpB,QAAQ,EAAE,MAAM,CAAA;IAChB,MAAM,EAAE,MAAM,CAAA;IACd,MAAM,EAAE,MAAM,CAAA;IACd,KAAK,EAAE,MAAM,CAAA;IACb,KAAK,EAAE,MAAM,CAAA;CACd;AAED,mJAAmJ;AACnJ,wBAAgB,cAAc,CAAC,OAAO,EAAE,WAAW,GAAG,QAAQ,GAAG,IAAI,CAgBpE;AAED,wBAAgB,SAAS,CAAC,KAAK,EAAE,QAAQ,GAAG,QAAQ,CAoCnD"}