@1stdex/first-sdk 1.0.83 → 1.0.84
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.
- package/dist/cjs/calls/batch/prepare-claim-real-tokens.js +74 -39
- package/dist/cjs/calls/batch/prepare-claim-real-tokens.js.map +1 -1
- package/dist/esm/calls/batch/prepare-claim-real-tokens.js +92 -48
- package/dist/esm/calls/batch/prepare-claim-real-tokens.js.map +1 -1
- package/dist/tsconfig.build.tsbuildinfo +1 -1
- package/dist/types/calls/batch/prepare-claim-real-tokens.d.ts +16 -4
- package/dist/types/calls/batch/prepare-claim-real-tokens.d.ts.map +1 -1
- package/package.json +1 -1
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.prepareClaimRealTokensCrossChainLZ = exports.prepareClaimRealTokensSameChain = void 0;
|
|
3
|
+
exports.prepareClaimRealTokensCrossChainLZ = exports.prepareClaimRealTokensSameChain = exports.NotEnoughClaimableError = void 0;
|
|
4
4
|
const viem_1 = require("viem");
|
|
5
5
|
const chain_1 = require("../../constants/chain-configs/chain");
|
|
6
6
|
const eids_1 = require("../../constants/chain-configs/eids");
|
|
@@ -8,6 +8,26 @@ const claimable_dex_vault_abi_1 = require("../../constants/abis/core/claimable-d
|
|
|
8
8
|
const mirror_token_abi_1 = require("../../constants/abis/core/mirror-token-abi");
|
|
9
9
|
const first_oft_1 = require("../../constants/abis/core/first_oft");
|
|
10
10
|
const vault_1 = require("../../views/vault");
|
|
11
|
+
class NotEnoughClaimableError extends Error {
|
|
12
|
+
constructor(message, required, available) {
|
|
13
|
+
super(message);
|
|
14
|
+
Object.defineProperty(this, "required", {
|
|
15
|
+
enumerable: true,
|
|
16
|
+
configurable: true,
|
|
17
|
+
writable: true,
|
|
18
|
+
value: required
|
|
19
|
+
});
|
|
20
|
+
Object.defineProperty(this, "available", {
|
|
21
|
+
enumerable: true,
|
|
22
|
+
configurable: true,
|
|
23
|
+
writable: true,
|
|
24
|
+
value: available
|
|
25
|
+
});
|
|
26
|
+
this.name = 'NotEnoughClaimableError';
|
|
27
|
+
Object.setPrototypeOf(this, NotEnoughClaimableError.prototype);
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
exports.NotEnoughClaimableError = NotEnoughClaimableError;
|
|
11
31
|
const prepareClaimRealTokensSameChain = async ({ chainId, userAddress, mirrorTokenAddress, receivingAddress, options, }) => {
|
|
12
32
|
const publicClient = (0, viem_1.createPublicClient)({
|
|
13
33
|
chain: chain_1.CHAIN_MAP[chainId],
|
|
@@ -64,7 +84,7 @@ const prepareClaimRealTokensSameChain = async ({ chainId, userAddress, mirrorTok
|
|
|
64
84
|
return calls;
|
|
65
85
|
};
|
|
66
86
|
exports.prepareClaimRealTokensSameChain = prepareClaimRealTokensSameChain;
|
|
67
|
-
const prepareClaimRealTokensCrossChainLZ = async ({ chainId, destinationChainId, userAddress, mirrorTokenAddress, receivingAddress, options, }) => {
|
|
87
|
+
const prepareClaimRealTokensCrossChainLZ = async ({ chainId, destinationChainId, userAddress, mirrorTokenAddress, receivingAddress, amount, options, }) => {
|
|
68
88
|
const publicClient = (0, viem_1.createPublicClient)({
|
|
69
89
|
chain: chain_1.CHAIN_MAP[chainId],
|
|
70
90
|
transport: options?.rpcUrl ? (0, viem_1.http)(options.rpcUrl) : (0, viem_1.http)(),
|
|
@@ -93,60 +113,75 @@ const prepareClaimRealTokensCrossChainLZ = async ({ chainId, destinationChainId,
|
|
|
93
113
|
});
|
|
94
114
|
const vaultClaimableAmount = results[0].result || 0n;
|
|
95
115
|
const mirrorTokenClaimableAmount = results[1].result || 0n;
|
|
116
|
+
const totalClaimableAmount = vaultClaimableAmount + mirrorTokenClaimableAmount;
|
|
117
|
+
if (totalClaimableAmount < amount) {
|
|
118
|
+
throw new NotEnoughClaimableError(`Insufficient claimable funds: need ${amount}, but only have ${totalClaimableAmount} (mirror token: ${mirrorTokenClaimableAmount}, vault: ${vaultClaimableAmount})`, amount, totalClaimableAmount);
|
|
119
|
+
}
|
|
96
120
|
const calls = [];
|
|
97
|
-
if (
|
|
121
|
+
if (mirrorTokenClaimableAmount >= amount) {
|
|
98
122
|
calls.push({
|
|
99
|
-
to:
|
|
123
|
+
to: mirrorTokenAddress,
|
|
100
124
|
data: (0, viem_1.encodeFunctionData)({
|
|
101
125
|
abi: mirror_token_abi_1.MIRROR_TOKEN_ABI,
|
|
102
126
|
functionName: 'claim',
|
|
103
|
-
args: [userAddress,
|
|
127
|
+
args: [userAddress, amount],
|
|
104
128
|
}),
|
|
105
129
|
value: 0n,
|
|
106
130
|
});
|
|
107
131
|
}
|
|
108
|
-
|
|
109
|
-
|
|
132
|
+
else {
|
|
133
|
+
const amountFromVault = amount - mirrorTokenClaimableAmount;
|
|
110
134
|
calls.push({
|
|
111
|
-
to:
|
|
135
|
+
to: vault.address,
|
|
112
136
|
data: (0, viem_1.encodeFunctionData)({
|
|
113
137
|
abi: mirror_token_abi_1.MIRROR_TOKEN_ABI,
|
|
114
138
|
functionName: 'claim',
|
|
115
|
-
args: [userAddress,
|
|
139
|
+
args: [userAddress, amountFromVault],
|
|
116
140
|
}),
|
|
117
141
|
value: 0n,
|
|
118
142
|
});
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
}
|
|
130
|
-
const quoteFee = await publicClient.readContract({
|
|
131
|
-
address: mirrorTokenAddress,
|
|
132
|
-
abi: first_oft_1.FIRST_OFT_ABI,
|
|
133
|
-
functionName: 'quoteSend',
|
|
134
|
-
args: [sendParam, false],
|
|
135
|
-
});
|
|
136
|
-
calls.push({
|
|
137
|
-
to: mirrorTokenAddress,
|
|
138
|
-
data: (0, viem_1.encodeFunctionData)({
|
|
139
|
-
abi: first_oft_1.FIRST_OFT_ABI,
|
|
140
|
-
functionName: 'send',
|
|
141
|
-
args: [
|
|
142
|
-
sendParam,
|
|
143
|
-
{ nativeFee: quoteFee.nativeFee, lzTokenFee: 0n },
|
|
144
|
-
userAddress,
|
|
145
|
-
],
|
|
146
|
-
}),
|
|
147
|
-
value: quoteFee.nativeFee,
|
|
148
|
-
});
|
|
143
|
+
if (mirrorTokenClaimableAmount > 0n) {
|
|
144
|
+
calls.push({
|
|
145
|
+
to: mirrorTokenAddress,
|
|
146
|
+
data: (0, viem_1.encodeFunctionData)({
|
|
147
|
+
abi: mirror_token_abi_1.MIRROR_TOKEN_ABI,
|
|
148
|
+
functionName: 'claim',
|
|
149
|
+
args: [userAddress, mirrorTokenClaimableAmount],
|
|
150
|
+
}),
|
|
151
|
+
value: 0n,
|
|
152
|
+
});
|
|
153
|
+
}
|
|
149
154
|
}
|
|
155
|
+
const receivingAddressBytes32 = `0x000000000000000000000000${receivingAddress.slice(2)}`;
|
|
156
|
+
const destinationEid = eids_1.CHAIN_EIDS[destinationChainId];
|
|
157
|
+
const sendParam = {
|
|
158
|
+
dstEid: destinationEid,
|
|
159
|
+
to: receivingAddressBytes32,
|
|
160
|
+
amountLD: amount,
|
|
161
|
+
minAmountLD: amount,
|
|
162
|
+
extraOptions: '0x',
|
|
163
|
+
composeMsg: '0x',
|
|
164
|
+
oftCmd: '0x',
|
|
165
|
+
};
|
|
166
|
+
const quoteFee = await publicClient.readContract({
|
|
167
|
+
address: mirrorTokenAddress,
|
|
168
|
+
abi: first_oft_1.FIRST_OFT_ABI,
|
|
169
|
+
functionName: 'quoteSend',
|
|
170
|
+
args: [sendParam, false],
|
|
171
|
+
});
|
|
172
|
+
calls.push({
|
|
173
|
+
to: mirrorTokenAddress,
|
|
174
|
+
data: (0, viem_1.encodeFunctionData)({
|
|
175
|
+
abi: first_oft_1.FIRST_OFT_ABI,
|
|
176
|
+
functionName: 'send',
|
|
177
|
+
args: [
|
|
178
|
+
sendParam,
|
|
179
|
+
{ nativeFee: quoteFee.nativeFee, lzTokenFee: 0n },
|
|
180
|
+
userAddress,
|
|
181
|
+
],
|
|
182
|
+
}),
|
|
183
|
+
value: quoteFee.nativeFee,
|
|
184
|
+
});
|
|
150
185
|
return calls;
|
|
151
186
|
};
|
|
152
187
|
exports.prepareClaimRealTokensCrossChainLZ = prepareClaimRealTokensCrossChainLZ;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"prepare-claim-real-tokens.js","sourceRoot":"","sources":["../../../../src/calls/batch/prepare-claim-real-tokens.ts"],"names":[],"mappings":";;;AAAA,+BAAoE;AAEpE,+DAA2E;AAC3E,6DAAgE;AAChE,+FAA4F;AAC5F,iFAA8E;AAC9E,mEAAoE;AACpE,6CAA6C;
|
|
1
|
+
{"version":3,"file":"prepare-claim-real-tokens.js","sourceRoot":"","sources":["../../../../src/calls/batch/prepare-claim-real-tokens.ts"],"names":[],"mappings":"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"}
|
|
@@ -5,6 +5,28 @@ import { CLAIMABLE_DEX_VAULT_ABI } from '../../constants/abis/core/claimable-dex
|
|
|
5
5
|
import { MIRROR_TOKEN_ABI } from '../../constants/abis/core/mirror-token-abi';
|
|
6
6
|
import { FIRST_OFT_ABI } from '../../constants/abis/core/first_oft';
|
|
7
7
|
import { getVault } from '../../views/vault';
|
|
8
|
+
/**
|
|
9
|
+
* Error thrown when there are insufficient claimable funds in vault and mirror token combined.
|
|
10
|
+
*/
|
|
11
|
+
export class NotEnoughClaimableError extends Error {
|
|
12
|
+
constructor(message, required, available) {
|
|
13
|
+
super(message);
|
|
14
|
+
Object.defineProperty(this, "required", {
|
|
15
|
+
enumerable: true,
|
|
16
|
+
configurable: true,
|
|
17
|
+
writable: true,
|
|
18
|
+
value: required
|
|
19
|
+
});
|
|
20
|
+
Object.defineProperty(this, "available", {
|
|
21
|
+
enumerable: true,
|
|
22
|
+
configurable: true,
|
|
23
|
+
writable: true,
|
|
24
|
+
value: available
|
|
25
|
+
});
|
|
26
|
+
this.name = 'NotEnoughClaimableError';
|
|
27
|
+
Object.setPrototypeOf(this, NotEnoughClaimableError.prototype);
|
|
28
|
+
}
|
|
29
|
+
}
|
|
8
30
|
/**
|
|
9
31
|
* Prepares transactions to claim real tokens from a mirror token system.
|
|
10
32
|
* Checks vault claimable assets and mirror token claimable assets, then creates
|
|
@@ -90,14 +112,16 @@ export const prepareClaimRealTokensSameChain = async ({ chainId, userAddress, mi
|
|
|
90
112
|
};
|
|
91
113
|
/**
|
|
92
114
|
* Prepares transactions to claim real tokens and bridge them cross-chain via LayerZero.
|
|
93
|
-
* Claims
|
|
94
|
-
* address on the destination chain using LayerZero's OFT protocol.
|
|
115
|
+
* Claims the specified amount optimally (from mirror token and/or vault) to the user address,
|
|
116
|
+
* then bridges them to a receiving address on the destination chain using LayerZero's OFT protocol.
|
|
117
|
+
* Throws NotEnoughClaimableError if combined claimable amount is insufficient.
|
|
95
118
|
*
|
|
96
119
|
* @param chainId The source chain ID.
|
|
97
120
|
* @param destinationChainId The destination chain ID.
|
|
98
121
|
* @param userAddress The user address.
|
|
99
122
|
* @param mirrorTokenAddress The mirror token address (OFT contract).
|
|
100
123
|
* @param receivingAddress The address to receive the tokens on destination chain.
|
|
124
|
+
* @param amount The amount to claim and send (in token base units, e.g., wei).
|
|
101
125
|
* @param options Optional parameters.
|
|
102
126
|
* @returns Promise resolving to array of batch calls.
|
|
103
127
|
* @example
|
|
@@ -109,14 +133,15 @@ export const prepareClaimRealTokensSameChain = async ({ chainId, userAddress, mi
|
|
|
109
133
|
* destinationChainId: 8453,
|
|
110
134
|
* userAddress: '0xF8c1869Ecd4df136693C45EcE1b67f85B6bDaE69',
|
|
111
135
|
* mirrorTokenAddress: '0x00bfd44e79fb7f6dd5887a9426c8ef85a0cd23e0',
|
|
112
|
-
* receivingAddress: '0x742d35Cc6634C0532925a3b844Bc9e7595f0bEb'
|
|
136
|
+
* receivingAddress: '0x742d35Cc6634C0532925a3b844Bc9e7595f0bEb',
|
|
137
|
+
* amount: 1000000000000000000n // 1 token (18 decimals)
|
|
113
138
|
* })
|
|
114
139
|
*
|
|
115
140
|
* // Send all calls in one batched transaction
|
|
116
141
|
* const { client } = useSmartWallets()
|
|
117
142
|
* const txHash = await client.sendUserOperation({ calls })
|
|
118
143
|
*/
|
|
119
|
-
export const prepareClaimRealTokensCrossChainLZ = async ({ chainId, destinationChainId, userAddress, mirrorTokenAddress, receivingAddress, options, }) => {
|
|
144
|
+
export const prepareClaimRealTokensCrossChainLZ = async ({ chainId, destinationChainId, userAddress, mirrorTokenAddress, receivingAddress, amount, options, }) => {
|
|
120
145
|
const publicClient = createPublicClient({
|
|
121
146
|
chain: CHAIN_MAP[chainId],
|
|
122
147
|
transport: options?.rpcUrl ? http(options.rpcUrl) : http(),
|
|
@@ -145,67 +170,86 @@ export const prepareClaimRealTokensCrossChainLZ = async ({ chainId, destinationC
|
|
|
145
170
|
});
|
|
146
171
|
const vaultClaimableAmount = results[0].result || 0n;
|
|
147
172
|
const mirrorTokenClaimableAmount = results[1].result || 0n;
|
|
173
|
+
const totalClaimableAmount = vaultClaimableAmount + mirrorTokenClaimableAmount;
|
|
174
|
+
// Check if there's enough claimable to cover the requested amount
|
|
175
|
+
if (totalClaimableAmount < amount) {
|
|
176
|
+
throw new NotEnoughClaimableError(`Insufficient claimable funds: need ${amount}, but only have ${totalClaimableAmount} (mirror token: ${mirrorTokenClaimableAmount}, vault: ${vaultClaimableAmount})`, amount, totalClaimableAmount);
|
|
177
|
+
}
|
|
148
178
|
const calls = [];
|
|
149
|
-
// If
|
|
150
|
-
if (
|
|
179
|
+
// If mirror token has enough claimable to cover without vault, claim only from mirror token
|
|
180
|
+
if (mirrorTokenClaimableAmount >= amount) {
|
|
151
181
|
calls.push({
|
|
152
|
-
to:
|
|
182
|
+
to: mirrorTokenAddress,
|
|
153
183
|
data: encodeFunctionData({
|
|
154
184
|
abi: MIRROR_TOKEN_ABI,
|
|
155
185
|
functionName: 'claim',
|
|
156
|
-
args: [userAddress,
|
|
186
|
+
args: [userAddress, amount],
|
|
157
187
|
}),
|
|
158
188
|
value: 0n,
|
|
159
189
|
});
|
|
160
190
|
}
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
191
|
+
else {
|
|
192
|
+
// Need to claim from both vault and mirror token
|
|
193
|
+
// Calculate minimum amount needed from vault
|
|
194
|
+
const amountFromVault = amount - mirrorTokenClaimableAmount;
|
|
195
|
+
// Claim from vault to user address
|
|
164
196
|
calls.push({
|
|
165
|
-
to:
|
|
197
|
+
to: vault.address,
|
|
166
198
|
data: encodeFunctionData({
|
|
167
199
|
abi: MIRROR_TOKEN_ABI,
|
|
168
200
|
functionName: 'claim',
|
|
169
|
-
args: [userAddress,
|
|
201
|
+
args: [userAddress, amountFromVault],
|
|
170
202
|
}),
|
|
171
203
|
value: 0n,
|
|
172
204
|
});
|
|
173
|
-
//
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
oftCmd: '0x',
|
|
186
|
-
};
|
|
187
|
-
// Quote the send to get gas fee
|
|
188
|
-
const quoteFee = await publicClient.readContract({
|
|
189
|
-
address: mirrorTokenAddress,
|
|
190
|
-
abi: FIRST_OFT_ABI,
|
|
191
|
-
functionName: 'quoteSend',
|
|
192
|
-
args: [sendParam, false], // false = pay in native token
|
|
193
|
-
});
|
|
194
|
-
// Call send() to bridge tokens cross-chain
|
|
195
|
-
calls.push({
|
|
196
|
-
to: mirrorTokenAddress,
|
|
197
|
-
data: encodeFunctionData({
|
|
198
|
-
abi: FIRST_OFT_ABI,
|
|
199
|
-
functionName: 'send',
|
|
200
|
-
args: [
|
|
201
|
-
sendParam,
|
|
202
|
-
{ nativeFee: quoteFee.nativeFee, lzTokenFee: 0n },
|
|
203
|
-
userAddress, // refund address
|
|
204
|
-
],
|
|
205
|
-
}),
|
|
206
|
-
value: quoteFee.nativeFee,
|
|
207
|
-
});
|
|
205
|
+
// Claim all available from mirror token to user address
|
|
206
|
+
if (mirrorTokenClaimableAmount > 0n) {
|
|
207
|
+
calls.push({
|
|
208
|
+
to: mirrorTokenAddress,
|
|
209
|
+
data: encodeFunctionData({
|
|
210
|
+
abi: MIRROR_TOKEN_ABI,
|
|
211
|
+
functionName: 'claim',
|
|
212
|
+
args: [userAddress, mirrorTokenClaimableAmount],
|
|
213
|
+
}),
|
|
214
|
+
value: 0n,
|
|
215
|
+
});
|
|
216
|
+
}
|
|
208
217
|
}
|
|
218
|
+
// Convert receivingAddress to bytes32 for LayerZero
|
|
219
|
+
const receivingAddressBytes32 = `0x000000000000000000000000${receivingAddress.slice(2)}`;
|
|
220
|
+
// Get destination EID
|
|
221
|
+
const destinationEid = CHAIN_EIDS[destinationChainId];
|
|
222
|
+
// Prepare SendParam for quoteSend
|
|
223
|
+
const sendParam = {
|
|
224
|
+
dstEid: destinationEid,
|
|
225
|
+
to: receivingAddressBytes32,
|
|
226
|
+
amountLD: amount,
|
|
227
|
+
minAmountLD: amount,
|
|
228
|
+
extraOptions: '0x',
|
|
229
|
+
composeMsg: '0x',
|
|
230
|
+
oftCmd: '0x',
|
|
231
|
+
};
|
|
232
|
+
// Quote the send to get gas fee
|
|
233
|
+
const quoteFee = await publicClient.readContract({
|
|
234
|
+
address: mirrorTokenAddress,
|
|
235
|
+
abi: FIRST_OFT_ABI,
|
|
236
|
+
functionName: 'quoteSend',
|
|
237
|
+
args: [sendParam, false], // false = pay in native token
|
|
238
|
+
});
|
|
239
|
+
// Call send() to bridge tokens cross-chain
|
|
240
|
+
calls.push({
|
|
241
|
+
to: mirrorTokenAddress,
|
|
242
|
+
data: encodeFunctionData({
|
|
243
|
+
abi: FIRST_OFT_ABI,
|
|
244
|
+
functionName: 'send',
|
|
245
|
+
args: [
|
|
246
|
+
sendParam,
|
|
247
|
+
{ nativeFee: quoteFee.nativeFee, lzTokenFee: 0n },
|
|
248
|
+
userAddress, // refund address
|
|
249
|
+
],
|
|
250
|
+
}),
|
|
251
|
+
value: quoteFee.nativeFee,
|
|
252
|
+
});
|
|
209
253
|
return calls;
|
|
210
254
|
};
|
|
211
255
|
//# sourceMappingURL=prepare-claim-real-tokens.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"prepare-claim-real-tokens.js","sourceRoot":"","sources":["../../../../src/calls/batch/prepare-claim-real-tokens.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAEpE,OAAO,EAAa,SAAS,EAAE,MAAM,qCAAqC,CAAC;AAC3E,OAAO,EAAE,UAAU,EAAE,MAAM,oCAAoC,CAAC;AAChE,OAAO,EAAE,uBAAuB,EAAE,MAAM,mDAAmD,CAAC;AAC5F,OAAO,EAAE,gBAAgB,EAAE,MAAM,4CAA4C,CAAC;AAC9E,OAAO,EAAE,aAAa,EAAE,MAAM,qCAAqC,CAAC;AACpE,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAK7C;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,MAAM,CAAC,MAAM,+BAA+B,GAAG,KAAK,EAAE,EACpD,OAAO,EACP,WAAW,EACX,kBAAkB,EAClB,gBAAgB,EAChB,OAAO,GAOR,EAAwB,EAAE;IACzB,MAAM,YAAY,GAAG,kBAAkB,CAAC;QACtC,KAAK,EAAE,SAAS,CAAC,OAAO,CAAC;QACzB,SAAS,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE;KAC3D,CAAC,CAAC;IAEH,MAAM,KAAK,GAAG,MAAM,QAAQ,CAAC;QAC3B,OAAO;QACP,YAAY,EAAE,kBAAkB;QAChC,GAAG,CAAC,OAAO,EAAE,MAAM,IAAI,EAAE,OAAO,EAAE,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC;KAChE,CAAC,CAAC;IAEH,MAAM,SAAS,GAAU;QACvB;YACE,OAAO,EAAE,KAAK,CAAC,OAAO;YACtB,GAAG,EAAE,uBAAuB;YAC5B,YAAY,EAAE,oBAAoB;YAClC,IAAI,EAAE,CAAC,WAAW,CAAC;SACpB;QACD;YACE,OAAO,EAAE,kBAAkB;YAC3B,GAAG,EAAE,gBAAgB;YACrB,YAAY,EAAE,oBAAoB;YAClC,IAAI,EAAE,CAAC,WAAW,CAAC;SACpB;KACF,CAAC;IAEF,MAAM,OAAO,GAAG,MAAM,YAAY,CAAC,SAAS,CAAC;QAC3C,SAAS;KACV,CAAC,CAAC;IAEH,MAAM,oBAAoB,GAAI,OAAO,CAAC,CAAC,CAAC,CAAC,MAAiB,IAAI,EAAE,CAAC;IACjE,MAAM,0BAA0B,GAAI,OAAO,CAAC,CAAC,CAAC,CAAC,MAAiB,IAAI,EAAE,CAAC;IAEvE,MAAM,KAAK,GAAgB,EAAE,CAAC;IAE9B,kDAAkD;IAClD,IAAI,oBAAoB,GAAG,EAAE,EAAE,CAAC;QAC9B,KAAK,CAAC,IAAI,CAAC;YACT,EAAE,EAAE,KAAK,CAAC,OAAO;YACjB,IAAI,EAAE,kBAAkB,CAAC;gBACvB,GAAG,EAAE,gBAAgB;gBACrB,YAAY,EAAE,OAAO;gBACrB,IAAI,EAAE,CAAC,WAAW,EAAE,oBAAoB,CAAC;aAC1C,CAAC;YACF,KAAK,EAAE,EAAE;SACV,CAAC,CAAC;IACL,CAAC;IAED,sEAAsE;IACtE,MAAM,oBAAoB,GACxB,oBAAoB,GAAG,0BAA0B,CAAC;IAEpD,IAAI,oBAAoB,GAAG,EAAE,EAAE,CAAC;QAC9B,KAAK,CAAC,IAAI,CAAC;YACT,EAAE,EAAE,kBAAkB;YACtB,IAAI,EAAE,kBAAkB,CAAC;gBACvB,GAAG,EAAE,gBAAgB;gBACrB,YAAY,EAAE,OAAO;gBACrB,IAAI,EAAE,CAAC,gBAAgB,EAAE,oBAAoB,CAAC;aAC/C,CAAC;YACF,KAAK,EAAE,EAAE;SACV,CAAC,CAAC;IACL,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC,CAAC;AAEF
|
|
1
|
+
{"version":3,"file":"prepare-claim-real-tokens.js","sourceRoot":"","sources":["../../../../src/calls/batch/prepare-claim-real-tokens.ts"],"names":[],"mappings":"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"}
|