@moon-cx/sdk 0.0.0-stage → 2.0.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 (155) hide show
  1. package/CHANGELOG.md +18 -0
  2. package/README.md +2 -2
  3. package/dist/adapters/sender.d.ts +88 -0
  4. package/dist/adapters/sender.d.ts.map +1 -0
  5. package/dist/adapters/sender.js +62 -0
  6. package/dist/adapters/sender.js.map +1 -0
  7. package/dist/adapters/tonclient.d.ts +13 -0
  8. package/dist/adapters/tonclient.d.ts.map +1 -0
  9. package/dist/adapters/tonclient.js +17 -0
  10. package/dist/adapters/tonclient.js.map +1 -0
  11. package/dist/api/index.d.ts +210 -0
  12. package/dist/api/index.d.ts.map +1 -0
  13. package/dist/api/index.js +364 -0
  14. package/dist/api/index.js.map +1 -0
  15. package/dist/codec/bins.d.ts +26 -0
  16. package/dist/codec/bins.d.ts.map +1 -0
  17. package/dist/codec/bins.js +67 -0
  18. package/dist/codec/bins.js.map +1 -0
  19. package/dist/codec/clmm.d.ts +87 -0
  20. package/dist/codec/clmm.d.ts.map +1 -0
  21. package/dist/codec/clmm.js +119 -0
  22. package/dist/codec/clmm.js.map +1 -0
  23. package/dist/codec/cpmm.d.ts +112 -0
  24. package/dist/codec/cpmm.d.ts.map +1 -0
  25. package/dist/codec/cpmm.js +146 -0
  26. package/dist/codec/cpmm.js.map +1 -0
  27. package/dist/codec/jetton.d.ts +30 -0
  28. package/dist/codec/jetton.d.ts.map +1 -0
  29. package/dist/codec/jetton.js +37 -0
  30. package/dist/codec/jetton.js.map +1 -0
  31. package/dist/codec/mempad.d.ts +109 -0
  32. package/dist/codec/mempad.d.ts.map +1 -0
  33. package/dist/codec/mempad.js +162 -0
  34. package/dist/codec/mempad.js.map +1 -0
  35. package/dist/core/amount.d.ts +33 -0
  36. package/dist/core/amount.d.ts.map +1 -0
  37. package/dist/core/amount.js +81 -0
  38. package/dist/core/amount.js.map +1 -0
  39. package/dist/core/asset.d.ts +82 -0
  40. package/dist/core/asset.d.ts.map +1 -0
  41. package/dist/core/asset.js +143 -0
  42. package/dist/core/asset.js.map +1 -0
  43. package/dist/core/errors.d.ts +70 -0
  44. package/dist/core/errors.d.ts.map +1 -0
  45. package/dist/core/errors.js +114 -0
  46. package/dist/core/errors.js.map +1 -0
  47. package/dist/core/fee.d.ts +36 -0
  48. package/dist/core/fee.d.ts.map +1 -0
  49. package/dist/core/fee.js +40 -0
  50. package/dist/core/fee.js.map +1 -0
  51. package/dist/core/gas.d.ts +112 -0
  52. package/dist/core/gas.d.ts.map +1 -0
  53. package/dist/core/gas.js +265 -0
  54. package/dist/core/gas.js.map +1 -0
  55. package/dist/core/percent.d.ts +27 -0
  56. package/dist/core/percent.d.ts.map +1 -0
  57. package/dist/core/percent.js +71 -0
  58. package/dist/core/percent.js.map +1 -0
  59. package/dist/core/tx.d.ts +36 -0
  60. package/dist/core/tx.d.ts.map +1 -0
  61. package/dist/core/tx.js +17 -0
  62. package/dist/core/tx.js.map +1 -0
  63. package/dist/index.d.ts +63 -0
  64. package/dist/index.d.ts.map +1 -0
  65. package/dist/index.js +41 -0
  66. package/dist/index.js.map +1 -0
  67. package/dist/jetton/index.d.ts +53 -0
  68. package/dist/jetton/index.d.ts.map +1 -0
  69. package/dist/jetton/index.js +90 -0
  70. package/dist/jetton/index.js.map +1 -0
  71. package/dist/math/clmm-swap.d.ts +80 -0
  72. package/dist/math/clmm-swap.d.ts.map +1 -0
  73. package/dist/math/clmm-swap.js +277 -0
  74. package/dist/math/clmm-swap.js.map +1 -0
  75. package/dist/math/clmm.d.ts +234 -0
  76. package/dist/math/clmm.d.ts.map +1 -0
  77. package/dist/math/clmm.js +270 -0
  78. package/dist/math/clmm.js.map +1 -0
  79. package/dist/math/cpmm.d.ts +170 -0
  80. package/dist/math/cpmm.d.ts.map +1 -0
  81. package/dist/math/cpmm.js +175 -0
  82. package/dist/math/cpmm.js.map +1 -0
  83. package/dist/math/integer.d.ts +10 -0
  84. package/dist/math/integer.d.ts.map +1 -0
  85. package/dist/math/integer.js +44 -0
  86. package/dist/math/integer.js.map +1 -0
  87. package/dist/math/q128.d.ts +45 -0
  88. package/dist/math/q128.d.ts.map +1 -0
  89. package/dist/math/q128.js +108 -0
  90. package/dist/math/q128.js.map +1 -0
  91. package/dist/moon.d.ts +245 -0
  92. package/dist/moon.d.ts.map +1 -0
  93. package/dist/moon.js +332 -0
  94. package/dist/moon.js.map +1 -0
  95. package/dist/ops/jetton-input.d.ts +3 -0
  96. package/dist/ops/jetton-input.d.ts.map +1 -0
  97. package/dist/ops/jetton-input.js +8 -0
  98. package/dist/ops/jetton-input.js.map +1 -0
  99. package/dist/ops/liquidity.d.ts +157 -0
  100. package/dist/ops/liquidity.d.ts.map +1 -0
  101. package/dist/ops/liquidity.js +413 -0
  102. package/dist/ops/liquidity.js.map +1 -0
  103. package/dist/ops/mempad.d.ts +143 -0
  104. package/dist/ops/mempad.d.ts.map +1 -0
  105. package/dist/ops/mempad.js +248 -0
  106. package/dist/ops/mempad.js.map +1 -0
  107. package/dist/ops/pool.d.ts +75 -0
  108. package/dist/ops/pool.d.ts.map +1 -0
  109. package/dist/ops/pool.js +129 -0
  110. package/dist/ops/pool.js.map +1 -0
  111. package/dist/ops/position.d.ts +47 -0
  112. package/dist/ops/position.d.ts.map +1 -0
  113. package/dist/ops/position.js +73 -0
  114. package/dist/ops/position.js.map +1 -0
  115. package/dist/ops/swap.d.ts +104 -0
  116. package/dist/ops/swap.d.ts.map +1 -0
  117. package/dist/ops/swap.js +248 -0
  118. package/dist/ops/swap.js.map +1 -0
  119. package/dist/pool/amounts.d.ts +36 -0
  120. package/dist/pool/amounts.d.ts.map +1 -0
  121. package/dist/pool/amounts.js +68 -0
  122. package/dist/pool/amounts.js.map +1 -0
  123. package/dist/pool/assets.d.ts +45 -0
  124. package/dist/pool/assets.d.ts.map +1 -0
  125. package/dist/pool/assets.js +57 -0
  126. package/dist/pool/assets.js.map +1 -0
  127. package/dist/pool/clmm.d.ts +309 -0
  128. package/dist/pool/clmm.d.ts.map +1 -0
  129. package/dist/pool/clmm.js +561 -0
  130. package/dist/pool/clmm.js.map +1 -0
  131. package/dist/pool/cpmm.d.ts +228 -0
  132. package/dist/pool/cpmm.d.ts.map +1 -0
  133. package/dist/pool/cpmm.js +332 -0
  134. package/dist/pool/cpmm.js.map +1 -0
  135. package/dist/protocol/generated.d.ts +2752 -0
  136. package/dist/protocol/generated.d.ts.map +1 -0
  137. package/dist/protocol/generated.js +3564 -0
  138. package/dist/protocol/generated.js.map +1 -0
  139. package/dist/protocol/index.d.ts +19 -0
  140. package/dist/protocol/index.d.ts.map +1 -0
  141. package/dist/protocol/index.js +49 -0
  142. package/dist/protocol/index.js.map +1 -0
  143. package/dist/state/address.d.ts +121 -0
  144. package/dist/state/address.d.ts.map +1 -0
  145. package/dist/state/address.js +143 -0
  146. package/dist/state/address.js.map +1 -0
  147. package/dist/state/source.d.ts +26 -0
  148. package/dist/state/source.d.ts.map +1 -0
  149. package/dist/state/source.js +32 -0
  150. package/dist/state/source.js.map +1 -0
  151. package/dist/state/storage.d.ts +218 -0
  152. package/dist/state/storage.d.ts.map +1 -0
  153. package/dist/state/storage.js +273 -0
  154. package/dist/state/storage.js.map +1 -0
  155. package/package.json +74 -4
