@hodlmarkets/sdk 0.1.0 → 0.1.2

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 (52) hide show
  1. package/README.md +6 -6
  2. package/dist/accounts.cjs +22 -0
  3. package/dist/accounts.cjs.map +1 -1
  4. package/dist/accounts.js +22 -0
  5. package/dist/accounts.js.map +1 -1
  6. package/dist/client.cjs +340 -28
  7. package/dist/client.cjs.map +1 -1
  8. package/dist/client.d.cts +6 -2
  9. package/dist/client.d.ts +6 -2
  10. package/dist/client.js +341 -29
  11. package/dist/client.js.map +1 -1
  12. package/dist/constants.cjs +3 -1
  13. package/dist/constants.cjs.map +1 -1
  14. package/dist/constants.d.cts +5 -3
  15. package/dist/constants.d.ts +5 -3
  16. package/dist/constants.js +3 -2
  17. package/dist/constants.js.map +1 -1
  18. package/dist/events.cjs +333 -14
  19. package/dist/events.cjs.map +1 -1
  20. package/dist/events.d.cts +9 -0
  21. package/dist/events.d.ts +9 -0
  22. package/dist/events.js +334 -15
  23. package/dist/events.js.map +1 -1
  24. package/dist/index.cjs +375 -31
  25. package/dist/index.cjs.map +1 -1
  26. package/dist/index.d.cts +3 -3
  27. package/dist/index.d.ts +3 -3
  28. package/dist/index.js +375 -32
  29. package/dist/index.js.map +1 -1
  30. package/dist/instructions.cjs +22 -0
  31. package/dist/instructions.cjs.map +1 -1
  32. package/dist/instructions.js +22 -0
  33. package/dist/instructions.js.map +1 -1
  34. package/dist/math.cjs +33 -0
  35. package/dist/math.cjs.map +1 -1
  36. package/dist/math.d.cts +14 -4
  37. package/dist/math.d.ts +14 -4
  38. package/dist/math.js +33 -1
  39. package/dist/math.js.map +1 -1
  40. package/dist/pda.cjs +1 -0
  41. package/dist/pda.cjs.map +1 -1
  42. package/dist/pda.js +1 -0
  43. package/dist/pda.js.map +1 -1
  44. package/dist/transaction.cjs +0 -13
  45. package/dist/transaction.cjs.map +1 -1
  46. package/dist/transaction.d.cts +5 -3
  47. package/dist/transaction.d.ts +5 -3
  48. package/dist/transaction.js +1 -13
  49. package/dist/transaction.js.map +1 -1
  50. package/dist/types.d.cts +3 -0
  51. package/dist/types.d.ts +3 -0
  52. package/package.json +5 -3
