@hypermid/sdk 1.2.0 → 2.0.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 (76) hide show
  1. package/README.md +4 -4
  2. package/dist/cjs/chain-registry.js +519 -0
  3. package/dist/cjs/chain-registry.js.map +1 -0
  4. package/dist/cjs/chains.js +102 -0
  5. package/dist/cjs/chains.js.map +1 -0
  6. package/dist/cjs/client.js +481 -0
  7. package/dist/cjs/client.js.map +1 -0
  8. package/dist/cjs/errors.js +62 -0
  9. package/dist/cjs/errors.js.map +1 -0
  10. package/dist/cjs/execution.js +354 -0
  11. package/dist/cjs/execution.js.map +1 -0
  12. package/dist/cjs/helpers.js +109 -0
  13. package/dist/cjs/helpers.js.map +1 -0
  14. package/dist/cjs/index.js +51 -0
  15. package/dist/cjs/index.js.map +1 -0
  16. package/dist/cjs/package.json +1 -0
  17. package/dist/cjs/types.js +4 -0
  18. package/dist/cjs/types.js.map +1 -0
  19. package/dist/cjs/webhook-verify.js +112 -0
  20. package/dist/cjs/webhook-verify.js.map +1 -0
  21. package/dist/esm/chain-registry.d.ts.map +1 -0
  22. package/dist/esm/chain-registry.js.map +1 -0
  23. package/dist/esm/chains.d.ts.map +1 -0
  24. package/dist/esm/chains.js.map +1 -0
  25. package/dist/{client.d.ts → esm/client.d.ts} +3 -3
  26. package/dist/esm/client.d.ts.map +1 -0
  27. package/dist/{client.js → esm/client.js} +6 -6
  28. package/dist/esm/client.js.map +1 -0
  29. package/dist/{errors.d.ts → esm/errors.d.ts} +4 -4
  30. package/dist/esm/errors.d.ts.map +1 -0
  31. package/dist/{errors.js → esm/errors.js} +7 -7
  32. package/dist/esm/errors.js.map +1 -0
  33. package/dist/{execution.d.ts → esm/execution.d.ts} +7 -7
  34. package/dist/esm/execution.d.ts.map +1 -0
  35. package/dist/{execution.js → esm/execution.js} +2 -2
  36. package/dist/esm/execution.js.map +1 -0
  37. package/dist/{helpers.d.ts → esm/helpers.d.ts} +1 -1
  38. package/dist/esm/helpers.d.ts.map +1 -0
  39. package/dist/{helpers.js → esm/helpers.js} +1 -1
  40. package/dist/esm/helpers.js.map +1 -0
  41. package/dist/{index.d.ts → esm/index.d.ts} +3 -3
  42. package/dist/esm/index.d.ts.map +1 -0
  43. package/dist/{index.js → esm/index.js} +2 -2
  44. package/dist/esm/index.js.map +1 -0
  45. package/dist/esm/package.json +1 -0
  46. package/dist/{types.d.ts → esm/types.d.ts} +1 -1
  47. package/dist/esm/types.d.ts.map +1 -0
  48. package/dist/esm/types.js.map +1 -0
  49. package/dist/{webhook-verify.d.ts → esm/webhook-verify.d.ts} +1 -1
  50. package/dist/esm/webhook-verify.d.ts.map +1 -0
  51. package/dist/{webhook-verify.js → esm/webhook-verify.js} +1 -1
  52. package/dist/esm/webhook-verify.js.map +1 -0
  53. package/package.json +13 -10
  54. package/dist/chain-registry.d.ts.map +0 -1
  55. package/dist/chain-registry.js.map +0 -1
  56. package/dist/chains.d.ts.map +0 -1
  57. package/dist/chains.js.map +0 -1
  58. package/dist/client.d.ts.map +0 -1
  59. package/dist/client.js.map +0 -1
  60. package/dist/errors.d.ts.map +0 -1
  61. package/dist/errors.js.map +0 -1
  62. package/dist/execution.d.ts.map +0 -1
  63. package/dist/execution.js.map +0 -1
  64. package/dist/helpers.d.ts.map +0 -1
  65. package/dist/helpers.js.map +0 -1
  66. package/dist/index.d.ts.map +0 -1
  67. package/dist/index.js.map +0 -1
  68. package/dist/types.d.ts.map +0 -1
  69. package/dist/types.js.map +0 -1
  70. package/dist/webhook-verify.d.ts.map +0 -1
  71. package/dist/webhook-verify.js.map +0 -1
  72. /package/dist/{chain-registry.d.ts → esm/chain-registry.d.ts} +0 -0
  73. /package/dist/{chain-registry.js → esm/chain-registry.js} +0 -0
  74. /package/dist/{chains.d.ts → esm/chains.d.ts} +0 -0
  75. /package/dist/{chains.js → esm/chains.js} +0 -0
  76. /package/dist/{types.js → esm/types.js} +0 -0