@@ -0,0 +1,364 @@
1
+ import { Address } from '@ton/core';
2
+ import { Asset } from "../core/asset.js";
3
+ import { MoonError } from "../core/errors.js";
4
+ import { listedAsset } from "../pool/assets.js";
5
+ export class MoonApiError extends MoonError {
6
+ status;
7
+ /** The response's `Retry-After`, in milliseconds; `null` when it sent none. */
8
+ retryAfterMs;
9
+ /** The response body as text, cut to 2000 characters. */
10
+ body;
11
+ /**
12
+ * `true` for a 503 or 429: the same request is expected to succeed later. Check this
13
+ * (or `instanceof PoolIndexWarmingError`) rather than a particular status.
14
+ */
15
+ retryable;
16
+ constructor(path, status, body, retryAfterMs = null) {
17
+ super(`GET ${path} failed with ${status}: ${body.slice(0, 200)}`);
18
+ this.status = status;
19
+ this.retryAfterMs = retryAfterMs;
20
+ this.body = body.slice(0, 2000);
21
+ this.retryable = status === 503 || status === 429;
22
+ }
23
+ }
24
+ /**
25
+ * The backend has not finished listing pools of a protocol you asked for. Retryable:
26
+ * wait `retryAfterMs` (5 s when the backend does not say) and call again.
27
+ *
28
+ * Thrown instead of returning a shorter list, which would look like "no pool for this
29
+ * pair". Covers both a 503 from a per-protocol route and `incompleteTypes` in a 200 from
30
+ * `GET /v1/pools`; `status` is 503 in both cases (the 200 is visible in `body`).
31
+ * `load('cpmm')` still works while only CLMM is being listed.
32
+ */
33
+ export class PoolIndexWarmingError extends MoonApiError {
34
+ /** Always `true`: this condition clears by itself; retry after `retryAfterMs`. */
35
+ retryable = true;
36
+ /** The protocols that are not listed yet — the ones you asked for. */
37
+ incomplete;
38
+ constructor(path, body, incomplete, retryAfterMs) {
39
+ // At least 1 s, so `Retry-After: 0` does not make a retry loop spin.
40
+ super(path, 503, body, Math.max(POOL_INDEX_MIN_RETRY_MS, retryAfterMs ?? POOL_INDEX_RETRY_MS));
41
+ this.incomplete = incomplete;
42
+ this.message =
43
+ `GET ${path}: the pool index is still listing ${incomplete.join(' and ') || 'pools'} ` +
44
+ `— a partial list would hide existing pools; retry in ${Math.ceil(this.retryAfterMs / 1000)} s`;
45
+ }
46
+ }
47
+ /** How long to wait when the backend warms up without saying: its own Retry-After is 5 s. */
48
+ const POOL_INDEX_RETRY_MS = 5_000;
49
+ /** The shortest wait a warm-up error suggests, whatever the backend said. */
50
+ const POOL_INDEX_MIN_RETRY_MS = 1_000;
51
+ /** A 503 from the pool index warming up, as opposed to "service busy" or a proxy page. */
52
+ function isPoolIndexWarming(error) {
53
+ return error.status === 503 && /pool index is warming up/i.test(error.body);
54
+ }
55
+ /** `Retry-After` → milliseconds: delta-seconds or an HTTP date; anything else is `null`. */
56
+ function retryAfterMsOf(value) {
57
+ if (value === null || value.trim() === '')
58
+ return null;
59
+ const seconds = Number(value);
60
+ if (Number.isFinite(seconds))
61
+ return seconds >= 0 ? seconds * 1000 : null;
62
+ const at = Date.parse(value);
63
+ return Number.isFinite(at) ? Math.max(0, at - Date.now()) : null;
64
+ }
65
+ const NATIVE_ADDRESSES = new Set(['TON', 'GRAM', 'native', '']);
66
+ function toAddress(value) {
67
+ if (typeof value !== 'string' || NATIVE_ADDRESSES.has(value))
68
+ return null;
69
+ try {
70
+ return Address.parse(value);
71
+ }
72
+ catch {
73
+ return null;
74
+ }
75
+ }
76
+ function toToken(raw) {
77
+ return {
78
+ symbol: String(raw['symbol'] ?? ''),
79
+ name: String(raw['name'] ?? raw['symbol'] ?? ''),
80
+ address: toAddress(raw['address']),
81
+ decimals: Number(raw['decimals'] ?? 9),
82
+ };
83
+ }
84
+ function toNumberOrNull(value) {
85
+ return typeof value === 'number' && Number.isFinite(value) ? value : null;
86
+ }
87
+ export class MoonApi {
88
+ baseUrl;
89
+ doFetch;
90
+ timeoutMs;
91
+ constructor(options = {}) {
92
+ // The public gateway; api.moon.cx is a different service and answers 404 on these routes.
93
+ this.baseUrl = (options.baseUrl ?? 'https://gw.moon.cx').replace(/\/+$/, '');
94
+ this.doFetch = options.fetch ?? globalThis.fetch;
95
+ this.timeoutMs = options.timeoutMs ?? 15_000;
96
+ }
97
+ async get(path) {
98
+ const controller = new AbortController();
99
+ const timer = setTimeout(() => controller.abort(), this.timeoutMs);
100
+ try {
101
+ const response = await this.doFetch(`${this.baseUrl}${path}`, {
102
+ signal: controller.signal,
103
+ headers: { accept: 'application/json' },
104
+ });
105
+ if (!response.ok) {
106
+ throw new MoonApiError(path, response.status, await response.text(),
107
+ // `?.`: a custom `fetch` stub may return a response without `headers`.
108
+ retryAfterMsOf(response.headers?.get?.('retry-after') ?? null));
109
+ }
110
+ return await response.json();
111
+ }
112
+ finally {
113
+ clearTimeout(timer);
114
+ }
115
+ }
116
+ /**
117
+ * Fetches the pool listing once and returns it indexed for in-memory lookups.
118
+ * Call {@link PoolList.refresh} for fresh numbers.
119
+ *
120
+ * The list is always complete for the protocols asked for; while the backend is
121
+ * still listing one of them this throws {@link PoolIndexWarmingError} (retryable).
122
+ */
123
+ async load(protocol) {
124
+ return new PoolList(this, protocol, await this.fetchPools(protocol));
125
+ }
126
+ /**
127
+ * One raw fetch of the listing as a plain array. Prefer {@link load} rather than
128
+ * calling this per lookup.
129
+ */
130
+ async fetchPools(protocol) {
131
+ const path = protocol === 'cpmm' ? '/v1/pools/cpmm' : protocol === 'clmm' ? '/v1/pools/clmm' : '/v1/pools';
132
+ const asked = protocol === undefined ? ['cpmm', 'clmm'] : [protocol];
133
+ let payload;
134
+ try {
135
+ payload = (await this.get(path));
136
+ }
137
+ catch (error) {
138
+ // Other 503s stay a plain MoonApiError (still retryable).
139
+ if (error instanceof MoonApiError && isPoolIndexWarming(error)) {
140
+ throw new PoolIndexWarmingError(path, error.body, asked, error.retryAfterMs);
141
+ }
142
+ throw error;
143
+ }
144
+ // Only incomplete protocols that were asked for count; unknown names are ignored.
145
+ const incomplete = Array.isArray(payload.incompleteTypes)
146
+ ? asked.filter((kind) => payload.incompleteTypes.some((t) => String(t).toLowerCase() === kind))
147
+ : [];
148
+ if (incomplete.length > 0) {
149
+ throw new PoolIndexWarmingError(path, `incompleteTypes: ${JSON.stringify(payload.incompleteTypes)}`, incomplete, null);
150
+ }
151
+ const result = [];
152
+ for (const group of payload.groups ?? []) {
153
+ const g = group;
154
+ for (const pool of g['pools'] ?? []) {
155
+ const p = pool;
156
+ const address = toAddress(p['id']);
157
+ if (address === null)
158
+ continue;
159
+ const kind = String(p['type'] ?? g['type'] ?? '').toLowerCase();
160
+ if (kind !== 'cpmm' && kind !== 'clmm')
161
+ continue;
162
+ result.push({
163
+ address,
164
+ protocol: kind,
165
+ tokens: {
166
+ x: toToken((p['token0'] ?? g['token0'] ?? {})),
167
+ y: toToken((p['token1'] ?? g['token1'] ?? {})),
168
+ },
169
+ feeBps: Number(p['feeBps'] ?? 0),
170
+ protocolFeeBps: toNumberOrNull(p['protocolFeeBps']),
171
+ totalFeeBps: toNumberOrNull(p['totalFeeBps']),
172
+ binStep: p['binStep'] === null || p['binStep'] === undefined ? null : Number(p['binStep']),
173
+ tvlUsd: toNumberOrNull(p['tvlUsd']),
174
+ volume24hUsd: toNumberOrNull(p['volume24hUsd']),
175
+ aprPct: toNumberOrNull(p['aprPct']),
176
+ price: toNumberOrNull(p['price']),
177
+ });
178
+ }
179
+ }
180
+ return result;
181
+ }
182
+ /**
183
+ * The deployment's network and DEX factory addresses (GET /v1/config). `Moon` asks
184
+ * once, when a create* call needs a factory and none was given.
185
+ */
186
+ async config() {
187
+ const raw = (await this.get('/v1/config'));
188
+ return {
189
+ network: typeof raw['network'] === 'string' ? raw['network'] : null,
190
+ cpmmFactory: toAddress(raw['cpmmFactory']),
191
+ clmmFactory: toAddress(raw['clmmFactory']),
192
+ jackpot: toAddress(raw['jackpotAddress']),
193
+ };
194
+ }
195
+ /** The launch factory (GET /v1/mempad/launches/config); a separate service from {@link config}. */
196
+ async mempadConfig() {
197
+ const raw = (await this.get('/v1/mempad/launches/config'));
198
+ return {
199
+ network: typeof raw['network'] === 'string' ? raw['network'] : null,
200
+ factory: toAddress(raw['factoryAddress']),
201
+ };
202
+ }
203
+ /**
204
+ * A wallet's positions in one request. The records are pointers: open them with
205
+ * `range.positionAt()` and read the real numbers on chain.
206
+ */
207
+ async positionsOf(wallet, options) {
208
+ const owner = typeof wallet === 'string' ? wallet : wallet.toString();
209
+ const query = options?.pool === undefined
210
+ ? ''
211
+ : `?pool_id=${encodeURIComponent(typeof options.pool === 'string' ? options.pool : options.pool.toString())}`;
212
+ const payload = (await this.get(`/v1/wallets/${encodeURIComponent(owner)}/positions${query}`));
213
+ const result = [];
214
+ for (const entry of payload.positions ?? []) {
215
+ const p = entry;
216
+ const address = toAddress(p['id']);
217
+ const pool = toAddress(p['poolId']);
218
+ if (address === null || pool === null)
219
+ continue;
220
+ const kind = String(p['type'] ?? '').toLowerCase();
221
+ if (kind !== 'cpmm' && kind !== 'clmm')
222
+ continue;
223
+ const binLow = toNumberOrNull(p['binIdLow']);
224
+ const binHigh = toNumberOrNull(p['binIdHigh']);
225
+ const priceLow = toNumberOrNull(p['priceLow']);
226
+ const priceHigh = toNumberOrNull(p['priceHigh']);
227
+ result.push({
228
+ address,
229
+ nftIndex: p['nftIndex'] === null || p['nftIndex'] === undefined
230
+ ? null
231
+ : BigInt(String(p['nftIndex'])),
232
+ pool,
233
+ protocol: kind,
234
+ status: String(p['status'] ?? 'unknown'),
235
+ bins: binLow !== null && binHigh !== null ? { low: binLow, high: binHigh } : null,
236
+ prices: priceLow !== null && priceHigh !== null ? { low: priceLow, high: priceHigh } : null,
237
+ liquidityUsd: toNumberOrNull(p['liquidityUsd']),
238
+ feesUsd: toNumberOrNull(p['feesUsd']),
239
+ aprPct: toNumberOrNull(p['aprPct']),
240
+ });
241
+ }
242
+ return new WalletPositions(result);
243
+ }
244
+ }
245
+ /**
246
+ * A wallet's positions, split by protocol: a CPMM position is one per pool, while a
247
+ * wallet can hold many CLMM positions per range.
248
+ */
249
+ export class WalletPositions {
250
+ /** Every position, in the order the backend returned them. */
251
+ all;
252
+ cpmm;
253
+ clmm;
254
+ constructor(positions) {
255
+ this.all = positions;
256
+ this.cpmm = positions.filter((position) => position.protocol === 'cpmm');
257
+ this.clmm = positions.filter((position) => position.protocol === 'clmm');
258
+ }
259
+ get size() {
260
+ return this.all.length;
261
+ }
262
+ /** Positions in one pool. */
263
+ inPool(pool) {
264
+ const address = typeof pool === 'string' ? Address.parse(pool) : pool;
265
+ return this.all.filter((position) => position.pool.equals(address));
266
+ }
267
+ /** Positions the backend still considers open. */
268
+ active() {
269
+ // `active` is accepted from older or custom backends.
270
+ return this.all.filter((position) => position.status === 'in-range' || position.status === 'out-range' || position.status === 'active');
271
+ }
272
+ }
273
+ /** Identity of an asset as a listing key. */
274
+ function assetKey(asset) {
275
+ return asset.isNative() ? 'native' : asset.master.toRawString();
276
+ }
277
+ function tokenKey(token) {
278
+ return token.address === null ? 'native' : token.address.toRawString();
279
+ }
280
+ /** Unordered pair key, so TON/USDT and USDT/TON land in the same bucket. */
281
+ function pairKey(one, two) {
282
+ return one < two ? `${one}|${two}` : `${two}|${one}`;
283
+ }
284
+ /** The pool listing, fetched once and queried in memory; only {@link refresh} hits the network. */
285
+ export class PoolList {
286
+ /** Every pool in the listing, in the order the backend returned them. */
287
+ pools;
288
+ /** Unix milliseconds when this listing was fetched. */
289
+ fetchedAt;
290
+ #api;
291
+ #protocol;
292
+ #byAddress = new Map();
293
+ #byPair = new Map();
294
+ constructor(api, protocol, pools) {
295
+ this.#api = api;
296
+ this.#protocol = protocol;
297
+ this.pools = pools;
298
+ this.fetchedAt = Date.now();
299
+ for (const pool of pools) {
300
+ this.#byAddress.set(pool.address.toRawString(), pool);
301
+ const key = pairKey(tokenKey(pool.tokens.x), tokenKey(pool.tokens.y));
302
+ const bucket = this.#byPair.get(key);
303
+ if (bucket)
304
+ bucket.push(pool);
305
+ else
306
+ this.#byPair.set(key, [pool]);
307
+ }
308
+ for (const bucket of this.#byPair.values()) {
309
+ bucket.sort((one, two) => (two.tvlUsd ?? 0) - (one.tvlUsd ?? 0));
310
+ }
311
+ }
312
+ get size() {
313
+ return this.pools.length;
314
+ }
315
+ /** How long ago this listing was fetched, in milliseconds. */
316
+ get ageMs() {
317
+ return Date.now() - this.fetchedAt;
318
+ }
319
+ /** Every pool, optionally narrowed to one protocol. */
320
+ all(protocol) {
321
+ return protocol === undefined
322
+ ? [...this.pools]
323
+ : this.pools.filter((pool) => pool.protocol === protocol);
324
+ }
325
+ byAddress(address) {
326
+ const key = typeof address === 'string' ? Address.parse(address) : address;
327
+ return this.#byAddress.get(key.toRawString()) ?? null;
328
+ }
329
+ /** Pools holding both assets, deepest first. Pure lookup, no request. */
330
+ find(a, b, protocol) {
331
+ const bucket = this.#byPair.get(pairKey(assetKey(a), assetKey(b))) ?? [];
332
+ return protocol === undefined ? [...bucket] : bucket.filter((p) => p.protocol === protocol);
333
+ }
334
+ /** The deepest pool for a pair, or `null`. */
335
+ best(a, b, protocol) {
336
+ return this.find(a, b, protocol)[0] ?? null;
337
+ }
338
+ /** Every asset that appears in the listing, as {@link Asset} objects. */
339
+ assets() {
340
+ const seen = new Map();
341
+ for (const pool of this.pools) {
342
+ const { x, y } = assetsOf(pool);
343
+ seen.set(assetKey(x), x);
344
+ seen.set(assetKey(y), y);
345
+ }
346
+ return [...seen.values()];
347
+ }
348
+ /** Fetches the listing again and returns a new list. This one is unchanged. */
349
+ async refresh() {
350
+ return this.#api.load(this.#protocol);
351
+ }
352
+ }
353
+ /**
354
+ * Turns a listing entry into SDK assets with the listing's decimals. A pool opened with
355
+ * them, on a client that cannot read jetton metadata, reports `'listed'` in
356
+ * `pool.decimalsSource` and takes amounts on that side only as raw `bigint`.
357
+ */
358
+ export function assetsOf(pool) {
359
+ const build = (token) => token.address === null
360
+ ? Asset.native()
361
+ : listedAsset(Asset.jetton(token.address, { decimals: token.decimals, symbol: token.symbol }));
362
+ return { x: build(pool.tokens.x), y: build(pool.tokens.y) };
363
+ }
364
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/api/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,26 @@
1
+ import { Dictionary, type Cell } from '@ton/core';
2
+ /**
3
+ * One bin's share of a CLMM deposit: how much of each side goes into it.
4
+ * `DepositBin { x: coins, y: coins }` in the protocol.
5
+ */
6
+ export type DepositBin = {
7
+ /** Bin index. Signed — a live pool sits at a negative index as often as not. */
8
+ binId: number;
9
+ x: bigint;
10
+ y: bigint;
11
+ };
12
+ /** Builds the deposit dictionary. Duplicate bins are a mistake, not a merge. */
13
+ export declare function depositBinsToDict(bins: readonly DepositBin[]): Dictionary<bigint, {
14
+ x: bigint;
15
+ y: bigint;
16
+ }>;
17
+ /** Builds the withdraw dictionary: which bins to take liquidity out of. */
18
+ export declare function binFlagsToDict(binIds: readonly number[]): Dictionary<bigint, boolean>;
19
+ export declare function parseDepositBins(cell: Cell | null): DepositBin[];
20
+ export declare function parseBinFlags(cell: Cell | null): number[];
21
+ /** Totals per side, used to fill `depositAmount` and to pick the leg. */
22
+ export declare function sumBins(bins: readonly DepositBin[]): {
23
+ x: bigint;
24
+ y: bigint;
25
+ };
26
+ //# sourceMappingURL=bins.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bins.d.ts","sourceRoot":"","sources":["../../src/codec/bins.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAkD,KAAK,IAAI,EAAE,MAAM,WAAW,CAAA;AAEjG;;;GAGG;AACH,MAAM,MAAM,UAAU,GAAG;IACvB,gFAAgF;IAChF,KAAK,EAAE,MAAM,CAAA;IACb,CAAC,EAAE,MAAM,CAAA;IACT,CAAC,EAAE,MAAM,CAAA;CACV,CAAA;AAwBD,gFAAgF;AAChF,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,SAAS,UAAU,EAAE,GAAG,UAAU,CAAC,MAAM,EAAE;IAAE,CAAC,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CAa3G;AAED,2EAA2E;AAC3E,wBAAgB,cAAc,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,GAAG,UAAU,CAAC,MAAM,EAAE,OAAO,CAAC,CAUrF;AAED,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,IAAI,GAAG,IAAI,GAAG,UAAU,EAAE,CAIhE;AAED,wBAAgB,aAAa,CAAC,IAAI,EAAE,IAAI,GAAG,IAAI,GAAG,MAAM,EAAE,CAGzD;AAED,yEAAyE;AACzE,wBAAgB,OAAO,CAAC,IAAI,EAAE,SAAS,UAAU,EAAE,GAAG;IAAE,CAAC,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAA;CAAE,CAK7E"}
@@ -0,0 +1,67 @@
1
+ import { Dictionary } from '@ton/core';
2
+ /** Bin indices are signed 64-bit keys: pools priced below 1 sit at negative bins. */
3
+ const KEY = Dictionary.Keys.BigInt(64);
4
+ const DEPOSIT_BIN = {
5
+ serialize: (src, builder) => {
6
+ builder.storeCoins(src.x);
7
+ builder.storeCoins(src.y);
8
+ },
9
+ parse: (slice) => ({ x: slice.loadCoins(), y: slice.loadCoins() }),
10
+ };
11
+ /**
12
+ * A `map<int64, bool>` leaf is a single bit. The receiver reads only the keys,
13
+ * but the bit still has to be there for the cell to parse.
14
+ */
15
+ const BIN_FLAG = {
16
+ serialize: (src, builder) => {
17
+ builder.storeBit(src);
18
+ },
19
+ parse: (slice) => slice.loadBit(),
20
+ };
21
+ /** Builds the deposit dictionary. Duplicate bins are a mistake, not a merge. */
22
+ export function depositBinsToDict(bins) {
23
+ const dict = Dictionary.empty(KEY, DEPOSIT_BIN);
24
+ const seen = new Set();
25
+ for (const bin of bins) {
26
+ if (!Number.isInteger(bin.binId)) {
27
+ throw new TypeError(`bin index must be a whole number, got ${bin.binId}`);
28
+ }
29
+ if (seen.has(bin.binId))
30
+ throw new TypeError(`bin ${bin.binId} appears twice`);
31
+ if (bin.x < 0n || bin.y < 0n)
32
+ throw new TypeError(`bin ${bin.binId} has a negative amount`);
33
+ seen.add(bin.binId);
34
+ dict.set(BigInt(bin.binId), { x: bin.x, y: bin.y });
35
+ }
36
+ return dict;
37
+ }
38
+ /** Builds the withdraw dictionary: which bins to take liquidity out of. */
39
+ export function binFlagsToDict(binIds) {
40
+ const dict = Dictionary.empty(KEY, BIN_FLAG);
41
+ const seen = new Set();
42
+ for (const binId of binIds) {
43
+ if (!Number.isInteger(binId))
44
+ throw new TypeError(`bin index must be a whole number, got ${binId}`);
45
+ if (seen.has(binId))
46
+ throw new TypeError(`bin ${binId} appears twice`);
47
+ seen.add(binId);
48
+ dict.set(BigInt(binId), true);
49
+ }
50
+ return dict;
51
+ }
52
+ export function parseDepositBins(cell) {
53
+ if (cell === null)
54
+ return [];
55
+ const dict = Dictionary.loadDirect(KEY, DEPOSIT_BIN, cell);
56
+ return [...dict].map(([binId, value]) => ({ binId: Number(binId), x: value.x, y: value.y }));
57
+ }
58
+ export function parseBinFlags(cell) {
59
+ if (cell === null)
60
+ return [];
61
+ return [...Dictionary.loadDirect(KEY, BIN_FLAG, cell).keys()].map(Number);
62
+ }
63
+ /** Totals per side, used to fill `depositAmount` and to pick the leg. */
64
+ export function sumBins(bins) {
65
+ return bins.reduce((total, bin) => ({ x: total.x + bin.x, y: total.y + bin.y }), { x: 0n, y: 0n });
66
+ }
67
+ //# sourceMappingURL=bins.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bins.js","sourceRoot":"","sources":["../../src/codec/bins.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,87 @@
1
+ import { Address, type Cell } from '@ton/core';
2
+ import { type DepositBin } from './bins.ts';
3
+ /** Field order this codec writes. Checked against the protocol by the drift test. */
4
+ export declare const CLMM_LAYOUTS: {
5
+ readonly MsgCreatePool: readonly ["queryId", "xMaster", "yMaster", "binStep", "initBin"];
6
+ readonly MsgSwap: readonly ["queryId", "swapParams"];
7
+ readonly TonSwapParams: readonly ["swapAmount", "excess", "sqrtPriceLimit", "nextFulfill", "nextReject"];
8
+ readonly JettonSwapPayload: readonly ["swapParams"];
9
+ readonly JettonSwapParams: readonly ["excess", "sqrtPriceLimit", "nextFulfill", "nextReject"];
10
+ readonly MsgDepositLiquidity: readonly ["queryId", "depositAmount", "isSingle", "depositBins"];
11
+ readonly JettonDepositLiquidityPayload: readonly ["isSingle", "depositBins"];
12
+ readonly MsgWithdrawLiqudity: readonly ["queryId", "withdrawBins"];
13
+ readonly MsgWithdrawFees: readonly ["queryId"];
14
+ readonly MsgLockLiquidity: readonly ["queryId"];
15
+ };
16
+ export type ClmmSwapParams = {
17
+ swapAmount: bigint;
18
+ /** Where leftover TON goes. Sits before the price limit — omitting it shifts every later byte. */
19
+ excess: Address;
20
+ /**
21
+ * Price bound as a Q128 square root: CLMM bounds a swap by price, not by
22
+ * output. Zero means no bound, which is rarely what you want on a live pool.
23
+ */
24
+ sqrtPriceLimit: bigint;
25
+ nextFulfill?: Cell | null;
26
+ nextReject?: Cell | null;
27
+ };
28
+ /** `MsgSwap` — native TON leg. Sent to the range, not to the pool. */
29
+ export declare function encodeSwap(args: {
30
+ queryId: bigint;
31
+ } & ClmmSwapParams): Cell;
32
+ /** `JettonSwapPayload` — jetton leg. No query id, no amount: both come from the transfer. */
33
+ export declare function encodeJettonSwapPayload(args: Omit<ClmmSwapParams, 'swapAmount'>): Cell;
34
+ /**
35
+ * `MsgCreatePool`.
36
+ *
37
+ * `initBin` is signed: a pool priced below 1 starts at a negative index.
38
+ * `binStep` is in basis points and the factory only accepts 25, 50, 100 or 200.
39
+ */
40
+ export declare function encodeCreatePool(args: {
41
+ queryId: bigint;
42
+ xMaster: Address | null;
43
+ yMaster: Address | null;
44
+ binStep: number;
45
+ initBin: number;
46
+ }): Cell;
47
+ export type ClmmDepositArgs = {
48
+ queryId: bigint;
49
+ bins: readonly DepositBin[];
50
+ /**
51
+ * True when only one side is provided and no matching leg will follow. If
52
+ * false and no second leg arrives, the deposit waits in the LP account.
53
+ */
54
+ isSingle: boolean;
55
+ /** Which side this leg carries. Decides which column of the bins is summed. */
56
+ side: 'x' | 'y';
57
+ };
58
+ /** `MsgDepositLiquidity` — native TON leg. Native TON is always the X side. */
59
+ export declare function encodeDepositLiquidity(args: ClmmDepositArgs): Cell;
60
+ /** `JettonDepositLiquidityPayload` — jetton leg. Amount comes from the transfer. */
61
+ export declare function encodeJettonDepositPayload(args: {
62
+ bins: readonly DepositBin[];
63
+ isSingle: boolean;
64
+ }): Cell;
65
+ /**
66
+ * `MsgWithdrawLiqudity` — sent to the LP position.
67
+ *
68
+ * The misspelling is the protocol's own message name, kept so the two match.
69
+ * The body carries which bins to empty; there is no partial amount.
70
+ */
71
+ export declare function encodeWithdrawLiquidity(args: {
72
+ queryId: bigint;
73
+ binIds: readonly number[];
74
+ }): Cell;
75
+ /** `MsgWithdrawFees` — collects accrued fees, leaving liquidity in place. */
76
+ export declare function encodeWithdrawFees(args: {
77
+ queryId: bigint;
78
+ }): Cell;
79
+ /** `MsgLockLiquidity` — locks the position permanently. */
80
+ export declare function encodeLockLiquidity(args: {
81
+ queryId: bigint;
82
+ }): Cell;
83
+ /** Parses a `MsgSwap` body. For tests and debugging. */
84
+ export declare function decodeSwap(cell: Cell): {
85
+ queryId: bigint;
86
+ } & ClmmSwapParams;
87
+ //# sourceMappingURL=clmm.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"clmm.d.ts","sourceRoot":"","sources":["../../src/codec/clmm.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAa,KAAK,IAAI,EAAE,MAAM,WAAW,CAAA;AAEzD,OAAO,EAA8C,KAAK,UAAU,EAAE,MAAM,WAAW,CAAA;AAEvF,qFAAqF;AACrF,eAAO,MAAM,YAAY;;;;;;;;;;;CAWf,CAAA;AASV,MAAM,MAAM,cAAc,GAAG;IAC3B,UAAU,EAAE,MAAM,CAAA;IAClB,kGAAkG;IAClG,MAAM,EAAE,OAAO,CAAA;IACf;;;OAGG;IACH,cAAc,EAAE,MAAM,CAAA;IACtB,WAAW,CAAC,EAAE,IAAI,GAAG,IAAI,CAAA;IACzB,UAAU,CAAC,EAAE,IAAI,GAAG,IAAI,CAAA;CACzB,CAAA;AAED,sEAAsE;AACtE,wBAAgB,UAAU,CAAC,IAAI,EAAE;IAAE,OAAO,EAAE,MAAM,CAAA;CAAE,GAAG,cAAc,GAAG,IAAI,CAU3E;AAED,6FAA6F;AAC7F,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,IAAI,CAAC,cAAc,EAAE,YAAY,CAAC,GAAG,IAAI,CAQtF;AAED;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE;IACrC,OAAO,EAAE,MAAM,CAAA;IACf,OAAO,EAAE,OAAO,GAAG,IAAI,CAAA;IACvB,OAAO,EAAE,OAAO,GAAG,IAAI,CAAA;IACvB,OAAO,EAAE,MAAM,CAAA;IACf,OAAO,EAAE,MAAM,CAAA;CAChB,GAAG,IAAI,CASP;AAED,MAAM,MAAM,eAAe,GAAG;IAC5B,OAAO,EAAE,MAAM,CAAA;IACf,IAAI,EAAE,SAAS,UAAU,EAAE,CAAA;IAC3B;;;OAGG;IACH,QAAQ,EAAE,OAAO,CAAA;IACjB,+EAA+E;IAC/E,IAAI,EAAE,GAAG,GAAG,GAAG,CAAA;CAChB,CAAA;AAED,+EAA+E;AAC/E,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,eAAe,GAAG,IAAI,CAUlE;AAED,oFAAoF;AACpF,wBAAgB,0BAA0B,CAAC,IAAI,EAAE;IAC/C,IAAI,EAAE,SAAS,UAAU,EAAE,CAAA;IAC3B,QAAQ,EAAE,OAAO,CAAA;CAClB,GAAG,IAAI,CAMP;AAED;;;;;GAKG;AACH,wBAAgB,uBAAuB,CAAC,IAAI,EAAE;IAC5C,OAAO,EAAE,MAAM,CAAA;IACf,MAAM,EAAE,SAAS,MAAM,EAAE,CAAA;CAC1B,GAAG,IAAI,CAOP;AAED,6EAA6E;AAC7E,wBAAgB,kBAAkB,CAAC,IAAI,EAAE;IAAE,OAAO,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAElE;AAED,2DAA2D;AAC3D,wBAAgB,mBAAmB,CAAC,IAAI,EAAE;IAAE,OAAO,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAEnE;AAED,wDAAwD;AACxD,wBAAgB,UAAU,CAAC,IAAI,EAAE,IAAI,GAAG;IAAE,OAAO,EAAE,MAAM,CAAA;CAAE,GAAG,cAAc,CAW3E"}