@reserve-protocol/dtf-sdk 0.1.0 → 0.1.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/abi/distributor.d.ts +21 -0
- package/dist/abi/distributor.d.ts.map +1 -0
- package/dist/abi/facade-read.d.ts +140 -0
- package/dist/abi/facade-read.d.ts.map +1 -0
- package/dist/abi/main.d.ts +102 -0
- package/dist/abi/main.d.ts.map +1 -0
- package/dist/abi/st-rsr.d.ts +104 -0
- package/dist/abi/st-rsr.d.ts.map +1 -0
- package/dist/ccip-9vnc6854.js +14 -0
- package/dist/ccip-tn8s4j8m.js +14 -0
- package/dist/constants.d.ts +2 -0
- package/dist/constants.d.ts.map +1 -1
- package/dist/index-aarnj29d.js +2889 -0
- package/dist/index-azrx1hqn.js +6105 -0
- package/dist/index-qp8fkhx7.js +2109 -0
- package/dist/index-sdksp5px.js +30 -0
- package/dist/index-tdmavmz7.js +6097 -0
- package/dist/index-wjqsw4fc.js +357 -0
- package/dist/index.d.ts +14 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +18227 -73
- package/dist/secp256k1-53bx94th.js +16 -0
- package/dist/types.d.ts +51 -0
- package/dist/types.d.ts.map +1 -1
- package/dist/utils/query-subgraph.d.ts +2 -1
- package/dist/utils/query-subgraph.d.ts.map +1 -1
- package/dist/yield-dtf/detect-dtf-type.d.ts +13 -0
- package/dist/yield-dtf/detect-dtf-type.d.ts.map +1 -0
- package/dist/yield-dtf/issue.d.ts +22 -0
- package/dist/yield-dtf/issue.d.ts.map +1 -0
- package/dist/yield-dtf/read-backing.d.ts +15 -0
- package/dist/yield-dtf/read-backing.d.ts.map +1 -0
- package/dist/yield-dtf/read-basket.d.ts +10 -0
- package/dist/yield-dtf/read-basket.d.ts.map +1 -0
- package/dist/yield-dtf/read-components.d.ts +8 -0
- package/dist/yield-dtf/read-components.d.ts.map +1 -0
- package/dist/yield-dtf/read-config.d.ts +8 -0
- package/dist/yield-dtf/read-config.d.ts.map +1 -0
- package/dist/yield-dtf/read-distribution.d.ts +8 -0
- package/dist/yield-dtf/read-distribution.d.ts.map +1 -0
- package/dist/yield-dtf/read-st-rsr.d.ts +7 -0
- package/dist/yield-dtf/read-st-rsr.d.ts.map +1 -0
- package/package.json +5 -3
- package/dist/abi/deployer.js +0 -178
- package/dist/abi/deployer.js.map +0 -1
- package/dist/abi/erc20.js +0 -58
- package/dist/abi/erc20.js.map +0 -1
- package/dist/abi/folio.js +0 -1430
- package/dist/abi/folio.js.map +0 -1
- package/dist/abi/governance-deployer.js +0 -77
- package/dist/abi/governance-deployer.js.map +0 -1
- package/dist/abi/governor.js +0 -1661
- package/dist/abi/governor.js.map +0 -1
- package/dist/abi/proxy-admin.js +0 -42
- package/dist/abi/proxy-admin.js.map +0 -1
- package/dist/abi/spells.js +0 -61
- package/dist/abi/spells.js.map +0 -1
- package/dist/abi/timelock.js +0 -469
- package/dist/abi/timelock.js.map +0 -1
- package/dist/abi/vote-lock.js +0 -116
- package/dist/abi/vote-lock.js.map +0 -1
- package/dist/clients/chains.js +0 -23
- package/dist/clients/chains.js.map +0 -1
- package/dist/clients/create-clients.js +0 -32
- package/dist/clients/create-clients.js.map +0 -1
- package/dist/clients/create-price-client.js +0 -15
- package/dist/clients/create-price-client.js.map +0 -1
- package/dist/constants.js +0 -100
- package/dist/constants.js.map +0 -1
- package/dist/deploy/build-deploy.js +0 -84
- package/dist/deploy/build-deploy.js.map +0 -1
- package/dist/deploy/extract-deployed-address.js +0 -36
- package/dist/deploy/extract-deployed-address.js.map +0 -1
- package/dist/deploy/permissionless-defaults.js +0 -76
- package/dist/deploy/permissionless-defaults.js.map +0 -1
- package/dist/deploy/token-registry.js +0 -68
- package/dist/deploy/token-registry.js.map +0 -1
- package/dist/deploy/zap-deploy.js +0 -50
- package/dist/deploy/zap-deploy.js.map +0 -1
- package/dist/dtf/fees.js +0 -103
- package/dist/dtf/fees.js.map +0 -1
- package/dist/dtf/fetch-analytics.js +0 -63
- package/dist/dtf/fetch-analytics.js.map +0 -1
- package/dist/dtf/fetch-basket.js +0 -32
- package/dist/dtf/fetch-basket.js.map +0 -1
- package/dist/dtf/fetch-discover.js +0 -17
- package/dist/dtf/fetch-discover.js.map +0 -1
- package/dist/dtf/fetch-dtf.js +0 -39
- package/dist/dtf/fetch-dtf.js.map +0 -1
- package/dist/dtf/mint.js +0 -82
- package/dist/dtf/mint.js.map +0 -1
- package/dist/dtf/read-basket.js +0 -20
- package/dist/dtf/read-basket.js.map +0 -1
- package/dist/dtf/read-config.js +0 -80
- package/dist/dtf/read-config.js.map +0 -1
- package/dist/dtf/read-dtf.js +0 -32
- package/dist/dtf/read-dtf.js.map +0 -1
- package/dist/dtf/read-rebalance-control.js +0 -14
- package/dist/dtf/read-rebalance-control.js.map +0 -1
- package/dist/dtf/read-roles.js +0 -29
- package/dist/dtf/read-roles.js.map +0 -1
- package/dist/dtf/read-version.js +0 -9
- package/dist/dtf/read-version.js.map +0 -1
- package/dist/dtf/redeem.js +0 -27
- package/dist/dtf/redeem.js.map +0 -1
- package/dist/governance/build-proposal.js +0 -78
- package/dist/governance/build-proposal.js.map +0 -1
- package/dist/governance/build-settings-calldata.js +0 -145
- package/dist/governance/build-settings-calldata.js.map +0 -1
- package/dist/governance/compute-proposal-state.js +0 -87
- package/dist/governance/compute-proposal-state.js.map +0 -1
- package/dist/governance/decode-proposal.js +0 -164
- package/dist/governance/decode-proposal.js.map +0 -1
- package/dist/governance/fetch-proposals.js +0 -173
- package/dist/governance/fetch-proposals.js.map +0 -1
- package/dist/governance/read-governance.js +0 -97
- package/dist/governance/read-governance.js.map +0 -1
- package/dist/governance/read-proposals.js +0 -104
- package/dist/governance/read-proposals.js.map +0 -1
- package/dist/governance/read-voting-power.js +0 -25
- package/dist/governance/read-voting-power.js.map +0 -1
- package/dist/index.js.map +0 -1
- package/dist/prices/chainlink.js +0 -116
- package/dist/prices/chainlink.js.map +0 -1
- package/dist/prices/reserve-api.js +0 -47
- package/dist/prices/reserve-api.js.map +0 -1
- package/dist/rebalance/build-auction.js +0 -73
- package/dist/rebalance/build-auction.js.map +0 -1
- package/dist/rebalance/build-rebalance.js +0 -30
- package/dist/rebalance/build-rebalance.js.map +0 -1
- package/dist/rebalance/read-auction.js +0 -31
- package/dist/rebalance/read-auction.js.map +0 -1
- package/dist/rebalance/read-rebalance.js +0 -50
- package/dist/rebalance/read-rebalance.js.map +0 -1
- package/dist/rebalance/transform.js +0 -47
- package/dist/rebalance/transform.js.map +0 -1
- package/dist/revenue/compute-revenue.js +0 -216
- package/dist/revenue/compute-revenue.js.map +0 -1
- package/dist/revenue/fetch-revenue.js +0 -182
- package/dist/revenue/fetch-revenue.js.map +0 -1
- package/dist/revenue/fetch-rsr-burns.js +0 -106
- package/dist/revenue/fetch-rsr-burns.js.map +0 -1
- package/dist/types.js +0 -2
- package/dist/types.js.map +0 -1
- package/dist/utils/assert.js +0 -5
- package/dist/utils/assert.js.map +0 -1
- package/dist/utils/fetch-token-metadata.js +0 -29
- package/dist/utils/fetch-token-metadata.js.map +0 -1
- package/dist/utils/fetch-with-retry.js +0 -38
- package/dist/utils/fetch-with-retry.js.map +0 -1
- package/dist/utils/query-subgraph.js +0 -25
- package/dist/utils/query-subgraph.js.map +0 -1
- package/dist/utils/validate-price-control.js +0 -6
- package/dist/utils/validate-price-control.js.map +0 -1
- package/dist/vote-lock/build-vote-lock.js +0 -73
- package/dist/vote-lock/build-vote-lock.js.map +0 -1
- package/dist/vote-lock/read-vote-lock.js +0 -64
- package/dist/vote-lock/read-vote-lock.js.map +0 -1
|
@@ -1,50 +0,0 @@
|
|
|
1
|
-
import { RESERVE_API_BASE_URL } from '../constants';
|
|
2
|
-
import { fetchWithRetry } from '../utils/fetch-with-retry';
|
|
3
|
-
export async function submitZapDeploy(params, baseUrl = RESERVE_API_BASE_URL) {
|
|
4
|
-
// WHY: Governed vs ungoverned endpoint is determined by stToken presence.
|
|
5
|
-
// If stToken is set, we're deploying a governed DTF with DAO governance.
|
|
6
|
-
const endpoint = params.stToken
|
|
7
|
-
? `${baseUrl}/zapper/${params.chainId}/deploy`
|
|
8
|
-
: `${baseUrl}/zapper/${params.chainId}/deploy-ungoverned`;
|
|
9
|
-
const body = {
|
|
10
|
-
tokenIn: params.tokenIn,
|
|
11
|
-
amountIn: params.amountIn,
|
|
12
|
-
signer: params.signer,
|
|
13
|
-
slippage: params.slippage ?? DEFAULT_DEPLOY_SLIPPAGE,
|
|
14
|
-
basicDetails: params.basicDetails,
|
|
15
|
-
additionalDetails: params.additionalDetails,
|
|
16
|
-
folioFlags: params.folioFlags,
|
|
17
|
-
};
|
|
18
|
-
if (params.stToken) {
|
|
19
|
-
body.stToken = params.stToken;
|
|
20
|
-
}
|
|
21
|
-
if (params.ownerGovParams) {
|
|
22
|
-
body.ownerGovParams = params.ownerGovParams;
|
|
23
|
-
}
|
|
24
|
-
if (params.tradingGovParams) {
|
|
25
|
-
body.tradingGovParams = params.tradingGovParams;
|
|
26
|
-
}
|
|
27
|
-
if (params.basketManagers) {
|
|
28
|
-
body.basketManagers = params.basketManagers;
|
|
29
|
-
}
|
|
30
|
-
if (params.auctionLaunchers) {
|
|
31
|
-
body.auctionLaunchers = params.auctionLaunchers;
|
|
32
|
-
}
|
|
33
|
-
if (params.brandManagers) {
|
|
34
|
-
body.brandManagers = params.brandManagers;
|
|
35
|
-
}
|
|
36
|
-
// WHY: POST is not idempotent — retrying could produce stale quotes or confusing errors.
|
|
37
|
-
// Use retries: 0 for deploy, unlike read-only endpoints.
|
|
38
|
-
const response = await fetchWithRetry(endpoint, {
|
|
39
|
-
method: 'POST',
|
|
40
|
-
headers: { 'Content-Type': 'application/json' },
|
|
41
|
-
body: JSON.stringify(body),
|
|
42
|
-
}, { retries: 0 });
|
|
43
|
-
if (!response.ok) {
|
|
44
|
-
const text = await response.text().catch(() => 'unknown error');
|
|
45
|
-
throw new Error(`Zapper deploy API failed (chain ${params.chainId}): ${response.status} — ${text}`);
|
|
46
|
-
}
|
|
47
|
-
return (await response.json());
|
|
48
|
-
}
|
|
49
|
-
export const DEFAULT_DEPLOY_SLIPPAGE = 0.001;
|
|
50
|
-
//# sourceMappingURL=zap-deploy.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"zap-deploy.js","sourceRoot":"","sources":["../../src/deploy/zap-deploy.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAA;AACnD,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAA;AAG1D,MAAM,CAAC,KAAK,UAAU,eAAe,CACnC,MAAuB,EACvB,UAAkB,oBAAoB;IAEtC,0EAA0E;IAC1E,yEAAyE;IACzE,MAAM,QAAQ,GAAG,MAAM,CAAC,OAAO;QAC7B,CAAC,CAAC,GAAG,OAAO,WAAW,MAAM,CAAC,OAAO,SAAS;QAC9C,CAAC,CAAC,GAAG,OAAO,WAAW,MAAM,CAAC,OAAO,oBAAoB,CAAA;IAE3D,MAAM,IAAI,GAA4B;QACpC,OAAO,EAAE,MAAM,CAAC,OAAO;QACvB,QAAQ,EAAE,MAAM,CAAC,QAAQ;QACzB,MAAM,EAAE,MAAM,CAAC,MAAM;QACrB,QAAQ,EAAE,MAAM,CAAC,QAAQ,IAAI,uBAAuB;QACpD,YAAY,EAAE,MAAM,CAAC,YAAY;QACjC,iBAAiB,EAAE,MAAM,CAAC,iBAAiB;QAC3C,UAAU,EAAE,MAAM,CAAC,UAAU;KAC9B,CAAA;IAED,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;QACnB,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC,OAAO,CAAA;IAC/B,CAAC;IACD,IAAI,MAAM,CAAC,cAAc,EAAE,CAAC;QAC1B,IAAI,CAAC,cAAc,GAAG,MAAM,CAAC,cAAc,CAAA;IAC7C,CAAC;IACD,IAAI,MAAM,CAAC,gBAAgB,EAAE,CAAC;QAC5B,IAAI,CAAC,gBAAgB,GAAG,MAAM,CAAC,gBAAgB,CAAA;IACjD,CAAC;IACD,IAAI,MAAM,CAAC,cAAc,EAAE,CAAC;QAC1B,IAAI,CAAC,cAAc,GAAG,MAAM,CAAC,cAAc,CAAA;IAC7C,CAAC;IACD,IAAI,MAAM,CAAC,gBAAgB,EAAE,CAAC;QAC5B,IAAI,CAAC,gBAAgB,GAAG,MAAM,CAAC,gBAAgB,CAAA;IACjD,CAAC;IACD,IAAI,MAAM,CAAC,aAAa,EAAE,CAAC;QACzB,IAAI,CAAC,aAAa,GAAG,MAAM,CAAC,aAAa,CAAA;IAC3C,CAAC;IAED,yFAAyF;IACzF,yDAAyD;IACzD,MAAM,QAAQ,GAAG,MAAM,cAAc,CACnC,QAAQ,EACR;QACE,MAAM,EAAE,MAAM;QACd,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE;QAC/C,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;KAC3B,EACD,EAAE,OAAO,EAAE,CAAC,EAAE,CACf,CAAA;IAED,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;QACjB,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,eAAe,CAAC,CAAA;QAC/D,MAAM,IAAI,KAAK,CACb,mCAAmC,MAAM,CAAC,OAAO,MAAM,QAAQ,CAAC,MAAM,MAAM,IAAI,EAAE,CACnF,CAAA;IACH,CAAC;IAED,OAAO,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAoB,CAAA;AACnD,CAAC;AAED,MAAM,CAAC,MAAM,uBAAuB,GAAG,KAAK,CAAA"}
|
package/dist/dtf/fees.js
DELETED
|
@@ -1,103 +0,0 @@
|
|
|
1
|
-
import { encodeFunctionData } from 'viem';
|
|
2
|
-
import folioAbi from '../abi/folio';
|
|
3
|
-
export async function readPendingFees(publicClient, folioAddress) {
|
|
4
|
-
const results = await publicClient.multicall({
|
|
5
|
-
contracts: [
|
|
6
|
-
{
|
|
7
|
-
address: folioAddress,
|
|
8
|
-
abi: folioAbi,
|
|
9
|
-
functionName: 'getPendingFeeShares',
|
|
10
|
-
},
|
|
11
|
-
{
|
|
12
|
-
address: folioAddress,
|
|
13
|
-
abi: folioAbi,
|
|
14
|
-
functionName: 'feeRecipientsPendingFeeShares',
|
|
15
|
-
},
|
|
16
|
-
{
|
|
17
|
-
address: folioAddress,
|
|
18
|
-
abi: folioAbi,
|
|
19
|
-
functionName: 'daoPendingFeeShares',
|
|
20
|
-
},
|
|
21
|
-
],
|
|
22
|
-
});
|
|
23
|
-
// WHY: Pending fees are display-only (advisory). Defaulting to 0n on failure is safe —
|
|
24
|
-
// it means "show no pending fees" rather than silently corrupting a transaction.
|
|
25
|
-
const total = results[0].status === 'success' ? results[0].result : 0n;
|
|
26
|
-
const folio = results[1].status === 'success' ? results[1].result : 0n;
|
|
27
|
-
const dao = results[2].status === 'success' ? results[2].result : 0n;
|
|
28
|
-
return { total, folio, dao };
|
|
29
|
-
}
|
|
30
|
-
export async function readFeeRecipients(publicClient, folioAddress) {
|
|
31
|
-
// WHY: feeRecipients(uint256) is indexed — no length getter. We try 0..9 and stop at the first
|
|
32
|
-
// revert. 10 is generous; real DTFs rarely have more than 3.
|
|
33
|
-
const indices = Array.from({ length: 10 }, (_, i) => i);
|
|
34
|
-
const results = await publicClient.multicall({
|
|
35
|
-
contracts: indices.map((i) => ({
|
|
36
|
-
address: folioAddress,
|
|
37
|
-
abi: folioAbi,
|
|
38
|
-
functionName: 'feeRecipients',
|
|
39
|
-
args: [BigInt(i)],
|
|
40
|
-
})),
|
|
41
|
-
});
|
|
42
|
-
const recipients = [];
|
|
43
|
-
for (const r of results) {
|
|
44
|
-
if (r.status !== 'success')
|
|
45
|
-
break;
|
|
46
|
-
const [recipient, portion] = r.result;
|
|
47
|
-
recipients.push({ recipient, portion });
|
|
48
|
-
}
|
|
49
|
-
return recipients;
|
|
50
|
-
}
|
|
51
|
-
// WHY: Subgraph stores fee recipients as "addr:portion,addr:portion" strings.
|
|
52
|
-
// This parser bridges subgraph responses → typed FeeRecipient[].
|
|
53
|
-
export function parseFeeRecipients(str) {
|
|
54
|
-
if (!str || str.trim() === '')
|
|
55
|
-
return [];
|
|
56
|
-
return str.split(',').map((entry) => {
|
|
57
|
-
const [recipient, portionStr] = entry.trim().split(':');
|
|
58
|
-
return {
|
|
59
|
-
recipient: recipient,
|
|
60
|
-
portion: BigInt(portionStr ?? '0'),
|
|
61
|
-
};
|
|
62
|
-
});
|
|
63
|
-
}
|
|
64
|
-
export function buildDistributeFeesCalldata(folioAddress) {
|
|
65
|
-
return {
|
|
66
|
-
to: folioAddress,
|
|
67
|
-
data: encodeFunctionData({
|
|
68
|
-
abi: folioAbi,
|
|
69
|
-
functionName: 'distributeFees',
|
|
70
|
-
}),
|
|
71
|
-
};
|
|
72
|
-
}
|
|
73
|
-
export function buildSetMintFeeCalldata(folioAddress, fee) {
|
|
74
|
-
return {
|
|
75
|
-
to: folioAddress,
|
|
76
|
-
data: encodeFunctionData({
|
|
77
|
-
abi: folioAbi,
|
|
78
|
-
functionName: 'setMintFee',
|
|
79
|
-
args: [fee],
|
|
80
|
-
}),
|
|
81
|
-
};
|
|
82
|
-
}
|
|
83
|
-
export function buildSetTvlFeeCalldata(folioAddress, fee) {
|
|
84
|
-
return {
|
|
85
|
-
to: folioAddress,
|
|
86
|
-
data: encodeFunctionData({
|
|
87
|
-
abi: folioAbi,
|
|
88
|
-
functionName: 'setTVLFee',
|
|
89
|
-
args: [fee],
|
|
90
|
-
}),
|
|
91
|
-
};
|
|
92
|
-
}
|
|
93
|
-
export function buildSetFeeRecipientsCalldata(folioAddress, recipients) {
|
|
94
|
-
return {
|
|
95
|
-
to: folioAddress,
|
|
96
|
-
data: encodeFunctionData({
|
|
97
|
-
abi: folioAbi,
|
|
98
|
-
functionName: 'setFeeRecipients',
|
|
99
|
-
args: [recipients],
|
|
100
|
-
}),
|
|
101
|
-
};
|
|
102
|
-
}
|
|
103
|
-
//# sourceMappingURL=fees.js.map
|
package/dist/dtf/fees.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"fees.js","sourceRoot":"","sources":["../../src/dtf/fees.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,63 +0,0 @@
|
|
|
1
|
-
import { RESERVE_API_BASE_URL } from '../constants';
|
|
2
|
-
import { fetchWithRetry } from '../utils/fetch-with-retry';
|
|
3
|
-
export async function fetchRebalanceHistory(chainId, folioAddress, opts, baseUrl = RESERVE_API_BASE_URL) {
|
|
4
|
-
const skip = opts?.skip ?? 0;
|
|
5
|
-
const limit = opts?.limit ?? 50;
|
|
6
|
-
const url = `${baseUrl}/dtf/rebalance?address=${folioAddress.toLowerCase()}&chainId=${chainId}&skip=${skip}&limit=${limit}`;
|
|
7
|
-
const response = await fetchWithRetry(url);
|
|
8
|
-
if (!response.ok) {
|
|
9
|
-
throw new Error(`Reserve API /dtf/rebalance failed: ${response.status} ${response.statusText}`);
|
|
10
|
-
}
|
|
11
|
-
return (await response.json());
|
|
12
|
-
}
|
|
13
|
-
export async function fetchRebalanceDetail(chainId, folioAddress, nonce, baseUrl = RESERVE_API_BASE_URL) {
|
|
14
|
-
const url = `${baseUrl}/dtf/rebalance?address=${folioAddress.toLowerCase()}&chainId=${chainId}&nonce=${nonce}`;
|
|
15
|
-
const response = await fetchWithRetry(url);
|
|
16
|
-
if (!response.ok) {
|
|
17
|
-
throw new Error(`Reserve API /dtf/rebalance detail failed: ${response.status} ${response.statusText}`);
|
|
18
|
-
}
|
|
19
|
-
return (await response.json());
|
|
20
|
-
}
|
|
21
|
-
/**
|
|
22
|
-
* Fetch historical DTF data (price, totalSupply, basket over time).
|
|
23
|
-
* WHY: API requires `from` + `to` unix timestamps + `interval`, not `days`.
|
|
24
|
-
* Register uses this pattern in use-dtf-price-history.ts.
|
|
25
|
-
*/
|
|
26
|
-
export async function fetchHistoricalDtf(chainId, folioAddress, opts, baseUrl = RESERVE_API_BASE_URL) {
|
|
27
|
-
const now = Math.floor(Date.now() / 1000);
|
|
28
|
-
const to = opts?.to ?? now;
|
|
29
|
-
const from = opts?.from ?? to - 30 * 86400; // default: 30 days back
|
|
30
|
-
const interval = opts?.interval ?? '1h';
|
|
31
|
-
const url = `${baseUrl}/historical/dtf?address=${folioAddress.toLowerCase()}&chainId=${chainId}&from=${from}&to=${to}&interval=${interval}`;
|
|
32
|
-
const response = await fetchWithRetry(url);
|
|
33
|
-
if (!response.ok) {
|
|
34
|
-
throw new Error(`Reserve API /historical/dtf failed: ${response.status} ${response.statusText}`);
|
|
35
|
-
}
|
|
36
|
-
// WHY: API wraps timeseries in { address, timeseries: [...] }
|
|
37
|
-
const data = await response.json();
|
|
38
|
-
// Handle both wrapped and unwrapped response shapes
|
|
39
|
-
if (Array.isArray(data))
|
|
40
|
-
return data;
|
|
41
|
-
return data.timeseries ?? [];
|
|
42
|
-
}
|
|
43
|
-
/**
|
|
44
|
-
* Fetch historical token prices over time.
|
|
45
|
-
* WHY: API requires `from` + `to` unix timestamps + `interval`, not `days`.
|
|
46
|
-
* Register uses this in use-dtf-price-history.ts.
|
|
47
|
-
*/
|
|
48
|
-
export async function fetchHistoricalPrices(chainId, tokenAddress, opts, baseUrl = RESERVE_API_BASE_URL) {
|
|
49
|
-
const now = Math.floor(Date.now() / 1000);
|
|
50
|
-
const to = opts?.to ?? now;
|
|
51
|
-
const from = opts?.from ?? to - 30 * 86400;
|
|
52
|
-
const interval = opts?.interval ?? '1h';
|
|
53
|
-
const url = `${baseUrl}/historical/prices?address=${tokenAddress.toLowerCase()}&chainId=${chainId}&from=${from}&to=${to}&interval=${interval}`;
|
|
54
|
-
const response = await fetchWithRetry(url);
|
|
55
|
-
if (!response.ok) {
|
|
56
|
-
throw new Error(`Reserve API /historical/prices failed: ${response.status} ${response.statusText}`);
|
|
57
|
-
}
|
|
58
|
-
const data = await response.json();
|
|
59
|
-
if (Array.isArray(data))
|
|
60
|
-
return data;
|
|
61
|
-
return data.timeseries ?? [];
|
|
62
|
-
}
|
|
63
|
-
//# sourceMappingURL=fetch-analytics.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"fetch-analytics.js","sourceRoot":"","sources":["../../src/dtf/fetch-analytics.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAA;AACnD,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAA;AAQ1D,MAAM,CAAC,KAAK,UAAU,qBAAqB,CACzC,OAAe,EACf,YAAoB,EACpB,IAAwC,EACxC,UAAkB,oBAAoB;IAEtC,MAAM,IAAI,GAAG,IAAI,EAAE,IAAI,IAAI,CAAC,CAAA;IAC5B,MAAM,KAAK,GAAG,IAAI,EAAE,KAAK,IAAI,EAAE,CAAA;IAC/B,MAAM,GAAG,GAAG,GAAG,OAAO,0BAA0B,YAAY,CAAC,WAAW,EAAE,YAAY,OAAO,SAAS,IAAI,UAAU,KAAK,EAAE,CAAA;IAE3H,MAAM,QAAQ,GAAG,MAAM,cAAc,CAAC,GAAG,CAAC,CAAA;IAC1C,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;QACjB,MAAM,IAAI,KAAK,CACb,sCAAsC,QAAQ,CAAC,MAAM,IAAI,QAAQ,CAAC,UAAU,EAAE,CAC/E,CAAA;IACH,CAAC;IAED,OAAO,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,CAA2B,CAAA;AAC1D,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,oBAAoB,CACxC,OAAe,EACf,YAAoB,EACpB,KAAa,EACb,UAAkB,oBAAoB;IAEtC,MAAM,GAAG,GAAG,GAAG,OAAO,0BAA0B,YAAY,CAAC,WAAW,EAAE,YAAY,OAAO,UAAU,KAAK,EAAE,CAAA;IAE9G,MAAM,QAAQ,GAAG,MAAM,cAAc,CAAC,GAAG,CAAC,CAAA;IAC1C,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;QACjB,MAAM,IAAI,KAAK,CACb,6CAA6C,QAAQ,CAAC,MAAM,IAAI,QAAQ,CAAC,UAAU,EAAE,CACtF,CAAA;IACH,CAAC;IAED,OAAO,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAoB,CAAA;AACnD,CAAC;AAED;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,kBAAkB,CACtC,OAAe,EACf,YAAoB,EACpB,IAA6D,EAC7D,UAAkB,oBAAoB;IAEtC,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,CAAA;IACzC,MAAM,EAAE,GAAG,IAAI,EAAE,EAAE,IAAI,GAAG,CAAA;IAC1B,MAAM,IAAI,GAAG,IAAI,EAAE,IAAI,IAAI,EAAE,GAAG,EAAE,GAAG,KAAK,CAAA,CAAC,wBAAwB;IACnE,MAAM,QAAQ,GAAG,IAAI,EAAE,QAAQ,IAAI,IAAI,CAAA;IAEvC,MAAM,GAAG,GAAG,GAAG,OAAO,2BAA2B,YAAY,CAAC,WAAW,EAAE,YAAY,OAAO,SAAS,IAAI,OAAO,EAAE,aAAa,QAAQ,EAAE,CAAA;IAE3I,MAAM,QAAQ,GAAG,MAAM,cAAc,CAAC,GAAG,CAAC,CAAA;IAC1C,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;QACjB,MAAM,IAAI,KAAK,CACb,uCAAuC,QAAQ,CAAC,MAAM,IAAI,QAAQ,CAAC,UAAU,EAAE,CAChF,CAAA;IACH,CAAC;IAED,8DAA8D;IAC9D,MAAM,IAAI,GACR,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAA;IAEvB,oDAAoD;IACpD,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC;QAAE,OAAO,IAAI,CAAA;IACpC,OAAO,IAAI,CAAC,UAAU,IAAI,EAAE,CAAA;AAC9B,CAAC;AAED;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,qBAAqB,CACzC,OAAe,EACf,YAAoB,EACpB,IAA6D,EAC7D,UAAkB,oBAAoB;IAEtC,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,CAAA;IACzC,MAAM,EAAE,GAAG,IAAI,EAAE,EAAE,IAAI,GAAG,CAAA;IAC1B,MAAM,IAAI,GAAG,IAAI,EAAE,IAAI,IAAI,EAAE,GAAG,EAAE,GAAG,KAAK,CAAA;IAC1C,MAAM,QAAQ,GAAG,IAAI,EAAE,QAAQ,IAAI,IAAI,CAAA;IAEvC,MAAM,GAAG,GAAG,GAAG,OAAO,8BAA8B,YAAY,CAAC,WAAW,EAAE,YAAY,OAAO,SAAS,IAAI,OAAO,EAAE,aAAa,QAAQ,EAAE,CAAA;IAE9I,MAAM,QAAQ,GAAG,MAAM,cAAc,CAAC,GAAG,CAAC,CAAA;IAC1C,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;QACjB,MAAM,IAAI,KAAK,CACb,0CAA0C,QAAQ,CAAC,MAAM,IAAI,QAAQ,CAAC,UAAU,EAAE,CACnF,CAAA;IACH,CAAC;IAED,MAAM,IAAI,GACR,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAA;IAEvB,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC;QAAE,OAAO,IAAI,CAAA;IACpC,OAAO,IAAI,CAAC,UAAU,IAAI,EAAE,CAAA;AAC9B,CAAC"}
|
package/dist/dtf/fetch-basket.js
DELETED
|
@@ -1,32 +0,0 @@
|
|
|
1
|
-
import { RESERVE_API_BASE_URL } from '../constants';
|
|
2
|
-
import { fetchWithRetry } from '../utils/fetch-with-retry';
|
|
3
|
-
/**
|
|
4
|
-
* Fetch DTF basket composition with consensus prices, weights, and DTF price.
|
|
5
|
-
* Uses the Reserve API `/current/dtf` endpoint — one call instead of RPC + price API.
|
|
6
|
-
*
|
|
7
|
-
* For raw bigint balances (needed by dtf-rebalance-lib), use `readBasket()` instead.
|
|
8
|
-
*/
|
|
9
|
-
export async function fetchDtfBasket(chainId, folioAddress, baseUrl = RESERVE_API_BASE_URL) {
|
|
10
|
-
const url = `${baseUrl}/current/dtf?address=${folioAddress.toLowerCase()}&chainId=${chainId}`;
|
|
11
|
-
const response = await fetchWithRetry(url);
|
|
12
|
-
if (!response.ok) {
|
|
13
|
-
throw new Error(`Reserve API /current/dtf failed: ${response.status} ${response.statusText}`);
|
|
14
|
-
}
|
|
15
|
-
return (await response.json());
|
|
16
|
-
}
|
|
17
|
-
/**
|
|
18
|
-
* Batch fetch multiple DTF baskets in one call.
|
|
19
|
-
* Uses the Reserve API `/current/dtfs` endpoint.
|
|
20
|
-
*/
|
|
21
|
-
export async function fetchDtfBaskets(chainId, folioAddresses, baseUrl = RESERVE_API_BASE_URL) {
|
|
22
|
-
const addresses = folioAddresses
|
|
23
|
-
.map((a) => a.toLowerCase())
|
|
24
|
-
.join(',');
|
|
25
|
-
const url = `${baseUrl}/current/dtfs?addresses=${addresses}&chainId=${chainId}`;
|
|
26
|
-
const response = await fetchWithRetry(url);
|
|
27
|
-
if (!response.ok) {
|
|
28
|
-
throw new Error(`Reserve API /current/dtfs failed: ${response.status} ${response.statusText}`);
|
|
29
|
-
}
|
|
30
|
-
return (await response.json());
|
|
31
|
-
}
|
|
32
|
-
//# sourceMappingURL=fetch-basket.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"fetch-basket.js","sourceRoot":"","sources":["../../src/dtf/fetch-basket.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAA;AACnD,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAA;AAG1D;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,cAAc,CAClC,OAAe,EACf,YAAoB,EACpB,UAAkB,oBAAoB;IAEtC,MAAM,GAAG,GAAG,GAAG,OAAO,wBAAwB,YAAY,CAAC,WAAW,EAAE,YAAY,OAAO,EAAE,CAAA;IAE7F,MAAM,QAAQ,GAAG,MAAM,cAAc,CAAC,GAAG,CAAC,CAAA;IAC1C,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;QACjB,MAAM,IAAI,KAAK,CACb,oCAAoC,QAAQ,CAAC,MAAM,IAAI,QAAQ,CAAC,UAAU,EAAE,CAC7E,CAAA;IACH,CAAC;IAED,OAAO,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAsB,CAAA;AACrD,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,eAAe,CACnC,OAAe,EACf,cAAwB,EACxB,UAAkB,oBAAoB;IAEtC,MAAM,SAAS,GAAG,cAAc;SAC7B,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;SAC3B,IAAI,CAAC,GAAG,CAAC,CAAA;IACZ,MAAM,GAAG,GAAG,GAAG,OAAO,2BAA2B,SAAS,YAAY,OAAO,EAAE,CAAA;IAE/E,MAAM,QAAQ,GAAG,MAAM,cAAc,CAAC,GAAG,CAAC,CAAA;IAC1C,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;QACjB,MAAM,IAAI,KAAK,CACb,qCAAqC,QAAQ,CAAC,MAAM,IAAI,QAAQ,CAAC,UAAU,EAAE,CAC9E,CAAA;IACH,CAAC;IAED,OAAO,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAgD,CAAA;AAC/E,CAAC"}
|
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
import { RESERVE_API_BASE_URL } from '../constants';
|
|
2
|
-
import { fetchWithRetry } from '../utils/fetch-with-retry';
|
|
3
|
-
/**
|
|
4
|
-
* Discover DTFs on a given chain.
|
|
5
|
-
* Returns paginated list sorted by market cap, with performance history and brand data.
|
|
6
|
-
*/
|
|
7
|
-
export async function fetchDtfDiscover(chainId, opts, baseUrl = RESERVE_API_BASE_URL) {
|
|
8
|
-
const skip = opts?.skip ?? 0;
|
|
9
|
-
const limit = opts?.limit ?? 25;
|
|
10
|
-
const url = `${baseUrl}/discover/dtf?chainId=${chainId}&skip=${skip}&limit=${limit}`;
|
|
11
|
-
const response = await fetchWithRetry(url);
|
|
12
|
-
if (!response.ok) {
|
|
13
|
-
throw new Error(`Reserve API /discover/dtf failed: ${response.status} ${response.statusText}`);
|
|
14
|
-
}
|
|
15
|
-
return (await response.json());
|
|
16
|
-
}
|
|
17
|
-
//# sourceMappingURL=fetch-discover.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"fetch-discover.js","sourceRoot":"","sources":["../../src/dtf/fetch-discover.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAA;AACnD,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAA;AAG1D;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,gBAAgB,CACpC,OAAe,EACf,IAAwC,EACxC,UAAkB,oBAAoB;IAEtC,MAAM,IAAI,GAAG,IAAI,EAAE,IAAI,IAAI,CAAC,CAAA;IAC5B,MAAM,KAAK,GAAG,IAAI,EAAE,KAAK,IAAI,EAAE,CAAA;IAC/B,MAAM,GAAG,GAAG,GAAG,OAAO,yBAAyB,OAAO,SAAS,IAAI,UAAU,KAAK,EAAE,CAAA;IAEpF,MAAM,QAAQ,GAAG,MAAM,cAAc,CAAC,GAAG,CAAC,CAAA;IAC1C,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;QACjB,MAAM,IAAI,KAAK,CACb,qCAAqC,QAAQ,CAAC,MAAM,IAAI,QAAQ,CAAC,UAAU,EAAE,CAC9E,CAAA;IACH,CAAC;IAED,OAAO,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAsB,CAAA;AACrD,CAAC"}
|
package/dist/dtf/fetch-dtf.js
DELETED
|
@@ -1,39 +0,0 @@
|
|
|
1
|
-
import { RESERVE_API_BASE_URL } from '../constants';
|
|
2
|
-
import { fetchWithRetry } from '../utils/fetch-with-retry';
|
|
3
|
-
/**
|
|
4
|
-
* Fetch the current price of a DTF from the Reserve API.
|
|
5
|
-
* WHY: Uses /current/dtf endpoint (not the dead /dtf/price).
|
|
6
|
-
* Register uses this same endpoint in use-dtf-price.ts.
|
|
7
|
-
*/
|
|
8
|
-
export async function fetchDtfPrice(chainId, folioAddress, baseUrl = RESERVE_API_BASE_URL) {
|
|
9
|
-
const url = `${baseUrl}/current/dtf?address=${folioAddress.toLowerCase()}&chainId=${chainId}`;
|
|
10
|
-
const response = await fetchWithRetry(url);
|
|
11
|
-
if (!response.ok) {
|
|
12
|
-
throw new Error(`Reserve API /current/dtf failed for ${folioAddress}: ${response.status} ${response.statusText}`);
|
|
13
|
-
}
|
|
14
|
-
const data = (await response.json());
|
|
15
|
-
return data.price;
|
|
16
|
-
}
|
|
17
|
-
export async function fetchZapQuote(chainId, params, baseUrl = RESERVE_API_BASE_URL) {
|
|
18
|
-
const url = `${baseUrl}/zapper/${chainId}/swap?tokenIn=${params.tokenIn.toLowerCase()}&tokenOut=${params.tokenOut.toLowerCase()}&amountIn=${params.amountIn.toString()}&slippage=${params.slippage}&sender=${params.sender.toLowerCase()}&recipient=${params.recipient.toLowerCase()}`;
|
|
19
|
-
const response = await fetchWithRetry(url);
|
|
20
|
-
if (!response.ok) {
|
|
21
|
-
throw new Error(`Reserve API /zapper/swap failed: ${response.status} ${response.statusText}`);
|
|
22
|
-
}
|
|
23
|
-
const data = (await response.json());
|
|
24
|
-
return {
|
|
25
|
-
amountOut: BigInt(data.amountOut),
|
|
26
|
-
to: data.to,
|
|
27
|
-
data: data.data,
|
|
28
|
-
value: BigInt(data.value),
|
|
29
|
-
};
|
|
30
|
-
}
|
|
31
|
-
export async function fetchVoteLockPositions(baseUrl = RESERVE_API_BASE_URL) {
|
|
32
|
-
const url = `${baseUrl}/dtf/daos`;
|
|
33
|
-
const response = await fetchWithRetry(url);
|
|
34
|
-
if (!response.ok) {
|
|
35
|
-
throw new Error(`Reserve API /dtf/daos failed: ${response.status} ${response.statusText}`);
|
|
36
|
-
}
|
|
37
|
-
return (await response.json());
|
|
38
|
-
}
|
|
39
|
-
//# sourceMappingURL=fetch-dtf.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"fetch-dtf.js","sourceRoot":"","sources":["../../src/dtf/fetch-dtf.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAA;AAEnD,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAA;AAkB1D;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,aAAa,CACjC,OAAe,EACf,YAAoB,EACpB,UAAkB,oBAAoB;IAEtC,MAAM,GAAG,GAAG,GAAG,OAAO,wBAAwB,YAAY,CAAC,WAAW,EAAE,YAAY,OAAO,EAAE,CAAA;IAE7F,MAAM,QAAQ,GAAG,MAAM,cAAc,CAAC,GAAG,CAAC,CAAA;IAC1C,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;QACjB,MAAM,IAAI,KAAK,CACb,uCAAuC,YAAY,KAAK,QAAQ,CAAC,MAAM,IAAI,QAAQ,CAAC,UAAU,EAAE,CACjG,CAAA;IACH,CAAC;IAED,MAAM,IAAI,GAAG,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAsB,CAAA;IACzD,OAAO,IAAI,CAAC,KAAK,CAAA;AACnB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,aAAa,CACjC,OAAe,EACf,MAAsB,EACtB,UAAkB,oBAAoB;IAEtC,MAAM,GAAG,GAAG,GAAG,OAAO,WAAW,OAAO,iBAAiB,MAAM,CAAC,OAAO,CAAC,WAAW,EAAE,aAAa,MAAM,CAAC,QAAQ,CAAC,WAAW,EAAE,aAAa,MAAM,CAAC,QAAQ,CAAC,QAAQ,EAAE,aAAa,MAAM,CAAC,QAAQ,WAAW,MAAM,CAAC,MAAM,CAAC,WAAW,EAAE,cAAc,MAAM,CAAC,SAAS,CAAC,WAAW,EAAE,EAAE,CAAA;IAEtR,MAAM,QAAQ,GAAG,MAAM,cAAc,CAAC,GAAG,CAAC,CAAA;IAC1C,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;QACjB,MAAM,IAAI,KAAK,CACb,oCAAoC,QAAQ,CAAC,MAAM,IAAI,QAAQ,CAAC,UAAU,EAAE,CAC7E,CAAA;IACH,CAAC;IAED,MAAM,IAAI,GAAG,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,CAKlC,CAAA;IAED,OAAO;QACL,SAAS,EAAE,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC;QACjC,EAAE,EAAE,IAAI,CAAC,EAAE;QACX,IAAI,EAAE,IAAI,CAAC,IAAI;QACf,KAAK,EAAE,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC;KAC1B,CAAA;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,sBAAsB,CAC1C,UAAkB,oBAAoB;IAEtC,MAAM,GAAG,GAAG,GAAG,OAAO,WAAW,CAAA;IACjC,MAAM,QAAQ,GAAG,MAAM,cAAc,CAAC,GAAG,CAAC,CAAA;IAC1C,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;QACjB,MAAM,IAAI,KAAK,CACb,iCAAiC,QAAQ,CAAC,MAAM,IAAI,QAAQ,CAAC,UAAU,EAAE,CAC1E,CAAA;IACH,CAAC;IACD,OAAO,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAuB,CAAA;AACtD,CAAC"}
|
package/dist/dtf/mint.js
DELETED
|
@@ -1,82 +0,0 @@
|
|
|
1
|
-
import { encodeFunctionData } from 'viem';
|
|
2
|
-
import folioAbi from '../abi/folio';
|
|
3
|
-
import { ERC20_META_ABI } from '../abi/erc20';
|
|
4
|
-
import { D18 } from '../constants';
|
|
5
|
-
import { assert } from '../utils/assert';
|
|
6
|
-
export async function readMintQuote(publicClient, folioAddress, shares) {
|
|
7
|
-
const results = await publicClient.multicall({
|
|
8
|
-
contracts: [
|
|
9
|
-
{
|
|
10
|
-
address: folioAddress,
|
|
11
|
-
abi: folioAbi,
|
|
12
|
-
functionName: 'toAssets',
|
|
13
|
-
// WHY: Ceil rounding (1) — user pays the rounded-up amount to prevent undercollateralization
|
|
14
|
-
args: [shares, 1],
|
|
15
|
-
},
|
|
16
|
-
{
|
|
17
|
-
address: folioAddress,
|
|
18
|
-
abi: folioAbi,
|
|
19
|
-
functionName: 'mintFee',
|
|
20
|
-
},
|
|
21
|
-
],
|
|
22
|
-
});
|
|
23
|
-
if (results[0].status !== 'success')
|
|
24
|
-
throw new Error(`toAssets failed for ${folioAddress} with ${shares} shares`);
|
|
25
|
-
if (results[1].status !== 'success')
|
|
26
|
-
throw new Error(`mintFee failed for ${folioAddress}`);
|
|
27
|
-
const [assets, amounts] = results[0].result;
|
|
28
|
-
const mintFee = results[1].result;
|
|
29
|
-
const minSharesOut = shares - (shares * mintFee) / D18;
|
|
30
|
-
return { shares, assets, amounts, mintFee, minSharesOut };
|
|
31
|
-
}
|
|
32
|
-
export async function readMintFee(publicClient, folioAddress) {
|
|
33
|
-
return (await publicClient.readContract({
|
|
34
|
-
address: folioAddress,
|
|
35
|
-
abi: folioAbi,
|
|
36
|
-
functionName: 'mintFee',
|
|
37
|
-
}));
|
|
38
|
-
}
|
|
39
|
-
export function buildMintCalldata(folioAddress, shares, receiver, minSharesOut) {
|
|
40
|
-
assert(shares > 0n, 'shares must be greater than 0');
|
|
41
|
-
return {
|
|
42
|
-
to: folioAddress,
|
|
43
|
-
data: encodeFunctionData({
|
|
44
|
-
abi: folioAbi,
|
|
45
|
-
functionName: 'mint',
|
|
46
|
-
args: [shares, receiver, minSharesOut],
|
|
47
|
-
}),
|
|
48
|
-
};
|
|
49
|
-
}
|
|
50
|
-
export function buildApproveCalldata(token, spender, amount) {
|
|
51
|
-
return {
|
|
52
|
-
to: token,
|
|
53
|
-
data: encodeFunctionData({
|
|
54
|
-
abi: ERC20_META_ABI,
|
|
55
|
-
functionName: 'approve',
|
|
56
|
-
args: [spender, amount],
|
|
57
|
-
}),
|
|
58
|
-
};
|
|
59
|
-
}
|
|
60
|
-
export async function readAllowances(publicClient, tokens, owner, spender) {
|
|
61
|
-
if (tokens.length === 0)
|
|
62
|
-
return [];
|
|
63
|
-
const results = await publicClient.multicall({
|
|
64
|
-
contracts: tokens.map((token) => ({
|
|
65
|
-
address: token,
|
|
66
|
-
abi: ERC20_META_ABI,
|
|
67
|
-
functionName: 'allowance',
|
|
68
|
-
args: [owner, spender],
|
|
69
|
-
})),
|
|
70
|
-
});
|
|
71
|
-
// WHY: Defaulting failed allowance to 0n is conservative — it means "needs approval".
|
|
72
|
-
// This is safer than throwing, since the caller will just prompt an approve tx.
|
|
73
|
-
return results.map((r) => r.status === 'success' ? r.result : 0n);
|
|
74
|
-
}
|
|
75
|
-
// WHY: bps (basis points) not percentage — 100 bps = 1%, matches DeFi convention
|
|
76
|
-
export function applySlippage(amount, slippageBps) {
|
|
77
|
-
if (slippageBps < 0n || slippageBps > 10000n) {
|
|
78
|
-
throw new Error(`slippageBps must be between 0 and 10000, got ${slippageBps}`);
|
|
79
|
-
}
|
|
80
|
-
return amount - (amount * slippageBps) / 10000n;
|
|
81
|
-
}
|
|
82
|
-
//# sourceMappingURL=mint.js.map
|
package/dist/dtf/mint.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"mint.js","sourceRoot":"","sources":["../../src/dtf/mint.ts"],"names":[],"mappings":"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"}
|
package/dist/dtf/read-basket.js
DELETED
|
@@ -1,20 +0,0 @@
|
|
|
1
|
-
import folioAbi from '../abi/folio';
|
|
2
|
-
import { fetchTokenMetadata } from '../utils/fetch-token-metadata';
|
|
3
|
-
export async function readBasket(publicClient, folioAddress) {
|
|
4
|
-
const [assetsResult, totalSupply] = await Promise.all([
|
|
5
|
-
publicClient.readContract({
|
|
6
|
-
address: folioAddress,
|
|
7
|
-
abi: folioAbi,
|
|
8
|
-
functionName: 'totalAssets',
|
|
9
|
-
}),
|
|
10
|
-
publicClient.readContract({
|
|
11
|
-
address: folioAddress,
|
|
12
|
-
abi: folioAbi,
|
|
13
|
-
functionName: 'totalSupply',
|
|
14
|
-
}),
|
|
15
|
-
]);
|
|
16
|
-
const [addresses, balances] = assetsResult;
|
|
17
|
-
const tokens = await fetchTokenMetadata(publicClient, addresses);
|
|
18
|
-
return { tokens, balances, totalSupply };
|
|
19
|
-
}
|
|
20
|
-
//# sourceMappingURL=read-basket.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"read-basket.js","sourceRoot":"","sources":["../../src/dtf/read-basket.ts"],"names":[],"mappings":"AACA,OAAO,QAAQ,MAAM,cAAc,CAAA;AACnC,OAAO,EAAE,kBAAkB,EAAE,MAAM,+BAA+B,CAAA;AAGlE,MAAM,CAAC,KAAK,UAAU,UAAU,CAC9B,YAA0B,EAC1B,YAAqB;IAErB,MAAM,CAAC,YAAY,EAAE,WAAW,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;QACpD,YAAY,CAAC,YAAY,CAAC;YACxB,OAAO,EAAE,YAAY;YACrB,GAAG,EAAE,QAAQ;YACb,YAAY,EAAE,aAAa;SAC5B,CAAmC;QACpC,YAAY,CAAC,YAAY,CAAC;YACxB,OAAO,EAAE,YAAY;YACrB,GAAG,EAAE,QAAQ;YACb,YAAY,EAAE,aAAa;SAC5B,CAAoB;KACtB,CAAC,CAAA;IAEF,MAAM,CAAC,SAAS,EAAE,QAAQ,CAAC,GAAG,YAAY,CAAA;IAC1C,MAAM,MAAM,GAAG,MAAM,kBAAkB,CAAC,YAAY,EAAE,SAAS,CAAC,CAAA;IAEhE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,WAAW,EAAE,CAAA;AAC1C,CAAC"}
|
package/dist/dtf/read-config.js
DELETED
|
@@ -1,80 +0,0 @@
|
|
|
1
|
-
import { fetchTokenMetadata } from '../utils/fetch-token-metadata';
|
|
2
|
-
import { querySubgraph } from '../utils/query-subgraph';
|
|
3
|
-
import folioAbi from '../abi/folio';
|
|
4
|
-
const GOV_FRAGMENT = `
|
|
5
|
-
id
|
|
6
|
-
votingDelay
|
|
7
|
-
votingPeriod
|
|
8
|
-
timelock {
|
|
9
|
-
id
|
|
10
|
-
executionDelay
|
|
11
|
-
}
|
|
12
|
-
`;
|
|
13
|
-
const DTF_QUERY = `
|
|
14
|
-
query getDTF($id: String!) {
|
|
15
|
-
dtf(id: $id) {
|
|
16
|
-
id
|
|
17
|
-
auctionLength
|
|
18
|
-
mandate
|
|
19
|
-
tvlFee
|
|
20
|
-
mintingFee
|
|
21
|
-
auctionLaunchers
|
|
22
|
-
brandManagers
|
|
23
|
-
ownerGovernance {
|
|
24
|
-
${GOV_FRAGMENT}
|
|
25
|
-
}
|
|
26
|
-
tradingGovernance {
|
|
27
|
-
${GOV_FRAGMENT}
|
|
28
|
-
}
|
|
29
|
-
stToken {
|
|
30
|
-
id
|
|
31
|
-
governance {
|
|
32
|
-
${GOV_FRAGMENT}
|
|
33
|
-
}
|
|
34
|
-
}
|
|
35
|
-
}
|
|
36
|
-
}
|
|
37
|
-
`;
|
|
38
|
-
function parseGovernance(raw) {
|
|
39
|
-
if (!raw?.id)
|
|
40
|
-
return null;
|
|
41
|
-
// NOTE: If subgraph returns governor without timelock, we use zero address.
|
|
42
|
-
// This is defensive — in practice every deployed governor has a timelock.
|
|
43
|
-
return {
|
|
44
|
-
address: raw.id,
|
|
45
|
-
timelockAddress: (raw.timelock?.id ?? '0x0000000000000000000000000000000000000000'),
|
|
46
|
-
votingDelay: Number(raw.votingDelay ?? 0),
|
|
47
|
-
votingPeriod: Number(raw.votingPeriod ?? 0),
|
|
48
|
-
executionDelay: Number(raw.timelock?.executionDelay ?? 0),
|
|
49
|
-
};
|
|
50
|
-
}
|
|
51
|
-
export async function fetchDtfConfig(publicClient, chainId, folioAddress) {
|
|
52
|
-
const data = await querySubgraph(chainId, DTF_QUERY, {
|
|
53
|
-
id: folioAddress.toLowerCase(),
|
|
54
|
-
});
|
|
55
|
-
const dtf = data?.dtf;
|
|
56
|
-
if (!dtf)
|
|
57
|
-
throw new Error(`DTF not found: ${folioAddress}`);
|
|
58
|
-
// Read basket tokens on-chain (subgraph doesn't expose basket)
|
|
59
|
-
const [assets] = (await publicClient.readContract({
|
|
60
|
-
address: folioAddress,
|
|
61
|
-
abi: folioAbi,
|
|
62
|
-
functionName: 'totalAssets',
|
|
63
|
-
}));
|
|
64
|
-
const tokens = await fetchTokenMetadata(publicClient, assets);
|
|
65
|
-
return {
|
|
66
|
-
tokens,
|
|
67
|
-
// WHY: 300s is the protocol minimum auction length — safe fallback if subgraph omits it
|
|
68
|
-
auctionLength: Number(dtf.auctionLength ?? 300),
|
|
69
|
-
ownerGovernance: parseGovernance(dtf.ownerGovernance),
|
|
70
|
-
tradingGovernance: parseGovernance(dtf.tradingGovernance),
|
|
71
|
-
stTokenGovernance: parseGovernance(dtf.stToken?.governance),
|
|
72
|
-
stTokenAddress: (dtf.stToken?.id ?? null),
|
|
73
|
-
mandate: dtf.mandate ?? '',
|
|
74
|
-
tvlFee: dtf.tvlFee ?? '0',
|
|
75
|
-
mintingFee: dtf.mintingFee ?? '0',
|
|
76
|
-
auctionLaunchers: (dtf.auctionLaunchers ?? []),
|
|
77
|
-
brandManagers: (dtf.brandManagers ?? []),
|
|
78
|
-
};
|
|
79
|
-
}
|
|
80
|
-
//# sourceMappingURL=read-config.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"read-config.js","sourceRoot":"","sources":["../../src/dtf/read-config.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,kBAAkB,EAAE,MAAM,+BAA+B,CAAA;AAClE,OAAO,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAA;AACvD,OAAO,QAAQ,MAAM,cAAc,CAAA;AA+BnC,MAAM,YAAY,GAAG;;;;;;;;CAQpB,CAAA;AAED,MAAM,SAAS,GAAG;;;;;;;;;;;UAWR,YAAY;;;UAGZ,YAAY;;;;;YAKV,YAAY;;;;;CAKvB,CAAA;AAED,SAAS,eAAe,CAAC,GAA0C;IACjE,IAAI,CAAC,GAAG,EAAE,EAAE;QAAE,OAAO,IAAI,CAAA;IACzB,4EAA4E;IAC5E,0EAA0E;IAC1E,OAAO;QACL,OAAO,EAAE,GAAG,CAAC,EAAa;QAC1B,eAAe,EAAE,CAAC,GAAG,CAAC,QAAQ,EAAE,EAAE,IAAI,4CAA4C,CAAY;QAC9F,WAAW,EAAE,MAAM,CAAC,GAAG,CAAC,WAAW,IAAI,CAAC,CAAC;QACzC,YAAY,EAAE,MAAM,CAAC,GAAG,CAAC,YAAY,IAAI,CAAC,CAAC;QAC3C,cAAc,EAAE,MAAM,CAAC,GAAG,CAAC,QAAQ,EAAE,cAAc,IAAI,CAAC,CAAC;KAC1D,CAAA;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,cAAc,CAClC,YAA0B,EAC1B,OAAyB,EACzB,YAAqB;IAErB,MAAM,IAAI,GAAG,MAAM,aAAa,CAAmB,OAAO,EAAE,SAAS,EAAE;QACrE,EAAE,EAAE,YAAY,CAAC,WAAW,EAAE;KAC/B,CAAC,CAAA;IACF,MAAM,GAAG,GAAG,IAAI,EAAE,GAAG,CAAA;IAErB,IAAI,CAAC,GAAG;QAAE,MAAM,IAAI,KAAK,CAAC,kBAAkB,YAAY,EAAE,CAAC,CAAA;IAE3D,+DAA+D;IAC/D,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,YAAY,CAAC,YAAY,CAAC;QAChD,OAAO,EAAE,YAAY;QACrB,GAAG,EAAE,QAAQ;QACb,YAAY,EAAE,aAAa;KAC5B,CAAC,CAA0B,CAAA;IAE5B,MAAM,MAAM,GAAG,MAAM,kBAAkB,CAAC,YAAY,EAAE,MAAM,CAAC,CAAA;IAE7D,OAAO;QACL,MAAM;QACN,wFAAwF;QACxF,aAAa,EAAE,MAAM,CAAC,GAAG,CAAC,aAAa,IAAI,GAAG,CAAC;QAC/C,eAAe,EAAE,eAAe,CAAC,GAAG,CAAC,eAAe,CAAC;QACrD,iBAAiB,EAAE,eAAe,CAAC,GAAG,CAAC,iBAAiB,CAAC;QACzD,iBAAiB,EAAE,eAAe,CAAC,GAAG,CAAC,OAAO,EAAE,UAAU,CAAC;QAC3D,cAAc,EAAE,CAAC,GAAG,CAAC,OAAO,EAAE,EAAE,IAAI,IAAI,CAAmB;QAC3D,OAAO,EAAE,GAAG,CAAC,OAAO,IAAI,EAAE;QAC1B,MAAM,EAAE,GAAG,CAAC,MAAM,IAAI,GAAG;QACzB,UAAU,EAAE,GAAG,CAAC,UAAU,IAAI,GAAG;QACjC,gBAAgB,EAAE,CAAC,GAAG,CAAC,gBAAgB,IAAI,EAAE,CAAc;QAC3D,aAAa,EAAE,CAAC,GAAG,CAAC,aAAa,IAAI,EAAE,CAAc;KACtD,CAAA;AACH,CAAC"}
|
package/dist/dtf/read-dtf.js
DELETED
|
@@ -1,32 +0,0 @@
|
|
|
1
|
-
import folioAbi from '../abi/folio';
|
|
2
|
-
import { ERC20_META_ABI } from '../abi/erc20';
|
|
3
|
-
export async function readTotalSupply(publicClient, folioAddress) {
|
|
4
|
-
return (await publicClient.readContract({
|
|
5
|
-
address: folioAddress,
|
|
6
|
-
abi: folioAbi,
|
|
7
|
-
functionName: 'totalSupply',
|
|
8
|
-
}));
|
|
9
|
-
}
|
|
10
|
-
export async function readBalanceOf(publicClient, tokenAddress, account) {
|
|
11
|
-
return (await publicClient.readContract({
|
|
12
|
-
address: tokenAddress,
|
|
13
|
-
abi: ERC20_META_ABI,
|
|
14
|
-
functionName: 'balanceOf',
|
|
15
|
-
args: [account],
|
|
16
|
-
}));
|
|
17
|
-
}
|
|
18
|
-
export async function readName(publicClient, folioAddress) {
|
|
19
|
-
return (await publicClient.readContract({
|
|
20
|
-
address: folioAddress,
|
|
21
|
-
abi: folioAbi,
|
|
22
|
-
functionName: 'name',
|
|
23
|
-
}));
|
|
24
|
-
}
|
|
25
|
-
export async function readSymbol(publicClient, folioAddress) {
|
|
26
|
-
return (await publicClient.readContract({
|
|
27
|
-
address: folioAddress,
|
|
28
|
-
abi: folioAbi,
|
|
29
|
-
functionName: 'symbol',
|
|
30
|
-
}));
|
|
31
|
-
}
|
|
32
|
-
//# sourceMappingURL=read-dtf.js.map
|
package/dist/dtf/read-dtf.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"read-dtf.js","sourceRoot":"","sources":["../../src/dtf/read-dtf.ts"],"names":[],"mappings":"AACA,OAAO,QAAQ,MAAM,cAAc,CAAA;AACnC,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAA;AAE7C,MAAM,CAAC,KAAK,UAAU,eAAe,CACnC,YAA0B,EAC1B,YAAqB;IAErB,OAAO,CAAC,MAAM,YAAY,CAAC,YAAY,CAAC;QACtC,OAAO,EAAE,YAAY;QACrB,GAAG,EAAE,QAAQ;QACb,YAAY,EAAE,aAAa;KAC5B,CAAC,CAAW,CAAA;AACf,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,aAAa,CACjC,YAA0B,EAC1B,YAAqB,EACrB,OAAgB;IAEhB,OAAO,CAAC,MAAM,YAAY,CAAC,YAAY,CAAC;QACtC,OAAO,EAAE,YAAY;QACrB,GAAG,EAAE,cAAc;QACnB,YAAY,EAAE,WAAW;QACzB,IAAI,EAAE,CAAC,OAAO,CAAC;KAChB,CAAC,CAAW,CAAA;AACf,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,QAAQ,CAC5B,YAA0B,EAC1B,YAAqB;IAErB,OAAO,CAAC,MAAM,YAAY,CAAC,YAAY,CAAC;QACtC,OAAO,EAAE,YAAY;QACrB,GAAG,EAAE,QAAQ;QACb,YAAY,EAAE,MAAM;KACrB,CAAC,CAAW,CAAA;AACf,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,UAAU,CAC9B,YAA0B,EAC1B,YAAqB;IAErB,OAAO,CAAC,MAAM,YAAY,CAAC,YAAY,CAAC;QACtC,OAAO,EAAE,YAAY;QACrB,GAAG,EAAE,QAAQ;QACb,YAAY,EAAE,QAAQ;KACvB,CAAC,CAAW,CAAA;AACf,CAAC"}
|
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
import folioAbi from '../abi/folio';
|
|
2
|
-
import { validatePriceControl } from '../utils/validate-price-control';
|
|
3
|
-
export async function readRebalanceControl(publicClient, folioAddress) {
|
|
4
|
-
const [weightControl, priceControl] = (await publicClient.readContract({
|
|
5
|
-
address: folioAddress,
|
|
6
|
-
abi: folioAbi,
|
|
7
|
-
functionName: 'rebalanceControl',
|
|
8
|
-
}));
|
|
9
|
-
return {
|
|
10
|
-
weightControl,
|
|
11
|
-
priceControl: validatePriceControl(priceControl),
|
|
12
|
-
};
|
|
13
|
-
}
|
|
14
|
-
//# sourceMappingURL=read-rebalance-control.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"read-rebalance-control.js","sourceRoot":"","sources":["../../src/dtf/read-rebalance-control.ts"],"names":[],"mappings":"AACA,OAAO,QAAQ,MAAM,cAAc,CAAA;AAEnC,OAAO,EAAE,oBAAoB,EAAE,MAAM,iCAAiC,CAAA;AAEtE,MAAM,CAAC,KAAK,UAAU,oBAAoB,CACxC,YAA0B,EAC1B,YAAqB;IAErB,MAAM,CAAC,aAAa,EAAE,YAAY,CAAC,GAAG,CAAC,MAAM,YAAY,CAAC,YAAY,CAAC;QACrE,OAAO,EAAE,YAAY;QACrB,GAAG,EAAE,QAAQ;QACb,YAAY,EAAE,kBAAkB;KACjC,CAAC,CAAsB,CAAA;IAExB,OAAO;QACL,aAAa;QACb,YAAY,EAAE,oBAAoB,CAAC,YAAY,CAAC;KACjD,CAAA;AACH,CAAC"}
|
package/dist/dtf/read-roles.js
DELETED
|
@@ -1,29 +0,0 @@
|
|
|
1
|
-
import folioAbi from '../abi/folio';
|
|
2
|
-
import { FOLIO_ROLES } from '../constants';
|
|
3
|
-
export async function readDtfRoles(publicClient, folioAddress, account) {
|
|
4
|
-
// WHY: Explicit array instead of Object.values(FOLIO_ROLES) to avoid
|
|
5
|
-
// positional indexing that breaks silently if key order changes.
|
|
6
|
-
const roleChecks = [
|
|
7
|
-
{ key: 'isAdmin', hash: FOLIO_ROLES.DEFAULT_ADMIN },
|
|
8
|
-
{ key: 'isRebalanceManager', hash: FOLIO_ROLES.REBALANCE_MANAGER },
|
|
9
|
-
{ key: 'isAuctionLauncher', hash: FOLIO_ROLES.AUCTION_LAUNCHER },
|
|
10
|
-
{ key: 'isBrandManager', hash: FOLIO_ROLES.BRAND_MANAGER },
|
|
11
|
-
];
|
|
12
|
-
const results = await publicClient.multicall({
|
|
13
|
-
contracts: roleChecks.map(({ hash }) => ({
|
|
14
|
-
address: folioAddress,
|
|
15
|
-
abi: folioAbi,
|
|
16
|
-
functionName: 'hasRole',
|
|
17
|
-
args: [hash, account],
|
|
18
|
-
})),
|
|
19
|
-
});
|
|
20
|
-
// WHY: Defaulting to false on failure is conservative — "no role" means the user
|
|
21
|
-
// won't see buttons/actions they can't execute. Safer than showing capabilities they don't have.
|
|
22
|
-
return {
|
|
23
|
-
isAdmin: results[0].status === 'success' ? results[0].result : false,
|
|
24
|
-
isRebalanceManager: results[1].status === 'success' ? results[1].result : false,
|
|
25
|
-
isAuctionLauncher: results[2].status === 'success' ? results[2].result : false,
|
|
26
|
-
isBrandManager: results[3].status === 'success' ? results[3].result : false,
|
|
27
|
-
};
|
|
28
|
-
}
|
|
29
|
-
//# sourceMappingURL=read-roles.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"read-roles.js","sourceRoot":"","sources":["../../src/dtf/read-roles.ts"],"names":[],"mappings":"AACA,OAAO,QAAQ,MAAM,cAAc,CAAA;AACnC,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAA;AAG1C,MAAM,CAAC,KAAK,UAAU,YAAY,CAChC,YAA0B,EAC1B,YAAqB,EACrB,OAAgB;IAEhB,qEAAqE;IACrE,iEAAiE;IACjE,MAAM,UAAU,GAAG;QACjB,EAAE,GAAG,EAAE,SAAS,EAAE,IAAI,EAAE,WAAW,CAAC,aAAa,EAAE;QACnD,EAAE,GAAG,EAAE,oBAAoB,EAAE,IAAI,EAAE,WAAW,CAAC,iBAAiB,EAAE;QAClE,EAAE,GAAG,EAAE,mBAAmB,EAAE,IAAI,EAAE,WAAW,CAAC,gBAAgB,EAAE;QAChE,EAAE,GAAG,EAAE,gBAAgB,EAAE,IAAI,EAAE,WAAW,CAAC,aAAa,EAAE;KAClD,CAAA;IAEV,MAAM,OAAO,GAAG,MAAM,YAAY,CAAC,SAAS,CAAC;QAC3C,SAAS,EAAE,UAAU,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC;YACvC,OAAO,EAAE,YAAY;YACrB,GAAG,EAAE,QAAQ;YACb,YAAY,EAAE,SAAkB;YAChC,IAAI,EAAE,CAAC,IAAI,EAAE,OAAO,CAAU;SAC/B,CAAC,CAAC;KACJ,CAAC,CAAA;IAEF,iFAAiF;IACjF,iGAAiG;IACjG,OAAO;QACL,OAAO,EACL,OAAO,CAAC,CAAC,CAAE,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAE,OAAO,CAAC,CAAC,CAAE,CAAC,MAAkB,CAAC,CAAC,CAAC,KAAK;QAC5E,kBAAkB,EAChB,OAAO,CAAC,CAAC,CAAE,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAE,OAAO,CAAC,CAAC,CAAE,CAAC,MAAkB,CAAC,CAAC,CAAC,KAAK;QAC5E,iBAAiB,EACf,OAAO,CAAC,CAAC,CAAE,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAE,OAAO,CAAC,CAAC,CAAE,CAAC,MAAkB,CAAC,CAAC,CAAC,KAAK;QAC5E,cAAc,EACZ,OAAO,CAAC,CAAC,CAAE,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAE,OAAO,CAAC,CAAC,CAAE,CAAC,MAAkB,CAAC,CAAC,CAAC,KAAK;KAC7E,CAAA;AACH,CAAC"}
|