@@ -0,0 +1,102 @@
1
+ "use strict";
2
+ /**
3
+ * Chain ID constants for all supported chains.
4
+ *
5
+ * EVM chains use their standard numeric chain IDs.
6
+ * Non-EVM chains can be referenced by slug string (preferred) or numeric ID.
7
+ *
8
+ * @example
9
+ * ```ts
10
+ * import { ChainId, ChainSlug } from "@hypermid/sdk";
11
+ *
12
+ * // Numeric IDs (backwards compatible)
13
+ * const quote = await hm.getQuote({
14
+ * fromChain: ChainId.ETHEREUM, // 1
15
+ * toChain: ChainId.ARBITRUM, // 42161
16
+ * ...
17
+ * });
18
+ *
19
+ * // String slugs (recommended for non-EVM)
20
+ * const quote2 = await hm.getQuote({
21
+ * fromChain: ChainSlug.SOLANA, // "solana"
22
+ * toChain: ChainSlug.BITCOIN, // "bitcoin"
23
+ * ...
24
+ * });
25
+ * ```
26
+ */
27
+ Object.defineProperty(exports, "__esModule", { value: true });
28
+ exports.ChainSlug = exports.ChainId = void 0;
29
+ exports.isNearIntentsChain = isNearIntentsChain;
30
+ exports.supportsWalletDeposit = supportsWalletDeposit;
31
+ const chain_registry_js_1 = require("./chain-registry.js");
32
+ // ─── Numeric Chain IDs (backwards compatible) ────────────────────────────────
33
+ const NI_BASE = chain_registry_js_1.NI_CHAIN_BASE;
34
+ exports.ChainId = {
35
+ // ─── EVM Chains ──────────────────────────────────────────────
36
+ ETHEREUM: 1,
37
+ OPTIMISM: 10,
38
+ BSC: 56,
39
+ GNOSIS: 100,
40
+ POLYGON: 137,
41
+ X_LAYER: 196,
42
+ ARBITRUM: 42161,
43
+ AVALANCHE: 43114,
44
+ BASE: 8453,
45
+ PLASMA: 1012,
46
+ BERACHAIN: 80094,
47
+ MONAD: 10143,
48
+ // ─── Non-EVM (LI.FI supported) ──────────────────────────────
49
+ SOLANA: 1151111081099710,
50
+ BITCOIN: 20000000000001,
51
+ SUI: 9270000000000000,
52
+ // ─── Near Intents-only chains ────────────────────────────────
53
+ NEAR: NI_BASE + 1,
54
+ TON: NI_BASE + 2,
55
+ TRON: NI_BASE + 3,
56
+ XRP: NI_BASE + 4,
57
+ DOGECOIN: NI_BASE + 5,
58
+ LITECOIN: NI_BASE + 6,
59
+ BITCOIN_CASH: NI_BASE + 7,
60
+ STELLAR: NI_BASE + 8,
61
+ CARDANO: NI_BASE + 9,
62
+ APTOS: NI_BASE + 10,
63
+ STARKNET: NI_BASE + 11,
64
+ DASH: NI_BASE + 12,
65
+ ZCASH: NI_BASE + 13,
66
+ ALEO: NI_BASE + 14,
67
+ ADI: NI_BASE + 15,
68
+ };
69
+ /**
70
+ * Human-readable chain slug constants (recommended for non-EVM chains).
71
+ *
72
+ * @example
73
+ * ```ts
74
+ * import { ChainSlug } from "@hypermid/sdk";
75
+ * const quote = await hm.getQuote({
76
+ * fromChain: ChainSlug.SOLANA, // "solana"
77
+ * toChain: ChainSlug.NEAR, // "near"
78
+ * ...
79
+ * });
80
+ * ```
81
+ */
82
+ exports.ChainSlug = Object.fromEntries(chain_registry_js_1.CHAIN_REGISTRY.map((c) => [c.slug.toUpperCase().replace(/-/g, "_"), c.slug]));
83
+ /**
84
+ * Check if a chain ID belongs to a Near Intents-only chain.
85
+ * Accepts slug strings or numeric IDs.
86
+ */
87
+ function isNearIntentsChain(chainId) {
88
+ if (typeof chainId === "number") {
89
+ return chainId >= NI_BASE && chainId < NI_BASE + 1000;
90
+ }
91
+ const entry = (0, chain_registry_js_1.resolveChain)(chainId);
92
+ return entry !== null && entry.numericId >= NI_BASE && entry.numericId < NI_BASE + 1000;
93
+ }
94
+ /**
95
+ * Check if a chain supports wallet-connected deposit mode.
96
+ * Accepts slug strings or numeric IDs.
97
+ */
98
+ function supportsWalletDeposit(chainId) {
99
+ const entry = (0, chain_registry_js_1.resolveChain)(chainId);
100
+ return entry?.depositMode === "wallet";
101
+ }
102
+ //# sourceMappingURL=chains.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chains.js","sourceRoot":"","sources":["../../src/chains.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;;;AA0EH,gDAMC;AAMD,sDAGC;AAvFD,2DAK6B;AAE7B,gFAAgF;AAEhF,MAAM,OAAO,GAAG,iCAAa,CAAC;AAEjB,QAAA,OAAO,GAAG;IACrB,gEAAgE;IAChE,QAAQ,EAAE,CAAC;IACX,QAAQ,EAAE,EAAE;IACZ,GAAG,EAAE,EAAE;IACP,MAAM,EAAE,GAAG;IACX,OAAO,EAAE,GAAG;IACZ,OAAO,EAAE,GAAG;IACZ,QAAQ,EAAE,KAAK;IACf,SAAS,EAAE,KAAK;IAChB,IAAI,EAAE,IAAI;IACV,MAAM,EAAE,IAAI;IACZ,SAAS,EAAE,KAAK;IAChB,KAAK,EAAE,KAAK;IAEZ,+DAA+D;IAC/D,MAAM,EAAE,gBAAgB;IACxB,OAAO,EAAE,cAAc;IACvB,GAAG,EAAE,gBAAgB;IAErB,gEAAgE;IAChE,IAAI,EAAE,OAAO,GAAG,CAAC;IACjB,GAAG,EAAE,OAAO,GAAG,CAAC;IAChB,IAAI,EAAE,OAAO,GAAG,CAAC;IACjB,GAAG,EAAE,OAAO,GAAG,CAAC;IAChB,QAAQ,EAAE,OAAO,GAAG,CAAC;IACrB,QAAQ,EAAE,OAAO,GAAG,CAAC;IACrB,YAAY,EAAE,OAAO,GAAG,CAAC;IACzB,OAAO,EAAE,OAAO,GAAG,CAAC;IACpB,OAAO,EAAE,OAAO,GAAG,CAAC;IACpB,KAAK,EAAE,OAAO,GAAG,EAAE;IACnB,QAAQ,EAAE,OAAO,GAAG,EAAE;IACtB,IAAI,EAAE,OAAO,GAAG,EAAE;IAClB,KAAK,EAAE,OAAO,GAAG,EAAE;IACnB,IAAI,EAAE,OAAO,GAAG,EAAE;IAClB,GAAG,EAAE,OAAO,GAAG,EAAE;CACT,CAAC;AAIX;;;;;;;;;;;;GAYG;AACU,QAAA,SAAS,GAAG,MAAM,CAAC,WAAW,CACzC,kCAAc,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAClD,CAAC;AAE7B;;;GAGG;AACH,SAAgB,kBAAkB,CAAC,OAAwB;IACzD,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE,CAAC;QAChC,OAAO,OAAO,IAAI,OAAO,IAAI,OAAO,GAAG,OAAO,GAAG,IAAI,CAAC;IACxD,CAAC;IACD,MAAM,KAAK,GAAG,IAAA,gCAAY,EAAC,OAAO,CAAC,CAAC;IACpC,OAAO,KAAK,KAAK,IAAI,IAAI,KAAK,CAAC,SAAS,IAAI,OAAO,IAAI,KAAK,CAAC,SAAS,GAAG,OAAO,GAAG,IAAI,CAAC;AAC1F,CAAC;AAED;;;GAGG;AACH,SAAgB,qBAAqB,CAAC,OAAwB;IAC5D,MAAM,KAAK,GAAG,IAAA,gCAAY,EAAC,OAAO,CAAC,CAAC;IACpC,OAAO,KAAK,EAAE,WAAW,KAAK,QAAQ,CAAC;AACzC,CAAC"}
@@ -0,0 +1,481 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Hypermid = void 0;
4
+ const errors_js_1 = require("./errors.js");
5
+ const DEFAULT_BASE_URL = "https://api.hypermid.io";
6
+ const DEFAULT_TIMEOUT = 30_000;
7
+ class Hypermid {
8
+ baseUrl;
9
+ apiKey;
10
+ timeout;
11
+ _fetch;
12
+ constructor(config = {}) {
13
+ this.baseUrl = (config.baseUrl || DEFAULT_BASE_URL).replace(/\/+$/, "");
14
+ this.apiKey = config.apiKey;
15
+ this.timeout = config.timeout || DEFAULT_TIMEOUT;
16
+ this._fetch = config.fetch || globalThis.fetch;
17
+ }
18
+ // ─── Internal helpers ────────────────────────────────────────────────
19
+ async request(method, path, options) {
20
+ let url = `${this.baseUrl}/v1${path}`;
21
+ // Build query string
22
+ if (options?.params) {
23
+ const qs = new URLSearchParams();
24
+ for (const [k, v] of Object.entries(options.params)) {
25
+ if (v !== undefined && v !== null && v !== "") {
26
+ qs.set(k, String(v));
27
+ }
28
+ }
29
+ const qsStr = qs.toString();
30
+ if (qsStr)
31
+ url += `?${qsStr}`;
32
+ }
33
+ const headers = {};
34
+ if (this.apiKey) {
35
+ headers["X-API-Key"] = this.apiKey;
36
+ }
37
+ if (method === "POST" || method === "DELETE") {
38
+ headers["Content-Type"] = "application/json";
39
+ }
40
+ const controller = new AbortController();
41
+ const timer = setTimeout(() => controller.abort(), this.timeout);
42
+ let res;
43
+ try {
44
+ res = await this._fetch(url, {
45
+ method,
46
+ headers,
47
+ body: options?.body ? JSON.stringify(options.body) : undefined,
48
+ signal: controller.signal,
49
+ });
50
+ }
51
+ catch (err) {
52
+ clearTimeout(timer);
53
+ if (err instanceof DOMException && err.name === "AbortError") {
54
+ throw new errors_js_1.HypermidTimeoutError(this.timeout);
55
+ }
56
+ throw new errors_js_1.HypermidNetworkError(err instanceof Error ? err.message : "Network request failed", err instanceof Error ? err : undefined);
57
+ }
58
+ finally {
59
+ clearTimeout(timer);
60
+ }
61
+ let json;
62
+ try {
63
+ json = (await res.json());
64
+ }
65
+ catch {
66
+ throw new errors_js_1.HypermidNetworkError(`Invalid JSON response (HTTP ${res.status})`);
67
+ }
68
+ if (json.error) {
69
+ throw new errors_js_1.HypermidError(json.error.code, json.error.message, res.status, json.meta, json.error.details);
70
+ }
71
+ return json.data;
72
+ }
73
+ get(path, params) {
74
+ return this.request("GET", path, { params });
75
+ }
76
+ post(path, body) {
77
+ return this.request("POST", path, { body });
78
+ }
79
+ delete(path) {
80
+ return this.request("DELETE", path);
81
+ }
82
+ // ─── Core Swap Endpoints ─────────────────────────────────────────────
83
+ /**
84
+ * Get all supported chains (LI.FI + Near Intents).
85
+ * Cached server-side for 1 hour.
86
+ */
87
+ async getChains() {
88
+ return this.get("/chains");
89
+ }
90
+ /**
91
+ * Get available tokens, optionally filtered by chains and keywords.
92
+ * Cached server-side for 5 minutes.
93
+ */
94
+ async getTokens(params) {
95
+ return this.get("/tokens", params);
96
+ }
97
+ /**
98
+ * Get available connections (which token pairs can be swapped).
99
+ */
100
+ async getConnections(params) {
101
+ return this.get("/connections", {
102
+ fromChain: String(params.fromChain),
103
+ fromToken: params.fromToken,
104
+ toChain: params.toChain ? String(params.toChain) : undefined,
105
+ });
106
+ }
107
+ /**
108
+ * Get available bridge/swap tools.
109
+ * Cached server-side for 1 hour.
110
+ */
111
+ async getTools() {
112
+ return this.get("/tools");
113
+ }
114
+ /**
115
+ * Get gas prices for specified chains.
116
+ */
117
+ async getGasPrices(params) {
118
+ return this.get("/gas-prices", { chains: params.chains });
119
+ }
120
+ /**
121
+ * Get the best swap quote for a token pair.
122
+ *
123
+ * @example
124
+ * ```ts
125
+ * const quote = await hm.getQuote({
126
+ * fromChain: 1,
127
+ * fromToken: "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48",
128
+ * fromAmount: "100000000", // 100 USDC
129
+ * toChain: 42161,
130
+ * toToken: "0xFF970A61A04b1cA14834A43f5dE4533eBDDB5CC8",
131
+ * fromAddress: "0x...",
132
+ * });
133
+ * ```
134
+ */
135
+ async getQuote(params) {
136
+ return this.get("/quote", {
137
+ fromChain: String(params.fromChain),
138
+ fromToken: params.fromToken,
139
+ fromAmount: params.fromAmount,
140
+ toChain: String(params.toChain),
141
+ toToken: params.toToken,
142
+ fromAddress: params.fromAddress,
143
+ toAddress: params.toAddress,
144
+ slippage: params.slippage !== undefined ? String(params.slippage) : undefined,
145
+ order: params.order,
146
+ });
147
+ }
148
+ /**
149
+ * Get available routes for a token pair (multi-route comparison).
150
+ * Supports both GET and POST — SDK uses POST for flexibility.
151
+ */
152
+ async getRoutes(params) {
153
+ return this.post("/routes", {
154
+ fromChain: String(params.fromChain),
155
+ fromToken: params.fromToken,
156
+ fromAmount: params.fromAmount,
157
+ toChain: String(params.toChain),
158
+ toToken: params.toToken,
159
+ fromAddress: params.fromAddress,
160
+ toAddress: params.toAddress,
161
+ slippage: params.slippage,
162
+ order: params.order,
163
+ });
164
+ }
165
+ /**
166
+ * Check the status of a cross-chain swap.
167
+ *
168
+ * @example LI.FI status
169
+ * ```ts
170
+ * const status = await hm.getStatus({
171
+ * txHash: "0x...",
172
+ * fromChain: 1,
173
+ * toChain: 42161,
174
+ * });
175
+ * ```
176
+ *
177
+ * @example Near Intents status
178
+ * ```ts
179
+ * const status = await hm.getStatus({
180
+ * provider: "near-intents",
181
+ * correlationId: "abc-123",
182
+ * });
183
+ * ```
184
+ */
185
+ async getStatus(params) {
186
+ const queryParams = {};
187
+ if ("provider" in params && params.provider === "near-intents") {
188
+ queryParams.provider = "near-intents";
189
+ queryParams.correlationId = params.correlationId;
190
+ }
191
+ else {
192
+ const p = params;
193
+ // Lark #188 — thread `provider` through for superswap too. Pre-fix
194
+ // we dropped it, so the API's /v1/status auto-detect only checked
195
+ // inbound_receiver_transactions and missed the outbound table —
196
+ // outbound polls always fell through to LiFi (which doesn't know
197
+ // the PulseChain source tx) and the modal never saw status='DONE',
198
+ // staying stuck on "Awaiting…" past completion.
199
+ if (p.provider)
200
+ queryParams.provider = p.provider;
201
+ queryParams.txHash = p.txHash;
202
+ if (p.bridge)
203
+ queryParams.bridge = p.bridge;
204
+ if (p.fromChain)
205
+ queryParams.fromChain = String(p.fromChain);
206
+ if (p.toChain)
207
+ queryParams.toChain = String(p.toChain);
208
+ }
209
+ return this.get("/status", queryParams);
210
+ }
211
+ // ─── Execute ─────────────────────────────────────────────────────────
212
+ /**
213
+ * Get full transaction data for execution.
214
+ *
215
+ * **LI.FI routes**: Returns `transactionRequest` — sign and broadcast with your wallet.
216
+ *
217
+ * **Near Intents routes**: Returns `depositAddress` — send tokens there.
218
+ * Use `depositMode` to control wallet vs. manual flow.
219
+ *
220
+ * @example LI.FI swap
221
+ * ```ts
222
+ * const result = await hm.execute({
223
+ * fromChain: 1,
224
+ * fromToken: "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48",
225
+ * fromAmount: "100000000",
226
+ * toChain: 42161,
227
+ * toToken: "0xFF970A61A04b1cA14834A43f5dE4533eBDDB5CC8",
228
+ * fromAddress: "0x...",
229
+ * toAddress: "0x...",
230
+ * });
231
+ * if (result.provider === "lifi") {
232
+ * // Sign result.transactionRequest with your wallet
233
+ * }
234
+ * ```
235
+ *
236
+ * @example Near Intents manual deposit (user hasn't connected wallet)
237
+ * ```ts
238
+ * const result = await hm.execute({
239
+ * fromChain: 900000003, // Tron
240
+ * fromToken: "...",
241
+ * fromAmount: "10000000",
242
+ * toChain: 900000002, // TON
243
+ * toToken: "...",
244
+ * fromAddress: "T...",
245
+ * toAddress: "EQ...",
246
+ * depositMode: "manual", // Force manual mode
247
+ * });
248
+ * // Show result.depositAddress to user with QR code
249
+ * ```
250
+ */
251
+ async execute(params) {
252
+ return this.post("/execute", {
253
+ fromChain: String(params.fromChain),
254
+ fromToken: params.fromToken,
255
+ fromAmount: params.fromAmount,
256
+ toChain: String(params.toChain),
257
+ toToken: params.toToken,
258
+ fromAddress: params.fromAddress,
259
+ toAddress: params.toAddress,
260
+ ...(params.depositMode ? { depositMode: params.depositMode } : {}),
261
+ ...(params.slippage !== undefined ? { slippage: params.slippage } : {}),
262
+ ...(params.order ? { order: params.order } : {}),
263
+ ...(params.refundAddress ? { refundAddress: params.refundAddress } : {}),
264
+ });
265
+ }
266
+ /**
267
+ * Submit a deposit transaction hash after sending tokens to a Near Intents deposit address.
268
+ * Only needed for `depositMode: "wallet"`. Manual deposits are auto-detected.
269
+ */
270
+ async submitDeposit(params) {
271
+ return this.post("/execute/deposit/submit", {
272
+ txHash: params.txHash,
273
+ depositAddress: params.depositAddress,
274
+ });
275
+ }
276
+ /**
277
+ * Check the status of a Near Intents deposit/swap.
278
+ *
279
+ * @example
280
+ * ```ts
281
+ * const status = await hm.getDepositStatus({
282
+ * depositAddress: "0x...",
283
+ * });
284
+ * if (status.status === "SUCCESS") {
285
+ * console.log("Swap complete!", status.swapDetails);
286
+ * }
287
+ * ```
288
+ */
289
+ async getDepositStatus(params) {
290
+ return this.get("/execute/deposit/status", {
291
+ depositAddress: params.depositAddress,
292
+ depositMemo: params.depositMemo,
293
+ });
294
+ }
295
+ // ─── On-Ramp ─────────────────────────────────────────────────────────
296
+ /**
297
+ * Get a fiat → crypto price quote.
298
+ */
299
+ async getOnrampQuote(params) {
300
+ return this.post("/onramp/quote", {
301
+ fiatAmount: params.fiatAmount,
302
+ fiatCurrency: params.fiatCurrency,
303
+ cryptoToken: params.cryptoToken,
304
+ cryptoChain: params.cryptoChain,
305
+ ...(params.walletAddress ? { walletAddress: params.walletAddress } : {}),
306
+ ...(params.paymentMode ? { paymentMode: params.paymentMode } : {}),
307
+ ...(params.userCountry ? { userCountry: params.userCountry } : {}),
308
+ });
309
+ }
310
+ /**
311
+ * Create a fiat → crypto purchase session. Returns a redirect URL
312
+ * to the payment page.
313
+ *
314
+ * @example
315
+ * ```ts
316
+ * const { redirectUrl, orderUid } = await hm.createOnrampCheckout({
317
+ * walletAddress: "0x...",
318
+ * cryptoToken: "ETH",
319
+ * cryptoChain: "ethereum",
320
+ * fiatCurrency: "USD",
321
+ * fiatAmount: 100,
322
+ * });
323
+ * // Redirect user to redirectUrl
324
+ * ```
325
+ */
326
+ async createOnrampCheckout(params) {
327
+ return this.post("/onramp/checkout", {
328
+ walletAddress: params.walletAddress,
329
+ cryptoToken: params.cryptoToken,
330
+ cryptoChain: params.cryptoChain,
331
+ fiatCurrency: params.fiatCurrency,
332
+ fiatAmount: params.fiatAmount,
333
+ ...(params.email ? { email: params.email } : {}),
334
+ ...(params.returnUrl ? { returnUrl: params.returnUrl } : {}),
335
+ ...(params.paymentMode ? { paymentMode: params.paymentMode } : {}),
336
+ });
337
+ }
338
+ /**
339
+ * Check on-ramp order status.
340
+ */
341
+ async getOnrampStatus(orderUid) {
342
+ return this.get("/onramp/status", { orderUid });
343
+ }
344
+ /**
345
+ * Get supported chains and tokens for on-ramp.
346
+ * Cached server-side for 5 minutes.
347
+ */
348
+ async getOnrampConfig() {
349
+ return this.get("/onramp/config");
350
+ }
351
+ /**
352
+ * Get asset config (min/max amounts, precision, payment methods).
353
+ */
354
+ async getOnrampAssets(params) {
355
+ return this.get("/onramp/assets", {
356
+ currency: params.currency,
357
+ chain: params.chain,
358
+ orderCurrency: params.orderCurrency,
359
+ });
360
+ }
361
+ // ─── Swap Event ──────────────────────────────────────────────────────
362
+ /**
363
+ * Record a swap event for analytics. partner_id is automatically
364
+ * attributed from your API key.
365
+ */
366
+ async recordSwapEvent(params) {
367
+ return this.post("/swap-event", params);
368
+ }
369
+ // ─── Partner (requires API key) ──────────────────────────────────────
370
+ /**
371
+ * Get your partner info (requires API key).
372
+ */
373
+ async getPartnerInfo() {
374
+ return this.get("/partner/me");
375
+ }
376
+ /**
377
+ * Get volume, fee, and performance stats (requires API key).
378
+ *
379
+ * @example
380
+ * ```ts
381
+ * const stats = await hm.getPartnerStats({
382
+ * from: "2025-01-01",
383
+ * to: "2025-03-31",
384
+ * });
385
+ * console.log(`Volume: $${stats.volume_usd}`);
386
+ * ```
387
+ */
388
+ async getPartnerStats(params) {
389
+ return this.get("/partner/stats", params);
390
+ }
391
+ /**
392
+ * Get paginated transaction history (requires API key).
393
+ */
394
+ async getPartnerTransactions(params) {
395
+ return this.get("/partner/transactions", {
396
+ page: params?.page,
397
+ limit: params?.limit,
398
+ });
399
+ }
400
+ // ─── Webhooks (requires API key) ─────────────────────────────────────
401
+ /**
402
+ * Register a webhook endpoint. Returns the signing secret — store it securely!
403
+ * The secret is only shown once, on creation.
404
+ *
405
+ * @example
406
+ * ```ts
407
+ * const webhook = await hm.createWebhook({
408
+ * url: "https://myapp.com/webhooks/hypermid",
409
+ * events: ["swap.completed", "onramp.completed"],
410
+ * });
411
+ * // Store webhook.secret securely!
412
+ * ```
413
+ */
414
+ async createWebhook(params) {
415
+ return this.post("/partner/webhooks", {
416
+ url: params.url,
417
+ events: params.events,
418
+ });
419
+ }
420
+ /**
421
+ * List all registered webhooks (requires API key).
422
+ * Note: webhook secrets are never returned in list responses.
423
+ */
424
+ async listWebhooks() {
425
+ return this.get("/partner/webhooks");
426
+ }
427
+ /**
428
+ * Delete a webhook by ID (requires API key).
429
+ */
430
+ async deleteWebhook(webhookId) {
431
+ return this.delete(`/partner/webhooks/${webhookId}`);
432
+ }
433
+ // ─── Balances ────────────────────────────────────────────────────────
434
+ /**
435
+ * Get token balances for a wallet address across chains.
436
+ * Uses Alchemy Portfolio API + PulseChain RPC + Blockstream (BTC) on the backend.
437
+ *
438
+ * @example
439
+ * ```ts
440
+ * const balances = await hm.getBalances({
441
+ * address: "0x1234...",
442
+ * chainIds: [1, 42161, 8453, 369],
443
+ * });
444
+ * console.log(balances.totalBalanceUSD);
445
+ * ```
446
+ */
447
+ async getBalances(params) {
448
+ const query = { address: params.address };
449
+ if (params.chainIds?.length)
450
+ query.chainIds = params.chainIds.join(",");
451
+ return this.get("/balances", query);
452
+ }
453
+ // ─── Inbound Receiver (SuperSwap) ───────────────────────────────────
454
+ /**
455
+ * Register a USDC deposit at the InboundReceiver contract for SuperSwap.
456
+ * Call this AFTER the user's bridge transaction confirms on-chain.
457
+ *
458
+ * @example
459
+ * ```ts
460
+ * const result = await hm.registerInboundReceiver({
461
+ * txHash: "0xabc...",
462
+ * fromChain: 8453,
463
+ * toChain: 369,
464
+ * receiverAddress: "0xuser...",
465
+ * outputToken: "0x0000...0000", // PLS
466
+ * });
467
+ * ```
468
+ */
469
+ async registerInboundReceiver(params) {
470
+ return this.post("/inbound-receiver/register", params);
471
+ }
472
+ // ─── Health Check ────────────────────────────────────────────────────
473
+ /**
474
+ * Simple health check. Returns API status, version, uptime, and provider statuses.
475
+ */
476
+ async ping() {
477
+ return this.get("/ping");
478
+ }
479
+ }
480
+ exports.Hypermid = Hypermid;
481
+ //# sourceMappingURL=client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/client.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,62 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.HypermidNetworkError = exports.HypermidTimeoutError = exports.HypermidError = void 0;
4
+ /**
5
+ * Base error thrown by the Hypermid SDK when the API returns an error response.
6
+ */
7
+ class HypermidError extends Error {
8
+ /** The API error code (e.g. "NO_ROUTE_FOUND", "RATE_LIMITED", "UPSTREAM_ERROR") */
9
+ code;
10
+ /** HTTP status code from the API */
11
+ status;
12
+ /** Request metadata (requestId, timestamp, rateLimit) */
13
+ meta;
14
+ /** Additional error details (lifiCode, toolErrors, etc.) */
15
+ details;
16
+ constructor(code, message, status, meta, details) {
17
+ super(message);
18
+ this.name = "HypermidError";
19
+ this.code = code;
20
+ this.status = status;
21
+ this.meta = meta;
22
+ this.details = details;
23
+ }
24
+ /** Rate limit info from the response, if available */
25
+ get rateLimit() {
26
+ return this.meta.rateLimit;
27
+ }
28
+ /** LI.FI-specific error code, if this was a LI.FI error */
29
+ get lifiCode() {
30
+ return this.details?.lifiCode;
31
+ }
32
+ /** Per-tool errors from LI.FI, if available */
33
+ get toolErrors() {
34
+ return this.details?.toolErrors;
35
+ }
36
+ }
37
+ exports.HypermidError = HypermidError;
38
+ /**
39
+ * Thrown when the request times out.
40
+ */
41
+ class HypermidTimeoutError extends Error {
42
+ code = "TIMEOUT";
43
+ constructor(timeoutMs) {
44
+ super(`Request timed out after ${timeoutMs}ms`);
45
+ this.name = "HypermidTimeoutError";
46
+ }
47
+ }
48
+ exports.HypermidTimeoutError = HypermidTimeoutError;
49
+ /**
50
+ * Thrown when a network/fetch error occurs.
51
+ */
52
+ class HypermidNetworkError extends Error {
53
+ code = "NETWORK_ERROR";
54
+ cause;
55
+ constructor(message, cause) {
56
+ super(message);
57
+ this.name = "HypermidNetworkError";
58
+ this.cause = cause;
59
+ }
60
+ }
61
+ exports.HypermidNetworkError = HypermidNetworkError;
62
+ //# sourceMappingURL=errors.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.js","sourceRoot":"","sources":["../../src/errors.ts"],"names":[],"mappings":";;;AAEA;;GAEG;AACH,MAAa,aAAc,SAAQ,KAAK;IACtC,mFAAmF;IACnE,IAAI,CAAS;IAC7B,oCAAoC;IACpB,MAAM,CAAS;IAC/B,yDAAyD;IACzC,IAAI,CAAU;IAC9B,4DAA4D;IAC5C,OAAO,CAA2B;IAElD,YACE,IAAY,EACZ,OAAe,EACf,MAAc,EACd,IAAa,EACb,OAAiC;QAEjC,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,eAAe,CAAC;QAC5B,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;IACzB,CAAC;IAED,sDAAsD;IACtD,IAAI,SAAS;QACX,OAAO,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC;IAC7B,CAAC;IAED,2DAA2D;IAC3D,IAAI,QAAQ;QACV,OAAO,IAAI,CAAC,OAAO,EAAE,QAA8B,CAAC;IACtD,CAAC;IAED,+CAA+C;IAC/C,IAAI,UAAU;QACZ,OAAO,IAAI,CAAC,OAAO,EAAE,UAAyC,CAAC;IACjE,CAAC;CACF;AAvCD,sCAuCC;AAED;;GAEG;AACH,MAAa,oBAAqB,SAAQ,KAAK;IAC7B,IAAI,GAAG,SAAS,CAAC;IAEjC,YAAY,SAAiB;QAC3B,KAAK,CAAC,2BAA2B,SAAS,IAAI,CAAC,CAAC;QAChD,IAAI,CAAC,IAAI,GAAG,sBAAsB,CAAC;IACrC,CAAC;CACF;AAPD,oDAOC;AAED;;GAEG;AACH,MAAa,oBAAqB,SAAQ,KAAK;IAC7B,IAAI,GAAG,eAAe,CAAC;IACvB,KAAK,CAAS;IAE9B,YAAY,OAAe,EAAE,KAAa;QACxC,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,sBAAsB,CAAC;QACnC,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;IACrB,CAAC;CACF;AATD,oDASC"}