package/dist/events.js CHANGED
@@ -1,6 +1,240 @@
1
- import { BorshCoder, EventParser } from '@coral-xyz/anchor';
1
+ import { BorshCoder, utils } from '@coral-xyz/anchor';
2
+
3
+ var __create = Object.create;
4
+ var __defProp = Object.defineProperty;
5
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
6
+ var __getOwnPropNames = Object.getOwnPropertyNames;
7
+ var __getProtoOf = Object.getPrototypeOf;
8
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
9
+ var __require = /* @__PURE__ */ ((x) => typeof require !== "undefined" ? require : typeof Proxy !== "undefined" ? new Proxy(x, {
10
+ get: (a, b) => (typeof require !== "undefined" ? require : a)[b]
11
+ }) : x)(function(x) {
12
+ if (typeof require !== "undefined") return require.apply(this, arguments);
13
+ throw Error('Dynamic require of "' + x + '" is not supported');
14
+ });
15
+ var __commonJS = (cb, mod) => function __require2() {
16
+ return mod || (0, cb[__getOwnPropNames(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports;
17
+ };
18
+ var __copyProps = (to, from, except, desc) => {
19
+ if (from && typeof from === "object" || typeof from === "function") {
20
+ for (let key of __getOwnPropNames(from))
21
+ if (!__hasOwnProp.call(to, key) && key !== except)
22
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
23
+ }
24
+ return to;
25
+ };
26
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
27
+ // If the importer is in node compatibility mode or this is not an ESM
28
+ // file that has been converted to a CommonJS file using a Babel-
29
+ // compatible transform (i.e. "__esModule" has not been set), then set
30
+ // "default" to the CommonJS "module.exports" for node compatibility.
31
+ __defProp(target, "default", { value: mod, enumerable: true }) ,
32
+ mod
33
+ ));
34
+
35
+ // node_modules/safe-buffer/index.js
36
+ var require_safe_buffer = __commonJS({
37
+ "node_modules/safe-buffer/index.js"(exports$1, module) {
38
+ var buffer = __require("buffer");
39
+ var Buffer2 = buffer.Buffer;
40
+ function copyProps(src, dst) {
41
+ for (var key in src) {
42
+ dst[key] = src[key];
43
+ }
44
+ }
45
+ if (Buffer2.from && Buffer2.alloc && Buffer2.allocUnsafe && Buffer2.allocUnsafeSlow) {
46
+ module.exports = buffer;
47
+ } else {
48
+ copyProps(buffer, exports$1);
49
+ exports$1.Buffer = SafeBuffer;
50
+ }
51
+ function SafeBuffer(arg, encodingOrOffset, length) {
52
+ return Buffer2(arg, encodingOrOffset, length);
53
+ }
54
+ SafeBuffer.prototype = Object.create(Buffer2.prototype);
55
+ copyProps(Buffer2, SafeBuffer);
56
+ SafeBuffer.from = function(arg, encodingOrOffset, length) {
57
+ if (typeof arg === "number") {
58
+ throw new TypeError("Argument must not be a number");
59
+ }
60
+ return Buffer2(arg, encodingOrOffset, length);
61
+ };
62
+ SafeBuffer.alloc = function(size, fill, encoding) {
63
+ if (typeof size !== "number") {
64
+ throw new TypeError("Argument must be a number");
65
+ }
66
+ var buf = Buffer2(size);
67
+ if (fill !== void 0) {
68
+ if (typeof encoding === "string") {
69
+ buf.fill(fill, encoding);
70
+ } else {
71
+ buf.fill(fill);
72
+ }
73
+ } else {
74
+ buf.fill(0);
75
+ }
76
+ return buf;
77
+ };
78
+ SafeBuffer.allocUnsafe = function(size) {
79
+ if (typeof size !== "number") {
80
+ throw new TypeError("Argument must be a number");
81
+ }
82
+ return Buffer2(size);
83
+ };
84
+ SafeBuffer.allocUnsafeSlow = function(size) {
85
+ if (typeof size !== "number") {
86
+ throw new TypeError("Argument must be a number");
87
+ }
88
+ return buffer.SlowBuffer(size);
89
+ };
90
+ }
91
+ });
92
+
93
+ // node_modules/base-x/src/index.js
94
+ var require_src = __commonJS({
95
+ "node_modules/base-x/src/index.js"(exports$1, module) {
96
+ var _Buffer = require_safe_buffer().Buffer;
97
+ function base(ALPHABET) {
98
+ if (ALPHABET.length >= 255) {
99
+ throw new TypeError("Alphabet too long");
100
+ }
101
+ var BASE_MAP = new Uint8Array(256);
102
+ for (var j = 0; j < BASE_MAP.length; j++) {
103
+ BASE_MAP[j] = 255;
104
+ }
105
+ for (var i = 0; i < ALPHABET.length; i++) {
106
+ var x = ALPHABET.charAt(i);
107
+ var xc = x.charCodeAt(0);
108
+ if (BASE_MAP[xc] !== 255) {
109
+ throw new TypeError(x + " is ambiguous");
110
+ }
111
+ BASE_MAP[xc] = i;
112
+ }
113
+ var BASE = ALPHABET.length;
114
+ var LEADER = ALPHABET.charAt(0);
115
+ var FACTOR = Math.log(BASE) / Math.log(256);
116
+ var iFACTOR = Math.log(256) / Math.log(BASE);
117
+ function encode(source) {
118
+ if (Array.isArray(source) || source instanceof Uint8Array) {
119
+ source = _Buffer.from(source);
120
+ }
121
+ if (!_Buffer.isBuffer(source)) {
122
+ throw new TypeError("Expected Buffer");
123
+ }
124
+ if (source.length === 0) {
125
+ return "";
126
+ }
127
+ var zeroes = 0;
128
+ var length = 0;
129
+ var pbegin = 0;
130
+ var pend = source.length;
131
+ while (pbegin !== pend && source[pbegin] === 0) {
132
+ pbegin++;
133
+ zeroes++;
134
+ }
135
+ var size = (pend - pbegin) * iFACTOR + 1 >>> 0;
136
+ var b58 = new Uint8Array(size);
137
+ while (pbegin !== pend) {
138
+ var carry = source[pbegin];
139
+ var i2 = 0;
140
+ for (var it1 = size - 1; (carry !== 0 || i2 < length) && it1 !== -1; it1--, i2++) {
141
+ carry += 256 * b58[it1] >>> 0;
142
+ b58[it1] = carry % BASE >>> 0;
143
+ carry = carry / BASE >>> 0;
144
+ }
145
+ if (carry !== 0) {
146
+ throw new Error("Non-zero carry");
147
+ }
148
+ length = i2;
149
+ pbegin++;
150
+ }
151
+ var it2 = size - length;
152
+ while (it2 !== size && b58[it2] === 0) {
153
+ it2++;
154
+ }
155
+ var str = LEADER.repeat(zeroes);
156
+ for (; it2 < size; ++it2) {
157
+ str += ALPHABET.charAt(b58[it2]);
158
+ }
159
+ return str;
160
+ }
161
+ function decodeUnsafe(source) {
162
+ if (typeof source !== "string") {
163
+ throw new TypeError("Expected String");
164
+ }
165
+ if (source.length === 0) {
166
+ return _Buffer.alloc(0);
167
+ }
168
+ var psz = 0;
169
+ var zeroes = 0;
170
+ var length = 0;
171
+ while (source[psz] === LEADER) {
172
+ zeroes++;
173
+ psz++;
174
+ }
175
+ var size = (source.length - psz) * FACTOR + 1 >>> 0;
176
+ var b256 = new Uint8Array(size);
177
+ while (psz < source.length) {
178
+ var charCode = source.charCodeAt(psz);
179
+ if (charCode > 255) {
180
+ return;
181
+ }
182
+ var carry = BASE_MAP[charCode];
183
+ if (carry === 255) {
184
+ return;
185
+ }
186
+ var i2 = 0;
187
+ for (var it3 = size - 1; (carry !== 0 || i2 < length) && it3 !== -1; it3--, i2++) {
188
+ carry += BASE * b256[it3] >>> 0;
189
+ b256[it3] = carry % 256 >>> 0;
190
+ carry = carry / 256 >>> 0;
191
+ }
192
+ if (carry !== 0) {
193
+ throw new Error("Non-zero carry");
194
+ }
195
+ length = i2;
196
+ psz++;
197
+ }
198
+ var it4 = size - length;
199
+ while (it4 !== size && b256[it4] === 0) {
200
+ it4++;
201
+ }
202
+ var vch = _Buffer.allocUnsafe(zeroes + (size - it4));
203
+ vch.fill(0, 0, zeroes);
204
+ var j2 = zeroes;
205
+ while (it4 !== size) {
206
+ vch[j2++] = b256[it4++];
207
+ }
208
+ return vch;
209
+ }
210
+ function decode(string) {
211
+ var buffer = decodeUnsafe(string);
212
+ if (buffer) {
213
+ return buffer;
214
+ }
215
+ throw new Error("Non-base" + BASE + " character");
216
+ }
217
+ return {
218
+ encode,
219
+ decodeUnsafe,
220
+ decode
221
+ };
222
+ }
223
+ module.exports = base;
224
+ }
225
+ });
226
+
227
+ // node_modules/bs58/index.js
228
+ var require_bs58 = __commonJS({
229
+ "node_modules/bs58/index.js"(exports$1, module) {
230
+ var basex = require_src();
231
+ var ALPHABET = "123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz";
232
+ module.exports = basex(ALPHABET);
233
+ }
234
+ });
2
235
 
3
236
  // src/events.ts
237
+ var import_bs58 = __toESM(require_bs58());
4
238
 
5
239
  // src/idl/hodl.json
6
240
  var hodl_default = {
@@ -1466,6 +1700,27 @@ var hodl_default = {
1466
1700
  ],
1467
1701
  type: "u64"
1468
1702
  },
1703
+ {
1704
+ name: "migration_complete",
1705
+ docs: [
1706
+ "One-way flag: set to true once vamm_real_sol >= MIGRATION_SOL_THRESHOLD, never reverts"
1707
+ ],
1708
+ type: "bool"
1709
+ },
1710
+ {
1711
+ name: "total_fees_sol",
1712
+ docs: [
1713
+ "Cumulative SOL fees collected from buys (lamports)"
1714
+ ],
1715
+ type: "u64"
1716
+ },
1717
+ {
1718
+ name: "total_fees_tokens",
1719
+ docs: [
1720
+ "Cumulative token fees collected from sells"
1721
+ ],
1722
+ type: "u64"
1723
+ },
1469
1724
  {
1470
1725
  name: "bump_vault_auth",
1471
1726
  docs: [
@@ -1831,18 +2086,77 @@ var hodl_default = {
1831
2086
  };
1832
2087
 
1833
2088
  // src/events.ts
2089
+ var PROGRAM_DATA_PREFIX = "Program data: ";
2090
+ function toCamelCase(name) {
2091
+ return name.charAt(0).toLowerCase() + name.slice(1);
2092
+ }
2093
+ function snakeToCamelKeys(obj) {
2094
+ const result = {};
2095
+ for (const [key, value] of Object.entries(obj)) {
2096
+ const camelKey = key.replace(/_([a-z])/g, (_, c) => c.toUpperCase());
2097
+ result[camelKey] = value;
2098
+ }
2099
+ return result;
2100
+ }
2101
+ function tryDecodeEvent(coder, data) {
2102
+ try {
2103
+ const event = coder.events.decode(data);
2104
+ if (event) {
2105
+ return {
2106
+ name: toCamelCase(event.name),
2107
+ data: snakeToCamelKeys(event.data)
2108
+ };
2109
+ }
2110
+ } catch {
2111
+ }
2112
+ return null;
2113
+ }
1834
2114
  function parseTransactionEvents(input, config) {
1835
2115
  if (!input) return [];
1836
- const logs = Array.isArray(input) ? input : input.meta?.logMessages ?? [];
1837
- if (logs.length === 0) return [];
1838
2116
  const coder = new BorshCoder(hodl_default);
1839
- const parser = new EventParser(config.programId, coder);
1840
2117
  const events = [];
1841
- try {
1842
- for (const event of parser.parseLogs(logs)) {
1843
- events.push({ name: event.name, data: event.data });
2118
+ if (Array.isArray(input)) {
2119
+ for (const log of input) {
2120
+ if (!log.startsWith(PROGRAM_DATA_PREFIX)) continue;
2121
+ const b64 = log.slice(PROGRAM_DATA_PREFIX.length);
2122
+ const event = tryDecodeEvent(coder, b64);
2123
+ if (event) events.push(event);
2124
+ }
2125
+ return events;
2126
+ }
2127
+ const tx = input;
2128
+ const logs = tx.meta?.logMessages ?? [];
2129
+ for (const log of logs) {
2130
+ if (!log.startsWith(PROGRAM_DATA_PREFIX)) continue;
2131
+ const b64 = log.slice(PROGRAM_DATA_PREFIX.length);
2132
+ const event = tryDecodeEvent(coder, b64);
2133
+ if (event) events.push(event);
2134
+ }
2135
+ const programId = config.programId.toBase58();
2136
+ const staticKeys = tx.transaction.message.staticAccountKeys;
2137
+ const loadedWritable = tx.meta?.loadedAddresses?.writable ?? [];
2138
+ const loadedReadonly = tx.meta?.loadedAddresses?.readonly ?? [];
2139
+ const allKeys = [...staticKeys, ...loadedWritable, ...loadedReadonly];
2140
+ for (const inner of tx.meta?.innerInstructions ?? []) {
2141
+ for (const ix of inner.instructions) {
2142
+ const ixProgramKey = allKeys[ix.programIdIndex];
2143
+ if (!ixProgramKey || ixProgramKey.toBase58() !== programId) continue;
2144
+ try {
2145
+ const bytes = import_bs58.default.decode(ix.data);
2146
+ const b64Full = utils.bytes.base64.encode(Buffer.from(bytes));
2147
+ const eventFull = tryDecodeEvent(coder, b64Full);
2148
+ if (eventFull) {
2149
+ events.push(eventFull);
2150
+ continue;
2151
+ }
2152
+ if (bytes.length > 8) {
2153
+ const b64Skip = utils.bytes.base64.encode(Buffer.from(bytes.slice(8)));
2154
+ const eventSkip = tryDecodeEvent(coder, b64Skip);
2155
+ if (eventSkip) events.push(eventSkip);
2156
+ }
2157
+ } catch {
2158
+ }
1844
2159
  }
1845
- } catch {
1846
2160
  }
1847
2161
  return events;
1848
2162
  }
@@ -1856,7 +2170,6 @@ async function fetchAndParseTransaction(connection, signature, config) {
1856
2170
  function subscribeToEvents(connection, config, onEvent, opts = {}) {
1857
2171
  const commitment = opts.commitment ?? "confirmed";
1858
2172
  const coder = new BorshCoder(hodl_default);
1859
- const parser = new EventParser(config.programId, coder);
1860
2173
  return connection.onLogs(
1861
2174
  config.programId,
1862
2175
  ({ logs, err, signature }, context) => {
@@ -1865,12 +2178,13 @@ function subscribeToEvents(connection, config, onEvent, opts = {}) {
1865
2178
  return;
1866
2179
  }
1867
2180
  try {
1868
- for (const event of parser.parseLogs(logs)) {
1869
- onEvent(
1870
- { name: event.name, data: event.data },
1871
- context.slot,
1872
- signature
1873
- );
2181
+ for (const log of logs) {
2182
+ if (!log.startsWith(PROGRAM_DATA_PREFIX)) continue;
2183
+ const b64 = log.slice(PROGRAM_DATA_PREFIX.length);
2184
+ const event = tryDecodeEvent(coder, b64);
2185
+ if (event) {
2186
+ onEvent(event, context.slot, signature);
2187
+ }
1874
2188
  }
1875
2189
  } catch (e) {
1876
2190
  opts.onError?.(e instanceof Error ? e : new Error(String(e)));
@@ -1907,6 +2221,11 @@ function subscribeToPositionClosed(connection, config, onEvent, opts) {
1907
2221
  if (event.name === "positionClosed") onEvent(event.data, slot, sig);
1908
2222
  }, opts);
1909
2223
  }
2224
+ /*! Bundled license information:
2225
+
2226
+ safe-buffer/index.js:
2227
+ (*! safe-buffer. MIT License. Feross Aboukhadijeh <https://feross.org/opensource> *)
2228
+ */
1910
2229
 
1911
2230
  export { fetchAndParseTransaction, parseTransactionEvents, subscribeToAccrualClaimed, subscribeToEvents, subscribeToPositionClosed, subscribeToTokenCreated, subscribeToTokenPurchased, subscribeToTokenSold, unsubscribeFromEvents };
1912
2231
  //# sourceMappingURL=events.js.map