@pear-protocol/exchanges-sdk 0.6.5 → 0.6.6

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 (92) hide show
  1. package/dist/client/base-ws.js +15 -6
  2. package/dist/client/binance/exchange-ws.js +22 -8
  3. package/dist/client/binance/rest.js +40 -27
  4. package/dist/client/binance/ws.js +21 -2
  5. package/dist/client/bybit/exchange-ws.js +13 -6
  6. package/dist/client/bybit/rest.js +30 -36
  7. package/dist/client/bybit/ws.js +16 -2
  8. package/dist/client/exchange-ws.js +5 -0
  9. package/dist/client/hmac.js +9 -1
  10. package/dist/client/hyperliquid/exchange-ws.js +13 -5
  11. package/dist/client/hyperliquid/rest.js +37 -7
  12. package/dist/client/hyperliquid/ws.js +10 -4
  13. package/dist/client/index.js +9 -2
  14. package/dist/client/lighter/constants.js +4 -0
  15. package/dist/client/lighter/exchange-ws.js +13 -5
  16. package/dist/client/lighter/rest.js +153 -18
  17. package/dist/client/lighter/ws.js +10 -4
  18. package/dist/client/okx/exchange-ws.js +13 -6
  19. package/dist/client/okx/rest.js +27 -24
  20. package/dist/client/okx/ws.js +5 -0
  21. package/dist/helper/factory.js +3 -0
  22. package/dist/helper/hyperliquid/helper.js +18 -23
  23. package/dist/helper/lighter/auth-token.helper.js +68 -0
  24. package/dist/helper/lighter/cctp-deposit.helper.js +297 -0
  25. package/dist/helper/lighter/ethereum/abi.js +55 -11
  26. package/dist/helper/lighter/ethereum/index.js +22 -3
  27. package/dist/helper/lighter/ethereum/usdc.helper.js +77 -0
  28. package/dist/helper/lighter/helper.js +112 -37
  29. package/dist/helper/lighter/index.js +1 -0
  30. package/dist/helper/lighter/onboarding.helper.js +28 -0
  31. package/dist/helper/lighter/types.js +6 -1
  32. package/dist/helper/subaccount.helper.js +20 -0
  33. package/dist/index.d.ts +200 -1
  34. package/dist/sdk.js +18 -7
  35. package/dist/status/base.js +16 -3
  36. package/dist/status/binance/status.js +3 -0
  37. package/dist/status/bybit/status.js +3 -0
  38. package/dist/status/factory.js +3 -0
  39. package/dist/status/hyperliquid/status.js +8 -6
  40. package/dist/status/lighter/status.js +11 -3
  41. package/dist/status/okx/status.js +3 -0
  42. package/dist/syncer/base.js +63 -24
  43. package/dist/syncer/binance/syncer.js +14 -13
  44. package/dist/syncer/bybit/syncer.js +10 -6
  45. package/dist/syncer/factory.js +3 -0
  46. package/dist/syncer/hyperliquid/funding.js +3 -0
  47. package/dist/syncer/hyperliquid/syncer.js +52 -66
  48. package/dist/syncer/lighter/funding.js +3 -0
  49. package/dist/syncer/lighter/syncer.js +26 -25
  50. package/dist/syncer/okx/syncer.js +15 -13
  51. package/dist/tracker/base.js +15 -5
  52. package/dist/tracker/binance/mapper.js +5 -1
  53. package/dist/tracker/binance/tracker.js +63 -23
  54. package/dist/tracker/binance/types.js +2 -2
  55. package/dist/tracker/bybit/mapper.js +7 -1
  56. package/dist/tracker/bybit/tracker.js +68 -24
  57. package/dist/tracker/bybit/types.js +2 -2
  58. package/dist/tracker/hyperliquid/const.js +3 -1
  59. package/dist/tracker/hyperliquid/mapper.js +36 -20
  60. package/dist/tracker/hyperliquid/tracker.js +147 -54
  61. package/dist/tracker/hyperliquid/types.js +2 -2
  62. package/dist/tracker/index.js +3 -0
  63. package/dist/tracker/lighter/mapper.js +41 -31
  64. package/dist/tracker/lighter/tracker.js +68 -27
  65. package/dist/tracker/lighter/types.js +4 -4
  66. package/dist/tracker/okx/mapper.js +8 -0
  67. package/dist/tracker/okx/tracker.js +69 -18
  68. package/dist/tracker/okx/types.js +2 -2
  69. package/dist/tracker/utils.js +4 -0
  70. package/package.json +3 -3
  71. package/dist/client/hyperliquid/client.test.js +0 -41
  72. package/dist/client/lighter/constants.test.js +0 -22
  73. package/dist/client/lighter/rest.test.js +0 -158
  74. package/dist/helper/hyperliquid/helper.test.js +0 -72
  75. package/dist/helper/lighter/helper.test.js +0 -289
  76. package/dist/sdk.test.js +0 -117
  77. package/dist/status/hyperliquid/status.test.js +0 -94
  78. package/dist/status/lighter/status.test.js +0 -86
  79. package/dist/syncer/base.test.js +0 -178
  80. package/dist/syncer/hyperliquid/funding.test.js +0 -63
  81. package/dist/syncer/hyperliquid/syncer.test.js +0 -271
  82. package/dist/syncer/lighter/funding.test.js +0 -48
  83. package/dist/syncer/lighter/syncer.test.js +0 -274
  84. package/dist/tracker/base.test.js +0 -132
  85. package/dist/tracker/binance/tracker.test.js +0 -138
  86. package/dist/tracker/bybit/tracker.test.js +0 -145
  87. package/dist/tracker/hyperliquid/mapper.test.js +0 -260
  88. package/dist/tracker/hyperliquid/tracker.test.js +0 -597
  89. package/dist/tracker/lighter/mapper.test.js +0 -199
  90. package/dist/tracker/lighter/tracker.test.js +0 -515
  91. package/dist/tracker/okx/tracker.test.js +0 -126
  92. package/dist/tracker/utils.test.js +0 -8
