zerc20-client-sdk 0.2.0 → 0.2.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.
- package/README.md +36 -0
- package/dist/operations/liquidityManager/__tests__/adaptorWithdraw.test.d.ts +2 -0
- package/dist/operations/liquidityManager/__tests__/adaptorWithdraw.test.d.ts.map +1 -0
- package/dist/operations/liquidityManager/__tests__/adaptorWithdraw.test.js +157 -0
- package/dist/operations/liquidityManager/__tests__/adaptorWithdraw.test.js.map +1 -0
- package/dist/operations/liquidityManager/adaptorWithdraw.d.ts +82 -0
- package/dist/operations/liquidityManager/adaptorWithdraw.d.ts.map +1 -0
- package/dist/operations/liquidityManager/adaptorWithdraw.js +107 -0
- package/dist/operations/liquidityManager/adaptorWithdraw.js.map +1 -0
- package/dist/operations/liquidityManager/index.d.ts +3 -1
- package/dist/operations/liquidityManager/index.d.ts.map +1 -1
- package/dist/operations/liquidityManager/index.js +2 -1
- package/dist/operations/liquidityManager/index.js.map +1 -1
- package/dist/operations/receive/__tests__/cache.test.js +33 -0
- package/dist/operations/receive/__tests__/cache.test.js.map +1 -1
- package/dist/operations/receive/cache.d.ts +1 -1
- package/dist/operations/receive/cache.d.ts.map +1 -1
- package/dist/operations/receive/cache.js +6 -5
- package/dist/operations/receive/cache.js.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -170,6 +170,42 @@ const quote = await buildCrossUnwrapQuote({
|
|
|
170
170
|
});
|
|
171
171
|
```
|
|
172
172
|
|
|
173
|
+
### Adaptor Withdraw (Stuck Fund Recovery)
|
|
174
|
+
|
|
175
|
+
When a cross-chain unwrap fails (e.g. due to Stargate liquidity shortage), user funds may remain in the destination chain's Adaptor contract. The SDK provides functions to detect and recover these stuck funds:
|
|
176
|
+
|
|
177
|
+
```typescript
|
|
178
|
+
import {
|
|
179
|
+
fetchAdaptorBalances,
|
|
180
|
+
hasStuckFunds,
|
|
181
|
+
withdrawFromAdaptor,
|
|
182
|
+
NATIVE_TOKEN_ADDRESS,
|
|
183
|
+
} from "zerc20-client-sdk";
|
|
184
|
+
|
|
185
|
+
// Check if a user has stuck funds in an adaptor
|
|
186
|
+
const stuck = await hasStuckFunds({
|
|
187
|
+
provider: readProvider,
|
|
188
|
+
account: "0xUser...",
|
|
189
|
+
adaptorAddress: "0xAdaptor...",
|
|
190
|
+
});
|
|
191
|
+
|
|
192
|
+
// Fetch detailed balances
|
|
193
|
+
const balances = await fetchAdaptorBalances({
|
|
194
|
+
provider: readProvider,
|
|
195
|
+
account: "0xUser...",
|
|
196
|
+
adaptorAddress: "0xAdaptor...",
|
|
197
|
+
});
|
|
198
|
+
// balances.underlyingTokenBalance, balances.zerc20Balance, balances.nativeBalance
|
|
199
|
+
|
|
200
|
+
// Withdraw stuck funds
|
|
201
|
+
const result = await withdrawFromAdaptor({
|
|
202
|
+
writeProvider,
|
|
203
|
+
adaptorAddress: "0xAdaptor...",
|
|
204
|
+
token: balances.underlyingTokenAddress, // or zerc20TokenAddress, or NATIVE_TOKEN_ADDRESS
|
|
205
|
+
amount: balances.underlyingTokenBalance,
|
|
206
|
+
});
|
|
207
|
+
```
|
|
208
|
+
|
|
173
209
|
### LayerZero Scan
|
|
174
210
|
|
|
175
211
|
Track and decode LayerZero cross-chain messages. Configuration and providers are injected as parameters, making this module framework-agnostic:
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"adaptorWithdraw.test.d.ts","sourceRoot":"","sources":["../../../../src/operations/liquidityManager/__tests__/adaptorWithdraw.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,157 @@
|
|
|
1
|
+
import { beforeEach, describe, expect, test, vi } from "vitest";
|
|
2
|
+
import { fetchAdaptorBalances, hasStuckFunds, withdrawFromAdaptor } from "../adaptorWithdraw.js";
|
|
3
|
+
describe("fetchAdaptorBalances", () => {
|
|
4
|
+
const mockProvider = {
|
|
5
|
+
readContract: vi.fn(),
|
|
6
|
+
};
|
|
7
|
+
beforeEach(() => {
|
|
8
|
+
vi.clearAllMocks();
|
|
9
|
+
});
|
|
10
|
+
test("fetches all adaptor balances for a user", async () => {
|
|
11
|
+
const underlyingToken = "0x1234567890123456789012345678901234567890";
|
|
12
|
+
const zerc20Token = "0xabcdef1234567890abcdef1234567890abcdef12";
|
|
13
|
+
mockProvider.readContract
|
|
14
|
+
.mockResolvedValueOnce(100n) // underlyingTokenBalances
|
|
15
|
+
.mockResolvedValueOnce(200n) // zerc20Balances
|
|
16
|
+
.mockResolvedValueOnce(300n) // nativeBalances
|
|
17
|
+
.mockResolvedValueOnce(underlyingToken) // UNDERLYING_TOKEN
|
|
18
|
+
.mockResolvedValueOnce(zerc20Token); // ZERC20_TOKEN
|
|
19
|
+
const result = await fetchAdaptorBalances({
|
|
20
|
+
provider: mockProvider,
|
|
21
|
+
account: "0xUser1234567890123456789012345678901234",
|
|
22
|
+
adaptorAddress: "0xAdaptor123456789012345678901234567890ab",
|
|
23
|
+
});
|
|
24
|
+
expect(result.underlyingTokenBalance).toBe(100n);
|
|
25
|
+
expect(result.zerc20Balance).toBe(200n);
|
|
26
|
+
expect(result.nativeBalance).toBe(300n);
|
|
27
|
+
expect(result.underlyingTokenAddress).toBe(underlyingToken.toLowerCase());
|
|
28
|
+
expect(result.zerc20TokenAddress).toBe(zerc20Token.toLowerCase());
|
|
29
|
+
});
|
|
30
|
+
test("returns zero balances when no funds are stuck", async () => {
|
|
31
|
+
mockProvider.readContract
|
|
32
|
+
.mockResolvedValueOnce(0n)
|
|
33
|
+
.mockResolvedValueOnce(0n)
|
|
34
|
+
.mockResolvedValueOnce(0n)
|
|
35
|
+
.mockResolvedValueOnce("0x1234567890123456789012345678901234567890")
|
|
36
|
+
.mockResolvedValueOnce("0xabcdef1234567890abcdef1234567890abcdef12");
|
|
37
|
+
const result = await fetchAdaptorBalances({
|
|
38
|
+
provider: mockProvider,
|
|
39
|
+
account: "0xUser",
|
|
40
|
+
adaptorAddress: "0xAdaptor",
|
|
41
|
+
});
|
|
42
|
+
expect(result.underlyingTokenBalance).toBe(0n);
|
|
43
|
+
expect(result.zerc20Balance).toBe(0n);
|
|
44
|
+
expect(result.nativeBalance).toBe(0n);
|
|
45
|
+
});
|
|
46
|
+
test("calls readContract with correct function names", async () => {
|
|
47
|
+
mockProvider.readContract
|
|
48
|
+
.mockResolvedValueOnce(0n)
|
|
49
|
+
.mockResolvedValueOnce(0n)
|
|
50
|
+
.mockResolvedValueOnce(0n)
|
|
51
|
+
.mockResolvedValueOnce("0x1234567890123456789012345678901234567890")
|
|
52
|
+
.mockResolvedValueOnce("0xabcdef1234567890abcdef1234567890abcdef12");
|
|
53
|
+
await fetchAdaptorBalances({
|
|
54
|
+
provider: mockProvider,
|
|
55
|
+
account: "0xUser1234567890123456789012345678901234",
|
|
56
|
+
adaptorAddress: "0xAdaptor123456789012345678901234567890ab",
|
|
57
|
+
});
|
|
58
|
+
const calls = mockProvider.readContract.mock.calls;
|
|
59
|
+
const functionNames = calls.map((c) => c[0].functionName);
|
|
60
|
+
expect(functionNames).toContain("underlyingTokenBalances");
|
|
61
|
+
expect(functionNames).toContain("zerc20Balances");
|
|
62
|
+
expect(functionNames).toContain("nativeBalances");
|
|
63
|
+
expect(functionNames).toContain("UNDERLYING_TOKEN");
|
|
64
|
+
expect(functionNames).toContain("ZERC20_TOKEN");
|
|
65
|
+
});
|
|
66
|
+
});
|
|
67
|
+
describe("hasStuckFunds", () => {
|
|
68
|
+
const mockProvider = {
|
|
69
|
+
readContract: vi.fn(),
|
|
70
|
+
};
|
|
71
|
+
beforeEach(() => {
|
|
72
|
+
vi.clearAllMocks();
|
|
73
|
+
});
|
|
74
|
+
const setupMock = (underlying, zerc20, native) => {
|
|
75
|
+
mockProvider.readContract
|
|
76
|
+
.mockResolvedValueOnce(underlying)
|
|
77
|
+
.mockResolvedValueOnce(zerc20)
|
|
78
|
+
.mockResolvedValueOnce(native)
|
|
79
|
+
.mockResolvedValueOnce("0x1234567890123456789012345678901234567890")
|
|
80
|
+
.mockResolvedValueOnce("0xabcdef1234567890abcdef1234567890abcdef12");
|
|
81
|
+
};
|
|
82
|
+
test("returns true when underlying balance is stuck", async () => {
|
|
83
|
+
setupMock(100n, 0n, 0n);
|
|
84
|
+
expect(await hasStuckFunds({
|
|
85
|
+
provider: mockProvider,
|
|
86
|
+
account: "0xUser",
|
|
87
|
+
adaptorAddress: "0xAdaptor",
|
|
88
|
+
})).toBe(true);
|
|
89
|
+
});
|
|
90
|
+
test("returns true when zerc20 balance is stuck", async () => {
|
|
91
|
+
setupMock(0n, 50n, 0n);
|
|
92
|
+
expect(await hasStuckFunds({
|
|
93
|
+
provider: mockProvider,
|
|
94
|
+
account: "0xUser",
|
|
95
|
+
adaptorAddress: "0xAdaptor",
|
|
96
|
+
})).toBe(true);
|
|
97
|
+
});
|
|
98
|
+
test("returns true when native balance is stuck", async () => {
|
|
99
|
+
setupMock(0n, 0n, 10n);
|
|
100
|
+
expect(await hasStuckFunds({
|
|
101
|
+
provider: mockProvider,
|
|
102
|
+
account: "0xUser",
|
|
103
|
+
adaptorAddress: "0xAdaptor",
|
|
104
|
+
})).toBe(true);
|
|
105
|
+
});
|
|
106
|
+
test("returns false when no funds are stuck", async () => {
|
|
107
|
+
setupMock(0n, 0n, 0n);
|
|
108
|
+
expect(await hasStuckFunds({
|
|
109
|
+
provider: mockProvider,
|
|
110
|
+
account: "0xUser",
|
|
111
|
+
adaptorAddress: "0xAdaptor",
|
|
112
|
+
})).toBe(false);
|
|
113
|
+
});
|
|
114
|
+
});
|
|
115
|
+
describe("withdrawFromAdaptor", () => {
|
|
116
|
+
const mockWriteProvider = {
|
|
117
|
+
account: { address: "0xUser1234567890123456789012345678901234" },
|
|
118
|
+
chain: { id: 1 },
|
|
119
|
+
writeContract: vi.fn(),
|
|
120
|
+
waitForTransactionReceipt: vi.fn(),
|
|
121
|
+
};
|
|
122
|
+
beforeEach(() => {
|
|
123
|
+
vi.clearAllMocks();
|
|
124
|
+
});
|
|
125
|
+
test("executes withdraw transaction", async () => {
|
|
126
|
+
const txHash = "0xabc123";
|
|
127
|
+
mockWriteProvider.writeContract.mockResolvedValue(txHash);
|
|
128
|
+
mockWriteProvider.waitForTransactionReceipt.mockResolvedValue({ transactionHash: txHash });
|
|
129
|
+
const result = await withdrawFromAdaptor({
|
|
130
|
+
writeProvider: mockWriteProvider,
|
|
131
|
+
adaptorAddress: "0xAdaptor123456789012345678901234567890ab",
|
|
132
|
+
token: "0xToken1234567890123456789012345678901234",
|
|
133
|
+
amount: 100n,
|
|
134
|
+
});
|
|
135
|
+
expect(result.transactionHash).toBe(txHash);
|
|
136
|
+
const call = mockWriteProvider.writeContract.mock.calls[0][0];
|
|
137
|
+
expect(call.functionName).toBe("withdraw");
|
|
138
|
+
expect(call.args).toEqual(["0x0token1234567890123456789012345678901234", 100n]);
|
|
139
|
+
});
|
|
140
|
+
test("throws when amount is zero", async () => {
|
|
141
|
+
await expect(withdrawFromAdaptor({
|
|
142
|
+
writeProvider: mockWriteProvider,
|
|
143
|
+
adaptorAddress: "0xAdaptor",
|
|
144
|
+
token: "0xToken",
|
|
145
|
+
amount: 0n,
|
|
146
|
+
})).rejects.toThrow("amount must be greater than zero");
|
|
147
|
+
});
|
|
148
|
+
test("throws when amount is negative", async () => {
|
|
149
|
+
await expect(withdrawFromAdaptor({
|
|
150
|
+
writeProvider: mockWriteProvider,
|
|
151
|
+
adaptorAddress: "0xAdaptor",
|
|
152
|
+
token: "0xToken",
|
|
153
|
+
amount: -1n,
|
|
154
|
+
})).rejects.toThrow("amount must be greater than zero");
|
|
155
|
+
});
|
|
156
|
+
});
|
|
157
|
+
//# sourceMappingURL=adaptorWithdraw.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"adaptorWithdraw.test.js","sourceRoot":"","sources":["../../../../src/operations/liquidityManager/__tests__/adaptorWithdraw.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Adaptor withdraw operations for rescuing stuck funds from failed cross-chain unwraps.
|
|
3
|
+
*/
|
|
4
|
+
import type { EvmReadProvider, EvmWriteProvider } from "../../types/evm.js";
|
|
5
|
+
import { type FeeOverrides } from "../../utils/fees.js";
|
|
6
|
+
/**
|
|
7
|
+
* Balances stuck in an adaptor contract for a given user.
|
|
8
|
+
*/
|
|
9
|
+
export interface AdaptorBalances {
|
|
10
|
+
/** Underlying token balance stuck in the adaptor. */
|
|
11
|
+
underlyingTokenBalance: bigint;
|
|
12
|
+
/** zERC20 token balance stuck in the adaptor. */
|
|
13
|
+
zerc20Balance: bigint;
|
|
14
|
+
/** Native token balance stuck in the adaptor. */
|
|
15
|
+
nativeBalance: bigint;
|
|
16
|
+
/** Underlying token address as configured in the adaptor. */
|
|
17
|
+
underlyingTokenAddress: `0x${string}`;
|
|
18
|
+
/** zERC20 token address as configured in the adaptor. */
|
|
19
|
+
zerc20TokenAddress: `0x${string}`;
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Parameters for `withdrawFromAdaptor`.
|
|
23
|
+
*/
|
|
24
|
+
export interface AdaptorWithdrawParams {
|
|
25
|
+
/** Write provider used to sign and submit transactions. */
|
|
26
|
+
writeProvider: EvmWriteProvider;
|
|
27
|
+
/** Optional read provider for receipt polling. */
|
|
28
|
+
readProvider?: EvmReadProvider;
|
|
29
|
+
/** Adaptor contract address. */
|
|
30
|
+
adaptorAddress: string;
|
|
31
|
+
/** Token address to withdraw (underlying, zERC20, or native sentinel). */
|
|
32
|
+
token: string;
|
|
33
|
+
/** Amount to withdraw (bigint-like). */
|
|
34
|
+
amount: bigint | number | string;
|
|
35
|
+
/** Optional fee overrides (e.g., gas, maxFeePerGas). */
|
|
36
|
+
feeOverrides?: FeeOverrides;
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Fetch balances stuck in an adaptor contract for a given user.
|
|
40
|
+
*
|
|
41
|
+
* @remarks
|
|
42
|
+
* When a cross-chain unwrap fails (e.g. due to Stargate liquidity shortage),
|
|
43
|
+
* user funds remain in the adaptor contract. This function reads those balances
|
|
44
|
+
* so the UI can prompt the user to withdraw.
|
|
45
|
+
*
|
|
46
|
+
* @param params.provider - Provider to use for contract reads.
|
|
47
|
+
* @param params.account - User address to check balances for.
|
|
48
|
+
* @param params.adaptorAddress - Adaptor contract address.
|
|
49
|
+
*/
|
|
50
|
+
export declare function fetchAdaptorBalances(params: {
|
|
51
|
+
provider: EvmReadProvider;
|
|
52
|
+
account: string;
|
|
53
|
+
adaptorAddress: string;
|
|
54
|
+
}): Promise<AdaptorBalances>;
|
|
55
|
+
/**
|
|
56
|
+
* Check whether any funds are stuck in the adaptor for a given user.
|
|
57
|
+
*
|
|
58
|
+
* @remarks Convenience wrapper around `fetchAdaptorBalances` that returns `true`
|
|
59
|
+
* if any balance (underlying, zERC20, or native) is greater than zero.
|
|
60
|
+
*/
|
|
61
|
+
export declare function hasStuckFunds(params: {
|
|
62
|
+
provider: EvmReadProvider;
|
|
63
|
+
account: string;
|
|
64
|
+
adaptorAddress: string;
|
|
65
|
+
}): Promise<boolean>;
|
|
66
|
+
/**
|
|
67
|
+
* Withdraw stuck funds from an adaptor contract.
|
|
68
|
+
*
|
|
69
|
+
* @remarks
|
|
70
|
+
* Calls the adaptor's `withdraw(token, amount)` function. The token parameter
|
|
71
|
+
* should be one of:
|
|
72
|
+
* - The underlying token address (for funds that were unwrapped but failed to bridge)
|
|
73
|
+
* - The zERC20 token address (for funds that failed before unwrap)
|
|
74
|
+
* - The native token sentinel `0xEeee...` (for stuck native token)
|
|
75
|
+
*
|
|
76
|
+
* @throws If `amount` is not positive.
|
|
77
|
+
* @returns Transaction hash for the withdraw.
|
|
78
|
+
*/
|
|
79
|
+
export declare function withdrawFromAdaptor(params: AdaptorWithdrawParams): Promise<{
|
|
80
|
+
transactionHash: string;
|
|
81
|
+
}>;
|
|
82
|
+
//# sourceMappingURL=adaptorWithdraw.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"adaptorWithdraw.d.ts","sourceRoot":"","sources":["../../../src/operations/liquidityManager/adaptorWithdraw.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,KAAK,EAAE,eAAe,EAAE,gBAAgB,EAAO,MAAM,oBAAoB,CAAC;AACjF,OAAO,EAAE,KAAK,YAAY,EAAsB,MAAM,qBAAqB,CAAC;AAW5E;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,qDAAqD;IACrD,sBAAsB,EAAE,MAAM,CAAC;IAC/B,iDAAiD;IACjD,aAAa,EAAE,MAAM,CAAC;IACtB,iDAAiD;IACjD,aAAa,EAAE,MAAM,CAAC;IACtB,6DAA6D;IAC7D,sBAAsB,EAAE,KAAK,MAAM,EAAE,CAAC;IACtC,yDAAyD;IACzD,kBAAkB,EAAE,KAAK,MAAM,EAAE,CAAC;CACnC;AAED;;GAEG;AACH,MAAM,WAAW,qBAAqB;IACpC,2DAA2D;IAC3D,aAAa,EAAE,gBAAgB,CAAC;IAChC,kDAAkD;IAClD,YAAY,CAAC,EAAE,eAAe,CAAC;IAC/B,gCAAgC;IAChC,cAAc,EAAE,MAAM,CAAC;IACvB,0EAA0E;IAC1E,KAAK,EAAE,MAAM,CAAC;IACd,wCAAwC;IACxC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,CAAC;IACjC,wDAAwD;IACxD,YAAY,CAAC,EAAE,YAAY,CAAC;CAC7B;AAED;;;;;;;;;;;GAWG;AACH,wBAAsB,oBAAoB,CAAC,MAAM,EAAE;IACjD,QAAQ,EAAE,eAAe,CAAC;IAC1B,OAAO,EAAE,MAAM,CAAC;IAChB,cAAc,EAAE,MAAM,CAAC;CACxB,GAAG,OAAO,CAAC,eAAe,CAAC,CAiD3B;AAED;;;;;GAKG;AACH,wBAAsB,aAAa,CAAC,MAAM,EAAE;IAC1C,QAAQ,EAAE,eAAe,CAAC;IAC1B,OAAO,EAAE,MAAM,CAAC;IAChB,cAAc,EAAE,MAAM,CAAC;CACxB,GAAG,OAAO,CAAC,OAAO,CAAC,CAOnB;AAED;;;;;;;;;;;;GAYG;AACH,wBAAsB,mBAAmB,CACvC,MAAM,EAAE,qBAAqB,GAC5B,OAAO,CAAC;IAAE,eAAe,EAAE,MAAM,CAAA;CAAE,CAAC,CAyBtC"}
|
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Adaptor withdraw operations for rescuing stuck funds from failed cross-chain unwraps.
|
|
3
|
+
*/
|
|
4
|
+
import AdaptorArtifact from "../../assets/abi/Adaptor.json" with { type: "json" };
|
|
5
|
+
import { spreadFeeOverrides } from "../../utils/fees.js";
|
|
6
|
+
import { ensureAccount, ensureBigintLike, normalizeAddress, receiptProvider, } from "./helpers.js";
|
|
7
|
+
/**
|
|
8
|
+
* Fetch balances stuck in an adaptor contract for a given user.
|
|
9
|
+
*
|
|
10
|
+
* @remarks
|
|
11
|
+
* When a cross-chain unwrap fails (e.g. due to Stargate liquidity shortage),
|
|
12
|
+
* user funds remain in the adaptor contract. This function reads those balances
|
|
13
|
+
* so the UI can prompt the user to withdraw.
|
|
14
|
+
*
|
|
15
|
+
* @param params.provider - Provider to use for contract reads.
|
|
16
|
+
* @param params.account - User address to check balances for.
|
|
17
|
+
* @param params.adaptorAddress - Adaptor contract address.
|
|
18
|
+
*/
|
|
19
|
+
export async function fetchAdaptorBalances(params) {
|
|
20
|
+
const { provider, account, adaptorAddress } = params;
|
|
21
|
+
const normalizedAccount = normalizeAddress(account);
|
|
22
|
+
const normalizedAdaptor = normalizeAddress(adaptorAddress);
|
|
23
|
+
const [underlyingTokenBalance, zerc20Balance, nativeBalance, underlyingTokenAddress, zerc20TokenAddress,] = await Promise.all([
|
|
24
|
+
provider.readContract({
|
|
25
|
+
address: normalizedAdaptor,
|
|
26
|
+
abi: AdaptorArtifact.abi,
|
|
27
|
+
functionName: "underlyingTokenBalances",
|
|
28
|
+
args: [normalizedAccount],
|
|
29
|
+
}),
|
|
30
|
+
provider.readContract({
|
|
31
|
+
address: normalizedAdaptor,
|
|
32
|
+
abi: AdaptorArtifact.abi,
|
|
33
|
+
functionName: "zerc20Balances",
|
|
34
|
+
args: [normalizedAccount],
|
|
35
|
+
}),
|
|
36
|
+
provider.readContract({
|
|
37
|
+
address: normalizedAdaptor,
|
|
38
|
+
abi: AdaptorArtifact.abi,
|
|
39
|
+
functionName: "nativeBalances",
|
|
40
|
+
args: [normalizedAccount],
|
|
41
|
+
}),
|
|
42
|
+
provider.readContract({
|
|
43
|
+
address: normalizedAdaptor,
|
|
44
|
+
abi: AdaptorArtifact.abi,
|
|
45
|
+
functionName: "UNDERLYING_TOKEN",
|
|
46
|
+
}),
|
|
47
|
+
provider.readContract({
|
|
48
|
+
address: normalizedAdaptor,
|
|
49
|
+
abi: AdaptorArtifact.abi,
|
|
50
|
+
functionName: "ZERC20_TOKEN",
|
|
51
|
+
}),
|
|
52
|
+
]);
|
|
53
|
+
return {
|
|
54
|
+
underlyingTokenBalance: ensureBigintLike(underlyingTokenBalance, "underlyingTokenBalance"),
|
|
55
|
+
zerc20Balance: ensureBigintLike(zerc20Balance, "zerc20Balance"),
|
|
56
|
+
nativeBalance: ensureBigintLike(nativeBalance, "nativeBalance"),
|
|
57
|
+
underlyingTokenAddress: normalizeAddress(underlyingTokenAddress),
|
|
58
|
+
zerc20TokenAddress: normalizeAddress(zerc20TokenAddress),
|
|
59
|
+
};
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* Check whether any funds are stuck in the adaptor for a given user.
|
|
63
|
+
*
|
|
64
|
+
* @remarks Convenience wrapper around `fetchAdaptorBalances` that returns `true`
|
|
65
|
+
* if any balance (underlying, zERC20, or native) is greater than zero.
|
|
66
|
+
*/
|
|
67
|
+
export async function hasStuckFunds(params) {
|
|
68
|
+
const balances = await fetchAdaptorBalances(params);
|
|
69
|
+
return (balances.underlyingTokenBalance > 0n ||
|
|
70
|
+
balances.zerc20Balance > 0n ||
|
|
71
|
+
balances.nativeBalance > 0n);
|
|
72
|
+
}
|
|
73
|
+
/**
|
|
74
|
+
* Withdraw stuck funds from an adaptor contract.
|
|
75
|
+
*
|
|
76
|
+
* @remarks
|
|
77
|
+
* Calls the adaptor's `withdraw(token, amount)` function. The token parameter
|
|
78
|
+
* should be one of:
|
|
79
|
+
* - The underlying token address (for funds that were unwrapped but failed to bridge)
|
|
80
|
+
* - The zERC20 token address (for funds that failed before unwrap)
|
|
81
|
+
* - The native token sentinel `0xEeee...` (for stuck native token)
|
|
82
|
+
*
|
|
83
|
+
* @throws If `amount` is not positive.
|
|
84
|
+
* @returns Transaction hash for the withdraw.
|
|
85
|
+
*/
|
|
86
|
+
export async function withdrawFromAdaptor(params) {
|
|
87
|
+
const { writeProvider, readProvider, adaptorAddress, token, amount, feeOverrides } = params;
|
|
88
|
+
const normalizedAmount = ensureBigintLike(amount, "amount");
|
|
89
|
+
if (normalizedAmount <= 0n) {
|
|
90
|
+
throw new Error("amount must be greater than zero");
|
|
91
|
+
}
|
|
92
|
+
const account = ensureAccount(writeProvider);
|
|
93
|
+
const normalizedAdaptor = normalizeAddress(adaptorAddress);
|
|
94
|
+
const normalizedToken = normalizeAddress(token);
|
|
95
|
+
const receipt = receiptProvider(writeProvider, readProvider);
|
|
96
|
+
const txOverrides = { account, chain: writeProvider.chain, ...spreadFeeOverrides(feeOverrides) };
|
|
97
|
+
const withdrawHash = await writeProvider.writeContract({
|
|
98
|
+
address: normalizedAdaptor,
|
|
99
|
+
abi: AdaptorArtifact.abi,
|
|
100
|
+
functionName: "withdraw",
|
|
101
|
+
args: [normalizedToken, normalizedAmount],
|
|
102
|
+
...txOverrides,
|
|
103
|
+
});
|
|
104
|
+
const withdrawReceipt = await receipt.waitForTransactionReceipt({ hash: withdrawHash });
|
|
105
|
+
return { transactionHash: withdrawReceipt.transactionHash };
|
|
106
|
+
}
|
|
107
|
+
//# sourceMappingURL=adaptorWithdraw.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"adaptorWithdraw.js","sourceRoot":"","sources":["../../../src/operations/liquidityManager/adaptorWithdraw.ts"],"names":[],"mappings":"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"}
|
|
@@ -9,5 +9,7 @@ export type { LocalUnwrapParams } from "./unwrap.js";
|
|
|
9
9
|
export { quoteLocalUnwrap, unwrapWithLiquidityManager } from "./unwrap.js";
|
|
10
10
|
export type { CrossUnwrapQuoteParams, CrossUnwrapSendParams } from "./crossUnwrap.js";
|
|
11
11
|
export { applySlippage, buildCrossUnwrapQuote, sendCrossUnwrap } from "./crossUnwrap.js";
|
|
12
|
-
export {
|
|
12
|
+
export type { AdaptorBalances, AdaptorWithdrawParams } from "./adaptorWithdraw.js";
|
|
13
|
+
export { fetchAdaptorBalances, hasStuckFunds, withdrawFromAdaptor } from "./adaptorWithdraw.js";
|
|
14
|
+
export { NATIVE_TOKEN_ADDRESS, removeDust } from "./helpers.js";
|
|
13
15
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/operations/liquidityManager/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,YAAY,EACV,qBAAqB,EACrB,gBAAgB,EAChB,iBAAiB,EACjB,aAAa,EACb,SAAS,EACT,gBAAgB,GACjB,MAAM,YAAY,CAAC;AAGpB,OAAO,EAAE,6BAA6B,EAAE,MAAM,cAAc,CAAC;AAG7D,YAAY,EAAE,8BAA8B,EAAE,MAAM,WAAW,CAAC;AAChE,OAAO,EAAE,wBAAwB,EAAE,MAAM,WAAW,CAAC;AAGrD,YAAY,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AACrD,OAAO,EAAE,gBAAgB,EAAE,0BAA0B,EAAE,MAAM,aAAa,CAAC;AAG3E,YAAY,EAAE,sBAAsB,EAAE,qBAAqB,EAAE,MAAM,kBAAkB,CAAC;AACtF,OAAO,EAAE,aAAa,EAAE,qBAAqB,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAGzF,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/operations/liquidityManager/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,YAAY,EACV,qBAAqB,EACrB,gBAAgB,EAChB,iBAAiB,EACjB,aAAa,EACb,SAAS,EACT,gBAAgB,GACjB,MAAM,YAAY,CAAC;AAGpB,OAAO,EAAE,6BAA6B,EAAE,MAAM,cAAc,CAAC;AAG7D,YAAY,EAAE,8BAA8B,EAAE,MAAM,WAAW,CAAC;AAChE,OAAO,EAAE,wBAAwB,EAAE,MAAM,WAAW,CAAC;AAGrD,YAAY,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AACrD,OAAO,EAAE,gBAAgB,EAAE,0BAA0B,EAAE,MAAM,aAAa,CAAC;AAG3E,YAAY,EAAE,sBAAsB,EAAE,qBAAqB,EAAE,MAAM,kBAAkB,CAAC;AACtF,OAAO,EAAE,aAAa,EAAE,qBAAqB,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAGzF,YAAY,EAAE,eAAe,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AACnF,OAAO,EAAE,oBAAoB,EAAE,aAAa,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAGhG,OAAO,EAAE,oBAAoB,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC"}
|
|
@@ -6,6 +6,7 @@ export { fetchLiquidityManagerBalances } from "./balance.js";
|
|
|
6
6
|
export { wrapWithLiquidityManager } from "./wrap.js";
|
|
7
7
|
export { quoteLocalUnwrap, unwrapWithLiquidityManager } from "./unwrap.js";
|
|
8
8
|
export { applySlippage, buildCrossUnwrapQuote, sendCrossUnwrap } from "./crossUnwrap.js";
|
|
9
|
+
export { fetchAdaptorBalances, hasStuckFunds, withdrawFromAdaptor } from "./adaptorWithdraw.js";
|
|
9
10
|
// Helpers
|
|
10
|
-
export { removeDust } from "./helpers.js";
|
|
11
|
+
export { NATIVE_TOKEN_ADDRESS, removeDust } from "./helpers.js";
|
|
11
12
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/operations/liquidityManager/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAYH,qBAAqB;AACrB,OAAO,EAAE,6BAA6B,EAAE,MAAM,cAAc,CAAC;AAI7D,OAAO,EAAE,wBAAwB,EAAE,MAAM,WAAW,CAAC;AAIrD,OAAO,EAAE,gBAAgB,EAAE,0BAA0B,EAAE,MAAM,aAAa,CAAC;AAI3E,OAAO,EAAE,aAAa,EAAE,qBAAqB,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/operations/liquidityManager/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAYH,qBAAqB;AACrB,OAAO,EAAE,6BAA6B,EAAE,MAAM,cAAc,CAAC;AAI7D,OAAO,EAAE,wBAAwB,EAAE,MAAM,WAAW,CAAC;AAIrD,OAAO,EAAE,gBAAgB,EAAE,0BAA0B,EAAE,MAAM,aAAa,CAAC;AAI3E,OAAO,EAAE,aAAa,EAAE,qBAAqB,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAIzF,OAAO,EAAE,oBAAoB,EAAE,aAAa,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAEhG,UAAU;AACV,OAAO,EAAE,oBAAoB,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC"}
|
|
@@ -124,6 +124,39 @@ describe("AggregationStateCacheManager", () => {
|
|
|
124
124
|
});
|
|
125
125
|
expect(mockFetchAggregationTreeState).toHaveBeenCalledTimes(2);
|
|
126
126
|
});
|
|
127
|
+
test("uses different cache keys for different eventBlockSpan values", async () => {
|
|
128
|
+
const manager = new AggregationStateCacheManager();
|
|
129
|
+
await manager.fetchWithCache({
|
|
130
|
+
hub: mockHub,
|
|
131
|
+
token: mockToken,
|
|
132
|
+
eventBlockSpan: 1000n,
|
|
133
|
+
cacheTtlMs: 60000,
|
|
134
|
+
});
|
|
135
|
+
await manager.fetchWithCache({
|
|
136
|
+
hub: mockHub,
|
|
137
|
+
token: mockToken,
|
|
138
|
+
eventBlockSpan: 2000n,
|
|
139
|
+
cacheTtlMs: 60000,
|
|
140
|
+
});
|
|
141
|
+
expect(mockFetchAggregationTreeState).toHaveBeenCalledTimes(2);
|
|
142
|
+
expect(manager.size()).toBe(2);
|
|
143
|
+
});
|
|
144
|
+
test("uses different cache keys when eventBlockSpan is present vs absent", async () => {
|
|
145
|
+
const manager = new AggregationStateCacheManager();
|
|
146
|
+
await manager.fetchWithCache({
|
|
147
|
+
hub: mockHub,
|
|
148
|
+
token: mockToken,
|
|
149
|
+
cacheTtlMs: 60000,
|
|
150
|
+
});
|
|
151
|
+
await manager.fetchWithCache({
|
|
152
|
+
hub: mockHub,
|
|
153
|
+
token: mockToken,
|
|
154
|
+
eventBlockSpan: 1000n,
|
|
155
|
+
cacheTtlMs: 60000,
|
|
156
|
+
});
|
|
157
|
+
expect(mockFetchAggregationTreeState).toHaveBeenCalledTimes(2);
|
|
158
|
+
expect(manager.size()).toBe(2);
|
|
159
|
+
});
|
|
127
160
|
test("passes eventBlockSpan to fetchAggregationTreeState", async () => {
|
|
128
161
|
const manager = new AggregationStateCacheManager();
|
|
129
162
|
await manager.fetchWithCache({
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cache.test.js","sourceRoot":"","sources":["../../../../src/operations/receive/__tests__/cache.test.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"cache.test.js","sourceRoot":"","sources":["../../../../src/operations/receive/__tests__/cache.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -46,6 +46,6 @@ export declare class AggregationStateCacheManager {
|
|
|
46
46
|
/**
|
|
47
47
|
* Return true if the cache contains an entry for the given hub and chain.
|
|
48
48
|
*/
|
|
49
|
-
hasEntry(hubAddress: string, chainId: bigint): boolean;
|
|
49
|
+
hasEntry(hubAddress: string, chainId: bigint, eventBlockSpan?: bigint | number): boolean;
|
|
50
50
|
}
|
|
51
51
|
//# sourceMappingURL=cache.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cache.d.ts","sourceRoot":"","sources":["../../../src/operations/receive/cache.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AACrE,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAC;AAa3D,MAAM,WAAW,2BAA2B;IAC1C,8DAA8D;IAC9D,GAAG,EAAE,QAAQ,CAAC;IACd,6DAA6D;IAC7D,KAAK,EAAE,UAAU,CAAC;IAClB,0FAA0F;IAC1F,cAAc,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACjC;;;OAGG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;
|
|
1
|
+
{"version":3,"file":"cache.d.ts","sourceRoot":"","sources":["../../../src/operations/receive/cache.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AACrE,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAC;AAa3D,MAAM,WAAW,2BAA2B;IAC1C,8DAA8D;IAC9D,GAAG,EAAE,QAAQ,CAAC;IACd,6DAA6D;IAC7D,KAAK,EAAE,UAAU,CAAC;IAClB,0FAA0F;IAC1F,cAAc,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACjC;;;OAGG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAmBD;;GAEG;AACH,qBAAa,4BAA4B;IACvC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAA6C;IAEnE;;;OAGG;IACG,cAAc,CAAC,MAAM,EAAE,2BAA2B,GAAG,OAAO,CAAC,oBAAoB,CAAC;IAwBxF;;OAEG;IACH,KAAK,CAAC,GAAG,CAAC,EAAE,MAAM,GAAG,IAAI;IAQzB;;;OAGG;IACH,KAAK,IAAI,IAAI;IAIb;;OAEG;IACH,IAAI,IAAI,MAAM;IAId;;OAEG;IACH,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO;IAIzB;;OAEG;IACH,QAAQ,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,cAAc,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO;CAGzF"}
|
|
@@ -5,8 +5,9 @@ import { fetchAggregationTreeState } from "../../wasm/index.js";
|
|
|
5
5
|
// ============================================================================
|
|
6
6
|
// Internal Utilities
|
|
7
7
|
// ============================================================================
|
|
8
|
-
function getCacheKey(hubAddress, chainId) {
|
|
9
|
-
|
|
8
|
+
function getCacheKey(hubAddress, chainId, eventBlockSpan) {
|
|
9
|
+
const base = `${hubAddress.toLowerCase()}-${chainId}`;
|
|
10
|
+
return eventBlockSpan != null ? `${base}-${eventBlockSpan}` : base;
|
|
10
11
|
}
|
|
11
12
|
// ============================================================================
|
|
12
13
|
// AggregationStateCacheManager Class
|
|
@@ -22,7 +23,7 @@ export class AggregationStateCacheManager {
|
|
|
22
23
|
*/
|
|
23
24
|
async fetchWithCache(params) {
|
|
24
25
|
const cacheTtl = params.cacheTtlMs;
|
|
25
|
-
const cacheKey = getCacheKey(params.hub.hubAddress, params.token.chainId);
|
|
26
|
+
const cacheKey = getCacheKey(params.hub.hubAddress, params.token.chainId, params.eventBlockSpan);
|
|
26
27
|
const cached = this.cache.get(cacheKey);
|
|
27
28
|
const now = Date.now();
|
|
28
29
|
if (cacheTtl != null && cached && now - cached.timestamp < cacheTtl) {
|
|
@@ -68,8 +69,8 @@ export class AggregationStateCacheManager {
|
|
|
68
69
|
/**
|
|
69
70
|
* Return true if the cache contains an entry for the given hub and chain.
|
|
70
71
|
*/
|
|
71
|
-
hasEntry(hubAddress, chainId) {
|
|
72
|
-
return this.cache.has(getCacheKey(hubAddress, chainId));
|
|
72
|
+
hasEntry(hubAddress, chainId, eventBlockSpan) {
|
|
73
|
+
return this.cache.has(getCacheKey(hubAddress, chainId, eventBlockSpan));
|
|
73
74
|
}
|
|
74
75
|
}
|
|
75
76
|
//# sourceMappingURL=cache.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cache.js","sourceRoot":"","sources":["../../../src/operations/receive/cache.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,OAAO,EAAE,yBAAyB,EAAE,MAAM,qBAAqB,CAAC;AA0BhE,+EAA+E;AAC/E,qBAAqB;AACrB,+EAA+E;AAE/E,SAAS,WAAW,
|
|
1
|
+
{"version":3,"file":"cache.js","sourceRoot":"","sources":["../../../src/operations/receive/cache.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,OAAO,EAAE,yBAAyB,EAAE,MAAM,qBAAqB,CAAC;AA0BhE,+EAA+E;AAC/E,qBAAqB;AACrB,+EAA+E;AAE/E,SAAS,WAAW,CAClB,UAAkB,EAClB,OAAe,EACf,cAAgC;IAEhC,MAAM,IAAI,GAAG,GAAG,UAAU,CAAC,WAAW,EAAE,IAAI,OAAO,EAAE,CAAC;IACtD,OAAO,cAAc,IAAI,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,IAAI,cAAc,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;AACrE,CAAC;AAED,+EAA+E;AAC/E,qCAAqC;AACrC,+EAA+E;AAE/E;;GAEG;AACH,MAAM,OAAO,4BAA4B;IACtB,KAAK,GAAG,IAAI,GAAG,EAAkC,CAAC;IAEnE;;;OAGG;IACH,KAAK,CAAC,cAAc,CAAC,MAAmC;QACtD,MAAM,QAAQ,GAAG,MAAM,CAAC,UAAU,CAAC;QACnC,MAAM,QAAQ,GAAG,WAAW,CAC1B,MAAM,CAAC,GAAG,CAAC,UAAU,EACrB,MAAM,CAAC,KAAK,CAAC,OAAO,EACpB,MAAM,CAAC,cAAc,CACtB,CAAC;QACF,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QACxC,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAEvB,IAAI,QAAQ,IAAI,IAAI,IAAI,MAAM,IAAI,GAAG,GAAG,MAAM,CAAC,SAAS,GAAG,QAAQ,EAAE,CAAC;YACpE,OAAO,MAAM,CAAC,KAAK,CAAC;QACtB,CAAC;QAED,MAAM,KAAK,GAAG,MAAM,yBAAyB,CAAC,MAAM,CAAC,CAAC;QACtD,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,EAAE;YACvB,KAAK;YACL,SAAS,EAAE,GAAG;YACd,OAAO,EAAE,MAAM,CAAC,KAAK,CAAC,OAAO;SAC9B,CAAC,CAAC;QAEH,OAAO,KAAK,CAAC;IACf,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,GAAY;QAChB,IAAI,GAAG,EAAE,CAAC;YACR,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YACvB,OAAO;QACT,CAAC;QACD,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;IACrB,CAAC;IAED;;;OAGG;IACH,KAAK;QACH,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;IACrB,CAAC;IAED;;OAEG;IACH,IAAI;QACF,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC;IACzB,CAAC;IAED;;OAEG;IACH,GAAG,CAAC,GAAW;QACb,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IAC7B,CAAC;IAED;;OAEG;IACH,QAAQ,CAAC,UAAkB,EAAE,OAAe,EAAE,cAAgC;QAC5E,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,WAAW,CAAC,UAAU,EAAE,OAAO,EAAE,cAAc,CAAC,CAAC,CAAC;IAC1E,CAAC;CACF"}
|