@velora-dex/widget 0.6.1-dev.2 → 0.6.1-dev.3
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/components/widget/Dialog/SelectTokenDialog/SelectTokenDialog.js +1 -1
- package/dist/components/widget/Dialog/SelectTokenDialog/SelectTokenDialog.js.map +1 -1
- package/dist/components/widget/Duration/Duration.d.ts.map +1 -1
- package/dist/components/widget/Duration/Duration.js +10 -17
- package/dist/components/widget/Duration/Duration.js.map +1 -1
- package/dist/components/widget/TradeOverview/TradeComplete/utils.js +10 -10
- package/dist/components/widget/TradeOverview/TradeComplete/utils.js.map +1 -1
- package/dist/components/widget/Twap/CustomDurationDrawer.d.ts.map +1 -1
- package/dist/components/widget/Twap/CustomDurationDrawer.js +105 -101
- package/dist/components/widget/Twap/CustomDurationDrawer.js.map +1 -1
- package/dist/components/widget/Twap/OrderDuration.js +1 -1
- package/dist/components/widget/Twap/OrderDuration.js.map +1 -1
- package/dist/core/Warnings.js +2 -2
- package/dist/core/Warnings.js.map +1 -1
- package/dist/core/index.d.ts.map +1 -1
- package/dist/core/index.js +0 -1
- package/dist/core/index.js.map +1 -1
- package/dist/core/inputs/state/common.d.ts.map +1 -1
- package/dist/core/inputs/state/common.js +28 -28
- package/dist/core/inputs/state/common.js.map +1 -1
- package/dist/core/twap/state/constants.d.ts +2 -2
- package/dist/core/twap/state/constants.d.ts.map +1 -1
- package/dist/core/twap/state/constants.js.map +1 -1
- package/dist/core/twap/state/selectedTokenActionsAtom.d.ts.map +1 -1
- package/dist/core/twap/state/selectedTokenActionsAtom.js +1 -1
- package/dist/core/twap/state/selectedTokenActionsAtom.js.map +1 -1
- package/dist/core/twap/state/twapParamsAtom.js +2 -2
- package/dist/core/twap/state/twapParamsAtom.js.map +1 -1
- package/dist/core/twap/useTwapTokenToInputProps.d.ts.map +1 -1
- package/dist/core/twap/useTwapTokenToInputProps.js +15 -15
- package/dist/core/twap/useTwapTokenToInputProps.js.map +1 -1
- package/dist/hooks/swap/prices/delta/orders/utils.js +2 -2
- package/dist/hooks/swap/prices/delta/orders/utils.js.map +1 -1
- package/package.json +1 -1
|
@@ -4,7 +4,7 @@ import { swapTokenFromAtom as n, swapTokenToAtom as r } from "./selectedTokenAto
|
|
|
4
4
|
import { payInputAmountAtom as i, payInputAmountWeiAtom as a, receiveInputAmountAtom as o, receiveInputAmountWeiAtom as s } from "./inputAmountAtom.js";
|
|
5
5
|
import { swapSideAtom as c } from "../../../components/widget/SwapModeSwitcher/state/swapSideAtom.js";
|
|
6
6
|
import { limitTokenFromAtom as l, limitTokenToAtom as u } from "../../limit/state/limitTokenAtoms.js";
|
|
7
|
-
import { limitPayInputAmountAtom as d, limitPayInputAmountWeiAtom as
|
|
7
|
+
import { limitPayInputAmountAtom as d, limitPayInputAmountWeiAtom as f, limitReceiveInputAmountAtom as ee, limitReceiveInputAmountWeiAtom as te } from "../../limit/state/limitInputAmountAtom.js";
|
|
8
8
|
import { timeUnitAtom as p } from "../../limit/state/deadlineAtom.js";
|
|
9
9
|
import { timeUnitAtom as m } from "../../otc/state/deadlineAtom.js";
|
|
10
10
|
import { otcTokenFromAtom as h, otcTokenToAtom as g, syncOtcTokensAfterChainSwitch as _ } from "../../otc/state/selectedTokenAtom.js";
|
|
@@ -17,8 +17,8 @@ import { twapPayInputAmountAtom as D, twapPayInputAmountWeiAtom as O, twapReceiv
|
|
|
17
17
|
import { isCrossChainAtom as j } from "../../state/isCrosschainAtom.js";
|
|
18
18
|
import { isLimitCrossChainAtom as M } from "../../limit/state/isCrosschainAtom.js";
|
|
19
19
|
import { selectSwapTokenFromAtom as N, selectSwapTokenToAtom as P, syncSwapTokensAfterChainSwitch as F } from "./selectedTokenActionsAtom.js";
|
|
20
|
-
import { syncLimitTokensAfterChainSwitch as
|
|
21
|
-
import { selectTwapTokenFromAtom as
|
|
20
|
+
import { syncLimitTokensAfterChainSwitch as I } from "../../limit/state/selectedTokenAtom.js";
|
|
21
|
+
import { selectTwapTokenFromAtom as ne, selectTwapTokenToAtom as L, syncTwapTokensAfterChainSwitch as R } from "../../twap/state/selectedTokenActionsAtom.js";
|
|
22
22
|
import { setLimitPayAmountAtomFromProps as z, setLimitReceiveAmountAtomFromProps as B } from "../../limit/state/limitInputActionsAtom.js";
|
|
23
23
|
import { selectLimitTokenFromAtom as V, selectLimitTokenToAtom as H } from "../../limit/state/selectedTokenActionsAtom.js";
|
|
24
24
|
import { setOtcPayAmountAtomFromProps as U, setOtcReceiveAmountAtomFromProps as W } from "../../otc/state/otcInputActionsAtom.js";
|
|
@@ -27,13 +27,13 @@ import { c as q } from "react-compiler-runtime";
|
|
|
27
27
|
import { atom as J } from "jotai";
|
|
28
28
|
//#region src/core/inputs/state/common.ts
|
|
29
29
|
function Y(e) {
|
|
30
|
-
F(e),
|
|
30
|
+
F(e), I(e), _(e), R(e);
|
|
31
31
|
}
|
|
32
|
-
var X = {
|
|
33
|
-
sellAtom: J(
|
|
34
|
-
falseAtom: J(
|
|
35
|
-
currentInputAtom: J("from",
|
|
36
|
-
},
|
|
32
|
+
var X = () => void 0, Z = {
|
|
33
|
+
sellAtom: J("SELL", X),
|
|
34
|
+
falseAtom: J(!1, X),
|
|
35
|
+
currentInputAtom: J("from", X)
|
|
36
|
+
}, re = {
|
|
37
37
|
swap: {
|
|
38
38
|
read: i,
|
|
39
39
|
write: i
|
|
@@ -50,13 +50,13 @@ var X = {
|
|
|
50
50
|
read: D,
|
|
51
51
|
write: D
|
|
52
52
|
}
|
|
53
|
-
},
|
|
53
|
+
}, ie = {
|
|
54
54
|
swap: {
|
|
55
55
|
read: o,
|
|
56
56
|
write: o
|
|
57
57
|
},
|
|
58
58
|
limit: {
|
|
59
|
-
read:
|
|
59
|
+
read: ee,
|
|
60
60
|
write: B
|
|
61
61
|
},
|
|
62
62
|
otc: {
|
|
@@ -67,17 +67,17 @@ var X = {
|
|
|
67
67
|
read: k,
|
|
68
68
|
write: k
|
|
69
69
|
}
|
|
70
|
-
},
|
|
70
|
+
}, ae = {
|
|
71
71
|
limit: p,
|
|
72
72
|
otc: m
|
|
73
|
-
},
|
|
73
|
+
}, oe = {
|
|
74
74
|
swap: a,
|
|
75
|
-
limit:
|
|
75
|
+
limit: f,
|
|
76
76
|
otc: y,
|
|
77
77
|
twap: O
|
|
78
|
-
},
|
|
78
|
+
}, se = {
|
|
79
79
|
swap: s,
|
|
80
|
-
limit:
|
|
80
|
+
limit: te,
|
|
81
81
|
otc: x,
|
|
82
82
|
twap: A
|
|
83
83
|
}, Q = {
|
|
@@ -94,14 +94,14 @@ var X = {
|
|
|
94
94
|
otc: {
|
|
95
95
|
tokenFromAtom: h,
|
|
96
96
|
tokenToAtom: g,
|
|
97
|
-
isCrossChainAtom:
|
|
97
|
+
isCrossChainAtom: Z.falseAtom
|
|
98
98
|
},
|
|
99
99
|
twap: {
|
|
100
100
|
tokenFromAtom: S,
|
|
101
101
|
tokenToAtom: C,
|
|
102
102
|
isCrossChainAtom: T
|
|
103
103
|
}
|
|
104
|
-
},
|
|
104
|
+
}, ce = {
|
|
105
105
|
swap: {
|
|
106
106
|
tokenFromAtom: N,
|
|
107
107
|
tokenToAtom: P
|
|
@@ -115,23 +115,23 @@ var X = {
|
|
|
115
115
|
tokenToAtom: K
|
|
116
116
|
},
|
|
117
117
|
twap: {
|
|
118
|
-
tokenFromAtom:
|
|
118
|
+
tokenFromAtom: ne,
|
|
119
119
|
tokenToAtom: L
|
|
120
120
|
}
|
|
121
|
-
},
|
|
121
|
+
}, le = {
|
|
122
122
|
swap: c,
|
|
123
123
|
twap: E,
|
|
124
|
-
limit:
|
|
125
|
-
otc:
|
|
126
|
-
},
|
|
124
|
+
limit: Z.sellAtom,
|
|
125
|
+
otc: Z.sellAtom
|
|
126
|
+
}, $ = {
|
|
127
127
|
swap: t,
|
|
128
128
|
twap: w,
|
|
129
|
-
limit:
|
|
130
|
-
otc:
|
|
131
|
-
},
|
|
129
|
+
limit: Z.currentInputAtom,
|
|
130
|
+
otc: Z.currentInputAtom
|
|
131
|
+
}, ue = {
|
|
132
132
|
SELL: "from",
|
|
133
133
|
BUY: "to"
|
|
134
|
-
},
|
|
134
|
+
}, de = (t) => {
|
|
135
135
|
let n = q(3), { tokenFromAtom: r, tokenToAtom: i } = Q[t], a = e(r), o = e(i), s;
|
|
136
136
|
return n[0] !== a || n[1] !== o ? (s = {
|
|
137
137
|
tokenFrom: a,
|
|
@@ -139,6 +139,6 @@ var X = {
|
|
|
139
139
|
}, n[0] = a, n[1] = o, n[2] = s) : s = n[2], s;
|
|
140
140
|
};
|
|
141
141
|
//#endregion
|
|
142
|
-
export {
|
|
142
|
+
export { ue as sideToInputType, Y as syncTokensAfterChainSwitch, $ as tradeModeToCurrentInputAtom, re as tradeModeToPayAmountUnitAtom, oe as tradeModeToPayAmountWeiAtom, ie as tradeModeToReceiveAmountUnitAtom, se as tradeModeToReceiveAmountWeiAtom, ce as tradeModeToSetTokenAtoms, le as tradeModeToSideAtom, ae as tradeModeToTimeUnitAtom, Q as tradeModeToTokenAtoms, de as useWidgetTokens };
|
|
143
143
|
|
|
144
144
|
//# sourceMappingURL=common.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"common.js","names":["selectSwapTokenFromAtom","selectSwapTokenToAtom","syncSwapTokensAfterChainSwitch","swapTokenFromAtom","swapTokenToAtom","syncLimitTokensAfterChainSwitch","limitTokenFromAtom","limitTokenToAtom","otcTokenFromAtom","otcTokenToAtom","syncOtcTokensAfterChainSwitch","twapTokenFromAtom","twapTokenToAtom","syncTwapTokensAfterChainSwitch","isTwapCrossChainAtom","TradeMode","SupportedChainId","payInputAmountAtom","payInputAmountWeiAtom","receiveInputAmountAtom","receiveInputAmountWeiAtom","limitPayInputAmountAtom","limitPayInputAmountWeiAtom","limitReceiveInputAmountAtom","limitReceiveInputAmountWeiAtom","otcPayInputAmountAtom","otcPayInputAmountWeiAtom","otcReceiveInputAmountAtom","otcReceiveInputAmountWeiAtom","twapPayInputAmountAtom","twapPayInputAmountWeiAtom","twapReceiveInputAmountAtom","twapReceiveInputAmountWeiAtom","atom","PrimitiveAtom","SetStateAction","useAtomValue","selectLimitTokenFromAtom","selectLimitTokenToAtom","selectOtcTokenFromAtom","selectOtcTokenToAtom","selectTwapTokenFromAtom","selectTwapTokenToAtom","setLimitPayAmountAtomFromProps","setLimitReceiveAmountAtomFromProps","setOtcPayAmountAtomFromProps","setOtcReceiveAmountAtomFromProps","limitDeadline","otcDeadline","SwapSideUnion","isCrossChainAtom","isSwapCrossChainAtom","isLimitCrossChainAtom","swapSideAtom","twapSideAtom","currentTwapInputAtom","currentSwapInputAtom","syncTokensAfterChainSwitch","chainId","placeholderAtoms","sellAtom","const","falseAtom","currentInputAtom","tradeModeToPayAmountUnitAtom","Record","read","Pick","write","swap","limit","otc","twap","tradeModeToReceiveAmountUnitAtom","tradeModeToTimeUnitAtom","timeUnitAtom","tradeModeToPayAmountWeiAtom","tradeModeToReceiveAmountWeiAtom","tradeModeToTokenAtoms","tokenFromAtom","tokenToAtom","tradeModeToSetTokenAtoms","tradeModeToSideAtom","tradeModeToCurrentInputAtom","sideToInputType","SELL","BUY","useWidgetTokens","tradeMode","$","_c","tokenFrom","tokenTo","t0"],"sources":["../../../../src/core/inputs/state/common.ts"],"sourcesContent":["import {\n selectSwapTokenFromAtom,\n selectSwapTokenToAtom,\n syncSwapTokensAfterChainSwitch,\n} from \"./selectedTokenActionsAtom\";\nimport { swapTokenFromAtom, swapTokenToAtom } from \"./selectedTokenAtom\";\nimport { syncLimitTokensAfterChainSwitch } from \"@/core/limit/state/selectedTokenAtom\";\nimport {\n limitTokenFromAtom,\n limitTokenToAtom,\n} from \"@/core/limit/state/limitTokenAtoms\";\nimport {\n otcTokenFromAtom,\n otcTokenToAtom,\n syncOtcTokensAfterChainSwitch,\n} from \"@/core/otc/state/selectedTokenAtom\";\nimport {\n twapTokenFromAtom,\n twapTokenToAtom,\n} from \"@/core/twap/state/twapTokenAtoms\";\nimport { syncTwapTokensAfterChainSwitch } from \"@/core/twap/state/selectedTokenActionsAtom\";\nimport { isTwapCrossChainAtom } from \"@/core/twap/state/isCrosschainAtom\";\nimport type { TradeMode } from \"@/core/state/tradeModeAtom\";\nimport type { SupportedChainId } from \"@/lib/web3/wagmi/types\";\nimport {\n payInputAmountAtom,\n payInputAmountWeiAtom,\n receiveInputAmountAtom,\n receiveInputAmountWeiAtom,\n} from \"./inputAmountAtom\";\nimport {\n limitPayInputAmountAtom,\n limitPayInputAmountWeiAtom,\n limitReceiveInputAmountAtom,\n limitReceiveInputAmountWeiAtom,\n} from \"@/core/limit/state/limitInputAmountAtom\";\nimport {\n otcPayInputAmountAtom,\n otcPayInputAmountWeiAtom,\n otcReceiveInputAmountAtom,\n otcReceiveInputAmountWeiAtom,\n} from \"@/core/otc/state/otcInputAmountAtom\";\nimport {\n twapPayInputAmountAtom,\n twapPayInputAmountWeiAtom,\n twapReceiveInputAmountAtom,\n twapReceiveInputAmountWeiAtom,\n} from \"@/core/twap/state/twapInputAmountAtom\";\nimport { atom, type PrimitiveAtom, type SetStateAction } from \"jotai\";\nimport { useAtomValue } from \"@/core/store\";\nimport {\n selectLimitTokenFromAtom,\n selectLimitTokenToAtom,\n} from \"@/core/limit/state/selectedTokenActionsAtom\";\nimport {\n selectOtcTokenFromAtom,\n selectOtcTokenToAtom,\n} from \"@/core/otc/state/selectedTokenActionsAtom\";\nimport {\n selectTwapTokenFromAtom,\n selectTwapTokenToAtom,\n} from \"@/core/twap/state/selectedTokenActionsAtom\";\nimport {\n setLimitPayAmountAtomFromProps,\n setLimitReceiveAmountAtomFromProps,\n} from \"@/core/limit/state/limitInputActionsAtom\";\nimport {\n setOtcPayAmountAtomFromProps,\n setOtcReceiveAmountAtomFromProps,\n} from \"@/core/otc/state/otcInputActionsAtom\";\nimport * as limitDeadline from \"@/core/limit/state/deadlineAtom\";\nimport * as otcDeadline from \"@/core/otc/state/deadlineAtom\";\nimport type { SwapSideUnion } from \"@velora-dex/sdk\";\nimport { isCrossChainAtom as isSwapCrossChainAtom } from \"@/core/state/isCrosschainAtom\";\nimport { isLimitCrossChainAtom } from \"@/core/limit/state/isCrosschainAtom\";\nimport { swapSideAtom } from \"@/components/widget/SwapModeSwitcher/state/swapSideAtom\";\nimport { twapSideAtom } from \"@/core/twap/state/twapSideAtom\";\nimport { currentTwapInputAtom } from \"@/core/twap/state/currentTwapInputAtom\";\nimport { currentSwapInputAtom } from \"@/core/state/currentSwapInputAtom\";\n\nexport function syncTokensAfterChainSwitch(chainId: SupportedChainId) {\n syncSwapTokensAfterChainSwitch(chainId);\n syncLimitTokensAfterChainSwitch(chainId);\n syncOtcTokensAfterChainSwitch(chainId);\n syncTwapTokensAfterChainSwitch(chainId);\n}\n\nconst placeholderAtoms = {\n sellAtom: atom(() => \"SELL\" as const satisfies SwapSideUnion),\n falseAtom: atom(() => false),\n currentInputAtom: atom<\"from\" | \"to\", [SetStateAction<\"from\" | \"to\">], void>(\n \"from\",\n () => void 0\n ),\n};\n\nexport const tradeModeToPayAmountUnitAtom: Record<\n TradeMode,\n {\n read: Pick<typeof payInputAmountAtom, \"read\">;\n write: Pick<typeof setLimitPayAmountAtomFromProps, \"write\"> &\n Pick<PrimitiveAtom<string | null>, \"read\">;\n }\n> = {\n swap: { read: payInputAmountAtom, write: payInputAmountAtom },\n limit: {\n read: limitPayInputAmountAtom,\n write: setLimitPayAmountAtomFromProps,\n },\n otc: { read: otcPayInputAmountAtom, write: setOtcPayAmountAtomFromProps },\n twap: { read: twapPayInputAmountAtom, write: twapPayInputAmountAtom },\n};\n\nexport const tradeModeToReceiveAmountUnitAtom: Record<\n TradeMode,\n {\n read: Pick<typeof receiveInputAmountAtom, \"read\">;\n write: Pick<typeof setLimitReceiveAmountAtomFromProps, \"write\"> &\n Pick<PrimitiveAtom<string | null>, \"read\">;\n }\n> = {\n swap: { read: receiveInputAmountAtom, write: receiveInputAmountAtom },\n limit: {\n read: limitReceiveInputAmountAtom,\n write: setLimitReceiveAmountAtomFromProps,\n },\n otc: {\n read: otcReceiveInputAmountAtom,\n write: setOtcReceiveAmountAtomFromProps,\n },\n twap: {\n read: twapReceiveInputAmountAtom,\n write: twapReceiveInputAmountAtom,\n },\n};\n\nexport const tradeModeToTimeUnitAtom: Record<\n \"limit\" | \"otc\",\n typeof limitDeadline.timeUnitAtom\n> = {\n limit: limitDeadline.timeUnitAtom,\n otc: otcDeadline.timeUnitAtom,\n};\n\nexport const tradeModeToPayAmountWeiAtom: Record<\n TradeMode,\n typeof payInputAmountWeiAtom\n> = {\n swap: payInputAmountWeiAtom,\n limit: limitPayInputAmountWeiAtom,\n otc: otcPayInputAmountWeiAtom,\n twap: twapPayInputAmountWeiAtom,\n};\n\nexport const tradeModeToReceiveAmountWeiAtom: Record<\n TradeMode,\n typeof limitReceiveInputAmountWeiAtom\n> = {\n swap: receiveInputAmountWeiAtom,\n limit: limitReceiveInputAmountWeiAtom,\n otc: otcReceiveInputAmountWeiAtom,\n twap: twapReceiveInputAmountWeiAtom,\n};\n\nexport const tradeModeToTokenAtoms: Record<\n TradeMode,\n {\n tokenFromAtom: typeof swapTokenFromAtom;\n tokenToAtom: typeof swapTokenToAtom;\n isCrossChainAtom: typeof isSwapCrossChainAtom;\n }\n> = {\n swap: {\n tokenFromAtom: swapTokenFromAtom,\n tokenToAtom: swapTokenToAtom,\n isCrossChainAtom: isSwapCrossChainAtom,\n },\n limit: {\n tokenFromAtom: limitTokenFromAtom,\n tokenToAtom: limitTokenToAtom,\n isCrossChainAtom: isLimitCrossChainAtom,\n },\n otc: {\n tokenFromAtom: otcTokenFromAtom,\n tokenToAtom: otcTokenToAtom,\n // unused const atom to appease TS\n isCrossChainAtom: placeholderAtoms.falseAtom, // always false\n },\n twap: {\n tokenFromAtom: twapTokenFromAtom,\n tokenToAtom: twapTokenToAtom,\n isCrossChainAtom: isTwapCrossChainAtom,\n },\n};\n\nexport const tradeModeToSetTokenAtoms: Record<\n TradeMode,\n {\n tokenFromAtom: typeof selectSwapTokenFromAtom;\n tokenToAtom: typeof selectSwapTokenToAtom;\n }\n> = {\n swap: {\n tokenFromAtom: selectSwapTokenFromAtom,\n tokenToAtom: selectSwapTokenToAtom,\n },\n limit: {\n tokenFromAtom: selectLimitTokenFromAtom,\n tokenToAtom: selectLimitTokenToAtom,\n },\n otc: {\n tokenFromAtom: selectOtcTokenFromAtom,\n tokenToAtom: selectOtcTokenToAtom,\n },\n twap: {\n tokenFromAtom: selectTwapTokenFromAtom,\n tokenToAtom: selectTwapTokenToAtom,\n },\n};\n\nexport const tradeModeToSideAtom: Record<TradeMode, typeof swapSideAtom> = {\n swap: swapSideAtom,\n twap: twapSideAtom,\n limit: placeholderAtoms.sellAtom,\n otc: placeholderAtoms.sellAtom,\n};\n\nexport const tradeModeToCurrentInputAtom: Record<\n TradeMode,\n typeof currentSwapInputAtom\n> = {\n swap: currentSwapInputAtom,\n twap: currentTwapInputAtom,\n limit: placeholderAtoms.currentInputAtom,\n otc: placeholderAtoms.currentInputAtom,\n};\n\nexport const sideToInputType = {\n SELL: \"from\",\n BUY: \"to\",\n} as const satisfies Record<SwapSideUnion, \"from\" | \"to\">;\n\nexport const useWidgetTokens = (tradeMode: TradeMode) => {\n const { tokenFromAtom, tokenToAtom } = tradeModeToTokenAtoms[tradeMode];\n const tokenFrom = useAtomValue(tokenFromAtom);\n const tokenTo = useAtomValue(tokenToAtom);\n return { tokenFrom, tokenTo };\n};\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAgFA,SAAgByD,EAA2BC,GAA2B;AAIpE7C,CAHAX,EAA+BwD,EAAQ,EACvCrD,GAAgCqD,EAAQ,EACxChD,EAA8BgD,EAAQ,EACtC7C,EAA+B6C,EAAQ;;AAGzC,IAAMC,IAAmB;CACvBC,UAAU3B,QAAW,OAAwC;CAC7D6B,WAAW7B,QAAW,GAAM;CAC5B8B,kBAAkB9B,EAChB,cACM,KAAK,EACb;CACD,EAEY+B,IAOT;CACFK,MAAM;EAAEH,MAAMjD;EAAoBmD,OAAOnD;EAAoB;CAC7DqD,OAAO;EACLJ,MAAM7C;EACN+C,OAAOzB;EACR;CACD4B,KAAK;EAAEL,MAAMzC;EAAuB2C,OAAOvB;EAA8B;CACzE2B,MAAM;EAAEN,MAAMrC;EAAwBuC,OAAOvC;EAAuB;CACrE,EAEY4C,KAOT;CACFJ,MAAM;EAAEH,MAAM/C;EAAwBiD,OAAOjD;EAAwB;CACrEmD,OAAO;EACLJ,MAAM3C;EACN6C,OAAOxB;EACR;CACD2B,KAAK;EACHL,MAAMvC;EACNyC,OAAOtB;EACR;CACD0B,MAAM;EACJN,MAAMnC;EACNqC,OAAOrC;EACT;CACD,EAEY2C,KAGT;CACFJ,OAAOvB;CACPwB,KAAKvB;CACN,EAEY4B,KAGT;CACFP,MAAMnD;CACNoD,OAAOhD;CACPiD,KAAK7C;CACL8C,MAAM1C;CACP,EAEY+C,KAGT;CACFR,MAAMjD;CACNkD,OAAO9C;CACP+C,KAAK3C;CACL4C,MAAMxC;CACP,EAEY8C,IAOT;CACFT,MAAM;EACJU,eAAe5E;EACf6E,aAAa5E;EACK+C;EACnB;CACDmB,OAAO;EACLS,eAAezE;EACf0E,aAAazE;EACb2C,kBAAkBE;EACnB;CACDmB,KAAK;EACHQ,eAAevE;EACfwE,aAAavE;EAEbyC,kBAAkBS,EAAiBG;EACpC;CACDU,MAAM;EACJO,eAAepE;EACfqE,aAAapE;EACbsC,kBAAkBpC;EACpB;CACD,EAEYmE,IAMT;CACFZ,MAAM;EACJU,eAAe/E;EACfgF,aAAa/E;EACd;CACDqE,OAAO;EACLS,eAAe1C;EACf2C,aAAa1C;EACd;CACDiC,KAAK;EACHQ,eAAexC;EACfyC,aAAaxC;EACd;CACDgC,MAAM;EACJO,eAAetC;EACfuC,aAAatC;EACf;CACD,EAEYwC,KAA8D;CACzEb,MAAMhB;CACNmB,MAAMlB;CACNgB,OAAOX,EAAiBC;CACxBW,KAAKZ,EAAiBC;CACvB,EAEYuB,KAGT;CACFd,MAAMb;CACNgB,MAAMjB;CACNe,OAAOX,EAAiBI;CACxBQ,KAAKZ,EAAiBI;CACvB,EAEYqB,KAAkB;CAC7BC,MAAM;CACNC,KAAK;CACN,EAEYC,MAAkBC,MAAA;CAAA,IAAAC,IAAAC,EAAA,EAAA,EAC7B,EAAAX,kBAAAC,mBAAuCF,EAAsBU,IAC7DG,IAAkBvD,EAAa2C,EAAc,EAC7Ca,IAAgBxD,EAAa4C,EAAY,EAACa;AACb,QADaJ,EAAA,OAAAE,KAAAF,EAAA,OAAAG,KACnCC,IAAA;EAAAF;EAAAC;EAAsB,EAAAH,EAAA,KAAAE,GAAAF,EAAA,KAAAG,GAAAH,EAAA,KAAAI,KAAAA,IAAAJ,EAAA,IAAtBI"}
|
|
1
|
+
{"version":3,"file":"common.js","names":["selectSwapTokenFromAtom","selectSwapTokenToAtom","syncSwapTokensAfterChainSwitch","swapTokenFromAtom","swapTokenToAtom","syncLimitTokensAfterChainSwitch","limitTokenFromAtom","limitTokenToAtom","otcTokenFromAtom","otcTokenToAtom","syncOtcTokensAfterChainSwitch","twapTokenFromAtom","twapTokenToAtom","syncTwapTokensAfterChainSwitch","isTwapCrossChainAtom","TradeMode","SupportedChainId","payInputAmountAtom","payInputAmountWeiAtom","receiveInputAmountAtom","receiveInputAmountWeiAtom","limitPayInputAmountAtom","limitPayInputAmountWeiAtom","limitReceiveInputAmountAtom","limitReceiveInputAmountWeiAtom","otcPayInputAmountAtom","otcPayInputAmountWeiAtom","otcReceiveInputAmountAtom","otcReceiveInputAmountWeiAtom","twapPayInputAmountAtom","twapPayInputAmountWeiAtom","twapReceiveInputAmountAtom","twapReceiveInputAmountWeiAtom","atom","PrimitiveAtom","SetStateAction","useAtomValue","selectLimitTokenFromAtom","selectLimitTokenToAtom","selectOtcTokenFromAtom","selectOtcTokenToAtom","selectTwapTokenFromAtom","selectTwapTokenToAtom","setLimitPayAmountAtomFromProps","setLimitReceiveAmountAtomFromProps","setOtcPayAmountAtomFromProps","setOtcReceiveAmountAtomFromProps","limitDeadline","otcDeadline","SwapSideUnion","isCrossChainAtom","isSwapCrossChainAtom","isLimitCrossChainAtom","swapSideAtom","twapSideAtom","currentTwapInputAtom","currentSwapInputAtom","syncTokensAfterChainSwitch","chainId","noop","placeholderAtoms","sellAtom","const","falseAtom","currentInputAtom","tradeModeToPayAmountUnitAtom","Record","read","Pick","write","swap","limit","otc","twap","tradeModeToReceiveAmountUnitAtom","tradeModeToTimeUnitAtom","timeUnitAtom","tradeModeToPayAmountWeiAtom","tradeModeToReceiveAmountWeiAtom","tradeModeToTokenAtoms","tokenFromAtom","tokenToAtom","tradeModeToSetTokenAtoms","tradeModeToSideAtom","tradeModeToCurrentInputAtom","sideToInputType","SELL","BUY","useWidgetTokens","tradeMode","$","_c","tokenFrom","tokenTo","t0"],"sources":["../../../../src/core/inputs/state/common.ts"],"sourcesContent":["import {\n selectSwapTokenFromAtom,\n selectSwapTokenToAtom,\n syncSwapTokensAfterChainSwitch,\n} from \"./selectedTokenActionsAtom\";\nimport { swapTokenFromAtom, swapTokenToAtom } from \"./selectedTokenAtom\";\nimport { syncLimitTokensAfterChainSwitch } from \"@/core/limit/state/selectedTokenAtom\";\nimport {\n limitTokenFromAtom,\n limitTokenToAtom,\n} from \"@/core/limit/state/limitTokenAtoms\";\nimport {\n otcTokenFromAtom,\n otcTokenToAtom,\n syncOtcTokensAfterChainSwitch,\n} from \"@/core/otc/state/selectedTokenAtom\";\nimport {\n twapTokenFromAtom,\n twapTokenToAtom,\n} from \"@/core/twap/state/twapTokenAtoms\";\nimport { syncTwapTokensAfterChainSwitch } from \"@/core/twap/state/selectedTokenActionsAtom\";\nimport { isTwapCrossChainAtom } from \"@/core/twap/state/isCrosschainAtom\";\nimport type { TradeMode } from \"@/core/state/tradeModeAtom\";\nimport type { SupportedChainId } from \"@/lib/web3/wagmi/types\";\nimport {\n payInputAmountAtom,\n payInputAmountWeiAtom,\n receiveInputAmountAtom,\n receiveInputAmountWeiAtom,\n} from \"./inputAmountAtom\";\nimport {\n limitPayInputAmountAtom,\n limitPayInputAmountWeiAtom,\n limitReceiveInputAmountAtom,\n limitReceiveInputAmountWeiAtom,\n} from \"@/core/limit/state/limitInputAmountAtom\";\nimport {\n otcPayInputAmountAtom,\n otcPayInputAmountWeiAtom,\n otcReceiveInputAmountAtom,\n otcReceiveInputAmountWeiAtom,\n} from \"@/core/otc/state/otcInputAmountAtom\";\nimport {\n twapPayInputAmountAtom,\n twapPayInputAmountWeiAtom,\n twapReceiveInputAmountAtom,\n twapReceiveInputAmountWeiAtom,\n} from \"@/core/twap/state/twapInputAmountAtom\";\nimport { atom, type PrimitiveAtom, type SetStateAction } from \"jotai\";\nimport { useAtomValue } from \"@/core/store\";\nimport {\n selectLimitTokenFromAtom,\n selectLimitTokenToAtom,\n} from \"@/core/limit/state/selectedTokenActionsAtom\";\nimport {\n selectOtcTokenFromAtom,\n selectOtcTokenToAtom,\n} from \"@/core/otc/state/selectedTokenActionsAtom\";\nimport {\n selectTwapTokenFromAtom,\n selectTwapTokenToAtom,\n} from \"@/core/twap/state/selectedTokenActionsAtom\";\nimport {\n setLimitPayAmountAtomFromProps,\n setLimitReceiveAmountAtomFromProps,\n} from \"@/core/limit/state/limitInputActionsAtom\";\nimport {\n setOtcPayAmountAtomFromProps,\n setOtcReceiveAmountAtomFromProps,\n} from \"@/core/otc/state/otcInputActionsAtom\";\nimport * as limitDeadline from \"@/core/limit/state/deadlineAtom\";\nimport * as otcDeadline from \"@/core/otc/state/deadlineAtom\";\nimport type { SwapSideUnion } from \"@velora-dex/sdk\";\nimport { isCrossChainAtom as isSwapCrossChainAtom } from \"@/core/state/isCrosschainAtom\";\nimport { isLimitCrossChainAtom } from \"@/core/limit/state/isCrosschainAtom\";\nimport { swapSideAtom } from \"@/components/widget/SwapModeSwitcher/state/swapSideAtom\";\nimport { twapSideAtom } from \"@/core/twap/state/twapSideAtom\";\nimport { currentTwapInputAtom } from \"@/core/twap/state/currentTwapInputAtom\";\nimport { currentSwapInputAtom } from \"@/core/state/currentSwapInputAtom\";\n\nexport function syncTokensAfterChainSwitch(chainId: SupportedChainId) {\n syncSwapTokensAfterChainSwitch(chainId);\n syncLimitTokensAfterChainSwitch(chainId);\n syncOtcTokensAfterChainSwitch(chainId);\n syncTwapTokensAfterChainSwitch(chainId);\n}\n\nconst noop = () => void 0;\nconst placeholderAtoms = {\n sellAtom: atom(\"SELL\" as const satisfies SwapSideUnion, noop),\n falseAtom: atom(false, noop),\n currentInputAtom: atom<\"from\" | \"to\", [SetStateAction<\"from\" | \"to\">], void>(\n \"from\",\n noop\n ),\n};\n\nexport const tradeModeToPayAmountUnitAtom: Record<\n TradeMode,\n {\n read: Pick<typeof payInputAmountAtom, \"read\">;\n write: Pick<typeof setLimitPayAmountAtomFromProps, \"write\"> &\n Pick<PrimitiveAtom<string | null>, \"read\">;\n }\n> = {\n swap: { read: payInputAmountAtom, write: payInputAmountAtom },\n limit: {\n read: limitPayInputAmountAtom,\n write: setLimitPayAmountAtomFromProps,\n },\n otc: { read: otcPayInputAmountAtom, write: setOtcPayAmountAtomFromProps },\n twap: { read: twapPayInputAmountAtom, write: twapPayInputAmountAtom },\n};\n\nexport const tradeModeToReceiveAmountUnitAtom: Record<\n TradeMode,\n {\n read: Pick<typeof receiveInputAmountAtom, \"read\">;\n write: Pick<typeof setLimitReceiveAmountAtomFromProps, \"write\"> &\n Pick<PrimitiveAtom<string | null>, \"read\">;\n }\n> = {\n swap: { read: receiveInputAmountAtom, write: receiveInputAmountAtom },\n limit: {\n read: limitReceiveInputAmountAtom,\n write: setLimitReceiveAmountAtomFromProps,\n },\n otc: {\n read: otcReceiveInputAmountAtom,\n write: setOtcReceiveAmountAtomFromProps,\n },\n twap: {\n read: twapReceiveInputAmountAtom,\n write: twapReceiveInputAmountAtom,\n },\n};\n\nexport const tradeModeToTimeUnitAtom: Record<\n \"limit\" | \"otc\",\n typeof limitDeadline.timeUnitAtom\n> = {\n limit: limitDeadline.timeUnitAtom,\n otc: otcDeadline.timeUnitAtom,\n};\n\nexport const tradeModeToPayAmountWeiAtom: Record<\n TradeMode,\n typeof payInputAmountWeiAtom\n> = {\n swap: payInputAmountWeiAtom,\n limit: limitPayInputAmountWeiAtom,\n otc: otcPayInputAmountWeiAtom,\n twap: twapPayInputAmountWeiAtom,\n};\n\nexport const tradeModeToReceiveAmountWeiAtom: Record<\n TradeMode,\n typeof limitReceiveInputAmountWeiAtom\n> = {\n swap: receiveInputAmountWeiAtom,\n limit: limitReceiveInputAmountWeiAtom,\n otc: otcReceiveInputAmountWeiAtom,\n twap: twapReceiveInputAmountWeiAtom,\n};\n\nexport const tradeModeToTokenAtoms: Record<\n TradeMode,\n {\n tokenFromAtom: typeof swapTokenFromAtom;\n tokenToAtom: typeof swapTokenToAtom;\n isCrossChainAtom: typeof isSwapCrossChainAtom;\n }\n> = {\n swap: {\n tokenFromAtom: swapTokenFromAtom,\n tokenToAtom: swapTokenToAtom,\n isCrossChainAtom: isSwapCrossChainAtom,\n },\n limit: {\n tokenFromAtom: limitTokenFromAtom,\n tokenToAtom: limitTokenToAtom,\n isCrossChainAtom: isLimitCrossChainAtom,\n },\n otc: {\n tokenFromAtom: otcTokenFromAtom,\n tokenToAtom: otcTokenToAtom,\n // unused const atom to appease TS\n isCrossChainAtom: placeholderAtoms.falseAtom, // always false\n },\n twap: {\n tokenFromAtom: twapTokenFromAtom,\n tokenToAtom: twapTokenToAtom,\n isCrossChainAtom: isTwapCrossChainAtom,\n },\n};\n\nexport const tradeModeToSetTokenAtoms: Record<\n TradeMode,\n {\n tokenFromAtom: typeof selectSwapTokenFromAtom;\n tokenToAtom: typeof selectSwapTokenToAtom;\n }\n> = {\n swap: {\n tokenFromAtom: selectSwapTokenFromAtom,\n tokenToAtom: selectSwapTokenToAtom,\n },\n limit: {\n tokenFromAtom: selectLimitTokenFromAtom,\n tokenToAtom: selectLimitTokenToAtom,\n },\n otc: {\n tokenFromAtom: selectOtcTokenFromAtom,\n tokenToAtom: selectOtcTokenToAtom,\n },\n twap: {\n tokenFromAtom: selectTwapTokenFromAtom,\n tokenToAtom: selectTwapTokenToAtom,\n },\n};\n\nexport const tradeModeToSideAtom: Record<TradeMode, typeof swapSideAtom> = {\n swap: swapSideAtom,\n twap: twapSideAtom,\n limit: placeholderAtoms.sellAtom,\n otc: placeholderAtoms.sellAtom,\n};\n\nexport const tradeModeToCurrentInputAtom: Record<\n TradeMode,\n typeof currentSwapInputAtom\n> = {\n swap: currentSwapInputAtom,\n twap: currentTwapInputAtom,\n limit: placeholderAtoms.currentInputAtom,\n otc: placeholderAtoms.currentInputAtom,\n};\n\nexport const sideToInputType = {\n SELL: \"from\",\n BUY: \"to\",\n} as const satisfies Record<SwapSideUnion, \"from\" | \"to\">;\n\nexport const useWidgetTokens = (tradeMode: TradeMode) => {\n const { tokenFromAtom, tokenToAtom } = tradeModeToTokenAtoms[tradeMode];\n const tokenFrom = useAtomValue(tokenFromAtom);\n const tokenTo = useAtomValue(tokenToAtom);\n return { tokenFrom, tokenTo };\n};\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAgFA,SAAgByD,EAA2BC,GAA2B;AAIpE7C,CAHAX,EAA+BwD,EAAQ,EACvCrD,EAAgCqD,EAAQ,EACxChD,EAA8BgD,EAAQ,EACtC7C,EAA+B6C,EAAQ;;AAGzC,IAAMC,UAAa,KAAK,GAClBC,IAAmB;CACvBC,UAAU5B,EAAK,QAAyC0B,EAAK;CAC7DI,WAAW9B,EAAK,IAAO0B,EAAK;CAC5BK,kBAAkB/B,EAChB,QACA0B,EACF;CACD,EAEYM,KAOT;CACFK,MAAM;EAAEH,MAAMlD;EAAoBoD,OAAOpD;EAAoB;CAC7DsD,OAAO;EACLJ,MAAM9C;EACNgD,OAAO1B;EACR;CACD6B,KAAK;EAAEL,MAAM1C;EAAuB4C,OAAOxB;EAA8B;CACzE4B,MAAM;EAAEN,MAAMtC;EAAwBwC,OAAOxC;EAAuB;CACrE,EAEY6C,KAOT;CACFJ,MAAM;EAAEH,MAAMhD;EAAwBkD,OAAOlD;EAAwB;CACrEoD,OAAO;EACLJ,MAAM5C;EACN8C,OAAOzB;EACR;CACD4B,KAAK;EACHL,MAAMxC;EACN0C,OAAOvB;EACR;CACD2B,MAAM;EACJN,MAAMpC;EACNsC,OAAOtC;EACT;CACD,EAEY4C,KAGT;CACFJ,OAAOxB;CACPyB,KAAKxB;CACN,EAEY6B,KAGT;CACFP,MAAMpD;CACNqD,OAAOjD;CACPkD,KAAK9C;CACL+C,MAAM3C;CACP,EAEYgD,KAGT;CACFR,MAAMlD;CACNmD,OAAO/C;CACPgD,KAAK5C;CACL6C,MAAMzC;CACP,EAEY+C,IAOT;CACFT,MAAM;EACJU,eAAe7E;EACf8E,aAAa7E;EACK+C;EACnB;CACDoB,OAAO;EACLS,eAAe1E;EACf2E,aAAa1E;EACb2C,kBAAkBE;EACnB;CACDoB,KAAK;EACHQ,eAAexE;EACfyE,aAAaxE;EAEbyC,kBAAkBU,EAAiBG;EACpC;CACDU,MAAM;EACJO,eAAerE;EACfsE,aAAarE;EACbsC,kBAAkBpC;EACpB;CACD,EAEYoE,KAMT;CACFZ,MAAM;EACJU,eAAehF;EACfiF,aAAahF;EACd;CACDsE,OAAO;EACLS,eAAe3C;EACf4C,aAAa3C;EACd;CACDkC,KAAK;EACHQ,eAAezC;EACf0C,aAAazC;EACd;CACDiC,MAAM;EACJO,eAAevC;EACfwC,aAAavC;EACf;CACD,EAEYyC,KAA8D;CACzEb,MAAMjB;CACNoB,MAAMnB;CACNiB,OAAOX,EAAiBC;CACxBW,KAAKZ,EAAiBC;CACvB,EAEYuB,IAGT;CACFd,MAAMd;CACNiB,MAAMlB;CACNgB,OAAOX,EAAiBI;CACxBQ,KAAKZ,EAAiBI;CACvB,EAEYqB,KAAkB;CAC7BC,MAAM;CACNC,KAAK;CACN,EAEYC,MAAkBC,MAAA;CAAA,IAAAC,IAAAC,EAAA,EAAA,EAC7B,EAAAX,kBAAAC,mBAAuCF,EAAsBU,IAC7DG,IAAkBxD,EAAa4C,EAAc,EAC7Ca,IAAgBzD,EAAa6C,EAAY,EAACa;AACb,QADaJ,EAAA,OAAAE,KAAAF,EAAA,OAAAG,KACnCC,IAAA;EAAAF;EAAAC;EAAsB,EAAAH,EAAA,KAAAE,GAAAF,EAAA,KAAAG,GAAAH,EAAA,KAAAI,KAAAA,IAAAJ,EAAA,IAAtBI"}
|
|
@@ -18,9 +18,9 @@ export declare const TWAP_DURATION_OPTIONS: {
|
|
|
18
18
|
label: string;
|
|
19
19
|
}[];
|
|
20
20
|
/** Custom duration input limits */
|
|
21
|
-
export declare const TWAP_CUSTOM_DURATION_MIN_MINUTES =
|
|
21
|
+
export declare const TWAP_CUSTOM_DURATION_MIN_MINUTES = 60;
|
|
22
22
|
export declare const TWAP_CUSTOM_DURATION_MAX_DAYS = 30;
|
|
23
23
|
export declare const TWAP_CUSTOM_DURATION_MAX_HOURS = 23;
|
|
24
24
|
export declare const TWAP_CUSTOM_DURATION_MAX_MINUTES = 59;
|
|
25
|
-
export declare const TWAP_MIN_SLICE_INTERVAL_S
|
|
25
|
+
export declare const TWAP_MIN_SLICE_INTERVAL_S: number;
|
|
26
26
|
//# sourceMappingURL=constants.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../../../src/core/twap/state/constants.ts"],"names":[],"mappings":"AAAA,qCAAqC;AACrC,eAAO,MAAM,cAAc,IAAI,CAAC;AAChC,eAAO,MAAM,cAAc,MAAM,CAAC;AAClC,eAAO,MAAM,eAAe,IAAI,CAAC;AACjC,eAAO,MAAM,kBAAkB,IAAiB,CAAC;AAEjD,yDAAyD;AACzD,eAAO,MAAM,iBAAiB,MAAM,CAAC;AACrC,eAAO,MAAM,iBAAiB,KAAK,CAAC;AACpC,eAAO,MAAM,kBAAkB,MAAM,CAAC;AACtC,eAAO,MAAM,qBAAqB,IAAI,CAAC;AAEvC,eAAO,MAAM,qBAAqB;;;CAAiC,CAAC;AAEpE,gCAAgC;AAChC,eAAO,MAAM,qBAAqB,EAAE;IAClC,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;CACf,EAKA,CAAC;AAEF,mCAAmC;AACnC,eAAO,MAAM,gCAAgC,
|
|
1
|
+
{"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../../../src/core/twap/state/constants.ts"],"names":[],"mappings":"AAAA,qCAAqC;AACrC,eAAO,MAAM,cAAc,IAAI,CAAC;AAChC,eAAO,MAAM,cAAc,MAAM,CAAC;AAClC,eAAO,MAAM,eAAe,IAAI,CAAC;AACjC,eAAO,MAAM,kBAAkB,IAAiB,CAAC;AAEjD,yDAAyD;AACzD,eAAO,MAAM,iBAAiB,MAAM,CAAC;AACrC,eAAO,MAAM,iBAAiB,KAAK,CAAC;AACpC,eAAO,MAAM,kBAAkB,MAAM,CAAC;AACtC,eAAO,MAAM,qBAAqB,IAAI,CAAC;AAEvC,eAAO,MAAM,qBAAqB;;;CAAiC,CAAC;AAEpE,gCAAgC;AAChC,eAAO,MAAM,qBAAqB,EAAE;IAClC,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;CACf,EAKA,CAAC;AAEF,mCAAmC;AACnC,eAAO,MAAM,gCAAgC,KAAK,CAAC;AAEnD,eAAO,MAAM,6BAA6B,KAAK,CAAC;AAChD,eAAO,MAAM,8BAA8B,KAAK,CAAC;AACjD,eAAO,MAAM,gCAAgC,KAAK,CAAC;AAEnD,eAAO,MAAM,yBAAyB,QAAS,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"constants.js","names":["TWAP_SPLIT_MIN","TWAP_SPLIT_MAX","TWAP_SPLIT_STEP","DEFAULT_TWAP_SPLIT","TWAP_SLIPPAGE_MIN","TWAP_SLIPPAGE_MAX","TWAP_SLIPPAGE_STEP","DEFAULT_TWAP_SLIPPAGE","DEFAULT_TWAP_DURATION","value","label","TWAP_DURATION_OPTIONS","TWAP_CUSTOM_DURATION_MIN_MINUTES","TWAP_CUSTOM_DURATION_MAX_DAYS","TWAP_CUSTOM_DURATION_MAX_HOURS","TWAP_CUSTOM_DURATION_MAX_MINUTES","TWAP_MIN_SLICE_INTERVAL_S"],"sources":["../../../../src/core/twap/state/constants.ts"],"sourcesContent":["/** Number of order splits (min 2) */\nexport const TWAP_SPLIT_MIN = 2;\nexport const TWAP_SPLIT_MAX = 100;\nexport const TWAP_SPLIT_STEP = 1;\nexport const DEFAULT_TWAP_SPLIT = TWAP_SPLIT_MIN;\n\n/** Rate protection (slippage) in percentage, step 0.1 */\nexport const TWAP_SLIPPAGE_MIN = 0.5;\nexport const TWAP_SLIPPAGE_MAX = 50;\nexport const TWAP_SLIPPAGE_STEP = 0.1;\nexport const DEFAULT_TWAP_SLIPPAGE = 2; // 2%\n\nexport const DEFAULT_TWAP_DURATION = { value: 60 * 6, label: \"6h\" };\n\n/** Order duration in minutes */\nexport const TWAP_DURATION_OPTIONS: {\n value: number;\n label: string;\n}[] = [\n { value: 60, label: \"1h\" },\n DEFAULT_TWAP_DURATION,\n { value: 60 * 24, label: \"24h\" },\n { value: 60 * 24 * 7, label: \"1w\" },\n];\n\n/** Custom duration input limits */\nexport const TWAP_CUSTOM_DURATION_MIN_MINUTES =
|
|
1
|
+
{"version":3,"file":"constants.js","names":["TWAP_SPLIT_MIN","TWAP_SPLIT_MAX","TWAP_SPLIT_STEP","DEFAULT_TWAP_SPLIT","TWAP_SLIPPAGE_MIN","TWAP_SLIPPAGE_MAX","TWAP_SLIPPAGE_STEP","DEFAULT_TWAP_SLIPPAGE","DEFAULT_TWAP_DURATION","value","label","TWAP_DURATION_OPTIONS","TWAP_CUSTOM_DURATION_MIN_MINUTES","TWAP_CUSTOM_DURATION_MAX_DAYS","TWAP_CUSTOM_DURATION_MAX_HOURS","TWAP_CUSTOM_DURATION_MAX_MINUTES","TWAP_MIN_SLICE_INTERVAL_S"],"sources":["../../../../src/core/twap/state/constants.ts"],"sourcesContent":["/** Number of order splits (min 2) */\nexport const TWAP_SPLIT_MIN = 2;\nexport const TWAP_SPLIT_MAX = 100;\nexport const TWAP_SPLIT_STEP = 1;\nexport const DEFAULT_TWAP_SPLIT = TWAP_SPLIT_MIN;\n\n/** Rate protection (slippage) in percentage, step 0.1 */\nexport const TWAP_SLIPPAGE_MIN = 0.5;\nexport const TWAP_SLIPPAGE_MAX = 50;\nexport const TWAP_SLIPPAGE_STEP = 0.1;\nexport const DEFAULT_TWAP_SLIPPAGE = 2; // 2%\n\nexport const DEFAULT_TWAP_DURATION = { value: 60 * 6, label: \"6h\" };\n\n/** Order duration in minutes */\nexport const TWAP_DURATION_OPTIONS: {\n value: number;\n label: string;\n}[] = [\n { value: 60, label: \"1h\" },\n DEFAULT_TWAP_DURATION,\n { value: 60 * 24, label: \"24h\" },\n { value: 60 * 24 * 7, label: \"1w\" },\n];\n\n/** Custom duration input limits */\nexport const TWAP_CUSTOM_DURATION_MIN_MINUTES = 60;\n\nexport const TWAP_CUSTOM_DURATION_MAX_DAYS = 30;\nexport const TWAP_CUSTOM_DURATION_MAX_HOURS = 23;\nexport const TWAP_CUSTOM_DURATION_MAX_MINUTES = 59;\n\nexport const TWAP_MIN_SLICE_INTERVAL_S = 60 * 5; // 5 min minimum interval between slices (1 min on the API side)\n"],"mappings":";AAOA,IAAaI,IAAoB,IAEpBE,IAAqB,IAGrBE,IAAwB;CAAEC,OAAO;CAAQC,OAAO;CAAM,EAGtDC,IAGP;CACJ;EAAEF,OAAO;EAAIC,OAAO;EAAM;CAC1BF;CACA;EAAEC,OAAO;EAASC,OAAO;EAAO;CAChC;EAAED,OAAO,OAAU;EAAGC,OAAO;EAAM;CACpC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"selectedTokenActionsAtom.d.ts","sourceRoot":"","sources":["../../../../src/core/twap/state/selectedTokenActionsAtom.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,sBAAsB,CAAC;AAYlD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAE/D,eAAO,MAAM,oBAAoB;;CAwB/B,CAAC;AAEH,eAAO,MAAM,uBAAuB;;CAgEnC,CAAC;AAEF,eAAO,MAAM,qBAAqB;;
|
|
1
|
+
{"version":3,"file":"selectedTokenActionsAtom.d.ts","sourceRoot":"","sources":["../../../../src/core/twap/state/selectedTokenActionsAtom.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,sBAAsB,CAAC;AAYlD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAE/D,eAAO,MAAM,oBAAoB;;CAwB/B,CAAC;AAEH,eAAO,MAAM,uBAAuB;;CAgEnC,CAAC;AAEF,eAAO,MAAM,qBAAqB;;CAyGjC,CAAC;AAEF,eAAO,MAAM,8BAA8B,GAAI,SAAS,gBAAgB,SA+DvE,CAAC"}
|
|
@@ -42,7 +42,7 @@ var m = p(null, async (e, t) => {
|
|
|
42
42
|
} else o(p, m) && (m = h, a(i, m));
|
|
43
43
|
}), g = p(null, async (e, s, l) => {
|
|
44
44
|
let p = e(r);
|
|
45
|
-
if (!d(e, {
|
|
45
|
+
if (l.network !== p.network || !d(e, {
|
|
46
46
|
fromChainId: p.network,
|
|
47
47
|
mode: "twap"
|
|
48
48
|
}).includes(l.network)) return;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"selectedTokenActionsAtom.js","names":["pickDefaultTokenPair","areTokensSame","atom","twapTokenFromAtom","twapTokenToAtom","Token","wagmiConfig","switchChain","isCrosschainPossible","findFirstTokenFromAcross","isTokenFromAcross","allTokensByChainAtom","getSelectableDestChains","enabledSrcChainsAtom","jotaiStore","SupportedChainId","switchTwapTokensAtom","get","set","tokenTo","enabledSrcChains","includes","network","tokenFrom","initChainFrom","selectTwapTokenToAtom","currentTokenFrom","chainId","selectTwapTokenFromAtom","newTokenFrom","initTokenFrom","state","crosschainPossible","chainIdFrom","chainIdTo","mode","isTokenToFromAcross","token","fromChainId","toChainId","maybeAcrossToken","listByChainId","defaultTokenFrom","defaultTokenTo","newTokenTo","selectableDestChains","initTokenTo","defaultToken","wasCrosschain","needResetTokenFrom","firstPossibleSrcChain","srcChain","syncTwapTokensAfterChainSwitch","undefined"],"sources":["../../../../src/core/twap/state/selectedTokenActionsAtom.ts"],"sourcesContent":["import { pickDefaultTokenPair } from \"@/tokens/defaultTokens\";\nimport { areTokensSame } from \"@/tokens/utils/areTokensSame\";\nimport { atom } from \"jotai\";\nimport { twapTokenFromAtom, twapTokenToAtom } from \"./twapTokenAtoms\";\nimport type { Token } from \"@/tokens/state/types\";\nimport { wagmiConfig } from \"@/lib/web3/wagmi/config\";\nimport { switchChain } from \"@/lib/web3/wagmi/switchChain\";\nimport { isCrosschainPossible } from \"@/core/across/isCrosschainPossible\";\nimport {\n findFirstTokenFromAcross,\n isTokenFromAcross,\n} from \"@/core/across/utils\";\nimport { allTokensByChainAtom } from \"@/tokens/state/allTokensByChainAtom\";\nimport { getSelectableDestChains } from \"@/core/state/getSelectableDestChains\";\nimport { enabledSrcChainsAtom } from \"@/core/state/enabledChainsAtom\";\nimport { jotaiStore } from \"@/core/store\";\nimport type { SupportedChainId } from \"@/lib/web3/wagmi/types\";\n\nexport const switchTwapTokensAtom = atom(null, async (get, set) => {\n const tokenTo = get(twapTokenToAtom);\n\n if (!tokenTo) return;\n\n const enabledSrcChains = get(enabledSrcChainsAtom);\n if (!enabledSrcChains.includes(tokenTo.network)) return;\n\n const tokenFrom = get(twapTokenFromAtom);\n const initChainFrom = tokenFrom.network;\n\n // set tokenFrom as is\n set(twapTokenFromAtom, tokenTo);\n // set tokenTo, including running all crosschain logic inside\n set(selectTwapTokenToAtom, tokenFrom);\n\n const currentTokenFrom = get(twapTokenFromAtom);\n\n // switch a token from a different chain?\n if (currentTokenFrom.network !== initChainFrom) {\n switchChain({\n chainId: currentTokenFrom.network,\n });\n }\n});\n\nexport const selectTwapTokenFromAtom = atom(\n null,\n async (get, set, newTokenFrom: Token) => {\n let tokenFrom = get(twapTokenFromAtom);\n let tokenTo = get(twapTokenToAtom);\n const initTokenFrom = tokenFrom;\n\n // set the tokenFrom\n set(twapTokenFromAtom, newTokenFrom);\n tokenFrom = newTokenFrom;\n\n // selecting a token from a different chain?\n if (tokenFrom.network !== wagmiConfig.state.chainId) {\n switchChain({\n chainId: tokenFrom.network,\n });\n }\n\n if (!tokenTo) return;\n\n const crosschainPossible = isCrosschainPossible({\n get,\n chainIdFrom: tokenFrom.network,\n chainIdTo: tokenTo.network,\n mode: \"twap\",\n });\n\n if (crosschainPossible) {\n const isTokenToFromAcross = isTokenFromAcross({\n token: tokenTo,\n fromChainId: tokenFrom.network,\n toChainId: tokenTo.network,\n mode: \"twap\",\n });\n\n if (!isTokenToFromAcross) {\n const maybeAcrossToken = findFirstTokenFromAcross({\n fromChainId: tokenFrom.network,\n toChainId: tokenTo.network,\n listByChainId: get(allTokensByChainAtom).listByChainId,\n mode: \"twap\",\n });\n\n set(twapTokenToAtom, maybeAcrossToken);\n }\n } else {\n if (tokenFrom.network !== tokenTo.network) {\n const [defaultTokenFrom, defaultTokenTo] = pickDefaultTokenPair(\n tokenFrom.network,\n \"twap\"\n );\n\n tokenTo = areTokensSame(tokenFrom, defaultTokenTo)\n ? defaultTokenFrom\n : defaultTokenTo;\n set(twapTokenToAtom, tokenTo);\n } else {\n if (areTokensSame(tokenFrom, tokenTo)) {\n tokenTo = initTokenFrom;\n set(twapTokenToAtom, tokenTo);\n }\n }\n }\n }\n);\n\nexport const selectTwapTokenToAtom = atom(\n null,\n async (get, set, newTokenTo: Token) => {\n let tokenFrom = get(twapTokenFromAtom);\n\n const selectableDestChains = getSelectableDestChains(get, {\n fromChainId: tokenFrom.network,\n mode: \"twap\",\n });\n if (!selectableDestChains.includes(newTokenTo.network)) return;\n\n let tokenTo = get(twapTokenToAtom);\n const initTokenTo = tokenTo;\n\n set(twapTokenToAtom, newTokenTo);\n tokenTo = newTokenTo;\n\n if (areTokensSame(tokenTo, tokenFrom)) {\n const [defaultTokenFrom, defaultTokenTo] = pickDefaultTokenPair(\n tokenTo.network,\n \"twap\"\n );\n\n const defaultToken = areTokensSame(tokenFrom, defaultTokenFrom)\n ? defaultTokenTo\n : defaultTokenFrom;\n\n const wasCrosschain =\n initTokenTo && tokenFrom.network !== initTokenTo.network;\n\n const newTokenFrom = wasCrosschain\n ? defaultToken\n : (initTokenTo ?? defaultToken);\n\n set(twapTokenFromAtom, newTokenFrom);\n tokenFrom = newTokenFrom;\n }\n\n let needResetTokenFrom = false;\n\n const crosschainPossible = isCrosschainPossible({\n get,\n chainIdFrom: tokenFrom.network,\n chainIdTo: tokenTo.network,\n mode: \"twap\",\n });\n\n if (crosschainPossible) {\n const isTokenToFromAcross = isTokenFromAcross({\n token: tokenTo,\n fromChainId: tokenFrom.network,\n toChainId: tokenTo.network,\n mode: \"twap\",\n });\n\n if (!isTokenToFromAcross) {\n needResetTokenFrom = true;\n }\n }\n\n if (tokenFrom.network !== tokenTo.network && !crosschainPossible) {\n needResetTokenFrom = true;\n }\n const enabledSrcChains = get(enabledSrcChainsAtom);\n\n if (needResetTokenFrom) {\n let firstPossibleSrcChain = tokenTo.network;\n if (!enabledSrcChains.includes(tokenTo.network)) {\n for (const srcChain of enabledSrcChains) {\n const crosschainPossible = isCrosschainPossible({\n get,\n chainIdFrom: srcChain,\n chainIdTo: tokenTo.network,\n mode: \"twap\",\n });\n if (crosschainPossible) {\n firstPossibleSrcChain = srcChain;\n break;\n }\n }\n }\n const [defaultTokenFrom, defaultTokenTo] = pickDefaultTokenPair(\n firstPossibleSrcChain,\n \"twap\"\n );\n const newTokenFrom = areTokensSame(tokenTo, defaultTokenFrom)\n ? defaultTokenTo\n : defaultTokenFrom;\n\n set(twapTokenFromAtom, newTokenFrom);\n tokenFrom = newTokenFrom;\n }\n\n // ended up changing tokenFrom network?\n if (tokenFrom.network !== wagmiConfig.state.chainId) {\n switchChain({\n chainId: tokenFrom.network,\n });\n }\n }\n);\n\nexport const syncTwapTokensAfterChainSwitch = (chainId: SupportedChainId) => {\n const enabledSrcChains = jotaiStore.get(enabledSrcChainsAtom);\n if (!enabledSrcChains.includes(chainId)) return;\n\n let tokenFrom = jotaiStore.get(twapTokenFromAtom);\n\n // chains are the same? do nothing\n if (tokenFrom.network === chainId) return;\n\n // get default tokens for the new chain\n const [defaultTokenFrom, defaultTokenTo] = pickDefaultTokenPair(\n chainId,\n \"twap\"\n );\n\n // update tokenFrom\n jotaiStore.set(twapTokenFromAtom, defaultTokenFrom);\n tokenFrom = defaultTokenFrom;\n\n let tokenTo = jotaiStore.get(twapTokenToAtom);\n\n // toChainId derives from tokenTo.network, if no tokenTo - do nothing\n if (!tokenTo) return;\n\n const crosschainPossible = isCrosschainPossible({\n get: jotaiStore.get,\n chainIdFrom: chainId,\n chainIdTo: tokenTo.network,\n mode: \"twap\",\n });\n\n if (crosschainPossible) {\n const isTokenToFromAcross = isTokenFromAcross({\n token: tokenTo,\n fromChainId: chainId,\n toChainId: tokenTo.network,\n mode: \"twap\",\n });\n\n if (!isTokenToFromAcross) {\n const maybeAcrossToken = findFirstTokenFromAcross({\n fromChainId: chainId,\n toChainId: tokenTo.network,\n listByChainId: jotaiStore.get(allTokensByChainAtom).listByChainId,\n mode: \"twap\",\n });\n\n tokenTo = maybeAcrossToken;\n jotaiStore.set(twapTokenToAtom, tokenTo);\n }\n } else {\n const selectableDestChains = getSelectableDestChains(jotaiStore.get, {\n fromChainId: tokenFrom.network,\n mode: \"twap\",\n });\n if (selectableDestChains.includes(chainId)) {\n tokenTo = defaultTokenTo;\n jotaiStore.set(twapTokenToAtom, tokenTo);\n } else {\n tokenTo = undefined;\n jotaiStore.set(twapTokenToAtom, tokenTo);\n }\n }\n};\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"selectedTokenActionsAtom.js","names":["pickDefaultTokenPair","areTokensSame","atom","twapTokenFromAtom","twapTokenToAtom","Token","wagmiConfig","switchChain","isCrosschainPossible","findFirstTokenFromAcross","isTokenFromAcross","allTokensByChainAtom","getSelectableDestChains","enabledSrcChainsAtom","jotaiStore","SupportedChainId","switchTwapTokensAtom","get","set","tokenTo","enabledSrcChains","includes","network","tokenFrom","initChainFrom","selectTwapTokenToAtom","currentTokenFrom","chainId","selectTwapTokenFromAtom","newTokenFrom","initTokenFrom","state","crosschainPossible","chainIdFrom","chainIdTo","mode","isTokenToFromAcross","token","fromChainId","toChainId","maybeAcrossToken","listByChainId","defaultTokenFrom","defaultTokenTo","newTokenTo","selectableDestChains","initTokenTo","defaultToken","wasCrosschain","needResetTokenFrom","firstPossibleSrcChain","srcChain","syncTwapTokensAfterChainSwitch","undefined"],"sources":["../../../../src/core/twap/state/selectedTokenActionsAtom.ts"],"sourcesContent":["import { pickDefaultTokenPair } from \"@/tokens/defaultTokens\";\nimport { areTokensSame } from \"@/tokens/utils/areTokensSame\";\nimport { atom } from \"jotai\";\nimport { twapTokenFromAtom, twapTokenToAtom } from \"./twapTokenAtoms\";\nimport type { Token } from \"@/tokens/state/types\";\nimport { wagmiConfig } from \"@/lib/web3/wagmi/config\";\nimport { switchChain } from \"@/lib/web3/wagmi/switchChain\";\nimport { isCrosschainPossible } from \"@/core/across/isCrosschainPossible\";\nimport {\n findFirstTokenFromAcross,\n isTokenFromAcross,\n} from \"@/core/across/utils\";\nimport { allTokensByChainAtom } from \"@/tokens/state/allTokensByChainAtom\";\nimport { getSelectableDestChains } from \"@/core/state/getSelectableDestChains\";\nimport { enabledSrcChainsAtom } from \"@/core/state/enabledChainsAtom\";\nimport { jotaiStore } from \"@/core/store\";\nimport type { SupportedChainId } from \"@/lib/web3/wagmi/types\";\n\nexport const switchTwapTokensAtom = atom(null, async (get, set) => {\n const tokenTo = get(twapTokenToAtom);\n\n if (!tokenTo) return;\n\n const enabledSrcChains = get(enabledSrcChainsAtom);\n if (!enabledSrcChains.includes(tokenTo.network)) return;\n\n const tokenFrom = get(twapTokenFromAtom);\n const initChainFrom = tokenFrom.network;\n\n // set tokenFrom as is\n set(twapTokenFromAtom, tokenTo);\n // set tokenTo, including running all crosschain logic inside\n set(selectTwapTokenToAtom, tokenFrom);\n\n const currentTokenFrom = get(twapTokenFromAtom);\n\n // switch a token from a different chain?\n if (currentTokenFrom.network !== initChainFrom) {\n switchChain({\n chainId: currentTokenFrom.network,\n });\n }\n});\n\nexport const selectTwapTokenFromAtom = atom(\n null,\n async (get, set, newTokenFrom: Token) => {\n let tokenFrom = get(twapTokenFromAtom);\n let tokenTo = get(twapTokenToAtom);\n const initTokenFrom = tokenFrom;\n\n // set the tokenFrom\n set(twapTokenFromAtom, newTokenFrom);\n tokenFrom = newTokenFrom;\n\n // selecting a token from a different chain?\n if (tokenFrom.network !== wagmiConfig.state.chainId) {\n switchChain({\n chainId: tokenFrom.network,\n });\n }\n\n if (!tokenTo) return;\n\n const crosschainPossible = isCrosschainPossible({\n get,\n chainIdFrom: tokenFrom.network,\n chainIdTo: tokenTo.network,\n mode: \"twap\",\n });\n\n if (crosschainPossible) {\n const isTokenToFromAcross = isTokenFromAcross({\n token: tokenTo,\n fromChainId: tokenFrom.network,\n toChainId: tokenTo.network,\n mode: \"twap\",\n });\n\n if (!isTokenToFromAcross) {\n const maybeAcrossToken = findFirstTokenFromAcross({\n fromChainId: tokenFrom.network,\n toChainId: tokenTo.network,\n listByChainId: get(allTokensByChainAtom).listByChainId,\n mode: \"twap\",\n });\n\n set(twapTokenToAtom, maybeAcrossToken);\n }\n } else {\n if (tokenFrom.network !== tokenTo.network) {\n const [defaultTokenFrom, defaultTokenTo] = pickDefaultTokenPair(\n tokenFrom.network,\n \"twap\"\n );\n\n tokenTo = areTokensSame(tokenFrom, defaultTokenTo)\n ? defaultTokenFrom\n : defaultTokenTo;\n set(twapTokenToAtom, tokenTo);\n } else {\n if (areTokensSame(tokenFrom, tokenTo)) {\n tokenTo = initTokenFrom;\n set(twapTokenToAtom, tokenTo);\n }\n }\n }\n }\n);\n\nexport const selectTwapTokenToAtom = atom(\n null,\n async (get, set, newTokenTo: Token) => {\n let tokenFrom = get(twapTokenFromAtom);\n\n // @TODO reenable TWAP crosschain when ready on the API\n if (newTokenTo.network !== tokenFrom.network) {\n return;\n }\n\n const selectableDestChains = getSelectableDestChains(get, {\n fromChainId: tokenFrom.network,\n mode: \"twap\",\n });\n if (!selectableDestChains.includes(newTokenTo.network)) return;\n\n let tokenTo = get(twapTokenToAtom);\n const initTokenTo = tokenTo;\n\n set(twapTokenToAtom, newTokenTo);\n tokenTo = newTokenTo;\n\n if (areTokensSame(tokenTo, tokenFrom)) {\n const [defaultTokenFrom, defaultTokenTo] = pickDefaultTokenPair(\n tokenTo.network,\n \"twap\"\n );\n\n const defaultToken = areTokensSame(tokenFrom, defaultTokenFrom)\n ? defaultTokenTo\n : defaultTokenFrom;\n\n const wasCrosschain =\n initTokenTo && tokenFrom.network !== initTokenTo.network;\n\n const newTokenFrom = wasCrosschain\n ? defaultToken\n : (initTokenTo ?? defaultToken);\n\n set(twapTokenFromAtom, newTokenFrom);\n tokenFrom = newTokenFrom;\n }\n\n let needResetTokenFrom = false;\n\n const crosschainPossible = isCrosschainPossible({\n get,\n chainIdFrom: tokenFrom.network,\n chainIdTo: tokenTo.network,\n mode: \"twap\",\n });\n\n if (crosschainPossible) {\n const isTokenToFromAcross = isTokenFromAcross({\n token: tokenTo,\n fromChainId: tokenFrom.network,\n toChainId: tokenTo.network,\n mode: \"twap\",\n });\n\n if (!isTokenToFromAcross) {\n needResetTokenFrom = true;\n }\n }\n\n if (tokenFrom.network !== tokenTo.network && !crosschainPossible) {\n needResetTokenFrom = true;\n }\n const enabledSrcChains = get(enabledSrcChainsAtom);\n\n if (needResetTokenFrom) {\n let firstPossibleSrcChain = tokenTo.network;\n if (!enabledSrcChains.includes(tokenTo.network)) {\n for (const srcChain of enabledSrcChains) {\n const crosschainPossible = isCrosschainPossible({\n get,\n chainIdFrom: srcChain,\n chainIdTo: tokenTo.network,\n mode: \"twap\",\n });\n if (crosschainPossible) {\n firstPossibleSrcChain = srcChain;\n break;\n }\n }\n }\n const [defaultTokenFrom, defaultTokenTo] = pickDefaultTokenPair(\n firstPossibleSrcChain,\n \"twap\"\n );\n const newTokenFrom = areTokensSame(tokenTo, defaultTokenFrom)\n ? defaultTokenTo\n : defaultTokenFrom;\n\n set(twapTokenFromAtom, newTokenFrom);\n tokenFrom = newTokenFrom;\n }\n\n // ended up changing tokenFrom network?\n if (tokenFrom.network !== wagmiConfig.state.chainId) {\n switchChain({\n chainId: tokenFrom.network,\n });\n }\n }\n);\n\nexport const syncTwapTokensAfterChainSwitch = (chainId: SupportedChainId) => {\n const enabledSrcChains = jotaiStore.get(enabledSrcChainsAtom);\n if (!enabledSrcChains.includes(chainId)) return;\n\n let tokenFrom = jotaiStore.get(twapTokenFromAtom);\n\n // chains are the same? do nothing\n if (tokenFrom.network === chainId) return;\n\n // get default tokens for the new chain\n const [defaultTokenFrom, defaultTokenTo] = pickDefaultTokenPair(\n chainId,\n \"twap\"\n );\n\n // update tokenFrom\n jotaiStore.set(twapTokenFromAtom, defaultTokenFrom);\n tokenFrom = defaultTokenFrom;\n\n let tokenTo = jotaiStore.get(twapTokenToAtom);\n\n // toChainId derives from tokenTo.network, if no tokenTo - do nothing\n if (!tokenTo) return;\n\n const crosschainPossible = isCrosschainPossible({\n get: jotaiStore.get,\n chainIdFrom: chainId,\n chainIdTo: tokenTo.network,\n mode: \"twap\",\n });\n\n if (crosschainPossible) {\n const isTokenToFromAcross = isTokenFromAcross({\n token: tokenTo,\n fromChainId: chainId,\n toChainId: tokenTo.network,\n mode: \"twap\",\n });\n\n if (!isTokenToFromAcross) {\n const maybeAcrossToken = findFirstTokenFromAcross({\n fromChainId: chainId,\n toChainId: tokenTo.network,\n listByChainId: jotaiStore.get(allTokensByChainAtom).listByChainId,\n mode: \"twap\",\n });\n\n tokenTo = maybeAcrossToken;\n jotaiStore.set(twapTokenToAtom, tokenTo);\n }\n } else {\n const selectableDestChains = getSelectableDestChains(jotaiStore.get, {\n fromChainId: tokenFrom.network,\n mode: \"twap\",\n });\n if (selectableDestChains.includes(chainId)) {\n tokenTo = defaultTokenTo;\n jotaiStore.set(twapTokenToAtom, tokenTo);\n } else {\n tokenTo = undefined;\n jotaiStore.set(twapTokenToAtom, tokenTo);\n }\n }\n};\n"],"mappings":"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"}
|
|
@@ -5,13 +5,13 @@ import { produceTwapDeadlines as i } from "../../../lib/utils/twap.js";
|
|
|
5
5
|
import { atom as a } from "jotai";
|
|
6
6
|
//#region src/core/twap/state/twapParamsAtom.ts
|
|
7
7
|
var o = a(n.value, (e, t, n) => {
|
|
8
|
-
t(o, Math.max(n,
|
|
8
|
+
t(o, Math.max(n, 60));
|
|
9
9
|
}), s = () => e(o), c = a(2), l = a((e) => t(e(c), 2, 100)), u = () => e(l), d = a(2), f = a((e) => t(e(d), r, 50)), p = () => e(f), m = a((e) => i({
|
|
10
10
|
durationMin: e(o),
|
|
11
11
|
numSlices: e(l)
|
|
12
12
|
})), h = () => {
|
|
13
13
|
let e = s(), t = u();
|
|
14
|
-
return e * 60 / t <
|
|
14
|
+
return e * 60 / t < 300;
|
|
15
15
|
};
|
|
16
16
|
//#endregion
|
|
17
17
|
export { m as twapDeadlinesAtom, o as twapDurationAtom, f as twapSlippageAtom, l as twapSplitAtom, s as useTwapDuration, h as useTwapSliceTooShort, p as useTwapSlippage, u as useTwapSplit, d as userTwapSlippageAtom, c as userTwapSplitAtom };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"twapParamsAtom.js","names":["atom","useAtomValue","getNumberWithinRange","DEFAULT_TWAP_DURATION","DEFAULT_TWAP_SLIPPAGE","DEFAULT_TWAP_SPLIT","TWAP_SLIPPAGE_MAX","TWAP_SLIPPAGE_MIN","TWAP_SPLIT_MAX","TWAP_SPLIT_MIN","TWAP_CUSTOM_DURATION_MIN_MINUTES","TWAP_MIN_SLICE_INTERVAL_S","produceTwapDeadlines","twapDurationAtom","value","_","set","newDuration","clampedDuration","Math","max","useTwapDuration","userTwapSplitAtom","twapSplitAtom","get","useTwapSplit","userTwapSlippageAtom","twapSlippageAtom","useTwapSlippage","twapDeadlinesAtom","durationMin","numSlices","useTwapSliceTooShort","sliceIntervalSec"],"sources":["../../../../src/core/twap/state/twapParamsAtom.ts"],"sourcesContent":["import { atom } from \"jotai\";\nimport { useAtomValue } from \"@/core/store\";\nimport { getNumberWithinRange } from \"@/lib/utils\";\nimport {\n DEFAULT_TWAP_DURATION,\n DEFAULT_TWAP_SLIPPAGE,\n DEFAULT_TWAP_SPLIT,\n TWAP_SLIPPAGE_MAX,\n TWAP_SLIPPAGE_MIN,\n TWAP_SPLIT_MAX,\n TWAP_SPLIT_MIN,\n TWAP_CUSTOM_DURATION_MIN_MINUTES,\n TWAP_MIN_SLICE_INTERVAL_S,\n} from \"./constants\";\nimport { produceTwapDeadlines } from \"@/lib/utils/twap\";\n\nexport const twapDurationAtom = atom(\n DEFAULT_TWAP_DURATION.value,\n (_, set, newDuration: number) => {\n const clampedDuration = Math.max(\n newDuration,\n TWAP_CUSTOM_DURATION_MIN_MINUTES\n );\n set(twapDurationAtom, clampedDuration);\n }\n);\n\nexport const useTwapDuration = () => useAtomValue(twapDurationAtom);\n\n// atom to track the user input, which can be out of range\nexport const userTwapSplitAtom = atom(DEFAULT_TWAP_SPLIT);\n\n// derived atom to ensure the actual split used in the order is always within range\nexport const twapSplitAtom = atom((get) =>\n getNumberWithinRange(get(userTwapSplitAtom), TWAP_SPLIT_MIN, TWAP_SPLIT_MAX)\n);\n\nexport const useTwapSplit = () => useAtomValue(twapSplitAtom);\n\n// atom to track the user input, which can be out of range\nexport const userTwapSlippageAtom = atom(DEFAULT_TWAP_SLIPPAGE);\n\n// derived atom to ensure the actual slippage used in the order is always within range\nexport const twapSlippageAtom = atom((get) =>\n getNumberWithinRange(\n get(userTwapSlippageAtom),\n TWAP_SLIPPAGE_MIN,\n TWAP_SLIPPAGE_MAX\n )\n);\n\nexport const useTwapSlippage = () => useAtomValue(twapSlippageAtom);\n\n/**\n * Derived atom that caches TWAP deadlines (orderDeadline, orderInterval).\n * Recomputes only when twapDurationAtom or twapSplitAtom changes,\n * keeping orderDeadline stable across unrelated form changes (token, amount, side, etc.).\n */\nexport const twapDeadlinesAtom = atom((get) => {\n const durationMin = get(twapDurationAtom);\n const numSlices = get(twapSplitAtom);\n return produceTwapDeadlines({ durationMin, numSlices });\n});\n\nexport const useTwapSliceTooShort = () => {\n const durationMin = useTwapDuration();\n const numSlices = useTwapSplit();\n const sliceIntervalSec = (durationMin * 60) / numSlices;\n return sliceIntervalSec < TWAP_MIN_SLICE_INTERVAL_S;\n};\n"],"mappings":";;;;;;AAgBA,IAAaa,IAAmBb,EAC9BG,EAAsBW,QACrBC,GAAGC,GAAKC,MAAwB;AAK/BD,GAAIH,GAJoBM,KAAKC,IAC3BH,GAAAA,
|
|
1
|
+
{"version":3,"file":"twapParamsAtom.js","names":["atom","useAtomValue","getNumberWithinRange","DEFAULT_TWAP_DURATION","DEFAULT_TWAP_SLIPPAGE","DEFAULT_TWAP_SPLIT","TWAP_SLIPPAGE_MAX","TWAP_SLIPPAGE_MIN","TWAP_SPLIT_MAX","TWAP_SPLIT_MIN","TWAP_CUSTOM_DURATION_MIN_MINUTES","TWAP_MIN_SLICE_INTERVAL_S","produceTwapDeadlines","twapDurationAtom","value","_","set","newDuration","clampedDuration","Math","max","useTwapDuration","userTwapSplitAtom","twapSplitAtom","get","useTwapSplit","userTwapSlippageAtom","twapSlippageAtom","useTwapSlippage","twapDeadlinesAtom","durationMin","numSlices","useTwapSliceTooShort","sliceIntervalSec"],"sources":["../../../../src/core/twap/state/twapParamsAtom.ts"],"sourcesContent":["import { atom } from \"jotai\";\nimport { useAtomValue } from \"@/core/store\";\nimport { getNumberWithinRange } from \"@/lib/utils\";\nimport {\n DEFAULT_TWAP_DURATION,\n DEFAULT_TWAP_SLIPPAGE,\n DEFAULT_TWAP_SPLIT,\n TWAP_SLIPPAGE_MAX,\n TWAP_SLIPPAGE_MIN,\n TWAP_SPLIT_MAX,\n TWAP_SPLIT_MIN,\n TWAP_CUSTOM_DURATION_MIN_MINUTES,\n TWAP_MIN_SLICE_INTERVAL_S,\n} from \"./constants\";\nimport { produceTwapDeadlines } from \"@/lib/utils/twap\";\n\nexport const twapDurationAtom = atom(\n DEFAULT_TWAP_DURATION.value,\n (_, set, newDuration: number) => {\n const clampedDuration = Math.max(\n newDuration,\n TWAP_CUSTOM_DURATION_MIN_MINUTES\n );\n set(twapDurationAtom, clampedDuration);\n }\n);\n\nexport const useTwapDuration = () => useAtomValue(twapDurationAtom);\n\n// atom to track the user input, which can be out of range\nexport const userTwapSplitAtom = atom(DEFAULT_TWAP_SPLIT);\n\n// derived atom to ensure the actual split used in the order is always within range\nexport const twapSplitAtom = atom((get) =>\n getNumberWithinRange(get(userTwapSplitAtom), TWAP_SPLIT_MIN, TWAP_SPLIT_MAX)\n);\n\nexport const useTwapSplit = () => useAtomValue(twapSplitAtom);\n\n// atom to track the user input, which can be out of range\nexport const userTwapSlippageAtom = atom(DEFAULT_TWAP_SLIPPAGE);\n\n// derived atom to ensure the actual slippage used in the order is always within range\nexport const twapSlippageAtom = atom((get) =>\n getNumberWithinRange(\n get(userTwapSlippageAtom),\n TWAP_SLIPPAGE_MIN,\n TWAP_SLIPPAGE_MAX\n )\n);\n\nexport const useTwapSlippage = () => useAtomValue(twapSlippageAtom);\n\n/**\n * Derived atom that caches TWAP deadlines (orderDeadline, orderInterval).\n * Recomputes only when twapDurationAtom or twapSplitAtom changes,\n * keeping orderDeadline stable across unrelated form changes (token, amount, side, etc.).\n */\nexport const twapDeadlinesAtom = atom((get) => {\n const durationMin = get(twapDurationAtom);\n const numSlices = get(twapSplitAtom);\n return produceTwapDeadlines({ durationMin, numSlices });\n});\n\nexport const useTwapSliceTooShort = () => {\n const durationMin = useTwapDuration();\n const numSlices = useTwapSplit();\n const sliceIntervalSec = (durationMin * 60) / numSlices;\n return sliceIntervalSec < TWAP_MIN_SLICE_INTERVAL_S;\n};\n"],"mappings":";;;;;;AAgBA,IAAaa,IAAmBb,EAC9BG,EAAsBW,QACrBC,GAAGC,GAAKC,MAAwB;AAK/BD,GAAIH,GAJoBM,KAAKC,IAC3BH,GAAAA,GAED,CACqC;EAEzC,EAEYI,UAAwBpB,EAAaY,EAAiB,EAGtDS,IAAoBtB,EAAAA,EAAwB,EAG5CuB,IAAgBvB,GAAMwB,MACjCtB,EAAqBsB,EAAIF,EAAkB,EAAA,GAAA,IAC7C,CAAC,EAEYG,UAAqBxB,EAAasB,EAAc,EAGhDG,IAAuB1B,EAAAA,EAA2B,EAGlD2B,IAAmB3B,GAAMwB,MACpCtB,EACEsB,EAAIE,EAAqB,EACzBnB,GAAAA,GAGJ,CAAC,EAEYqB,UAAwB3B,EAAa0B,EAAiB,EAOtDE,IAAoB7B,GAAMwB,MAG9BZ,EAAqB;CAAEkB,aAFVN,EAAIX,EAAiB;CAEEkB,WADzBP,EAAID,EAAc;CACkB,CAAC,CACvD,EAEWS,UAAuB;CAClC,IAAAF,IAAoBT,GAAiB,EACrCU,IAAkBN,GAAc;AACwB,QAA9BK,IAAc,KAAMC,IAAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useTwapTokenToInputProps.d.ts","sourceRoot":"","sources":["../../../src/core/twap/useTwapTokenToInputProps.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,sCAAsC,CAAC;AAsB5E,MAAM,MAAM,wBAAwB,GAAG;IACrC,QAAQ,CAAC,EAAE;QAAE,SAAS,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAClC,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,UAAU,CAAC,EAAE,KAAK,GAAG,IAAI,CAAC;CAC3B,CAAC;
|
|
1
|
+
{"version":3,"file":"useTwapTokenToInputProps.d.ts","sourceRoot":"","sources":["../../../src/core/twap/useTwapTokenToInputProps.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,sCAAsC,CAAC;AAsB5E,MAAM,MAAM,wBAAwB,GAAG;IACrC,QAAQ,CAAC,EAAE;QAAE,SAAS,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAClC,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,UAAU,CAAC,EAAE,KAAK,GAAG,IAAI,CAAC;CAC3B,CAAC;AA0GF,eAAO,MAAM,wBAAwB,GACnC,QAAO,wBAA6B,KACnC,eAiBF,CAAC"}
|
|
@@ -29,7 +29,7 @@ var C = () => {
|
|
|
29
29
|
let { balanceUnit: a } = d(r), o;
|
|
30
30
|
return e[3] === a ? o = e[4] : (o = u(a), e[3] = a, e[4] = o), o;
|
|
31
31
|
}, w = (t) => {
|
|
32
|
-
let n = _(
|
|
32
|
+
let n = _(25), r;
|
|
33
33
|
n[0] === t ? r = n[1] : (r = t === void 0 ? {} : t, n[0] = t, n[1] = r);
|
|
34
34
|
let { isPriceLoading: i } = r, c = S(), [l, u] = e(m), d;
|
|
35
35
|
n[2] === c ? d = n[3] : (d = {
|
|
@@ -37,32 +37,32 @@ var C = () => {
|
|
|
37
37
|
mode: "twap"
|
|
38
38
|
}, n[2] = c, n[3] = d);
|
|
39
39
|
let { selectableChains: p } = f(d), g = l !== void 0, x;
|
|
40
|
-
n[4] !==
|
|
41
|
-
networks:
|
|
42
|
-
selectedNetwork:
|
|
40
|
+
n[4] !== c || n[5] !== u || n[6] !== g ? (x = g ? {
|
|
41
|
+
networks: [c],
|
|
42
|
+
selectedNetwork: c,
|
|
43
43
|
allOption: !1,
|
|
44
44
|
onSelect: (e) => e !== "all" && u(e),
|
|
45
|
-
disabled:
|
|
46
|
-
} : void 0, n[4] =
|
|
45
|
+
disabled: !0
|
|
46
|
+
} : void 0, n[4] = c, n[5] = u, n[6] = g, n[7] = x) : x = n[7];
|
|
47
47
|
let C = x, [w, T] = e(a), E = s() === "SELL", D = i && E, O = o(), k = O && i, A;
|
|
48
|
-
n[
|
|
48
|
+
n[8] === T ? A = n[9] : (A = () => T("to"), n[8] = T, n[9] = A);
|
|
49
49
|
let j;
|
|
50
|
-
n[
|
|
50
|
+
n[10] === Symbol.for("react.memo_cache_sentinel") ? (j = /* @__PURE__ */ y("span", { children: "Receive (estimated)" }), n[10] = j) : j = n[10];
|
|
51
51
|
let M;
|
|
52
|
-
n[
|
|
52
|
+
n[11] === g ? M = n[12] : (M = g && /* @__PURE__ */ y("span", {
|
|
53
53
|
className: "text-contrast-5",
|
|
54
54
|
children: "on"
|
|
55
|
-
}), n[
|
|
55
|
+
}), n[11] = g, n[12] = M);
|
|
56
56
|
let N;
|
|
57
|
-
n[
|
|
57
|
+
n[13] === M ? N = n[14] : (N = /* @__PURE__ */ b(v, { children: [
|
|
58
58
|
j,
|
|
59
59
|
" ",
|
|
60
60
|
M
|
|
61
|
-
] }), n[
|
|
61
|
+
] }), n[13] = M, n[14] = N);
|
|
62
62
|
let P = p.length === 0, F;
|
|
63
|
-
n[
|
|
63
|
+
n[15] === k ? F = n[16] : (F = k ? /* @__PURE__ */ y(h, {}) : void 0, n[15] = k, n[16] = F);
|
|
64
64
|
let I = O && w === "to", L;
|
|
65
|
-
return n[
|
|
65
|
+
return n[17] !== D || n[18] !== C || n[19] !== I || n[20] !== A || n[21] !== N || n[22] !== P || n[23] !== F ? (L = {
|
|
66
66
|
networkSwitcherProps: C,
|
|
67
67
|
tokenType: "to",
|
|
68
68
|
onFocus: A,
|
|
@@ -71,7 +71,7 @@ var C = () => {
|
|
|
71
71
|
disabled: P,
|
|
72
72
|
bottomElement: F,
|
|
73
73
|
readOnly: I
|
|
74
|
-
}, n[
|
|
74
|
+
}, n[17] = D, n[18] = C, n[19] = I, n[20] = A, n[21] = N, n[22] = P, n[23] = F, n[24] = L) : L = n[24], L;
|
|
75
75
|
}, T = (e) => {
|
|
76
76
|
let a = _(12), { override: o } = e, s = r("Twap::TokenTo::AmountProps"), l = i(), u = t(c), d = n(c), f;
|
|
77
77
|
a[0] !== o || a[1] !== u || a[2] !== l ? (f = o?.amountWei && l ? x(BigInt(o.amountWei), l.decimals) : u, a[0] = o, a[1] = u, a[2] = l, a[3] = f) : f = a[3];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useTwapTokenToInputProps.js","names":["TokenInputProps","useAtomValue","useSetAtom","useAtom","twapReceiveInputAmountAtom","useLogger","OnValueChange","TokenInputExtraProps","useTokenBalance","MEDIUM_STALE_TIME_FOR_REACTIVENESS","toDecimalTrimmed","selectTwapTokenToAtom","useTwapTokenTo","useChainId","useSelectableDestChains","SupportedChainId","twapChainToAtom","currentTwapInputAtom","useTwapSide","useIsTwapCrossChain","FetchingQuotes","formatUnits","useWarningMessage","UseTwapTokenToInputInput","override","amountWei","isPriceLoading","priceError","Error","useTokenToBalanceUnit","$","_c","tokenTo","t0","Symbol","for","refetchInterval","t1","token","queryOptions","balanceUnit","t2","useExtraProps","undefined","appChainId","chainTo","setChainTo","fromChainId","mode","selectableChains","showNetworkSwitcher","t3","networks","selectedNetwork","allOption","onSelect","chainId","disabled","length","networkSwitcherProps","currentInput","setCurrentInput","side","isSell","isLoading","isCrosschain","showFetchingQuotes","t4","t5","t6","t7","t8","t9","t10","t11","tokenType","const","onFocus","label","bottomElement","readOnly","useTokenToAmountProps","logger","rawAmount","setReceiveAmount","BigInt","decimals","amount","values","log","value","onAmountChange","setTokenTo","onTokenSelect","useTwapTokenToInputProps","input","extraAmountProps","extraProps","tokenBalanceUnit","priceMode","tradeMode","warningMessage"],"sources":["../../../src/core/twap/useTwapTokenToInputProps.tsx"],"sourcesContent":["import type { TokenInputProps } from \"@/components/widget/TokenInput/types\";\nimport { useAtomValue, useSetAtom, useAtom } from \"@/core/store\";\nimport { twapReceiveInputAmountAtom } from \"./state/twapInputAmountAtom\";\nimport { useLogger } from \"../logger\";\nimport type { OnValueChange } from \"react-number-format\";\nimport type { TokenInputExtraProps } from \"../inputs/hooks/types\";\nimport { useTokenBalance } from \"@/hooks/tokens/balances/useTokenBalance\";\nimport { MEDIUM_STALE_TIME_FOR_REACTIVENESS } from \"@/lib/constants/time\";\nimport { toDecimalTrimmed } from \"@/lib/utils/toDecimal\";\nimport { selectTwapTokenToAtom } from \"./state/selectedTokenActionsAtom\";\nimport { useTwapTokenTo } from \"./state/twapTokenAtoms\";\nimport { useChainId } from \"wagmi\";\nimport { useSelectableDestChains } from \"@/hooks/useSelectableDestChains\";\nimport type { SupportedChainId } from \"@/lib/web3/wagmi/types\";\nimport { twapChainToAtom } from \"../state/chainToAtom\";\nimport { currentTwapInputAtom } from \"./state/currentTwapInputAtom\";\nimport { useTwapSide } from \"./state/twapSideAtom\";\nimport { useIsTwapCrossChain } from \"./state/isCrosschainAtom\";\nimport { FetchingQuotes } from \"@/components/widget/FetchingQuotes/FetchingQuotes\";\nimport { formatUnits } from \"viem\";\nimport { useWarningMessage } from \"../inputs/hooks/useWarningMessage\";\n\nexport type UseTwapTokenToInputInput = {\n override?: { amountWei?: string };\n isPriceLoading?: boolean;\n priceError?: Error | null;\n};\n\nconst useTokenToBalanceUnit = () => {\n const tokenTo = useTwapTokenTo();\n\n const { balanceUnit } = useTokenBalance({\n token: tokenTo,\n queryOptions: { refetchInterval: MEDIUM_STALE_TIME_FOR_REACTIVENESS },\n });\n\n return toDecimalTrimmed(balanceUnit);\n};\n\nconst useExtraProps = ({\n isPriceLoading,\n}: {\n isPriceLoading?: boolean;\n} = {}): TokenInputExtraProps => {\n const appChainId = useChainId();\n\n const [chainTo, setChainTo] = useAtom(twapChainToAtom);\n\n const { selectableChains } = useSelectableDestChains({\n fromChainId: appChainId,\n mode: \"twap\",\n });\n\n const showNetworkSwitcher = chainTo !== undefined;\n\n const networkSwitcherProps = showNetworkSwitcher\n ? {\n networks: selectableChains,\n selectedNetwork: chainTo,\n allOption: false,\n onSelect: (chainId: SupportedChainId | \"all\") =>\n chainId !== \"all\" && setChainTo(chainId),\n disabled: selectableChains.length <= 1,\n }\n : undefined;\n\n const [currentInput, setCurrentInput] = useAtom(currentTwapInputAtom);\n\n const side = useTwapSide();\n const isSell = side === \"SELL\";\n\n // SELLing and price is loading = tokenTo input will receive destAmount\n const isLoading = isPriceLoading && isSell;\n\n const isCrosschain = useIsTwapCrossChain();\n const showFetchingQuotes = isCrosschain && isPriceLoading;\n\n return {\n networkSwitcherProps,\n tokenType: \"to\" as const,\n onFocus: () => setCurrentInput(\"to\"),\n label: (\n <>\n <span>Receive (estimated)</span>{\" \"}\n {showNetworkSwitcher && <span className=\"text-contrast-5\">on</span>}\n </>\n ),\n isLoading,\n disabled: selectableChains.length === 0,\n bottomElement: showFetchingQuotes ? <FetchingQuotes /> : undefined,\n readOnly: isCrosschain && currentInput === \"to\", // @TODO revert this change when Crosschain BUY is supported for TWAP\n };\n};\n\nconst useTokenToAmountProps = ({\n override,\n}: UseTwapTokenToInputInput): Pick<\n TokenInputProps,\n \"amount\" | \"token\" | \"onAmountChange\" | \"onTokenSelect\"\n> => {\n const logger = useLogger(\"Twap::TokenTo::AmountProps\");\n const tokenTo = useTwapTokenTo();\n\n const rawAmount = useAtomValue(twapReceiveInputAmountAtom);\n const setReceiveAmount = useSetAtom(twapReceiveInputAmountAtom);\n\n // SELL mode: override from price\n const amount =\n override?.amountWei && tokenTo\n ? formatUnits(BigInt(override.amountWei), tokenTo.decimals)\n : rawAmount;\n\n const onAmountChange: OnValueChange = (values) => {\n logger.log(\"onAmountChange::values\", values);\n setReceiveAmount(values.value);\n };\n\n const setTokenTo = useSetAtom(selectTwapTokenToAtom);\n\n return {\n amount,\n token: tokenTo,\n onAmountChange,\n onTokenSelect: setTokenTo,\n };\n};\n\nexport const useTwapTokenToInputProps = (\n input: UseTwapTokenToInputInput = {}\n): TokenInputProps => {\n const extraAmountProps = useTokenToAmountProps({ override: input.override });\n const extraProps = useExtraProps({ isPriceLoading: input.isPriceLoading });\n const tokenBalanceUnit = useTokenToBalanceUnit();\n const warningMessage = useWarningMessage({\n priceMode: \"delta\",\n priceError: input.priceError,\n mode: \"twap\",\n tradeMode: \"twap\",\n });\n\n return {\n ...extraProps,\n ...extraAmountProps,\n tokenBalanceUnit,\n warningMessage,\n };\n};\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AA4BA,IAAM6B,UAAwB;CAAA,IAAAC,IAAAC,EAAA,EAAA,EAC5BC,IAAgBpB,GAAgB,EAACqB;AAAA,CAAAH,EAAA,OAAAI,OAAAC,IAAA,4BAAA,IAIjBF,IAAA,EAAAG,iBAAmB3B,GAAoC,EAAAqB,EAAA,KAAAG,KAAAA,IAAAH,EAAA;CAAA,IAAAO;AAAA,CAAAP,EAAA,OAAAE,IACtEK,IAAAP,EAAA,MAHuCO,IAAA;EAAAC,OAC/BN;EAAOO,cACAN;EACf,EAAAH,EAAA,KAAAE,GAAAF,EAAA,KAAAO;CAHD,IAAA,EAAAG,mBAAwBhC,EAAgB6B,EAGtC,EAACI;AAEiC,QAFjCX,EAAA,OAAAU,IAEiCC,IAAAX,EAAA,MAA7BW,IAAA/B,EAAiB8B,EAAY,EAAAV,EAAA,KAAAU,GAAAV,EAAA,KAAAW,IAA7BA;GAGHC,KAAgBT,MAAA;CAAA,IAAAH,IAAAC,EAAA,GAAA,EAAAM;AAAA,CAAAP,EAAA,OAAAG,IAIhBI,IAAAP,EAAA,MAJiBO,IAAAJ,MAAAU,KAAAA,IAAA,EAIjB,GAJiBV,GAIjBH,EAAA,KAAAG,GAAAH,EAAA,KAAAO;CAJiB,IAAA,EAAAX,sBAAAW,GAKrBO,IAAmB/B,GAAY,EAE/B,CAAAgC,GAAAC,KAA8B3C,EAAQa,EAAgB,EAACyB;AAAA,CAAAX,EAAA,OAAAc,IAKtDH,IAAAX,EAAA,MAHoDW,IAAA;EAAAM,aACtCH;EAAUI,MACjB;EACP,EAAAlB,EAAA,KAAAc,GAAAd,EAAA,KAAAW;CAHD,IAAA,EAAAQ,wBAA6BnC,EAAwB2B,EAGnD,EAEFS,IAA4BL,MAAYF,KAAAA,GAAUQ;AAAA,CAAArB,EAAA,OAAAe,KAAAf,EAAA,OAAAmB,KAAAnB,EAAA,OAAAgB,KAAAhB,EAAA,OAAAoB,KAErBC,IAAAD,IAAA;EAAAE,UAEbH;EAAgBI,iBACTR;EAAOS,WACb;EAAKC,WACNC,MACRA,MAAY,SAASV,EAAWU,EAAQ;EAAAC,UAChCR,EAAgBS,UAAW;EAE9B,GATgBf,KAAAA,GAShBb,EAAA,KAAAe,GAAAf,EAAA,KAAAmB,GAAAnB,EAAA,KAAAgB,GAAAhB,EAAA,KAAAoB,GAAApB,EAAA,KAAAqB,KAAAA,IAAArB,EAAA;CATb,IAAA6B,IAA6BR,GAW7B,CAAAS,GAAAC,KAAwC1D,EAAQc,EAAqB,EAGrE8C,IADa7C,GAAa,KACF,QAGxB8C,IAAkBtC,KAAAqC,GAElBE,IAAqB9C,GAAqB,EAC1C+C,IAA2BD,KAAAvC,GAA+ByC;AAAA,CAAArC,EAAA,OAAA+B,IAKpBM,IAAArC,EAAA,OAA3BqC,UAAMN,EAAgB,KAAK,EAAA/B,EAAA,KAAA+B,GAAA/B,EAAA,MAAAqC;CAAA,IAAAC;AAAA,CAAAtC,EAAA,QAAAI,OAAAC,IAAA,4BAAA,IAGhCiC,IAAA,kBAAA,QAAA,EAAA,UAAM,uBAA0B,CAAA,EAAAtC,EAAA,MAAAsC,KAAAA,IAAAtC,EAAA;CAAA,IAAAuC;AAAA,CAAAvC,EAAA,QAAAoB,IACmCmB,IAAAvC,EAAA,OAAlEuC,IAAAnB,KAAuB,kBAAA,QAAA;EAAgB,WAAA;YAAkB;EAAS,CAAA,EAAApB,EAAA,MAAAoB,GAAApB,EAAA,MAAAuC;CAAA,IAAAC;AAAA,CAAAxC,EAAA,QAAAuC,IAClEC,IAAAxC,EAAA,OAHHwC,IAAA,kBAAA,GAAA,EAAA,UAAA;EACEF;EAAiC;EAChCC;EACA,EAAA,CAAA,EAAAvC,EAAA,MAAAuC,GAAAvC,EAAA,MAAAwC;CAGK,IAAAC,IAAAtB,EAAgBS,WAAY,GAACc;AAAA,CAAA1C,EAAA,QAAAoC,IAC2BM,IAAA1C,EAAA,OAAnD0C,IAAAN,IAAqB,kBAAC,GAAD,EAA8B,CAAA,GAAnDvB,KAAAA,GAAmDb,EAAA,MAAAoC,GAAApC,EAAA,MAAA0C;CACxD,IAAAC,IAAAR,KAAgBL,MAAiB,MAAIc;AAChD,QADgD5C,EAAA,QAAAkC,KAAAlC,EAAA,QAAA6B,KAAA7B,EAAA,QAAA2C,KAAA3C,EAAA,QAAAqC,KAAArC,EAAA,QAAAwC,KAAAxC,EAAA,QAAAyC,KAAAzC,EAAA,QAAA0C,KAb1CE,IAAA;EAAAf;EAAAgB,WAEM;EAAaE,SACfV;EAA2BW,OAElCR;EAGGN;EAAAP,UAGKc;EAA6BQ,eACxBP;EAAmDQ,UACxDP;EACX,EAAA3C,EAAA,MAAAkC,GAAAlC,EAAA,MAAA6B,GAAA7B,EAAA,MAAA2C,GAAA3C,EAAA,MAAAqC,GAAArC,EAAA,MAAAwC,GAAAxC,EAAA,MAAAyC,GAAAzC,EAAA,MAAA0C,GAAA1C,EAAA,MAAA4C,KAAAA,IAAA5C,EAAA,KAdM4C;GAiBHO,KAAwBhD,MAAA;CAAA,IAAAH,IAAAC,EAAA,GAAA,EAAC,EAAAP,gBAAAS,GAM7BiD,IAAe7E,EAAU,6BAA6B,EACtD2B,IAAgBpB,GAAgB,EAEhCuE,IAAkBlF,EAAaG,EAA2B,EAC1DgF,IAAyBlF,EAAWE,EAA2B,EAACiC;AAAA,CAAAP,EAAA,OAAAN,KAAAM,EAAA,OAAAqD,KAAArD,EAAA,OAAAE,KAI9DK,IAAAb,GAAQC,aAARO,IACIX,EAAYgE,OAAO7D,EAAQC,UAAW,EAAEO,EAAOsD,SACtC,GAFbH,GAEarD,EAAA,KAAAN,GAAAM,EAAA,KAAAqD,GAAArD,EAAA,KAAAE,GAAAF,EAAA,KAAAO,KAAAA,IAAAP,EAAA;CAHf,IAAAyD,IACElD,GAEcI;AAAA,CAAAX,EAAA,OAAAoD,KAAApD,EAAA,OAAAsD,KAEsB3C,KAAA+C,MAAA;AAEpCJ,EADAF,EAAMO,IAAK,0BAA0BD,EAAO,EAC5CJ,EAAiBI,EAAME,MAAO;IAC/B5D,EAAA,KAAAoD,GAAApD,EAAA,KAAAsD,GAAAtD,EAAA,KAAAW,KAAAA,IAAAX,EAAA;CAHD,IAAA6D,IAAsClD,GAKtCmD,IAAmB1F,EAAWS,EAAsB,EAACwC;AAOpD,QAPoDrB,EAAA,OAAAyD,KAAAzD,EAAA,OAAA6D,KAAA7D,EAAA,OAAA8D,KAAA9D,EAAA,QAAAE,KAE9CmB,IAAA;EAAAoC;EAAAjD,OAEEN;EAAO2D;EAAAE,eAECD;EAChB,EAAA9D,EAAA,KAAAyD,GAAAzD,EAAA,KAAA6D,GAAA7D,EAAA,KAAA8D,GAAA9D,EAAA,MAAAE,GAAAF,EAAA,MAAAqB,KAAAA,IAAArB,EAAA,KALMqB;GAQI2C,KAA2B7D,MAAA;CAAA,IAAAH,IAAAC,EAAA,GAAA,EAAAM;AAAA,CAAAP,EAAA,OAAAG,IACFI,IAAAP,EAAA,MAApCO,IAAAJ,MAAAU,KAAAA,IAAA,EAAoC,GAApCV,GAAoCH,EAAA,KAAAG,GAAAH,EAAA,KAAAO;CAApC,IAAA0D,IAAA1D,GAAoCI;AAAA,CAAAX,EAAA,OAAAiE,EAAAvE,WAEuCiB,IAAAX,EAAA,MAA5BW,IAAA,EAAAjB,UAAYuE,EAAKvE,UAAW,EAAAM,EAAA,KAAAiE,EAAAvE,UAAAM,EAAA,KAAAW;CAA3E,IAAAuD,IAAyBf,EAAsBxC,EAA6B,EAACU;AAAA,CAAArB,EAAA,OAAAiE,EAAArE,iBACJyB,IAAArB,EAAA,MAAxCqB,IAAA,EAAAzB,gBAAkBqE,EAAKrE,gBAAiB,EAAAI,EAAA,KAAAiE,EAAArE,gBAAAI,EAAA,KAAAqB;CAAzE,IAAA8C,IAAmBvD,EAAcS,EAAyC,EAC1E+C,IAAyBrE,GAAuB,EAACsC;AAAA,CAAArC,EAAA,OAAAiE,EAAApE,aAMhDwC,IAAArC,EAAA,MALwCqC,IAAA;EAAAgC,WAC5B;EAAOxE,YACNoE,EAAKpE;EAAWqB,MACtB;EAAMoD,WACD;EACZ,EAAAtE,EAAA,KAAAiE,EAAApE,YAAAG,EAAA,KAAAqC;CALD,IAAAkC,IAAuB/E,EAAkB6C,EAKvC,EAACC;AAOF,QAPEtC,EAAA,OAAAkE,KAAAlE,EAAA,OAAAmE,KAAAnE,EAAA,QAAAoE,KAAApE,EAAA,QAAAuE,KAEIjC,IAAA;EAAA,GACF6B;EAAU,GACVD;EAAgBE;EAAAG;EAGpB,EAAAvE,EAAA,KAAAkE,GAAAlE,EAAA,KAAAmE,GAAAnE,EAAA,MAAAoE,GAAApE,EAAA,MAAAuE,GAAAvE,EAAA,MAAAsC,KAAAA,IAAAtC,EAAA,KALMsC"}
|
|
1
|
+
{"version":3,"file":"useTwapTokenToInputProps.js","names":["TokenInputProps","useAtomValue","useSetAtom","useAtom","twapReceiveInputAmountAtom","useLogger","OnValueChange","TokenInputExtraProps","useTokenBalance","MEDIUM_STALE_TIME_FOR_REACTIVENESS","toDecimalTrimmed","selectTwapTokenToAtom","useTwapTokenTo","useChainId","useSelectableDestChains","SupportedChainId","twapChainToAtom","currentTwapInputAtom","useTwapSide","useIsTwapCrossChain","FetchingQuotes","formatUnits","useWarningMessage","UseTwapTokenToInputInput","override","amountWei","isPriceLoading","priceError","Error","useTokenToBalanceUnit","$","_c","tokenTo","t0","Symbol","for","refetchInterval","t1","token","queryOptions","balanceUnit","t2","useExtraProps","undefined","appChainId","chainTo","setChainTo","fromChainId","mode","selectableChains","showNetworkSwitcher","t3","networks","selectedNetwork","allOption","onSelect","chainId","disabled","networkSwitcherProps","currentInput","setCurrentInput","side","isSell","isLoading","isCrosschain","showFetchingQuotes","t4","t5","t6","t7","t8","length","t9","t10","t11","tokenType","const","onFocus","label","bottomElement","readOnly","useTokenToAmountProps","logger","rawAmount","setReceiveAmount","BigInt","decimals","amount","values","log","value","onAmountChange","setTokenTo","onTokenSelect","useTwapTokenToInputProps","input","extraAmountProps","extraProps","tokenBalanceUnit","priceMode","tradeMode","warningMessage"],"sources":["../../../src/core/twap/useTwapTokenToInputProps.tsx"],"sourcesContent":["import type { TokenInputProps } from \"@/components/widget/TokenInput/types\";\nimport { useAtomValue, useSetAtom, useAtom } from \"@/core/store\";\nimport { twapReceiveInputAmountAtom } from \"./state/twapInputAmountAtom\";\nimport { useLogger } from \"../logger\";\nimport type { OnValueChange } from \"react-number-format\";\nimport type { TokenInputExtraProps } from \"../inputs/hooks/types\";\nimport { useTokenBalance } from \"@/hooks/tokens/balances/useTokenBalance\";\nimport { MEDIUM_STALE_TIME_FOR_REACTIVENESS } from \"@/lib/constants/time\";\nimport { toDecimalTrimmed } from \"@/lib/utils/toDecimal\";\nimport { selectTwapTokenToAtom } from \"./state/selectedTokenActionsAtom\";\nimport { useTwapTokenTo } from \"./state/twapTokenAtoms\";\nimport { useChainId } from \"wagmi\";\nimport { useSelectableDestChains } from \"@/hooks/useSelectableDestChains\";\nimport type { SupportedChainId } from \"@/lib/web3/wagmi/types\";\nimport { twapChainToAtom } from \"../state/chainToAtom\";\nimport { currentTwapInputAtom } from \"./state/currentTwapInputAtom\";\nimport { useTwapSide } from \"./state/twapSideAtom\";\nimport { useIsTwapCrossChain } from \"./state/isCrosschainAtom\";\nimport { FetchingQuotes } from \"@/components/widget/FetchingQuotes/FetchingQuotes\";\nimport { formatUnits } from \"viem\";\nimport { useWarningMessage } from \"../inputs/hooks/useWarningMessage\";\n\nexport type UseTwapTokenToInputInput = {\n override?: { amountWei?: string };\n isPriceLoading?: boolean;\n priceError?: Error | null;\n};\n\nconst useTokenToBalanceUnit = () => {\n const tokenTo = useTwapTokenTo();\n\n const { balanceUnit } = useTokenBalance({\n token: tokenTo,\n queryOptions: { refetchInterval: MEDIUM_STALE_TIME_FOR_REACTIVENESS },\n });\n\n return toDecimalTrimmed(balanceUnit);\n};\n\nconst useExtraProps = ({\n isPriceLoading,\n}: {\n isPriceLoading?: boolean;\n} = {}): TokenInputExtraProps => {\n const appChainId = useChainId();\n\n const [chainTo, setChainTo] = useAtom(twapChainToAtom);\n\n const { selectableChains } = useSelectableDestChains({\n fromChainId: appChainId,\n mode: \"twap\",\n });\n\n const showNetworkSwitcher = chainTo !== undefined;\n\n const networkSwitcherProps = showNetworkSwitcher\n ? {\n // @TODO reenable TWAP crosschain when ready on the API\n // networks: selectableChains,\n // selectedNetwork: chainTo,\n networks: [appChainId],\n selectedNetwork: appChainId,\n allOption: false,\n onSelect: (chainId: SupportedChainId | \"all\") =>\n chainId !== \"all\" && setChainTo(chainId),\n // @TODO reenable TWAP crosschain when ready on the API\n // disabled: selectableChains.length <= 1,\n disabled: true,\n }\n : undefined;\n\n const [currentInput, setCurrentInput] = useAtom(currentTwapInputAtom);\n\n const side = useTwapSide();\n const isSell = side === \"SELL\";\n\n // SELLing and price is loading = tokenTo input will receive destAmount\n const isLoading = isPriceLoading && isSell;\n\n const isCrosschain = useIsTwapCrossChain();\n const showFetchingQuotes = isCrosschain && isPriceLoading;\n\n return {\n networkSwitcherProps,\n tokenType: \"to\" as const,\n onFocus: () => setCurrentInput(\"to\"),\n label: (\n <>\n <span>Receive (estimated)</span>{\" \"}\n {showNetworkSwitcher && <span className=\"text-contrast-5\">on</span>}\n </>\n ),\n isLoading,\n disabled: selectableChains.length === 0,\n bottomElement: showFetchingQuotes ? <FetchingQuotes /> : undefined,\n readOnly: isCrosschain && currentInput === \"to\", // @TODO revert this change when Crosschain BUY is supported for TWAP\n };\n};\n\nconst useTokenToAmountProps = ({\n override,\n}: UseTwapTokenToInputInput): Pick<\n TokenInputProps,\n \"amount\" | \"token\" | \"onAmountChange\" | \"onTokenSelect\"\n> => {\n const logger = useLogger(\"Twap::TokenTo::AmountProps\");\n const tokenTo = useTwapTokenTo();\n\n const rawAmount = useAtomValue(twapReceiveInputAmountAtom);\n const setReceiveAmount = useSetAtom(twapReceiveInputAmountAtom);\n\n // SELL mode: override from price\n const amount =\n override?.amountWei && tokenTo\n ? formatUnits(BigInt(override.amountWei), tokenTo.decimals)\n : rawAmount;\n\n const onAmountChange: OnValueChange = (values) => {\n logger.log(\"onAmountChange::values\", values);\n setReceiveAmount(values.value);\n };\n\n const setTokenTo = useSetAtom(selectTwapTokenToAtom);\n\n return {\n amount,\n token: tokenTo,\n onAmountChange,\n onTokenSelect: setTokenTo,\n };\n};\n\nexport const useTwapTokenToInputProps = (\n input: UseTwapTokenToInputInput = {}\n): TokenInputProps => {\n const extraAmountProps = useTokenToAmountProps({ override: input.override });\n const extraProps = useExtraProps({ isPriceLoading: input.isPriceLoading });\n const tokenBalanceUnit = useTokenToBalanceUnit();\n const warningMessage = useWarningMessage({\n priceMode: \"delta\",\n priceError: input.priceError,\n mode: \"twap\",\n tradeMode: \"twap\",\n });\n\n return {\n ...extraProps,\n ...extraAmountProps,\n tokenBalanceUnit,\n warningMessage,\n };\n};\n"],"mappings":"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"}
|
|
@@ -139,8 +139,8 @@ function D(e) {
|
|
|
139
139
|
}
|
|
140
140
|
function O(e) {
|
|
141
141
|
let { srcAmount: t, destAmount: n } = e.reduce((e, { spentAmount: t, receivedAmount: n, bridgeMetadata: r }) => ({
|
|
142
|
-
srcAmount:
|
|
143
|
-
destAmount:
|
|
142
|
+
srcAmount: e.srcAmount + BigInt(t),
|
|
143
|
+
destAmount: e.destAmount + BigInt(r ? r.outputAmount : n)
|
|
144
144
|
}), {
|
|
145
145
|
srcAmount: 0n,
|
|
146
146
|
destAmount: 0n
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.js","names":["BridgeStatus","DeltaAuction","DeltaAuctionOrder","DeltaAuctionStatus","DeltaPrice","ExternalDeltaOrder","SwapSideUnion","TWAPBuyDeltaOrder","TWAPDeltaOrder","DeltaAuctionTransaction","DeltaAuctionWithTwapOrder","ExecutedDeltaAuction","FailedDeltaAuction","TwapSellOrBuyOrder","replaceUnderscoresWithSpaces","Big","millisecondsToSeconds","scaleByFactor","isTwapSellDeltaOrder","order","isTwapBuyDeltaOrder","isOrderCrosschain","bridge","destinationChainId","isDeltaAuctionData","data","isCrosschainAuctionExecuted","auction","isTwapAuction","transactions","length","numSlices","bridgeStatus","isExecutedDeltaAuction","status","isFailedDeltaAuction","DeltaOrderStatusChecker","failed","has","isCanceledDeltaAuction","isDeltaAuctionExpired","pending","Set","executing","active","success","completed","cancellable","BridgeStatusChecker","VisualOrderStatus","getSingleChainOrderStatus","orderStatus","getCrossChainOrderStatus","getAuctionDestChainId","chainId","Pick","getOverallOrderStatus","getDisplayedOrderStatus","onChainOrderType","isTwapOrder","getTotalTwapSrcAmount","totalSrcAmount","maxSrcAmount","getTotalTwapDestAmount","destAmount","destAmountPerSlice","times","totalDestAmount","scalingFactor","toFixed","getTotalTwapOrderAmounts","srcAmount","getTwapAuctionAmounts","twapAuction","isExecuted","getTransactionAmounts","getTwapOrderDeadlineFromSlices","createdAt","Math","floor","Date","getTime","interval","UnifiedDeltaOrderData","srcChainId","destChainId","srcToken","destToken","swapSide","getUnifiedDeltaOrderData","getOrderTokenAddresses","getAuctionAmounts","getAuctionSwapSide","outputToken","reduce","acc","spentAmount","receivedAmount","bridgeMetadata","BigInt","outputAmount","toString","isTwap","expectedAmount","getSwapSideFromTwapOrderType","getSwapSideFromDeltaOrder","getSwapSideFromDeltaPrice","price","srcAmountBeforeFee","OrderKindToSwapSide","const","kind","TwapTypeToSwapSide","TWAPOrder","TWAPBuyOrder"],"sources":["../../../../../../src/hooks/swap/prices/delta/orders/utils.ts"],"sourcesContent":["import type {\n BridgeStatus,\n DeltaAuction,\n DeltaAuctionOrder,\n DeltaAuctionStatus,\n DeltaPrice,\n ExternalDeltaOrder,\n SwapSideUnion,\n TWAPBuyDeltaOrder,\n TWAPDeltaOrder,\n} from \"@velora-dex/sdk\";\nimport type {\n DeltaAuctionTransaction,\n DeltaAuctionWithTwapOrder,\n ExecutedDeltaAuction,\n FailedDeltaAuction,\n TwapSellOrBuyOrder,\n} from \"./types\";\nimport { replaceUnderscoresWithSpaces } from \"@/lib/utils\";\nimport Big from \"big.js\";\nimport { millisecondsToSeconds } from \"@/lib/utils/time\";\nimport { scaleByFactor } from \"@/lib/utils/scaleFactor\";\n\nexport function isTwapSellDeltaOrder(\n order: DeltaAuction[\"order\"]\n): order is TWAPDeltaOrder {\n return \"destAmountPerSlice\" in order && \"totalSrcAmount\" in order;\n}\n\nexport function isTwapBuyDeltaOrder(\n order: DeltaAuction[\"order\"]\n): order is TWAPBuyDeltaOrder {\n return \"totalDestAmount\" in order && \"maxSrcAmount\" in order;\n}\n\nexport function isOrderCrosschain(\n order: DeltaAuction[\"order\"]\n): order is DeltaAuctionOrder | TwapSellOrBuyOrder {\n return (\n \"bridge\" in order && order.bridge && order.bridge.destinationChainId !== 0\n );\n}\n\nexport function isDeltaAuctionData(data: unknown): data is DeltaAuction {\n return (\n typeof data === \"object\" &&\n data !== null &&\n \"id\" in data &&\n \"chainId\" in data &&\n \"status\" in data &&\n \"order\" in data &&\n \"orderHash\" in data\n );\n}\n\nfunction isCrosschainAuctionExecuted(\n auction: DeltaAuction\n): auction is ExecutedDeltaAuction {\n // crosschain TWAP order is executed when all slices are executed on source chain\n if (isTwapAuction(auction)) {\n return auction.transactions.length === auction.order.numSlices;\n }\n\n // crosschain Order is executed if bridgeStatus is filled\n return auction.bridgeStatus === \"filled\";\n}\n\nexport function isExecutedDeltaAuction(\n auction: DeltaAuction\n): auction is ExecutedDeltaAuction {\n if (auction.status !== \"EXECUTED\") return false;\n\n if (isOrderCrosschain(auction.order)) {\n return isCrosschainAuctionExecuted(auction);\n }\n\n return true;\n}\n\nexport function isFailedDeltaAuction(\n auction: DeltaAuction\n): auction is FailedDeltaAuction {\n // already failed on srcChain, whether Order is crosschain or not\n if (DeltaOrderStatusChecker.failed.has(auction.status)) return true;\n\n // crosschain Order is executed on srcChain, but failed on destChain\n if (auction.status === \"EXECUTED\" && isOrderCrosschain(auction.order)) {\n return (\n auction.bridgeStatus === \"expired\" || auction.bridgeStatus === \"refunded\"\n );\n }\n\n return false;\n}\n\nexport function isCanceledDeltaAuction(\n auction: DeltaAuction\n): auction is DeltaAuction & {\n status: \"CANCELLED\";\n} {\n return auction.status === \"CANCELLED\";\n}\n\nexport function isDeltaAuctionExpired(\n auction: DeltaAuction\n): auction is DeltaAuction & {\n status: \"EXPIRED\";\n} {\n return auction.status === \"EXPIRED\";\n}\n\n/// ------------------- Order status checks -------------------\n\n// specific to submit DeltaOrder substep\nexport const DeltaOrderStatusChecker = {\n pending: new Set<DeltaAuctionStatus>([\n \"NOT_STARTED\",\n \"RUNNING\",\n \"AWAITING_PRE_SIGNATURE\",\n \"CANCELLING\",\n ]), // adjust for when we want to show Pending state\n executing: new Set<DeltaAuctionStatus>([\"EXECUTING\"]),\n active: new Set<DeltaAuctionStatus>([\n \"EXECUTING\",\n \"NOT_STARTED\",\n \"AWAITING_PRE_SIGNATURE\",\n \"RUNNING\",\n \"EXECUTED\",\n \"FAILED\",\n \"EXPIRED\",\n \"CANCELLED\",\n \"CANCELLING\",\n ]), // order always active, unless actual submission breaks\n success: new Set<DeltaAuctionStatus>([\"EXECUTED\"]),\n completed: new Set<DeltaAuctionStatus>([\n \"EXECUTED\",\n \"FAILED\",\n \"EXPIRED\",\n \"CANCELLED\",\n \"REFUNDED\",\n ]),\n failed: new Set<DeltaAuctionStatus>([\n \"FAILED\",\n \"EXPIRED\",\n \"CANCELLED\",\n \"REFUNDED\",\n ]),\n cancellable: new Set<DeltaAuctionStatus>([\n \"NOT_STARTED\",\n \"RUNNING\",\n \"AWAITING_PRE_SIGNATURE\",\n \"EXECUTING\",\n \"SUSPENDED\",\n ]),\n};\n\nexport const BridgeStatusChecker = {\n pending: new Set<BridgeStatus>([\"pending\"]),\n completed: new Set<BridgeStatus>([\"filled\", \"expired\", \"refunded\"]),\n failed: new Set<BridgeStatus>([\"expired\", \"refunded\"]),\n};\n\n// visually we show only \"In progress\", \"Executing\" and separate components for success and failure\nexport type VisualOrderStatus =\n | \"pending\"\n | \"executing\"\n | \"failed\"\n | \"confirmed\";\n\nexport function getSingleChainOrderStatus(\n orderStatus: DeltaAuctionStatus\n): VisualOrderStatus {\n if (DeltaOrderStatusChecker.pending.has(orderStatus)) return \"pending\";\n\n if (DeltaOrderStatusChecker.executing.has(orderStatus)) return \"executing\";\n\n if (DeltaOrderStatusChecker.failed.has(orderStatus)) return \"failed\";\n\n return \"confirmed\";\n}\n\nexport function getCrossChainOrderStatus(\n status: DeltaAuctionStatus,\n bridgeStatus: BridgeStatus | null\n): VisualOrderStatus {\n if (\n DeltaOrderStatusChecker.failed.has(status) ||\n (bridgeStatus && BridgeStatusChecker.failed.has(bridgeStatus))\n )\n return \"failed\";\n\n if (bridgeStatus === \"filled\") return \"confirmed\";\n\n // Order awaiting signature can't be already executing no matter the bridge status\n if (status === \"AWAITING_PRE_SIGNATURE\") return \"pending\";\n\n return \"executing\"; // executed already on source chain, but not yet on destination chain,\n // visually we show \"executing\"\n}\n\nexport function getAuctionDestChainId({\n order,\n chainId,\n}: Pick<DeltaAuction, \"order\" | \"chainId\">) {\n return isOrderCrosschain(order) ? order.bridge.destinationChainId : chainId;\n}\n\n/**\n * For Delta Orders in the Trade Flow to switch between flow steps based on the order status\n */\nexport function getOverallOrderStatus(\n order: Pick<DeltaAuction, \"status\" | \"bridgeStatus\" | \"order\">\n): VisualOrderStatus {\n return isOrderCrosschain(order.order)\n ? // TWAP orders don't have order.bridgeStatus, instead\n // each slice has its own bridgeStatus in transactions[].bridgeMetadata,\n // and some slices could have been bridged while others not yet, or refunded\n // @TODO display \"partially executed\" for TWAP?\n getCrossChainOrderStatus(order.status, order.bridgeStatus)\n : getSingleChainOrderStatus(order.status);\n}\n\n/**\n * For displaying order status to users.\n */\nexport function getDisplayedOrderStatus(status: DeltaAuctionStatus): string {\n if (status === \"AWAITING_PRE_SIGNATURE\") return \"UNSIGNED\";\n return replaceUnderscoresWithSpaces(status);\n}\n\n// -------------------- TWAP -------------------\n\nexport function isTwapAuction(\n order: DeltaAuction\n): order is DeltaAuctionWithTwapOrder {\n return (\n order.onChainOrderType === \"TWAPOrder\" ||\n order.onChainOrderType === \"TWAPBuyOrder\"\n );\n}\n\nexport function isTwapOrder(\n order: DeltaAuction[\"order\"]\n): order is TwapSellOrBuyOrder {\n return \"numSlices\" in order && typeof order.numSlices === \"number\";\n}\n\nfunction getTotalTwapSrcAmount(order: TwapSellOrBuyOrder) {\n return \"totalSrcAmount\" in order ? order.totalSrcAmount : order.maxSrcAmount;\n}\n\nfunction getTotalTwapDestAmount(order: TwapSellOrBuyOrder) {\n const destAmount =\n \"destAmountPerSlice\" in order\n ? Big(order.destAmountPerSlice).times(order.numSlices) // SELL\n : Big(order.totalDestAmount); // BUY\n\n if (isOrderCrosschain(order)) {\n return scaleByFactor(destAmount, order.bridge.scalingFactor).toFixed(0);\n }\n\n return destAmount.toFixed(0);\n}\n\nexport function getTotalTwapOrderAmounts(order: TwapSellOrBuyOrder) {\n const srcAmount = getTotalTwapSrcAmount(order);\n const destAmount = getTotalTwapDestAmount(order);\n return { srcAmount, destAmount };\n}\n\nfunction getTwapAuctionAmounts(twapAuction: DeltaAuctionWithTwapOrder) {\n const isExecuted =\n twapAuction.status === \"EXECUTED\" &&\n twapAuction.transactions.length === twapAuction.order.numSlices;\n\n if (isExecuted) {\n return getTransactionAmounts(\n twapAuction.transactions as DeltaAuctionTransaction[]\n );\n }\n\n return getTotalTwapOrderAmounts(twapAuction.order);\n}\n\n/** Returns the order deadline based on slices and interval */\nexport function getTwapOrderDeadlineFromSlices(\n order: TwapSellOrBuyOrder,\n createdAt: string\n) {\n return Math.floor(\n millisecondsToSeconds(new Date(createdAt).getTime()) +\n order.numSlices * order.interval // order.interval is in seconds\n );\n}\n\n// -------------------- Auction Unified Data --------------------\n\ntype UnifiedDeltaOrderData = {\n /** @description source chain id */\n srcChainId: number;\n /** @description destination chain id (same as source chain id for single chain orders) */\n destChainId: number;\n /** @description input token amount */\n srcAmount: string;\n /** @description output token amount (expected amount for pending orders, actual received amount for executed orders) */\n destAmount: string;\n /** @description input token address */\n srcToken: string;\n /** @description output token address */\n destToken: string;\n /** @description swap side of the order */\n swapSide: SwapSideUnion;\n};\n\nexport function getUnifiedDeltaOrderData(\n auction: DeltaAuction\n): UnifiedDeltaOrderData {\n const { order, chainId } = auction;\n\n const { srcToken, destToken } = getOrderTokenAddresses(order);\n const { srcAmount, destAmount } = getAuctionAmounts(auction);\n\n const srcChainId = chainId;\n const destChainId = getAuctionDestChainId({ order, chainId });\n\n const swapSide = getAuctionSwapSide(auction);\n\n return {\n srcChainId,\n destChainId,\n srcAmount,\n destAmount,\n srcToken,\n destToken,\n swapSide,\n };\n}\n\nexport function getOrderTokenAddresses(order: DeltaAuction[\"order\"]) {\n const srcToken = order.srcToken;\n const destToken = isOrderCrosschain(order)\n ? order.bridge.outputToken\n : order.destToken;\n return {\n srcToken,\n destToken,\n };\n}\n\nfunction getTransactionAmounts(transactions: DeltaAuctionTransaction[]) {\n const { srcAmount, destAmount } = transactions.reduce(\n (acc, { spentAmount, receivedAmount, bridgeMetadata }) => {\n return {\n srcAmount: BigInt(acc.srcAmount) + BigInt(spentAmount),\n destAmount:\n BigInt(acc.destAmount) +\n BigInt(bridgeMetadata ? bridgeMetadata.outputAmount : receivedAmount),\n };\n },\n {\n srcAmount: 0n,\n destAmount: 0n,\n }\n );\n\n return {\n srcAmount: srcAmount.toString(),\n destAmount: destAmount.toString(),\n };\n}\n\nfunction getAuctionAmounts(auction: DeltaAuction) {\n const isTwap = isTwapAuction(auction);\n if (isTwap) {\n return getTwapAuctionAmounts(auction);\n }\n\n const isExecuted = isExecutedDeltaAuction(auction);\n if (isExecuted) {\n return getTransactionAmounts(\n auction.transactions as DeltaAuctionTransaction[]\n );\n }\n\n const order = auction.order;\n\n const srcAmount = order.srcAmount;\n const destAmount = order.expectedAmount || order.destAmount;\n\n if (isOrderCrosschain(order)) {\n return {\n srcAmount,\n destAmount: scaleByFactor(destAmount, order.bridge.scalingFactor).toFixed(\n 0\n ),\n };\n }\n\n return {\n srcAmount,\n destAmount,\n };\n}\n\n// -------------------- SwapSide --------------------\n\nexport function getAuctionSwapSide(auction: DeltaAuction): SwapSideUnion {\n if (isTwapAuction(auction)) {\n // TWAP orders have onChainOrderType instead of kind\n return getSwapSideFromTwapOrderType(auction.onChainOrderType);\n }\n return getSwapSideFromDeltaOrder(auction.order);\n}\n\nexport function getSwapSideFromDeltaPrice(price: DeltaPrice): SwapSideUnion {\n if (price.srcAmountBeforeFee) {\n // srcAmountBeforeFee is only available for BUY side\n return \"BUY\";\n }\n return \"SELL\";\n}\n\nconst OrderKindToSwapSide = {\n 0: \"SELL\",\n 1: \"BUY\",\n} as const;\n\nexport function getSwapSideFromDeltaOrder(\n order: DeltaAuctionOrder | ExternalDeltaOrder\n): SwapSideUnion {\n return OrderKindToSwapSide[order.kind];\n}\n\nconst TwapTypeToSwapSide = {\n TWAPOrder: \"SELL\",\n TWAPBuyOrder: \"BUY\",\n} as const;\n\nexport function getSwapSideFromTwapOrderType(\n onChainOrderType: \"TWAPOrder\" | \"TWAPBuyOrder\"\n): SwapSideUnion {\n return TwapTypeToSwapSide[onChainOrderType];\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"utils.js","names":["BridgeStatus","DeltaAuction","DeltaAuctionOrder","DeltaAuctionStatus","DeltaPrice","ExternalDeltaOrder","SwapSideUnion","TWAPBuyDeltaOrder","TWAPDeltaOrder","DeltaAuctionTransaction","DeltaAuctionWithTwapOrder","ExecutedDeltaAuction","FailedDeltaAuction","TwapSellOrBuyOrder","replaceUnderscoresWithSpaces","Big","millisecondsToSeconds","scaleByFactor","isTwapSellDeltaOrder","order","isTwapBuyDeltaOrder","isOrderCrosschain","bridge","destinationChainId","isDeltaAuctionData","data","isCrosschainAuctionExecuted","auction","isTwapAuction","transactions","length","numSlices","bridgeStatus","isExecutedDeltaAuction","status","isFailedDeltaAuction","DeltaOrderStatusChecker","failed","has","isCanceledDeltaAuction","isDeltaAuctionExpired","pending","Set","executing","active","success","completed","cancellable","BridgeStatusChecker","VisualOrderStatus","getSingleChainOrderStatus","orderStatus","getCrossChainOrderStatus","getAuctionDestChainId","chainId","Pick","getOverallOrderStatus","getDisplayedOrderStatus","onChainOrderType","isTwapOrder","getTotalTwapSrcAmount","totalSrcAmount","maxSrcAmount","getTotalTwapDestAmount","destAmount","destAmountPerSlice","times","totalDestAmount","scalingFactor","toFixed","getTotalTwapOrderAmounts","srcAmount","getTwapAuctionAmounts","twapAuction","isExecuted","getTransactionAmounts","getTwapOrderDeadlineFromSlices","createdAt","Math","floor","Date","getTime","interval","UnifiedDeltaOrderData","srcChainId","destChainId","srcToken","destToken","swapSide","getUnifiedDeltaOrderData","getOrderTokenAddresses","getAuctionAmounts","getAuctionSwapSide","outputToken","reduce","acc","spentAmount","receivedAmount","bridgeMetadata","BigInt","outputAmount","toString","isTwap","expectedAmount","getSwapSideFromTwapOrderType","getSwapSideFromDeltaOrder","getSwapSideFromDeltaPrice","price","srcAmountBeforeFee","OrderKindToSwapSide","const","kind","TwapTypeToSwapSide","TWAPOrder","TWAPBuyOrder"],"sources":["../../../../../../src/hooks/swap/prices/delta/orders/utils.ts"],"sourcesContent":["import type {\n BridgeStatus,\n DeltaAuction,\n DeltaAuctionOrder,\n DeltaAuctionStatus,\n DeltaPrice,\n ExternalDeltaOrder,\n SwapSideUnion,\n TWAPBuyDeltaOrder,\n TWAPDeltaOrder,\n} from \"@velora-dex/sdk\";\nimport type {\n DeltaAuctionTransaction,\n DeltaAuctionWithTwapOrder,\n ExecutedDeltaAuction,\n FailedDeltaAuction,\n TwapSellOrBuyOrder,\n} from \"./types\";\nimport { replaceUnderscoresWithSpaces } from \"@/lib/utils\";\nimport Big from \"big.js\";\nimport { millisecondsToSeconds } from \"@/lib/utils/time\";\nimport { scaleByFactor } from \"@/lib/utils/scaleFactor\";\n\nexport function isTwapSellDeltaOrder(\n order: DeltaAuction[\"order\"]\n): order is TWAPDeltaOrder {\n return \"destAmountPerSlice\" in order && \"totalSrcAmount\" in order;\n}\n\nexport function isTwapBuyDeltaOrder(\n order: DeltaAuction[\"order\"]\n): order is TWAPBuyDeltaOrder {\n return \"totalDestAmount\" in order && \"maxSrcAmount\" in order;\n}\n\nexport function isOrderCrosschain(\n order: DeltaAuction[\"order\"]\n): order is DeltaAuctionOrder | TwapSellOrBuyOrder {\n return (\n \"bridge\" in order && order.bridge && order.bridge.destinationChainId !== 0\n );\n}\n\nexport function isDeltaAuctionData(data: unknown): data is DeltaAuction {\n return (\n typeof data === \"object\" &&\n data !== null &&\n \"id\" in data &&\n \"chainId\" in data &&\n \"status\" in data &&\n \"order\" in data &&\n \"orderHash\" in data\n );\n}\n\nfunction isCrosschainAuctionExecuted(\n auction: DeltaAuction\n): auction is ExecutedDeltaAuction {\n // crosschain TWAP order is executed when all slices are executed on source chain\n if (isTwapAuction(auction)) {\n return auction.transactions.length === auction.order.numSlices;\n }\n\n // crosschain Order is executed if bridgeStatus is filled\n return auction.bridgeStatus === \"filled\";\n}\n\nexport function isExecutedDeltaAuction(\n auction: DeltaAuction\n): auction is ExecutedDeltaAuction {\n if (auction.status !== \"EXECUTED\") return false;\n\n if (isOrderCrosschain(auction.order)) {\n return isCrosschainAuctionExecuted(auction);\n }\n\n return true;\n}\n\nexport function isFailedDeltaAuction(\n auction: DeltaAuction\n): auction is FailedDeltaAuction {\n // already failed on srcChain, whether Order is crosschain or not\n if (DeltaOrderStatusChecker.failed.has(auction.status)) return true;\n\n // crosschain Order is executed on srcChain, but failed on destChain\n if (auction.status === \"EXECUTED\" && isOrderCrosschain(auction.order)) {\n return (\n auction.bridgeStatus === \"expired\" || auction.bridgeStatus === \"refunded\"\n );\n }\n\n return false;\n}\n\nexport function isCanceledDeltaAuction(\n auction: DeltaAuction\n): auction is DeltaAuction & {\n status: \"CANCELLED\";\n} {\n return auction.status === \"CANCELLED\";\n}\n\nexport function isDeltaAuctionExpired(\n auction: DeltaAuction\n): auction is DeltaAuction & {\n status: \"EXPIRED\";\n} {\n return auction.status === \"EXPIRED\";\n}\n\n/// ------------------- Order status checks -------------------\n\n// specific to submit DeltaOrder substep\nexport const DeltaOrderStatusChecker = {\n pending: new Set<DeltaAuctionStatus>([\n \"NOT_STARTED\",\n \"RUNNING\",\n \"AWAITING_PRE_SIGNATURE\",\n \"CANCELLING\",\n ]), // adjust for when we want to show Pending state\n executing: new Set<DeltaAuctionStatus>([\"EXECUTING\"]),\n active: new Set<DeltaAuctionStatus>([\n \"EXECUTING\",\n \"NOT_STARTED\",\n \"AWAITING_PRE_SIGNATURE\",\n \"RUNNING\",\n \"EXECUTED\",\n \"FAILED\",\n \"EXPIRED\",\n \"CANCELLED\",\n \"CANCELLING\",\n ]), // order always active, unless actual submission breaks\n success: new Set<DeltaAuctionStatus>([\"EXECUTED\"]),\n completed: new Set<DeltaAuctionStatus>([\n \"EXECUTED\",\n \"FAILED\",\n \"EXPIRED\",\n \"CANCELLED\",\n \"REFUNDED\",\n ]),\n failed: new Set<DeltaAuctionStatus>([\n \"FAILED\",\n \"EXPIRED\",\n \"CANCELLED\",\n \"REFUNDED\",\n ]),\n cancellable: new Set<DeltaAuctionStatus>([\n \"NOT_STARTED\",\n \"RUNNING\",\n \"AWAITING_PRE_SIGNATURE\",\n \"EXECUTING\",\n \"SUSPENDED\",\n ]),\n};\n\nexport const BridgeStatusChecker = {\n pending: new Set<BridgeStatus>([\"pending\"]),\n completed: new Set<BridgeStatus>([\"filled\", \"expired\", \"refunded\"]),\n failed: new Set<BridgeStatus>([\"expired\", \"refunded\"]),\n};\n\n// visually we show only \"In progress\", \"Executing\" and separate components for success and failure\nexport type VisualOrderStatus =\n | \"pending\"\n | \"executing\"\n | \"failed\"\n | \"confirmed\";\n\nexport function getSingleChainOrderStatus(\n orderStatus: DeltaAuctionStatus\n): VisualOrderStatus {\n if (DeltaOrderStatusChecker.pending.has(orderStatus)) return \"pending\";\n\n if (DeltaOrderStatusChecker.executing.has(orderStatus)) return \"executing\";\n\n if (DeltaOrderStatusChecker.failed.has(orderStatus)) return \"failed\";\n\n return \"confirmed\";\n}\n\nexport function getCrossChainOrderStatus(\n status: DeltaAuctionStatus,\n bridgeStatus: BridgeStatus | null\n): VisualOrderStatus {\n if (\n DeltaOrderStatusChecker.failed.has(status) ||\n (bridgeStatus && BridgeStatusChecker.failed.has(bridgeStatus))\n )\n return \"failed\";\n\n if (bridgeStatus === \"filled\") return \"confirmed\";\n\n // Order awaiting signature can't be already executing no matter the bridge status\n if (status === \"AWAITING_PRE_SIGNATURE\") return \"pending\";\n\n return \"executing\"; // executed already on source chain, but not yet on destination chain,\n // visually we show \"executing\"\n}\n\nexport function getAuctionDestChainId({\n order,\n chainId,\n}: Pick<DeltaAuction, \"order\" | \"chainId\">) {\n return isOrderCrosschain(order) ? order.bridge.destinationChainId : chainId;\n}\n\n/**\n * For Delta Orders in the Trade Flow to switch between flow steps based on the order status\n */\nexport function getOverallOrderStatus(\n order: Pick<DeltaAuction, \"status\" | \"bridgeStatus\" | \"order\">\n): VisualOrderStatus {\n return isOrderCrosschain(order.order)\n ? // TWAP orders don't have order.bridgeStatus, instead\n // each slice has its own bridgeStatus in transactions[].bridgeMetadata,\n // and some slices could have been bridged while others not yet, or refunded\n // @TODO display \"partially executed\" for TWAP?\n getCrossChainOrderStatus(order.status, order.bridgeStatus)\n : getSingleChainOrderStatus(order.status);\n}\n\n/**\n * For displaying order status to users.\n */\nexport function getDisplayedOrderStatus(status: DeltaAuctionStatus): string {\n if (status === \"AWAITING_PRE_SIGNATURE\") return \"UNSIGNED\";\n return replaceUnderscoresWithSpaces(status);\n}\n\n// -------------------- TWAP -------------------\n\nexport function isTwapAuction(\n order: DeltaAuction\n): order is DeltaAuctionWithTwapOrder {\n return (\n order.onChainOrderType === \"TWAPOrder\" ||\n order.onChainOrderType === \"TWAPBuyOrder\"\n );\n}\n\nexport function isTwapOrder(\n order: DeltaAuction[\"order\"]\n): order is TwapSellOrBuyOrder {\n return \"numSlices\" in order && typeof order.numSlices === \"number\";\n}\n\nfunction getTotalTwapSrcAmount(order: TwapSellOrBuyOrder) {\n return \"totalSrcAmount\" in order ? order.totalSrcAmount : order.maxSrcAmount;\n}\n\nfunction getTotalTwapDestAmount(order: TwapSellOrBuyOrder) {\n const destAmount =\n \"destAmountPerSlice\" in order\n ? Big(order.destAmountPerSlice).times(order.numSlices) // SELL\n : Big(order.totalDestAmount); // BUY\n\n if (isOrderCrosschain(order)) {\n return scaleByFactor(destAmount, order.bridge.scalingFactor).toFixed(0);\n }\n\n return destAmount.toFixed(0);\n}\n\nexport function getTotalTwapOrderAmounts(order: TwapSellOrBuyOrder) {\n const srcAmount = getTotalTwapSrcAmount(order);\n const destAmount = getTotalTwapDestAmount(order);\n return { srcAmount, destAmount };\n}\n\nfunction getTwapAuctionAmounts(twapAuction: DeltaAuctionWithTwapOrder) {\n const isExecuted =\n twapAuction.status === \"EXECUTED\" &&\n twapAuction.transactions.length === twapAuction.order.numSlices;\n\n if (isExecuted) {\n return getTransactionAmounts(\n twapAuction.transactions as DeltaAuctionTransaction[]\n );\n }\n\n return getTotalTwapOrderAmounts(twapAuction.order);\n}\n\n/** Returns the order deadline based on slices and interval */\nexport function getTwapOrderDeadlineFromSlices(\n order: TwapSellOrBuyOrder,\n createdAt: string\n) {\n return Math.floor(\n millisecondsToSeconds(new Date(createdAt).getTime()) +\n order.numSlices * order.interval // order.interval is in seconds\n );\n}\n\n// -------------------- Auction Unified Data --------------------\n\ntype UnifiedDeltaOrderData = {\n /** @description source chain id */\n srcChainId: number;\n /** @description destination chain id (same as source chain id for single chain orders) */\n destChainId: number;\n /** @description input token amount */\n srcAmount: string;\n /** @description output token amount (expected amount for pending orders, actual received amount for executed orders) */\n destAmount: string;\n /** @description input token address */\n srcToken: string;\n /** @description output token address */\n destToken: string;\n /** @description swap side of the order */\n swapSide: SwapSideUnion;\n};\n\nexport function getUnifiedDeltaOrderData(\n auction: DeltaAuction\n): UnifiedDeltaOrderData {\n const { order, chainId } = auction;\n\n const { srcToken, destToken } = getOrderTokenAddresses(order);\n const { srcAmount, destAmount } = getAuctionAmounts(auction);\n\n const srcChainId = chainId;\n const destChainId = getAuctionDestChainId({ order, chainId });\n\n const swapSide = getAuctionSwapSide(auction);\n\n return {\n srcChainId,\n destChainId,\n srcAmount,\n destAmount,\n srcToken,\n destToken,\n swapSide,\n };\n}\n\nexport function getOrderTokenAddresses(order: DeltaAuction[\"order\"]) {\n const srcToken = order.srcToken;\n const destToken = isOrderCrosschain(order)\n ? order.bridge.outputToken\n : order.destToken;\n return {\n srcToken,\n destToken,\n };\n}\n\nfunction getTransactionAmounts(transactions: DeltaAuctionTransaction[]) {\n const { srcAmount, destAmount } = transactions.reduce(\n (acc, { spentAmount, receivedAmount, bridgeMetadata }) => {\n return {\n srcAmount: acc.srcAmount + BigInt(spentAmount),\n destAmount:\n acc.destAmount +\n BigInt(bridgeMetadata ? bridgeMetadata.outputAmount : receivedAmount),\n };\n },\n {\n srcAmount: 0n,\n destAmount: 0n,\n }\n );\n\n return {\n srcAmount: srcAmount.toString(),\n destAmount: destAmount.toString(),\n };\n}\n\nfunction getAuctionAmounts(auction: DeltaAuction) {\n const isTwap = isTwapAuction(auction);\n if (isTwap) {\n return getTwapAuctionAmounts(auction);\n }\n\n const isExecuted = isExecutedDeltaAuction(auction);\n if (isExecuted) {\n return getTransactionAmounts(\n auction.transactions as DeltaAuctionTransaction[]\n );\n }\n\n const order = auction.order;\n\n const srcAmount = order.srcAmount;\n const destAmount = order.expectedAmount || order.destAmount;\n\n if (isOrderCrosschain(order)) {\n return {\n srcAmount,\n destAmount: scaleByFactor(destAmount, order.bridge.scalingFactor).toFixed(\n 0\n ),\n };\n }\n\n return {\n srcAmount,\n destAmount,\n };\n}\n\n// -------------------- SwapSide --------------------\n\nexport function getAuctionSwapSide(auction: DeltaAuction): SwapSideUnion {\n if (isTwapAuction(auction)) {\n // TWAP orders have onChainOrderType instead of kind\n return getSwapSideFromTwapOrderType(auction.onChainOrderType);\n }\n return getSwapSideFromDeltaOrder(auction.order);\n}\n\nexport function getSwapSideFromDeltaPrice(price: DeltaPrice): SwapSideUnion {\n if (price.srcAmountBeforeFee) {\n // srcAmountBeforeFee is only available for BUY side\n return \"BUY\";\n }\n return \"SELL\";\n}\n\nconst OrderKindToSwapSide = {\n 0: \"SELL\",\n 1: \"BUY\",\n} as const;\n\nexport function getSwapSideFromDeltaOrder(\n order: DeltaAuctionOrder | ExternalDeltaOrder\n): SwapSideUnion {\n return OrderKindToSwapSide[order.kind];\n}\n\nconst TwapTypeToSwapSide = {\n TWAPOrder: \"SELL\",\n TWAPBuyOrder: \"BUY\",\n} as const;\n\nexport function getSwapSideFromTwapOrderType(\n onChainOrderType: \"TWAPOrder\" | \"TWAPBuyOrder\"\n): SwapSideUnion {\n return TwapTypeToSwapSide[onChainOrderType];\n}\n"],"mappings":"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"}
|