@@ -0,0 +1,68 @@
1
+ var __defProp = Object.defineProperty;
2
+ var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
3
+ const ASSUMED_AUTH_TOKEN_TTL_SECONDS = 10 * 60;
4
+ const AUTH_TOKEN_REFRESH_MARGIN_MS = 60 * 1e3;
5
+ const cachedTokens = /* @__PURE__ */ new Map();
6
+ async function retrieveLighterAuthToken(sdk, credentials, demo) {
7
+ const cacheKey = buildCacheKey(credentials, demo);
8
+ evictLapsedTokens();
9
+ const cached = cachedTokens.get(cacheKey);
10
+ if (cached && cached.apiPrivateKey === credentials.apiPrivateKey) {
11
+ return cached.token;
12
+ }
13
+ let entry;
14
+ const token = signAuthToken(sdk, credentials).catch((error) => {
15
+ if (cachedTokens.get(cacheKey) === entry) {
16
+ cachedTokens.delete(cacheKey);
17
+ }
18
+ throw error;
19
+ });
20
+ entry = {
21
+ token,
22
+ apiPrivateKey: credentials.apiPrivateKey,
23
+ expiresAt: Date.now() + ASSUMED_AUTH_TOKEN_TTL_SECONDS * 1e3 - AUTH_TOKEN_REFRESH_MARGIN_MS
24
+ };
25
+ cachedTokens.set(cacheKey, entry);
26
+ void token.then((signed) => alignExpiry(cacheKey, entry, signed)).catch(() => void 0);
27
+ return token;
28
+ }
29
+ __name(retrieveLighterAuthToken, "retrieveLighterAuthToken");
30
+ function _resetLighterAuthTokens() {
31
+ cachedTokens.clear();
32
+ }
33
+ __name(_resetLighterAuthTokens, "_resetLighterAuthTokens");
34
+ async function signAuthToken(sdk, credentials) {
35
+ const { token } = await sdk.core.misc.lighter.createAuthToken({
36
+ accountIndex: credentials.accountIndex,
37
+ apiKeyIndex: credentials.apiKeyIndex,
38
+ apiPrivateKey: credentials.apiPrivateKey
39
+ });
40
+ return token;
41
+ }
42
+ __name(signAuthToken, "signAuthToken");
43
+ function alignExpiry(cacheKey, entry, token) {
44
+ if (cachedTokens.get(cacheKey) !== entry) {
45
+ return;
46
+ }
47
+ const deadlineSeconds = Number(token.split(":")[0]);
48
+ if (!Number.isSafeInteger(deadlineSeconds) || deadlineSeconds <= 0) {
49
+ return;
50
+ }
51
+ entry.expiresAt = Math.min(entry.expiresAt, deadlineSeconds * 1e3 - AUTH_TOKEN_REFRESH_MARGIN_MS);
52
+ }
53
+ __name(alignExpiry, "alignExpiry");
54
+ function buildCacheKey(credentials, demo) {
55
+ return `${demo ? "demo" : "live"}:${credentials.accountIndex}:${credentials.apiKeyIndex}`;
56
+ }
57
+ __name(buildCacheKey, "buildCacheKey");
58
+ function evictLapsedTokens() {
59
+ const now = Date.now();
60
+ for (const [cacheKey, cached] of cachedTokens) {
61
+ if (cached.expiresAt <= now) {
62
+ cachedTokens.delete(cacheKey);
63
+ }
64
+ }
65
+ }
66
+ __name(evictLapsedTokens, "evictLapsedTokens");
67
+
68
+ export { _resetLighterAuthTokens, retrieveLighterAuthToken };
@@ -0,0 +1,297 @@
1
+ import { isAddress } from 'viem';
2
+ import { fetchDepositNetworks, createCctpDepositIntentAddress, fetchAccountsByL1Address, fetchDepositHistory } from '../../client/lighter/rest';
3
+ import { parseUsdcAmount } from '../subaccount.helper';
4
+ import { retrieveLighterAuthToken } from './auth-token.helper';
5
+ import { getLighterCctpUsdcAddress, writeUsdcTransfer } from './ethereum/usdc.helper';
6
+ import { readOnboardingStatus } from './onboarding.helper';
7
+ import { MIN_LIGHTER_CCTP_DEPOSIT_USDC } from './types';
8
+
9
+ var __defProp = Object.defineProperty;
10
+ var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
11
+ const DEPOSIT_POLL_INTERVAL_MS = 5e3;
12
+ const EXTERNAL_INTENT_LIFETIME_MS = 9 * 60 * 1e3;
13
+ const REGISTRATION_WATCH_LIMIT_MS = 60 * 60 * 1e3;
14
+ const USDC_AMOUNT_PATTERN = /^\d+(?:\.\d{1,6})?$/;
15
+ const MINIMUM_LABEL = `Minimum deposit: $${MIN_LIGHTER_CCTP_DEPOSIT_USDC} USDC`;
16
+ const MINIMUM_UNITS = parseUsdcAmount(MIN_LIGHTER_CCTP_DEPOSIT_USDC);
17
+ async function listCctpDepositNetworks(demo) {
18
+ assertCctpEnvironment(demo);
19
+ return fetchDepositNetworks(demo);
20
+ }
21
+ __name(listCctpDepositNetworks, "listCctpDepositNetworks");
22
+ async function createExternalCctpDepositIntent(params, demo) {
23
+ await validateIntentRoute(params, demo);
24
+ const intentAddress = await createCctpDepositIntentAddress({
25
+ chainId: params.chainId,
26
+ fromAddress: params.ownerAddress,
27
+ amount: "0",
28
+ external: true
29
+ }, demo);
30
+ return {
31
+ intentAddress,
32
+ expiresAt: Date.now() + EXTERNAL_INTENT_LIFETIME_MS
33
+ };
34
+ }
35
+ __name(createExternalCctpDepositIntent, "createExternalCctpDepositIntent");
36
+ async function depositUsdcViaCctp(sdk, params, demo) {
37
+ assertCctpEnvironment(demo);
38
+ assertOwnerWallet(params.ownerAddress, params.connectedAddress);
39
+ const usdcAddress = getLighterCctpUsdcAddress(params.chainId);
40
+ if (!usdcAddress) {
41
+ throw new Error(`Lighter CCTP chain ID ${params.chainId} has no known native USDC token.`);
42
+ }
43
+ const amountError = readCctpDepositAmountError(params.amount);
44
+ if (amountError) {
45
+ throw new Error(amountError);
46
+ }
47
+ const units = parseUsdcAmount(params.amount);
48
+ const balance = await params.wallet.readUsdcBalance(params.chainId, params.ownerAddress);
49
+ if (units > balance) {
50
+ throw new Error(`Your wallet holds ${formatUsdcUnits(balance)} USDC.`);
51
+ }
52
+ await validateIntentRoute({
53
+ chainId: params.chainId,
54
+ ownerAddress: params.ownerAddress
55
+ }, demo);
56
+ const wallet = await params.wallet.retrieveWallet(params.chainId);
57
+ if (wallet.account.address.toLowerCase() !== params.ownerAddress.toLowerCase()) {
58
+ throw new Error(`Connect the Lighter owner wallet ${params.ownerAddress} and try again.`);
59
+ }
60
+ if (wallet.chain?.id !== params.chainId) {
61
+ throw new Error(`Switch the wallet to chain ${params.chainId} before depositing.`);
62
+ }
63
+ const intentAddress = await createCctpDepositIntentAddress({
64
+ chainId: params.chainId,
65
+ fromAddress: params.ownerAddress,
66
+ amount: units.toString(),
67
+ external: false
68
+ }, demo);
69
+ const txHash = await writeUsdcTransfer(wallet, {
70
+ usdcAddress,
71
+ to: intentAddress,
72
+ amount: BigInt(units)
73
+ });
74
+ emitProgress(params.onProgress, params.signal, {
75
+ state: "confirming",
76
+ txHash
77
+ });
78
+ await params.wallet.confirmTransaction(params.chainId, txHash);
79
+ emitProgress(params.onProgress, params.signal, {
80
+ state: "bridging",
81
+ txHash
82
+ });
83
+ await followDepositSettlement(params, txHash, sdk, demo);
84
+ return {
85
+ txHash,
86
+ intentAddress
87
+ };
88
+ }
89
+ __name(depositUsdcViaCctp, "depositUsdcViaCctp");
90
+ function readCctpDepositAmountError(amount) {
91
+ if (!USDC_AMOUNT_PATTERN.test(amount)) {
92
+ return "Enter a USDC amount with up to six decimal places.";
93
+ }
94
+ const units = parseUsdcAmount(amount);
95
+ if (units < MINIMUM_UNITS) {
96
+ return `${MINIMUM_LABEL}.`;
97
+ }
98
+ return void 0;
99
+ }
100
+ __name(readCctpDepositAmountError, "readCctpDepositAmountError");
101
+ async function validateIntentRoute(params, demo) {
102
+ assertCctpEnvironment(demo);
103
+ if (!isAddress(params.ownerAddress)) {
104
+ throw new Error(`Invalid Lighter CCTP owner address: ${params.ownerAddress}`);
105
+ }
106
+ const networks = await fetchDepositNetworks(demo);
107
+ if (!networks.some((network) => network.chainId === params.chainId)) {
108
+ const supported = networks.map((network) => `${network.name} (${network.chainId})`).join(", ");
109
+ throw new Error(`Unsupported Lighter CCTP chain ID: ${params.chainId}. Lighter accepts ${supported}.`);
110
+ }
111
+ }
112
+ __name(validateIntentRoute, "validateIntentRoute");
113
+ function assertOwnerWallet(ownerAddress, connectedAddress) {
114
+ if (connectedAddress?.toLowerCase() !== ownerAddress.toLowerCase()) {
115
+ throw new Error(`Connect the Lighter owner wallet ${ownerAddress} and try again.`);
116
+ }
117
+ }
118
+ __name(assertOwnerWallet, "assertOwnerWallet");
119
+ function assertCctpEnvironment(demo) {
120
+ if (demo) {
121
+ throw new Error("Lighter demo CCTP deposits are disabled because safe testnet funding is not documented");
122
+ }
123
+ }
124
+ __name(assertCctpEnvironment, "assertCctpEnvironment");
125
+ async function followDepositSettlement(params, txHash, sdk, demo) {
126
+ const settlement = params.settlement;
127
+ if (!settlement) {
128
+ emitProgress(params.onProgress, params.signal, {
129
+ state: "untracked",
130
+ txHash
131
+ });
132
+ return;
133
+ }
134
+ switch (settlement.follow) {
135
+ case "deposit-history": {
136
+ const watch = await resolveDepositWatch(params.ownerAddress, settlement, params.signal, demo);
137
+ if (!watch) {
138
+ emitProgress(params.onProgress, params.signal, {
139
+ state: "untracked",
140
+ txHash
141
+ });
142
+ return;
143
+ }
144
+ await watchCctpDeposit(params.ownerAddress, txHash, watch, params.onProgress, sdk, demo);
145
+ return;
146
+ }
147
+ case "account-registration": {
148
+ await watchAccountRegistration(params.ownerAddress, txHash, params.onProgress, params.signal, demo);
149
+ return;
150
+ }
151
+ }
152
+ }
153
+ __name(followDepositSettlement, "followDepositSettlement");
154
+ async function resolveDepositWatch(ownerAddress, settlement, signal, demo) {
155
+ const data = await fetchAccountsByL1Address(ownerAddress, demo);
156
+ const main = data.sub_accounts?.find((account) => account.account_type === 0);
157
+ if (!main || main.index !== settlement.selectedAccountIndex) {
158
+ return void 0;
159
+ }
160
+ const credentials = await settlement.retrieveCredentials();
161
+ return {
162
+ accountIndex: main.index,
163
+ apiKeyIndex: credentials.apiKeyIndex,
164
+ apiPrivateKey: credentials.apiPrivateKey,
165
+ signal
166
+ };
167
+ }
168
+ __name(resolveDepositWatch, "resolveDepositWatch");
169
+ async function watchCctpDeposit(ownerAddress, txHash, watch, onProgress, sdk, demo) {
170
+ while (!watch.signal?.aborted) {
171
+ await waitForDepositPoll(watch.signal);
172
+ if (watch.signal?.aborted) {
173
+ return;
174
+ }
175
+ let deposits;
176
+ try {
177
+ const authToken = await retrieveLighterAuthToken(sdk, watch, demo);
178
+ deposits = await fetchDepositHistory({
179
+ accountIndex: watch.accountIndex,
180
+ l1Address: ownerAddress,
181
+ authToken
182
+ }, demo);
183
+ } catch {
184
+ continue;
185
+ }
186
+ const deposit = deposits.find((candidate) => candidate.l1TxHash.toLowerCase() === txHash.toLowerCase());
187
+ if (!deposit) {
188
+ emitProgress(onProgress, watch.signal, {
189
+ state: "bridging",
190
+ txHash
191
+ });
192
+ continue;
193
+ }
194
+ switch (deposit.status) {
195
+ case "pending":
196
+ emitProgress(onProgress, watch.signal, {
197
+ state: "bridging",
198
+ txHash
199
+ });
200
+ break;
201
+ case "completed":
202
+ emitProgress(onProgress, watch.signal, {
203
+ state: "credited",
204
+ txHash,
205
+ deposit
206
+ });
207
+ return;
208
+ case "failed":
209
+ emitProgress(onProgress, watch.signal, {
210
+ state: "failed",
211
+ txHash,
212
+ deposit
213
+ });
214
+ return;
215
+ case "claimable":
216
+ emitProgress(onProgress, watch.signal, {
217
+ state: "action-required",
218
+ txHash,
219
+ deposit
220
+ });
221
+ return;
222
+ }
223
+ }
224
+ }
225
+ __name(watchCctpDeposit, "watchCctpDeposit");
226
+ async function watchAccountRegistration(ownerAddress, txHash, onProgress, signal, demo) {
227
+ const deadline = Date.now() + REGISTRATION_WATCH_LIMIT_MS;
228
+ while (!signal?.aborted) {
229
+ await waitForDepositPoll(signal);
230
+ if (signal?.aborted) {
231
+ return;
232
+ }
233
+ if (Date.now() >= deadline) {
234
+ emitProgress(onProgress, signal, {
235
+ state: "unsettled",
236
+ txHash
237
+ });
238
+ return;
239
+ }
240
+ let status;
241
+ try {
242
+ status = await readOnboardingStatus(ownerAddress, demo);
243
+ } catch {
244
+ continue;
245
+ }
246
+ switch (status.step) {
247
+ case "deposit-required":
248
+ emitProgress(onProgress, signal, {
249
+ state: "bridging",
250
+ txHash
251
+ });
252
+ break;
253
+ case "account-ready":
254
+ emitProgress(onProgress, signal, {
255
+ state: "registered",
256
+ txHash,
257
+ mainAccountIndex: status.mainAccountIndex,
258
+ subAccountIndexes: status.subAccountIndexes
259
+ });
260
+ return;
261
+ }
262
+ }
263
+ }
264
+ __name(watchAccountRegistration, "watchAccountRegistration");
265
+ function emitProgress(onProgress, signal, progress) {
266
+ if (signal?.aborted) {
267
+ return;
268
+ }
269
+ onProgress(progress);
270
+ }
271
+ __name(emitProgress, "emitProgress");
272
+ async function waitForDepositPoll(signal) {
273
+ await new Promise((resolve) => {
274
+ let timeout;
275
+ const stopWaiting = /* @__PURE__ */ __name(() => {
276
+ clearTimeout(timeout);
277
+ resolve();
278
+ }, "stopWaiting");
279
+ timeout = setTimeout(() => {
280
+ signal?.removeEventListener("abort", stopWaiting);
281
+ resolve();
282
+ }, DEPOSIT_POLL_INTERVAL_MS);
283
+ signal?.addEventListener("abort", stopWaiting, {
284
+ once: true
285
+ });
286
+ });
287
+ }
288
+ __name(waitForDepositPoll, "waitForDepositPoll");
289
+ function formatUsdcUnits(units) {
290
+ const value = units.toString().padStart(7, "0");
291
+ const whole = value.slice(0, -6);
292
+ const fraction = value.slice(-6).replace(/0+$/, "");
293
+ return fraction ? `${whole}.${fraction}` : whole;
294
+ }
295
+ __name(formatUsdcUnits, "formatUsdcUnits");
296
+
297
+ export { createExternalCctpDepositIntent, depositUsdcViaCctp, listCctpDepositNetworks };
@@ -2,9 +2,21 @@ const LIGHTER_GATEWAY_ADDRESS = "0x3B4D794a66304F130a4Db8F2551B0070dfCf5ca7";
2
2
  const lighterGatewayAbi = [
3
3
  {
4
4
  inputs: [
5
- { internalType: "uint48", name: "_accountIndex", type: "uint48" },
6
- { internalType: "uint8", name: "_apiKeyIndex", type: "uint8" },
7
- { internalType: "bytes", name: "_pubKey", type: "bytes" }
5
+ {
6
+ internalType: "uint48",
7
+ name: "_accountIndex",
8
+ type: "uint48"
9
+ },
10
+ {
11
+ internalType: "uint8",
12
+ name: "_apiKeyIndex",
13
+ type: "uint8"
14
+ },
15
+ {
16
+ internalType: "bytes",
17
+ name: "_pubKey",
18
+ type: "bytes"
19
+ }
8
20
  ],
9
21
  name: "changePubKey",
10
22
  outputs: [],
@@ -13,10 +25,26 @@ const lighterGatewayAbi = [
13
25
  },
14
26
  {
15
27
  inputs: [
16
- { internalType: "address", name: "_to", type: "address" },
17
- { internalType: "uint16", name: "_assetIndex", type: "uint16" },
18
- { internalType: "uint8", name: "_routeType", type: "uint8" },
19
- { internalType: "uint256", name: "_amount", type: "uint256" }
28
+ {
29
+ internalType: "address",
30
+ name: "_to",
31
+ type: "address"
32
+ },
33
+ {
34
+ internalType: "uint16",
35
+ name: "_assetIndex",
36
+ type: "uint16"
37
+ },
38
+ {
39
+ internalType: "uint8",
40
+ name: "_routeType",
41
+ type: "uint8"
42
+ },
43
+ {
44
+ internalType: "uint256",
45
+ name: "_amount",
46
+ type: "uint256"
47
+ }
20
48
  ],
21
49
  name: "deposit",
22
50
  outputs: [],
@@ -25,10 +53,26 @@ const lighterGatewayAbi = [
25
53
  },
26
54
  {
27
55
  inputs: [
28
- { internalType: "uint48", name: "_accountIndex", type: "uint48" },
29
- { internalType: "uint16", name: "_assetIndex", type: "uint16" },
30
- { internalType: "uint8", name: "_routeType", type: "uint8" },
31
- { internalType: "uint64", name: "_baseAmount", type: "uint64" }
56
+ {
57
+ internalType: "uint48",
58
+ name: "_accountIndex",
59
+ type: "uint48"
60
+ },
61
+ {
62
+ internalType: "uint16",
63
+ name: "_assetIndex",
64
+ type: "uint16"
65
+ },
66
+ {
67
+ internalType: "uint8",
68
+ name: "_routeType",
69
+ type: "uint8"
70
+ },
71
+ {
72
+ internalType: "uint64",
73
+ name: "_baseAmount",
74
+ type: "uint64"
75
+ }
32
76
  ],
33
77
  name: "withdraw",
34
78
  outputs: [],
@@ -1,6 +1,8 @@
1
1
  import { mainnet } from 'viem/chains';
2
2
  import { lighterGatewayAbi, LIGHTER_GATEWAY_ADDRESS } from './abi';
3
3
 
4
+ var __defProp = Object.defineProperty;
5
+ var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
4
6
  const chain = mainnet;
5
7
  async function writeChangePubKey(walletClient, params) {
6
8
  return walletClient.writeContract({
@@ -8,27 +10,44 @@ async function writeChangePubKey(walletClient, params) {
8
10
  address: LIGHTER_GATEWAY_ADDRESS,
9
11
  abi: lighterGatewayAbi,
10
12
  functionName: "changePubKey",
11
- args: [params.accountIndex, params.apiKeyIndex, params.pubKey]
13
+ args: [
14
+ params.accountIndex,
15
+ params.apiKeyIndex,
16
+ params.pubKey
17
+ ]
12
18
  });
13
19
  }
20
+ __name(writeChangePubKey, "writeChangePubKey");
14
21
  async function writeDeposit(walletClient, params) {
15
22
  return walletClient.writeContract({
16
23
  chain,
17
24
  address: LIGHTER_GATEWAY_ADDRESS,
18
25
  abi: lighterGatewayAbi,
19
26
  functionName: "deposit",
20
- args: [params.to, params.assetIndex, params.routeType, params.amount],
27
+ args: [
28
+ params.to,
29
+ params.assetIndex,
30
+ params.routeType,
31
+ params.amount
32
+ ],
21
33
  value: params.value ?? 0n
22
34
  });
23
35
  }
36
+ __name(writeDeposit, "writeDeposit");
24
37
  async function writeWithdraw(walletClient, params) {
25
38
  return walletClient.writeContract({
26
39
  chain,
27
40
  address: LIGHTER_GATEWAY_ADDRESS,
28
41
  abi: lighterGatewayAbi,
29
42
  functionName: "withdraw",
30
- args: [params.accountIndex, params.assetIndex, params.routeType, params.baseAmount]
43
+ args: [
44
+ params.accountIndex,
45
+ params.assetIndex,
46
+ params.routeType,
47
+ params.baseAmount
48
+ ]
31
49
  });
32
50
  }
51
+ __name(writeWithdraw, "writeWithdraw");
33
52
 
34
53
  export { writeChangePubKey, writeDeposit, writeWithdraw };
@@ -0,0 +1,77 @@
1
+ var __defProp = Object.defineProperty;
2
+ var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
3
+ const LIGHTER_CCTP_USDC_ADDRESSES = {
4
+ // Arbitrum One
5
+ 42161: "0xaf88d065e77c8cC2239327C5EDb3A432268e5831",
6
+ // Base
7
+ 8453: "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
8
+ // Avalanche C-Chain
9
+ 43114: "0xB97EF9Ef8734C71904D8002F8b6Bc66Dd9c48a6E",
10
+ // HyperEVM
11
+ 999: "0xb88339CB7199b77E23DB6E890353E22632Ba630f"
12
+ };
13
+ const LIGHTER_CCTP_USDC_DECIMALS = 6;
14
+ const usdcAbi = [
15
+ {
16
+ inputs: [
17
+ {
18
+ internalType: "address",
19
+ name: "to",
20
+ type: "address"
21
+ },
22
+ {
23
+ internalType: "uint256",
24
+ name: "amount",
25
+ type: "uint256"
26
+ }
27
+ ],
28
+ name: "transfer",
29
+ outputs: [
30
+ {
31
+ internalType: "bool",
32
+ name: "",
33
+ type: "bool"
34
+ }
35
+ ],
36
+ stateMutability: "nonpayable",
37
+ type: "function"
38
+ },
39
+ {
40
+ inputs: [
41
+ {
42
+ internalType: "address",
43
+ name: "account",
44
+ type: "address"
45
+ }
46
+ ],
47
+ name: "balanceOf",
48
+ outputs: [
49
+ {
50
+ internalType: "uint256",
51
+ name: "",
52
+ type: "uint256"
53
+ }
54
+ ],
55
+ stateMutability: "view",
56
+ type: "function"
57
+ }
58
+ ];
59
+ function getLighterCctpUsdcAddress(chainId) {
60
+ return LIGHTER_CCTP_USDC_ADDRESSES[chainId];
61
+ }
62
+ __name(getLighterCctpUsdcAddress, "getLighterCctpUsdcAddress");
63
+ async function writeUsdcTransfer(walletClient, params) {
64
+ return walletClient.writeContract({
65
+ chain: walletClient.chain,
66
+ address: params.usdcAddress,
67
+ abi: usdcAbi,
68
+ functionName: "transfer",
69
+ args: [
70
+ params.to,
71
+ params.amount
72
+ ]
73
+ });
74
+ }
75
+ __name(writeUsdcTransfer, "writeUsdcTransfer");
76
+
77
+ export { LIGHTER_CCTP_USDC_ADDRESSES, LIGHTER_CCTP_USDC_DECIMALS, getLighterCctpUsdcAddress, usdcAbi, writeUsdcTransfer };