@velora-dex/widget 0.6.1-dev.5 → 0.7.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/components/ui/drawer.js +1 -1
- package/dist/components/ui/tooltip.js +1 -1
- package/dist/components/ui/tooltip.js.map +1 -1
- package/dist/components/widget/AppHeader/AppHeader.d.ts.map +1 -1
- package/dist/components/widget/AppHeader/AppHeader.js +45 -41
- package/dist/components/widget/AppHeader/AppHeader.js.map +1 -1
- package/dist/components/widget/AppHeader/TradeModeSwitcher.d.ts +3 -1
- package/dist/components/widget/AppHeader/TradeModeSwitcher.d.ts.map +1 -1
- package/dist/components/widget/AppHeader/TradeModeSwitcher.js +69 -34
- package/dist/components/widget/AppHeader/TradeModeSwitcher.js.map +1 -1
- package/dist/components/widget/LimitOrderItem/LimitOrderDetails/LimitOrderDetails.d.ts.map +1 -1
- package/dist/components/widget/LimitOrderItem/LimitOrderDetails/LimitOrderDetails.js +77 -67
- package/dist/components/widget/LimitOrderItem/LimitOrderDetails/LimitOrderDetails.js.map +1 -1
- package/dist/components/widget/LimitOrderItem/LimitOrderDetails/utils.d.ts +3 -0
- package/dist/components/widget/LimitOrderItem/LimitOrderDetails/utils.d.ts.map +1 -1
- package/dist/components/widget/LimitOrderItem/LimitOrderDetails/utils.js +71 -23
- package/dist/components/widget/LimitOrderItem/LimitOrderDetails/utils.js.map +1 -1
- package/dist/components/widget/LimitOrderItem/LimitOrderListItem.d.ts +2 -1
- package/dist/components/widget/LimitOrderItem/LimitOrderListItem.d.ts.map +1 -1
- package/dist/components/widget/LimitOrderItem/LimitOrderListItem.js +123 -110
- package/dist/components/widget/LimitOrderItem/LimitOrderListItem.js.map +1 -1
- package/dist/components/widget/LimitOrderItem/utils.d.ts +2 -0
- package/dist/components/widget/LimitOrderItem/utils.d.ts.map +1 -1
- package/dist/components/widget/LimitOrderItem/utils.js +4 -1
- package/dist/components/widget/LimitOrderItem/utils.js.map +1 -1
- package/dist/components/widget/SwapRate/SwapRate.d.ts +2 -1
- package/dist/components/widget/SwapRate/SwapRate.d.ts.map +1 -1
- package/dist/components/widget/SwapRate/SwapRate.js +25 -37
- package/dist/components/widget/SwapRate/SwapRate.js.map +1 -1
- package/dist/components/widget/SwapRate/SwapRateWithTooltip.d.ts +3 -0
- package/dist/components/widget/SwapRate/SwapRateWithTooltip.d.ts.map +1 -0
- package/dist/components/widget/SwapRate/SwapRateWithTooltip.js +42 -0
- package/dist/components/widget/SwapRate/SwapRateWithTooltip.js.map +1 -0
- package/dist/components/widget/SwapRate/utils.d.ts +3 -0
- package/dist/components/widget/SwapRate/utils.d.ts.map +1 -0
- package/dist/components/widget/SwapRate/utils.js +26 -0
- package/dist/components/widget/SwapRate/utils.js.map +1 -0
- package/dist/components/widget/SwapRateWithPriceImpactRow/SwapRateWithPriceImpactRow.d.ts.map +1 -1
- package/dist/components/widget/SwapRateWithPriceImpactRow/SwapRateWithPriceImpactRow.js +20 -27
- package/dist/components/widget/SwapRateWithPriceImpactRow/SwapRateWithPriceImpactRow.js.map +1 -1
- package/dist/core/index.js +1 -1
- package/dist/core/index.js.map +1 -1
- package/dist/core/logger.d.ts +2 -2
- package/dist/core/logger.d.ts.map +1 -1
- package/dist/core/logger.js +8 -2
- package/dist/core/logger.js.map +1 -1
- package/dist/core/screen/hooks/useRunOnMount.d.ts +10 -0
- package/dist/core/screen/hooks/useRunOnMount.d.ts.map +1 -1
- package/dist/core/screen/hooks/useRunOnMount.js +6 -1
- package/dist/core/screen/hooks/useRunOnMount.js.map +1 -1
- package/dist/external/.pnpm/{vaul@1.1.2_patch_hash_07b36ba5def3805dde9d543a880ba9e4caf55e5eb58e544faaa2c186846bf3c1__7f2d7d5ed11750fbec42b3f5689c802d → vaul@1.1.2_patch_hash_07b36ba5def3805dde9d543a880ba9e4caf55e5eb58e544faaa2c186846bf3c1__6feb48fe37bd41e9af5c8e81d5a6f4e1}/external/vaul/dist/index.js +1 -1
- package/dist/external/.pnpm/{vaul@1.1.2_patch_hash_07b36ba5def3805dde9d543a880ba9e4caf55e5eb58e544faaa2c186846bf3c1__7f2d7d5ed11750fbec42b3f5689c802d → vaul@1.1.2_patch_hash_07b36ba5def3805dde9d543a880ba9e4caf55e5eb58e544faaa2c186846bf3c1__6feb48fe37bd41e9af5c8e81d5a6f4e1}/external/vaul/dist/index.js.map +1 -1
- package/dist/hooks/swap/prices/delta/orders/utils.js +1 -1
- package/dist/hooks/swap/tradeFlow/useDeltaFlow.js.map +1 -1
- package/dist/hooks/swap/tradeFlow/useLimitOrderFlow.js.map +1 -1
- package/dist/hooks/swap/tradeFlow/useMarketFlow.js.map +1 -1
- package/dist/hooks/swap/tradeFlow/useTwapFlow.js.map +1 -1
- package/dist/lib/utils/logger.d.ts +7 -4
- package/dist/lib/utils/logger.d.ts.map +1 -1
- package/dist/lib/utils/logger.js +70 -33
- package/dist/lib/utils/logger.js.map +1 -1
- package/dist/lib/utils/twap.d.ts +5 -0
- package/dist/lib/utils/twap.d.ts.map +1 -1
- package/dist/lib/utils/twap.js +8 -1
- package/dist/lib/utils/twap.js.map +1 -1
- package/dist/lib/web3/wagmi/isInsideSafeIframe.js +11 -11
- package/dist/lib/web3/wagmi/isInsideSafeIframe.js.map +1 -1
- package/dist/styles.css +1 -1
- package/dist/tokens/utils/transferAmountsFromReceipt.js +14 -14
- package/dist/tokens/utils/transferAmountsFromReceipt.js.map +1 -1
- package/dist/transactions/queries/ensureTxReceipt.js +8 -8
- package/dist/transactions/queries/ensureTxReceipt.js.map +1 -1
- package/package.json +7 -7
package/dist/lib/utils/logger.js
CHANGED
|
@@ -29,6 +29,8 @@ var e = {
|
|
|
29
29
|
debug: t,
|
|
30
30
|
table: t,
|
|
31
31
|
group: t,
|
|
32
|
+
groupCollapsed: t,
|
|
33
|
+
groupEnd: t,
|
|
32
34
|
once: {
|
|
33
35
|
log: t,
|
|
34
36
|
warn: t,
|
|
@@ -101,16 +103,17 @@ function o(t, n, r = !0) {
|
|
|
101
103
|
] : [i, ...s];
|
|
102
104
|
}
|
|
103
105
|
function s(t, n) {
|
|
104
|
-
let r = n?.color !== !1, i = {
|
|
106
|
+
let r = n?.color !== !1, i = n?.isOn || (() => !0), a = {
|
|
105
107
|
log: void 0,
|
|
106
108
|
warn: void 0,
|
|
107
109
|
error: void 0,
|
|
108
110
|
info: void 0
|
|
109
|
-
},
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
111
|
+
}, s = (...e) => o(e, t, r), c = (e, t) => typeof t == "bigint" ? t.toString() : typeof t == "function" ? "[function]" : t, l = (e, ...t) => {
|
|
112
|
+
if (!i()) return;
|
|
113
|
+
let r = t.map((e) => JSON.stringify(e, c)).join(" ");
|
|
114
|
+
if (r === a[e]) return;
|
|
115
|
+
a[e] = r;
|
|
116
|
+
let o = s(...t);
|
|
114
117
|
switch (n?.showCallSite === !0 && console.trace("Call stack:"), e) {
|
|
115
118
|
case "warn":
|
|
116
119
|
console.warn(...o);
|
|
@@ -123,42 +126,76 @@ function s(t, n) {
|
|
|
123
126
|
break;
|
|
124
127
|
default: console.log(...o);
|
|
125
128
|
}
|
|
129
|
+
}, u = {
|
|
130
|
+
log: (...e) => l("log", ...e),
|
|
131
|
+
warn: (...e) => l("warn", ...e),
|
|
132
|
+
error: (...e) => l("error", ...e),
|
|
133
|
+
info: (...e) => l("info", ...e),
|
|
134
|
+
reset: () => {
|
|
135
|
+
a.log = void 0, a.warn = void 0, a.error = void 0, a.info = void 0;
|
|
136
|
+
},
|
|
137
|
+
getLastMessage: (e = "log") => a[e]
|
|
138
|
+
}, d = (n, ...r) => {
|
|
139
|
+
if (i()) switch (n) {
|
|
140
|
+
case "log":
|
|
141
|
+
case "warn":
|
|
142
|
+
case "error":
|
|
143
|
+
case "info":
|
|
144
|
+
case "debug":
|
|
145
|
+
console[n](...s(...r));
|
|
146
|
+
break;
|
|
147
|
+
case "success": {
|
|
148
|
+
let t = [
|
|
149
|
+
"%c✅ ",
|
|
150
|
+
e.success,
|
|
151
|
+
...s(...r)
|
|
152
|
+
];
|
|
153
|
+
console.log(...t);
|
|
154
|
+
break;
|
|
155
|
+
}
|
|
156
|
+
case "table": {
|
|
157
|
+
let n = r[0], i = r[1];
|
|
158
|
+
t ? (console.group(`%c${t}::`, e.context), console.table(n, i), console.groupEnd()) : console.table(n, i);
|
|
159
|
+
break;
|
|
160
|
+
}
|
|
161
|
+
case "group":
|
|
162
|
+
case "groupCollapsed": {
|
|
163
|
+
let i = r[0];
|
|
164
|
+
t ? console[n](`%c${t}:: ${i}`, e.context) : console[n](i);
|
|
165
|
+
break;
|
|
166
|
+
}
|
|
167
|
+
case "groupEnd":
|
|
168
|
+
console.groupEnd();
|
|
169
|
+
break;
|
|
170
|
+
}
|
|
126
171
|
};
|
|
127
172
|
return {
|
|
128
|
-
log: (...e) =>
|
|
129
|
-
warn: (...e) =>
|
|
130
|
-
error: (...e) =>
|
|
131
|
-
info: (...e) =>
|
|
132
|
-
success: (...
|
|
133
|
-
|
|
134
|
-
"%c✅ ",
|
|
135
|
-
e.success,
|
|
136
|
-
...a(...t)
|
|
137
|
-
];
|
|
138
|
-
console.log(...n);
|
|
173
|
+
log: (...e) => d("log", ...e),
|
|
174
|
+
warn: (...e) => d("warn", ...e),
|
|
175
|
+
error: (...e) => d("error", ...e),
|
|
176
|
+
info: (...e) => d("info", ...e),
|
|
177
|
+
success: (...e) => {
|
|
178
|
+
d("success", ...e);
|
|
139
179
|
},
|
|
140
180
|
debug: (...e) => {
|
|
141
|
-
|
|
181
|
+
d("debug", ...e);
|
|
142
182
|
},
|
|
143
|
-
table: (
|
|
144
|
-
|
|
183
|
+
table: (e, t) => {
|
|
184
|
+
d("table", e, t);
|
|
145
185
|
},
|
|
146
|
-
group: (
|
|
147
|
-
|
|
186
|
+
group: (e) => {
|
|
187
|
+
d("group", e);
|
|
148
188
|
},
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
},
|
|
157
|
-
getLastMessage: (e = "log") => i[e]
|
|
158
|
-
}
|
|
189
|
+
groupCollapsed: (e) => {
|
|
190
|
+
d("groupCollapsed", e);
|
|
191
|
+
},
|
|
192
|
+
groupEnd: () => {
|
|
193
|
+
d("groupEnd");
|
|
194
|
+
},
|
|
195
|
+
once: u
|
|
159
196
|
};
|
|
160
197
|
}
|
|
161
198
|
//#endregion
|
|
162
|
-
export { i as
|
|
199
|
+
export { i as _createLogger, r as _createNoopLogger };
|
|
163
200
|
|
|
164
201
|
//# sourceMappingURL=logger.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"logger.js","names":["BaseLogger","log","args","warn","error","info","OnceLogger","reset","getLastMessage","level","CreateLoggerFn","context","options","LoggerOptions","LoggerInstance","once","success","debug","table","data","group","label","fn","color","showCallSite","LOG_STYLES","string","number","boolean","null","undefined","object","array","function","bigint","symbol","warning","logLevel","const","noop","noopLogger","createNoopLogger","createLogger","createLoggerBase","getValueStyle","value","style","displayValue","type","String","name","Array","isArray","length","Object","keys","createColoredMessage","message","styles","nativeValues","push","forEach","arg","isObjectLike","prototype","toString","call","lastMessages","Record","formatMessage","jsonReplacer","_key","logOnce","map","val","JSON","stringify","join","formattedArgs","console","trace","onceLogger","successArgs","groupEnd"],"sources":["../../../src/lib/utils/logger.ts"],"sourcesContent":["/**\n * A console log utility that prevents logging the same message twice in a row\n * with semantic coloring for different data types\n */\n\ntype BaseLogger = {\n log: (...args: unknown[]) => void;\n warn: (...args: unknown[]) => void;\n error: (...args: unknown[]) => void;\n info: (...args: unknown[]) => void;\n};\n\ntype OnceLogger = BaseLogger & {\n reset: () => void;\n getLastMessage: (\n level?: \"log\" | \"warn\" | \"error\" | \"info\"\n ) => string | undefined;\n};\n\nexport type CreateLoggerFn = (\n context?: string,\n options?: LoggerOptions\n) => LoggerInstance;\n\nexport type LoggerInstance = BaseLogger & {\n once: OnceLogger;\n // Utility methods for common logging patterns\n success: (...args: unknown[]) => void;\n debug: (...args: unknown[]) => void;\n table: (data: unknown) => void;\n group: (label: string, fn: () => void) => void;\n};\n\nexport type LoggerOptions = {\n color?: boolean;\n showCallSite?: boolean;\n};\n\n// CSS styles for semantic coloring\nconst LOG_STYLES = {\n // Context styling\n context: \"color: #6366f1; font-weight: bold;\",\n\n // Data type styling\n string: \"color: #059669; font-weight: 500;\",\n number: \"color: #dc2626; font-weight: 500;\",\n boolean: \"color: #7c3aed; font-weight: 500;\",\n null: \"color: #6b7280; font-style: italic;\",\n undefined: \"color: #6b7280; font-style: italic;\",\n object: \"color: #ea580c; font-weight: 500;\",\n array: \"color: #0891b2; font-weight: 500;\",\n function: \"color: #be185d; font-style: italic;\",\n bigint: \"color: #dc2626; font-weight: 500;\",\n symbol: \"color: #7c3aed; font-weight: 500;\",\n\n // Special values\n error: \"color: #dc2626; font-weight: bold;\",\n warning: \"color: #d97706; font-weight: bold;\",\n success: \"color: #059669; font-weight: bold;\",\n\n // Log level styling\n logLevel: {\n log: \"color: #1f2937;\",\n warn: \"color: #d97706; font-weight: bold;\",\n error: \"color: #dc2626; font-weight: bold;\",\n info: \"color: #0891b2; font-weight: bold;\",\n },\n} as const;\n\n// No-op functions for production\nconst noop = (...args: unknown[]) => {\n // Intentionally empty - no-op function\n void args;\n};\n\nconst noopLogger: LoggerInstance = {\n log: noop,\n warn: noop,\n error: noop,\n info: noop,\n success: noop,\n debug: noop,\n table: noop,\n group: noop,\n once: {\n log: noop,\n warn: noop,\n error: noop,\n info: noop,\n reset: noop,\n getLastMessage: () => undefined,\n },\n};\n\nexport const createNoopLogger: CreateLoggerFn = () => noopLogger;\n\nexport const createLogger: CreateLoggerFn = createLoggerBase;\n\n/**\n * Determines the type and style for a value\n */\nfunction getValueStyle(value: unknown): {\n style: string;\n displayValue: string;\n} {\n if (value === null) {\n return { style: LOG_STYLES.null, displayValue: \"null\" };\n }\n\n if (value === undefined) {\n return { style: LOG_STYLES.undefined, displayValue: \"undefined\" };\n }\n\n const type = typeof value;\n\n switch (type) {\n case \"string\":\n return { style: LOG_STYLES.string, displayValue: `\"${value}\"` };\n\n case \"number\":\n return { style: LOG_STYLES.number, displayValue: String(value) };\n\n case \"boolean\":\n return { style: LOG_STYLES.boolean, displayValue: String(value) };\n\n case \"bigint\":\n return { style: LOG_STYLES.bigint, displayValue: `${value}n` };\n\n case \"symbol\":\n return { style: LOG_STYLES.symbol, displayValue: String(value) };\n\n case \"function\":\n return {\n style: LOG_STYLES.function,\n displayValue: `[function: ${(value as { name?: string }).name || \"anonymous\"}]`,\n };\n\n case \"object\":\n if (Array.isArray(value)) {\n return {\n style: LOG_STYLES.array,\n displayValue: `[${value.length} items]`,\n };\n }\n return {\n style: LOG_STYLES.object,\n displayValue: `{${Object.keys(value as object).length} keys}`,\n };\n\n default:\n return { style: \"\", displayValue: String(value) };\n }\n}\n\n/**\n * Creates a formatted message with semantic coloring\n */\nfunction createColoredMessage(\n args: unknown[],\n context?: string,\n color: boolean = true\n): unknown[] {\n let message = \"\";\n const styles: string[] = [];\n const nativeValues: unknown[] = [];\n\n // Add context if provided\n if (context) {\n if (color) {\n message += `%c${context}::`;\n styles.push(LOG_STYLES.context);\n } else {\n message += `${context}::`;\n }\n }\n\n args.forEach((arg) => {\n const type = typeof arg;\n const isObjectLike =\n (type === \"object\" && arg !== null) || type === \"function\";\n\n // Only treat plain objects (not arrays, dates, etc) as expandable objects\n // typeof is not enough: Object.prototype.toString.call(arg) === '[object Object]' ensures it's a plain object\n if (\n isObjectLike &&\n (Array.isArray(arg) ||\n Object.prototype.toString.call(arg) === \"[object Object]\")\n ) {\n // Add a space before object/array if needed\n if (message.length > 0) message += \" \";\n nativeValues.push(arg);\n } else {\n const { style, displayValue } = getValueStyle(arg);\n if (color) {\n message += `${message.length > 0 ? \" \" : \"\"}%c${displayValue}`;\n styles.push(style);\n } else {\n message += `${message.length > 0 ? \" \" : \"\"}${displayValue}`;\n }\n }\n });\n\n // If message is empty (all objects), just return the objects\n if (!message && nativeValues.length) return nativeValues;\n\n if (color) {\n return [message, ...styles, ...nativeValues];\n } else {\n return [message, ...nativeValues];\n }\n}\n\n/**\n * Creates a logger instance that provides both regular logging and once logging\n * Regular logging always outputs to console\n * Once logging prevents logging the same message twice in a row per level\n * @param context - Optional context string to prepend to all log messages\n */\nfunction createLoggerBase(\n context?: string,\n options?: LoggerOptions\n): LoggerInstance {\n const color = options?.color !== false;\n const lastMessages: Record<\n \"log\" | \"warn\" | \"error\" | \"info\",\n string | undefined\n > = {\n log: undefined,\n warn: undefined,\n error: undefined,\n info: undefined,\n };\n\n const formatMessage = (...args: unknown[]): unknown[] => {\n return createColoredMessage(args, context, color);\n };\n\n const jsonReplacer = (_key: string, value: unknown): unknown => {\n if (typeof value === \"bigint\") {\n return value.toString();\n }\n if (typeof value === \"function\") {\n return \"[function]\";\n }\n return value;\n };\n\n const logOnce = (\n level: \"log\" | \"warn\" | \"error\" | \"info\",\n ...args: unknown[]\n ): void => {\n const message = args\n .map((val) => JSON.stringify(val, jsonReplacer))\n .join(\" \");\n\n if (message === lastMessages[level]) {\n return;\n }\n\n lastMessages[level] = message;\n\n const formattedArgs = formatMessage(...args);\n\n if (options?.showCallSite === true) {\n // to see where logger.log was called,\n // otherwise we only see where console.log was called on the next line\n console.trace(\"Call stack:\");\n }\n switch (level) {\n case \"warn\":\n console.warn(...formattedArgs);\n break;\n case \"error\":\n console.error(...formattedArgs);\n break;\n case \"info\":\n console.info(...formattedArgs);\n break;\n default:\n console.log(...formattedArgs);\n }\n };\n\n const onceLogger: OnceLogger = {\n log: (...args: unknown[]) => logOnce(\"log\", ...args),\n warn: (...args: unknown[]) => logOnce(\"warn\", ...args),\n error: (...args: unknown[]) => logOnce(\"error\", ...args),\n info: (...args: unknown[]) => logOnce(\"info\", ...args),\n reset: () => {\n lastMessages.log = undefined;\n lastMessages.warn = undefined;\n lastMessages.error = undefined;\n lastMessages.info = undefined;\n },\n getLastMessage: (level: \"log\" | \"warn\" | \"error\" | \"info\" = \"log\") => {\n return lastMessages[level];\n },\n };\n\n return {\n log: (...args: unknown[]) => console.log(...formatMessage(...args)),\n warn: (...args: unknown[]) => console.warn(...formatMessage(...args)),\n error: (...args: unknown[]) => console.error(...formatMessage(...args)),\n info: (...args: unknown[]) => console.info(...formatMessage(...args)),\n success: (...args: unknown[]) => {\n const successArgs = [\n `%c✅ `,\n LOG_STYLES.success,\n ...formatMessage(...args),\n ];\n console.log(...successArgs);\n },\n debug: (...args: unknown[]) => {\n console.debug(...formatMessage(...args));\n },\n table: (data: unknown) => {\n if (context) {\n console.group(`%c${context}::`, LOG_STYLES.context);\n console.table(data);\n console.groupEnd();\n } else {\n console.table(data);\n }\n },\n group: (label: string, fn: () => void) => {\n if (context) {\n console.group(`%c${context}:: ${label}`, LOG_STYLES.context);\n } else {\n console.group(label);\n }\n fn();\n console.groupEnd();\n },\n once: onceLogger,\n };\n}\n"],"mappings":";AAuCA,IAAMyB,IAAa;CAEjBd,SAAS;CAGTe,QAAQ;CACRC,QAAQ;CACRC,SAAS;CACTC,MAAM;CACNC,WAAW;CACXC,QAAQ;CACRC,OAAO;CACPC,UAAU;CACVC,QAAQ;CACRC,QAAQ;CAGR/B,OAAO;CACPgC,SAAS;CACTpB,SAAS;CAGTqB,UAAU;EACRpC,KAAK;EACLE,MAAM;EACNC,OAAO;EACPC,MAAM;EACR;CACD,EAGKkC,KAAQ,GAAGrC,MAAoB,IAK/BsC,IAA6B;CACjCvC,KAAKsC;CACLpC,MAAMoC;CACNnC,OAAOmC;CACPlC,MAAMkC;CACNvB,SAASuB;CACTtB,OAAOsB;CACPrB,OAAOqB;CACPnB,OAAOmB;CACPxB,MAAM;EACJd,KAAKsC;EACLpC,MAAMoC;EACNnC,OAAOmC;EACPlC,MAAMkC;EACNhC,OAAOgC;EACP/B,sBAAsBsB,KAAAA;EACxB;CACD,EAEYW,UAAyCD,GAEzCE,IAA+BC;AAK5C,SAASC,EAAcC,GAGrB;AACA,KAAIA,MAAU,KACZ,QAAO;EAAEC,OAAOrB,EAAWI;EAAMkB,cAAc;EAAQ;AAGzD,KAAIF,MAAUf,KAAAA,EACZ,QAAO;EAAEgB,OAAOrB,EAAWK;EAAWiB,cAAc;EAAa;AAKnE,SAFa,OAAOF,GAEpB;EACE,KAAK,SACH,QAAO;GAAEC,OAAOrB,EAAWC;GAAQqB,cAAc,IAAIF,EAAK;GAAK;EAEjE,KAAK,SACH,QAAO;GAAEC,OAAOrB,EAAWE;GAAQoB,cAAcE,OAAOJ,EAAK;GAAG;EAElE,KAAK,UACH,QAAO;GAAEC,OAAOrB,EAAWG;GAASmB,cAAcE,OAAOJ,EAAK;GAAG;EAEnE,KAAK,SACH,QAAO;GAAEC,OAAOrB,EAAWS;GAAQa,cAAc,GAAGF,EAAK;GAAK;EAEhE,KAAK,SACH,QAAO;GAAEC,OAAOrB,EAAWU;GAAQY,cAAcE,OAAOJ,EAAK;GAAG;EAElE,KAAK,WACH,QAAO;GACLC,OAAOrB,EAAWQ;GAClBc,cAAc,cAAeF,EAA4BK,QAAQ,YAAW;GAC7E;EAEH,KAAK,SAOH,QANIC,MAAMC,QAAQP,EAAM,GACf;GACLC,OAAOrB,EAAWO;GAClBe,cAAc,IAAIF,EAAMQ,OAAM;GAC/B,GAEI;GACLP,OAAOrB,EAAWM;GAClBgB,cAAc,IAAIO,OAAOC,KAAKV,EAAgB,CAACQ,OAAM;GACtD;EAEH,QACE,QAAO;GAAEP,OAAO;GAAIC,cAAcE,OAAOJ,EAAK;GAAG;;;AAOvD,SAASW,EACPtD,GACAS,GACAY,IAAiB,IACN;CACX,IAAIkC,IAAU,IACRC,IAAmB,EAAE,EACrBC,IAA0B,EAAE;AA4ChC,QAzCEhD,MACEY,KACFkC,KAAW,KAAK9C,EAAO,KACvB+C,EAAOE,KAAKnC,EAAWd,QAAQ,IAE/B8C,KAAW,GAAG9C,EAAO,MAIzBT,EAAK2D,SAASC,MAAQ;EACpB,IAAMd,IAAO,OAAOc;AAMpB,OAJGd,MAAS,YAAYc,MAAQ,QAASd,MAAS,gBAM/CG,MAAMC,QAAQU,EAAI,IACjBR,OAAOU,UAAUC,SAASC,KAAKJ,EAAI,KAAK,mBAI1CH,CADIF,EAAQJ,SAAS,MAAGI,KAAW,MACnCE,EAAaC,KAAKE,EAAI;OACjB;GACL,IAAM,EAAEhB,UAAOC,oBAAiBH,EAAckB,EAAI;AAClD,GAAIvC,KACFkC,KAAW,GAAGA,EAAQJ,SAAS,IAAI,MAAM,GAAE,IAAKN,KAChDW,EAAOE,KAAKd,EAAM,IAElBW,KAAW,GAAGA,EAAQJ,SAAS,IAAI,MAAM,KAAKN;;GAGlD,EAGE,CAACU,KAAWE,EAAaN,SAAeM,IAExCpC,IACK;EAACkC;EAAS,GAAGC;EAAQ,GAAGC;EAAa,GAErC,CAACF,GAAS,GAAGE,EAAa;;AAUrC,SAAShB,EACPhC,GACAC,GACgB;CAChB,IAAMW,IAAQX,GAASW,UAAU,IAC3B4C,IAGF;EACFlE,KAAK6B,KAAAA;EACL3B,MAAM2B,KAAAA;EACN1B,OAAO0B,KAAAA;EACPzB,MAAMyB,KAAAA;EACP,EAEKuC,KAAiB,GAAGnE,MACjBsD,EAAqBtD,GAAMS,GAASY,EAAM,EAG7C+C,KAAgBC,GAAc1B,MAC9B,OAAOA,KAAU,WACZA,EAAMoB,UAAU,GAErB,OAAOpB,KAAU,aACZ,eAEFA,GAGH2B,KACJ/D,GACA,GAAGP,MACM;EACT,IAAMuD,IAAUvD,EACbuE,KAAKC,MAAQC,KAAKC,UAAUF,GAAKJ,EAAa,CAAC,CAC/CO,KAAK,IAAI;AAEZ,MAAIpB,MAAYU,EAAa1D,GAC3B;AAGF0D,IAAa1D,KAASgD;EAEtB,IAAMqB,IAAgBT,EAAc,GAAGnE,EAAK;AAO5C,UALIU,GAASY,iBAAiB,MAG5BuD,QAAQC,MAAM,cAAc,EAEtBvE,GAAR;GACE,KAAK;AACHsE,YAAQ5E,KAAK,GAAG2E,EAAc;AAC9B;GACF,KAAK;AACHC,YAAQ3E,MAAM,GAAG0E,EAAc;AAC/B;GACF,KAAK;AACHC,YAAQ1E,KAAK,GAAGyE,EAAc;AAC9B;GACF,QACEC,SAAQ9E,IAAI,GAAG6E,EAAc;;;AAoBnC,QAAO;EACL7E,MAAM,GAAGC,MAAoB6E,QAAQ9E,IAAI,GAAGoE,EAAc,GAAGnE,EAAK,CAAC;EACnEC,OAAO,GAAGD,MAAoB6E,QAAQ5E,KAAK,GAAGkE,EAAc,GAAGnE,EAAK,CAAC;EACrEE,QAAQ,GAAGF,MAAoB6E,QAAQ3E,MAAM,GAAGiE,EAAc,GAAGnE,EAAK,CAAC;EACvEG,OAAO,GAAGH,MAAoB6E,QAAQ1E,KAAK,GAAGgE,EAAc,GAAGnE,EAAK,CAAC;EACrEc,UAAU,GAAGd,MAAoB;GAC/B,IAAMgF,IAAc;IAClB;IACAzD,EAAWT;IACX,GAAGqD,EAAc,GAAGnE,EAAK;IAC1B;AACD6E,WAAQ9E,IAAI,GAAGiF,EAAY;;EAE7BjE,QAAQ,GAAGf,MAAoB;AAC7B6E,WAAQ9D,MAAM,GAAGoD,EAAc,GAAGnE,EAAK,CAAC;;EAE1CgB,QAAQC,MAAkB;AACxB,GAAIR,KACFoE,QAAQ3D,MAAM,KAAKT,EAAO,KAAMc,EAAWd,QAAQ,EACnDoE,QAAQ7D,MAAMC,EAAK,EACnB4D,QAAQI,UAAU,IAElBJ,QAAQ7D,MAAMC,EAAK;;EAGvBC,QAAQC,GAAeC,MAAmB;AAOxCyD,GANIpE,IACFoE,QAAQ3D,MAAM,KAAKT,EAAO,KAAMU,KAASI,EAAWd,QAAQ,GAE5DoE,QAAQ3D,MAAMC,EAAM,EAEtBC,GAAI,EACJyD,QAAQI,UAAU;;EAEpBpE,MAlD6B;GAC7Bd,MAAM,GAAGC,MAAoBsE,EAAQ,OAAO,GAAGtE,EAAK;GACpDC,OAAO,GAAGD,MAAoBsE,EAAQ,QAAQ,GAAGtE,EAAK;GACtDE,QAAQ,GAAGF,MAAoBsE,EAAQ,SAAS,GAAGtE,EAAK;GACxDG,OAAO,GAAGH,MAAoBsE,EAAQ,QAAQ,GAAGtE,EAAK;GACtDK,aAAa;AAIX4D,IAHAA,EAAalE,MAAM6B,KAAAA,GACnBqC,EAAahE,OAAO2B,KAAAA,GACpBqC,EAAa/D,QAAQ0B,KAAAA,GACrBqC,EAAa9D,OAAOyB,KAAAA;;GAEtBtB,iBAAiBC,IAA2C,UACnD0D,EAAa1D;GAEvB;EAqCA"}
|
|
1
|
+
{"version":3,"file":"logger.js","names":["BaseLogger","log","args","warn","error","info","OnceLogger","reset","getLastMessage","level","CreateLoggerFn","context","options","LoggerOptions","LoggerInstance","once","success","debug","table","data","properties","group","label","groupCollapsed","groupEnd","color","showCallSite","isOn","LOG_STYLES","string","number","boolean","null","undefined","object","array","function","bigint","symbol","warning","logLevel","const","noop","noopLogger","_createNoopLogger","_createLogger","createLoggerBase","getValueStyle","value","style","displayValue","type","String","name","Array","isArray","length","Object","keys","createColoredMessage","message","styles","nativeValues","push","forEach","arg","isObjectLike","prototype","toString","call","LogOnceLevel","lastMessages","Record","formatMessage","jsonReplacer","_key","logOnce","map","val","JSON","stringify","join","formattedArgs","console","trace","onceLogger","LogLevel","Exclude","successArgs"],"sources":["../../../src/lib/utils/logger.ts"],"sourcesContent":["/**\n * A console log utility that prevents logging the same message twice in a row\n * with semantic coloring for different data types\n */\n\ntype BaseLogger = {\n log: (...args: unknown[]) => void;\n warn: (...args: unknown[]) => void;\n error: (...args: unknown[]) => void;\n info: (...args: unknown[]) => void;\n};\n\ntype OnceLogger = BaseLogger & {\n reset: () => void;\n getLastMessage: (\n level?: \"log\" | \"warn\" | \"error\" | \"info\"\n ) => string | undefined;\n};\n\nexport type CreateLoggerFn = (\n context?: string,\n options?: LoggerOptions\n) => LoggerInstance;\n\nexport type LoggerInstance = BaseLogger & {\n once: OnceLogger;\n // Utility methods for common logging patterns\n success: (...args: unknown[]) => void;\n debug: (...args: unknown[]) => void;\n table: (data: unknown, properties?: string[]) => void;\n group: (label: string) => void;\n groupCollapsed: (label: string) => void;\n groupEnd: () => void;\n};\n\nexport type LoggerOptions = {\n color?: boolean;\n showCallSite?: boolean;\n isOn?: () => boolean;\n};\n\n// CSS styles for semantic coloring\nconst LOG_STYLES = {\n // Context styling\n context: \"color: #6366f1; font-weight: bold;\",\n\n // Data type styling\n string: \"color: #059669; font-weight: 500;\",\n number: \"color: #dc2626; font-weight: 500;\",\n boolean: \"color: #7c3aed; font-weight: 500;\",\n null: \"color: #6b7280; font-style: italic;\",\n undefined: \"color: #6b7280; font-style: italic;\",\n object: \"color: #ea580c; font-weight: 500;\",\n array: \"color: #0891b2; font-weight: 500;\",\n function: \"color: #be185d; font-style: italic;\",\n bigint: \"color: #dc2626; font-weight: 500;\",\n symbol: \"color: #7c3aed; font-weight: 500;\",\n\n // Special values\n error: \"color: #dc2626; font-weight: bold;\",\n warning: \"color: #d97706; font-weight: bold;\",\n success: \"color: #059669; font-weight: bold;\",\n\n // Log level styling\n logLevel: {\n log: \"color: #1f2937;\",\n warn: \"color: #d97706; font-weight: bold;\",\n error: \"color: #dc2626; font-weight: bold;\",\n info: \"color: #0891b2; font-weight: bold;\",\n },\n} as const;\n\n// No-op functions for production\nconst noop = (...args: unknown[]) => {\n // Intentionally empty - no-op function\n void args;\n};\n\nconst noopLogger: LoggerInstance = {\n log: noop,\n warn: noop,\n error: noop,\n info: noop,\n success: noop,\n debug: noop,\n table: noop,\n group: noop,\n groupCollapsed: noop,\n groupEnd: noop,\n once: {\n log: noop,\n warn: noop,\n error: noop,\n info: noop,\n reset: noop,\n getLastMessage: () => undefined,\n },\n};\n\nexport const _createNoopLogger: CreateLoggerFn = () => noopLogger;\n\nexport const _createLogger: CreateLoggerFn = createLoggerBase;\n\n/**\n * Determines the type and style for a value\n */\nfunction getValueStyle(value: unknown): {\n style: string;\n displayValue: string;\n} {\n if (value === null) {\n return { style: LOG_STYLES.null, displayValue: \"null\" };\n }\n\n if (value === undefined) {\n return { style: LOG_STYLES.undefined, displayValue: \"undefined\" };\n }\n\n const type = typeof value;\n\n switch (type) {\n case \"string\":\n return { style: LOG_STYLES.string, displayValue: `\"${value}\"` };\n\n case \"number\":\n return { style: LOG_STYLES.number, displayValue: String(value) };\n\n case \"boolean\":\n return { style: LOG_STYLES.boolean, displayValue: String(value) };\n\n case \"bigint\":\n return { style: LOG_STYLES.bigint, displayValue: `${value}n` };\n\n case \"symbol\":\n return { style: LOG_STYLES.symbol, displayValue: String(value) };\n\n case \"function\":\n return {\n style: LOG_STYLES.function,\n displayValue: `[function: ${(value as { name?: string }).name || \"anonymous\"}]`,\n };\n\n case \"object\":\n if (Array.isArray(value)) {\n return {\n style: LOG_STYLES.array,\n displayValue: `[${value.length} items]`,\n };\n }\n return {\n style: LOG_STYLES.object,\n displayValue: `{${Object.keys(value as object).length} keys}`,\n };\n\n default:\n return { style: \"\", displayValue: String(value) };\n }\n}\n\n/**\n * Creates a formatted message with semantic coloring\n */\nfunction createColoredMessage(\n args: unknown[],\n context?: string,\n color: boolean = true\n): unknown[] {\n let message = \"\";\n const styles: string[] = [];\n const nativeValues: unknown[] = [];\n\n // Add context if provided\n if (context) {\n if (color) {\n message += `%c${context}::`;\n styles.push(LOG_STYLES.context);\n } else {\n message += `${context}::`;\n }\n }\n\n args.forEach((arg) => {\n const type = typeof arg;\n const isObjectLike =\n (type === \"object\" && arg !== null) || type === \"function\";\n\n // Only treat plain objects (not arrays, dates, etc) as expandable objects\n // typeof is not enough: Object.prototype.toString.call(arg) === '[object Object]' ensures it's a plain object\n if (\n isObjectLike &&\n (Array.isArray(arg) ||\n Object.prototype.toString.call(arg) === \"[object Object]\")\n ) {\n // Add a space before object/array if needed\n if (message.length > 0) message += \" \";\n nativeValues.push(arg);\n } else {\n const { style, displayValue } = getValueStyle(arg);\n if (color) {\n message += `${message.length > 0 ? \" \" : \"\"}%c${displayValue}`;\n styles.push(style);\n } else {\n message += `${message.length > 0 ? \" \" : \"\"}${displayValue}`;\n }\n }\n });\n\n // If message is empty (all objects), just return the objects\n if (!message && nativeValues.length) return nativeValues;\n\n if (color) {\n return [message, ...styles, ...nativeValues];\n } else {\n return [message, ...nativeValues];\n }\n}\n\n/**\n * Creates a logger instance that provides both regular logging and once logging\n * Regular logging always outputs to console\n * Once logging prevents logging the same message twice in a row per level\n * @param context - Optional context string to prepend to all log messages\n */\nfunction createLoggerBase(\n context?: string,\n options?: LoggerOptions\n): LoggerInstance {\n const color = options?.color !== false;\n const isOn = options?.isOn || (() => true);\n\n type LogOnceLevel = keyof BaseLogger;\n const lastMessages: Record<LogOnceLevel, string | undefined> = {\n log: undefined,\n warn: undefined,\n error: undefined,\n info: undefined,\n };\n\n const formatMessage = (...args: unknown[]): unknown[] => {\n return createColoredMessage(args, context, color);\n };\n\n const jsonReplacer = (_key: string, value: unknown): unknown => {\n if (typeof value === \"bigint\") {\n return value.toString();\n }\n if (typeof value === \"function\") {\n return \"[function]\";\n }\n return value;\n };\n\n const logOnce = (level: LogOnceLevel, ...args: unknown[]): void => {\n if (!isOn()) {\n return;\n }\n\n const message = args\n .map((val) => JSON.stringify(val, jsonReplacer))\n .join(\" \");\n\n if (message === lastMessages[level]) {\n return;\n }\n\n lastMessages[level] = message;\n\n const formattedArgs = formatMessage(...args);\n\n if (options?.showCallSite === true) {\n // to see where logger.log was called,\n // otherwise we only see where console.log was called on the next line\n console.trace(\"Call stack:\");\n }\n switch (level) {\n case \"warn\":\n console.warn(...formattedArgs);\n break;\n case \"error\":\n console.error(...formattedArgs);\n break;\n case \"info\":\n console.info(...formattedArgs);\n break;\n default:\n console.log(...formattedArgs);\n }\n };\n\n const onceLogger: OnceLogger = {\n log: (...args) => logOnce(\"log\", ...args),\n warn: (...args) => logOnce(\"warn\", ...args),\n error: (...args) => logOnce(\"error\", ...args),\n info: (...args) => logOnce(\"info\", ...args),\n reset: () => {\n lastMessages.log = undefined;\n lastMessages.warn = undefined;\n lastMessages.error = undefined;\n lastMessages.info = undefined;\n },\n getLastMessage: (level: LogOnceLevel = \"log\") => {\n return lastMessages[level];\n },\n };\n\n type LogLevel = Exclude<keyof LoggerInstance, \"once\">;\n\n const log = (level: LogLevel, ...args: unknown[]) => {\n if (!isOn()) {\n return;\n }\n switch (level) {\n case \"log\":\n case \"warn\":\n case \"error\":\n case \"info\":\n case \"debug\":\n console[level](...formatMessage(...args));\n break;\n case \"success\": {\n const successArgs = [\n `%c✅ `,\n LOG_STYLES.success,\n ...formatMessage(...args),\n ];\n console.log(...successArgs);\n break;\n }\n case \"table\": {\n const data = args[0];\n const properties = args[1] as string[] | undefined;\n if (context) {\n console.group(`%c${context}::`, LOG_STYLES.context);\n console.table(data, properties);\n console.groupEnd();\n } else {\n console.table(data, properties);\n }\n break;\n }\n case \"group\":\n case \"groupCollapsed\": {\n const label = args[0];\n if (context) {\n console[level](`%c${context}:: ${label}`, LOG_STYLES.context);\n } else {\n console[level](label);\n }\n break;\n }\n case \"groupEnd\": {\n console.groupEnd();\n break;\n }\n }\n };\n\n return {\n log: (...args: unknown[]) => log(\"log\", ...args),\n warn: (...args: unknown[]) => log(\"warn\", ...args),\n error: (...args: unknown[]) => log(\"error\", ...args),\n info: (...args: unknown[]) => log(\"info\", ...args),\n success: (...args: unknown[]) => {\n log(\"success\", ...args);\n },\n debug: (...args: unknown[]) => {\n log(\"debug\", ...args);\n },\n table: (data: unknown, properties?: string[]) => {\n log(\"table\", data, properties);\n },\n group: (label: string) => {\n log(\"group\", label);\n },\n groupCollapsed: (label: string) => {\n log(\"groupCollapsed\", label);\n },\n groupEnd: () => {\n log(\"groupEnd\");\n },\n once: onceLogger,\n };\n}\n"],"mappings":"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"}
|
package/dist/lib/utils/twap.d.ts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { DeltaOrBridgePrice } from '../../hooks/swap/prices/types';
|
|
2
|
+
import { DeltaAuctionWithTwapOrder } from '../../hooks/swap/prices/delta/orders/types';
|
|
2
3
|
export declare function getTwapChunkAmount({ totalWei, numSlices, }: {
|
|
3
4
|
totalWei: string;
|
|
4
5
|
numSlices: number;
|
|
@@ -21,4 +22,8 @@ export declare function produceTwapDeadlines({ durationMin, numSlices, }: {
|
|
|
21
22
|
orderDeadline: number;
|
|
22
23
|
orderInterval: number;
|
|
23
24
|
};
|
|
25
|
+
export declare function getTwapAuctionDeadlines({ order, createdAt, }: Pick<DeltaAuctionWithTwapOrder, "order" | "createdAt">): {
|
|
26
|
+
endsInMs: number;
|
|
27
|
+
durationMs: number;
|
|
28
|
+
};
|
|
24
29
|
//# sourceMappingURL=twap.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"twap.d.ts","sourceRoot":"","sources":["../../../src/lib/utils/twap.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;
|
|
1
|
+
{"version":3,"file":"twap.d.ts","sourceRoot":"","sources":["../../../src/lib/utils/twap.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAKpE,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,wCAAwC,CAAC;AAExF,wBAAgB,kBAAkB,CAAC,EACjC,QAAQ,EACR,SAAS,GACV,EAAE;IACD,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;CACnB,GAAG,MAAM,CAGT;AAED,wBAAgB,kBAAkB,CAAC,EACjC,QAAQ,EACR,SAAS,GACV,EAAE;IACD,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;CACnB,GAAG,MAAM,CAGT;AAED,wBAAgB,uBAAuB,CAAC,EACtC,KAAK,EACL,SAAS,GACV,EAAE;IACD,KAAK,EAAE,kBAAkB,CAAC;IAC1B,SAAS,EAAE,MAAM,CAAC;CACnB;;;EAQA;AACD,wBAAgB,oBAAoB,CAAC,EACnC,WAAW,EACX,SAAS,GACV,EAAE;IACD,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;CACnB;;;EAcA;AAED,wBAAgB,uBAAuB,CAAC,EACtC,KAAK,EACL,SAAS,GACV,EAAE,IAAI,CAAC,yBAAyB,EAAE,OAAO,GAAG,WAAW,CAAC;;;EAIxD"}
|
package/dist/lib/utils/twap.js
CHANGED
|
@@ -28,7 +28,14 @@ function c({ durationMin: i, numSlices: a }) {
|
|
|
28
28
|
orderInterval: c
|
|
29
29
|
};
|
|
30
30
|
}
|
|
31
|
+
function l({ order: e, createdAt: t }) {
|
|
32
|
+
let n = e.numSlices * e.interval * 1e3;
|
|
33
|
+
return {
|
|
34
|
+
endsInMs: new Date(t).getTime() + n,
|
|
35
|
+
durationMs: n
|
|
36
|
+
};
|
|
37
|
+
}
|
|
31
38
|
//#endregion
|
|
32
|
-
export { o as getTotalTwapAmount, s as getTwapAmountsFromPrice, a as getTwapChunkAmount, c as produceTwapDeadlines };
|
|
39
|
+
export { o as getTotalTwapAmount, s as getTwapAmountsFromPrice, l as getTwapAuctionDeadlines, a as getTwapChunkAmount, c as produceTwapDeadlines };
|
|
33
40
|
|
|
34
41
|
//# sourceMappingURL=twap.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"twap.js","names":["DeltaOrBridgePrice","Big","millisecondsToSeconds","minutesToMilliseconds","TEN_MINUTES_MS","produceDeltaOrderDeadline","getTwapChunkAmount","totalWei","numSlices","div","toFixed","getTotalTwapAmount","chunkWei","mul","getTwapAmountsFromPrice","price","srcAmount","destAmount","receivedDestAmount","produceTwapDeadlines","durationMin","orderDurationMs","orderDeadline","orderInterval","Math","floor","Number"],"sources":["../../../src/lib/utils/twap.ts"],"sourcesContent":["import type { DeltaOrBridgePrice } from \"@/hooks/swap/prices/types\";\nimport Big from \"big.js\";\nimport { millisecondsToSeconds, minutesToMilliseconds } from \"./time\";\nimport { TEN_MINUTES_MS } from \"../constants/time\";\nimport { produceDeltaOrderDeadline } from \"./delta\";\n\nexport function getTwapChunkAmount({\n totalWei,\n numSlices,\n}: {\n totalWei: string;\n numSlices: number;\n}): string {\n if (numSlices <= 0 || totalWei === \"0\") return totalWei;\n return Big(totalWei).div(numSlices).toFixed(0, 0); // roundDown to avoid overestimating\n}\n\nexport function getTotalTwapAmount({\n chunkWei,\n numSlices,\n}: {\n chunkWei: string;\n numSlices: number;\n}): string {\n if (numSlices <= 0 || chunkWei === \"0\") return chunkWei;\n return Big(chunkWei).mul(numSlices).toFixed();\n}\n\nexport function getTwapAmountsFromPrice({\n price,\n numSlices,\n}: {\n price: DeltaOrBridgePrice;\n numSlices: number;\n}) {\n return {\n srcAmount: getTotalTwapAmount({ chunkWei: price.srcAmount, numSlices }),\n destAmount: getTotalTwapAmount({\n chunkWei: price.receivedDestAmount,\n numSlices,\n }),\n };\n}\nexport function produceTwapDeadlines({\n durationMin,\n numSlices,\n}: {\n durationMin: number;\n numSlices: number;\n}) {\n const orderDurationMs = minutesToMilliseconds(durationMin);\n const orderDeadline = produceDeltaOrderDeadline(\n // 10 min buffer for possible delays in order creation or slice executions\n orderDurationMs + TEN_MINUTES_MS\n );\n const orderInterval = Math.floor(\n millisecondsToSeconds(orderDurationMs) / numSlices\n );\n\n return {\n orderDeadline: Number(orderDeadline),\n orderInterval,\n };\n}\n"],"mappings":";;;;;
|
|
1
|
+
{"version":3,"file":"twap.js","names":["DeltaOrBridgePrice","Big","millisecondsToSeconds","minutesToMilliseconds","TEN_MINUTES_MS","produceDeltaOrderDeadline","DeltaAuctionWithTwapOrder","getTwapChunkAmount","totalWei","numSlices","div","toFixed","getTotalTwapAmount","chunkWei","mul","getTwapAmountsFromPrice","price","srcAmount","destAmount","receivedDestAmount","produceTwapDeadlines","durationMin","orderDurationMs","orderDeadline","orderInterval","Math","floor","Number","getTwapAuctionDeadlines","order","createdAt","Pick","durationMs","interval","endsInMs","Date","getTime"],"sources":["../../../src/lib/utils/twap.ts"],"sourcesContent":["import type { DeltaOrBridgePrice } from \"@/hooks/swap/prices/types\";\nimport Big from \"big.js\";\nimport { millisecondsToSeconds, minutesToMilliseconds } from \"./time\";\nimport { TEN_MINUTES_MS } from \"../constants/time\";\nimport { produceDeltaOrderDeadline } from \"./delta\";\nimport type { DeltaAuctionWithTwapOrder } from \"@/hooks/swap/prices/delta/orders/types\";\n\nexport function getTwapChunkAmount({\n totalWei,\n numSlices,\n}: {\n totalWei: string;\n numSlices: number;\n}): string {\n if (numSlices <= 0 || totalWei === \"0\") return totalWei;\n return Big(totalWei).div(numSlices).toFixed(0, 0); // roundDown to avoid overestimating\n}\n\nexport function getTotalTwapAmount({\n chunkWei,\n numSlices,\n}: {\n chunkWei: string;\n numSlices: number;\n}): string {\n if (numSlices <= 0 || chunkWei === \"0\") return chunkWei;\n return Big(chunkWei).mul(numSlices).toFixed();\n}\n\nexport function getTwapAmountsFromPrice({\n price,\n numSlices,\n}: {\n price: DeltaOrBridgePrice;\n numSlices: number;\n}) {\n return {\n srcAmount: getTotalTwapAmount({ chunkWei: price.srcAmount, numSlices }),\n destAmount: getTotalTwapAmount({\n chunkWei: price.receivedDestAmount,\n numSlices,\n }),\n };\n}\nexport function produceTwapDeadlines({\n durationMin,\n numSlices,\n}: {\n durationMin: number;\n numSlices: number;\n}) {\n const orderDurationMs = minutesToMilliseconds(durationMin);\n const orderDeadline = produceDeltaOrderDeadline(\n // 10 min buffer for possible delays in order creation or slice executions\n orderDurationMs + TEN_MINUTES_MS\n );\n const orderInterval = Math.floor(\n millisecondsToSeconds(orderDurationMs) / numSlices\n );\n\n return {\n orderDeadline: Number(orderDeadline),\n orderInterval,\n };\n}\n\nexport function getTwapAuctionDeadlines({\n order,\n createdAt,\n}: Pick<DeltaAuctionWithTwapOrder, \"order\" | \"createdAt\">) {\n const durationMs = order.numSlices * order.interval * 1000;\n const endsInMs = new Date(createdAt).getTime() + durationMs;\n return { endsInMs, durationMs };\n}\n"],"mappings":";;;;;AAOA,SAAgBO,EAAmB,EACjCC,aACAC,gBAIS;AAET,QADIA,KAAa,KAAKD,MAAa,MAAYA,IACxCP,EAAIO,EAAS,CAACE,IAAID,EAAU,CAACE,QAAQ,GAAG,EAAE;;AAGnD,SAAgBC,EAAmB,EACjCC,aACAJ,gBAIS;AAET,QADIA,KAAa,KAAKI,MAAa,MAAYA,IACxCZ,EAAIY,EAAS,CAACC,IAAIL,EAAU,CAACE,SAAS;;AAG/C,SAAgBI,EAAwB,EACtCC,UACAP,gBAIC;AACD,QAAO;EACLQ,WAAWL,EAAmB;GAAEC,UAAUG,EAAMC;GAAWR;GAAW,CAAC;EACvES,YAAYN,EAAmB;GAC7BC,UAAUG,EAAMG;GAChBV;GACD,CAAA;EACF;;AAEH,SAAgBW,EAAqB,EACnCC,gBACAZ,gBAIC;CACD,IAAMa,IAAkBnB,EAAsBkB,EAAY,EACpDE,IAAgBlB,EAEpBiB,IAAkBlB,EACnB,EACKoB,IAAgBC,KAAKC,MACzBxB,EAAsBoB,EAAgB,GAAGb,EAC1C;AAED,QAAO;EACLc,eAAeI,OAAOJ,EAAc;EACpCC;EACD;;AAGH,SAAgBI,EAAwB,EACtCC,UACAC,gBACyD;CACzD,IAAME,IAAaH,EAAMpB,YAAYoB,EAAMI,WAAW;AAEtD,QAAO;EAAEC,UADQ,IAAIC,KAAKL,EAAU,CAACM,SAAS,GAAGJ;EAC9BA;EAAY"}
|
|
@@ -1,32 +1,32 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
1
|
+
import { isInIframe as e } from "./isInIframe.js";
|
|
2
|
+
import { getLogger as t } from "../../../core/logger.js";
|
|
3
3
|
import { c as n } from "react-compiler-runtime";
|
|
4
4
|
import { useQuery as r } from "@tanstack/react-query";
|
|
5
5
|
import { withTimeout as i } from "viem";
|
|
6
6
|
//#region src/lib/web3/wagmi/isInsideSafeIframe.ts
|
|
7
|
-
var a =
|
|
7
|
+
var a = t("SafeWallet");
|
|
8
8
|
function o() {
|
|
9
|
-
let
|
|
10
|
-
|
|
9
|
+
let t = n(8), i;
|
|
10
|
+
t[0] === Symbol.for("react.memo_cache_sentinel") ? (i = ["safeInfo"], t[0] = i) : i = t[0];
|
|
11
11
|
let a;
|
|
12
|
-
|
|
12
|
+
t[1] === Symbol.for("react.memo_cache_sentinel") ? (a = {
|
|
13
13
|
queryKey: i,
|
|
14
14
|
queryFn: s,
|
|
15
15
|
staleTime: Infinity,
|
|
16
16
|
gcTime: Infinity,
|
|
17
|
-
initialData:
|
|
18
|
-
},
|
|
17
|
+
initialData: e ? void 0 : null
|
|
18
|
+
}, t[1] = a) : a = t[1];
|
|
19
19
|
let { data: o, isLoading: c, isSuccess: l, isError: u, error: d } = r(a), f;
|
|
20
|
-
return
|
|
20
|
+
return t[2] !== o || t[3] !== d || t[4] !== u || t[5] !== c || t[6] !== l ? (f = {
|
|
21
21
|
data: o,
|
|
22
22
|
isLoading: c,
|
|
23
23
|
isSuccess: l,
|
|
24
24
|
isError: u,
|
|
25
25
|
error: d
|
|
26
|
-
},
|
|
26
|
+
}, t[2] = o, t[3] = d, t[4] = u, t[5] = c, t[6] = l, t[7] = f) : f = t[7], f;
|
|
27
27
|
}
|
|
28
28
|
async function s() {
|
|
29
|
-
if (
|
|
29
|
+
if (e) {
|
|
30
30
|
let e = /* @__PURE__ */ Error("Safe info request timed out");
|
|
31
31
|
try {
|
|
32
32
|
let t = await i(c, {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"isInsideSafeIframe.js","names":["
|
|
1
|
+
{"version":3,"file":"isInsideSafeIframe.js","names":["getLogger","useQuery","withTimeout","isInIframe","SafeInfo","safeAddress","chainId","threshold","owners","isReadOnly","SafeInfoExtended","nonce","implementation","modules","fallbackHandler","guard","version","SafeMessageEvent","id","data","T","success","error","SafeRequest","method","params","env","sdkVersion","logger","useSafeInfo","$","_c","t0","Symbol","for","t1","queryKey","queryFn","_temp","staleTime","Infinity","gcTime","initialData","undefined","isLoading","isSuccess","isError","error_0","t2","errorInstance","Error","safeInfo","requestSafeInfo","timeout","signal","info","AbortSignal","Promise","request","Date","getTime","toString","resolve","reject","listener","event","MessageEvent","window","removeEventListener","addEventListener","reason","parent","postMessage"],"sources":["../../../../src/lib/web3/wagmi/isInsideSafeIframe.ts"],"sourcesContent":["import { getLogger } from \"@/core/logger\";\nimport { useQuery } from \"@tanstack/react-query\";\nimport { withTimeout } from \"viem\";\nimport { isInIframe } from \"./isInIframe\";\n\ntype SafeInfo = {\n safeAddress: string;\n chainId: number;\n threshold: number;\n owners: string[];\n isReadOnly: boolean;\n};\n\ntype SafeInfoExtended = SafeInfo & {\n nonce: number;\n implementation: string;\n modules: string[] | null;\n fallbackHandler: string | null;\n guard: string | null;\n version: string | null;\n};\n\ntype SafeMessageEvent<T = unknown> = {\n id: string;\n data: T;\n version?: string;\n success: boolean;\n error?: string;\n};\n\ntype SafeRequest = {\n id: string;\n method: string;\n params: undefined;\n env: {\n sdkVersion: string;\n };\n};\n\nconst logger = getLogger(\"SafeWallet\");\n\nexport function useSafeInfo(): {\n data?: SafeInfoExtended | null;\n isLoading: boolean;\n isSuccess: boolean;\n isError: boolean;\n error: Error | null;\n} {\n const { data, isLoading, isSuccess, isError, error } = useQuery({\n queryKey: [\"safeInfo\"],\n queryFn: async () => {\n if (isInIframe) {\n const errorInstance = new Error(\"Safe info request timed out\");\n try {\n const safeInfo = await withTimeout(requestSafeInfo, {\n timeout: 200,\n signal: true,\n // non-safe iframe will never answer the request, so we need to timeout\n errorInstance,\n });\n\n logger.info(\"Safe info request successful\", safeInfo);\n\n return safeInfo;\n } catch (error) {\n if (error === errorInstance) {\n logger.info(\"Safe Wallet not detected\");\n return null;\n }\n\n logger.error(\"Safe info request failed\", error);\n throw error;\n }\n }\n\n return null;\n },\n staleTime: Infinity,\n gcTime: Infinity,\n // shortcut when we are not in iframe\n initialData: isInIframe ? undefined : null,\n });\n\n return { data, isLoading, isSuccess, isError, error };\n}\n\nfunction requestSafeInfo({\n signal,\n}: {\n signal: AbortSignal | null;\n}): Promise<SafeInfoExtended> {\n const request: SafeRequest = {\n id: new Date().getTime().toString(36),\n method: \"getSafeInfo\",\n params: undefined,\n env: {\n sdkVersion: \"9.1.0\", // latest version of Safe SDK\n },\n };\n\n return new Promise((resolve, reject) => {\n const listener = (\n event: MessageEvent<SafeMessageEvent<SafeInfoExtended>>\n ) => {\n if (event.data?.id === request.id) {\n window.removeEventListener(\"message\", listener);\n if (event.data.success) {\n resolve(event.data.data);\n } else {\n reject(new Error(event.data.error));\n }\n }\n };\n\n signal?.addEventListener(\"abort\", () => {\n window.removeEventListener(\"message\", listener);\n reject(signal.reason);\n });\n\n window.addEventListener(\"message\", listener);\n\n // If inside Safe iframe, Safe web app will respond to the request\n window.parent.postMessage(request, \"*\");\n });\n}\n"],"mappings":";;;;;;AAuCA,IAAM4B,IAAS5B,EAAU,aAAa;AAEtC,SAAO6B,IAAA;CAAA,IAAAC,IAAAC,EAAA,EAAA,EAAAC;AAAA,CAAAF,EAAA,OAAAG,OAAAC,IAAA,4BAAA,IAQOF,IAAA,CAAC,WAAW,EAAAF,EAAA,KAAAE,KAAAA,IAAAF,EAAA;CAAA,IAAAK;AAAA,CAAAL,EAAA,OAAAG,OAAAC,IAAA,4BAAA,IADwCC,IAAA;EAAAC,UACpDJ;EAAYK,SACbC;EA0BRC,WACUC;EAAQC,QACXD;EAAQE,aAEHvC,IAAAwC,KAAAA,IAAA;EACd,EAAAb,EAAA,KAAAK,KAAAA,IAAAL,EAAA;CAjCD,IAAA,EAAAX,SAAAyB,cAAAC,cAAAC,YAAAxB,OAAAyB,MAAuD9C,EAASkC,EAiC9D,EAACa;AAEkD,QAFlDlB,EAAA,OAAAX,KAAAW,EAAA,OAAAiB,KAAAjB,EAAA,OAAAgB,KAAAhB,EAAA,OAAAc,KAAAd,EAAA,OAAAe,KAEIG,IAAA;EAAA7B;EAAAyB;EAAAC;EAAAC;EAAAxB,OAAuCA;EAAO,EAAAQ,EAAA,KAAAX,GAAAW,EAAA,KAAAiB,GAAAjB,EAAA,KAAAgB,GAAAhB,EAAA,KAAAc,GAAAd,EAAA,KAAAe,GAAAf,EAAA,KAAAkB,KAAAA,IAAAlB,EAAA,IAA9CkB;;AA1CF,eAAAV,IAAA;AAUD,KAAInC,GAAU;EACZ,IAAA8C,IAAsB,gBAAIC,MAAM,8BAA8B;AAC9D,MAAA;GACE,IAAAC,IAAiB,MAAMjD,EAAYkD,GAAiB;IAAAC,SACzC;IAAGC,QACJ;IAAIL;IAGb,CAAC;AAEmD,UAArDrB,EAAM2B,KAAM,gCAAgCJ,EAAS,EAE9CA;WAAQnB,GAAA;GACRV,IAAAA,IAAAA;AACP,OAAIA,MAAU2B,EAC2B,QAAvCrB,EAAM2B,KAAM,2BAA2B,EAChC;AAIT,SADA3B,EAAMN,MAAO,4BAA4BA,EAAM,EACzCA;;;AAET,QAEM;;AAWb,SAAS8B,EAAgB,EACvBE,aAG4B;CAC5B,IAAMI,IAAuB;EAC3BxC,qBAAI,IAAIyC,MAAM,EAACC,SAAS,CAACC,SAAS,GAAG;EACrCrC,QAAQ;EACRC,QAAQkB,KAAAA;EACRjB,KAAK,EACHC,YAAY,SACd;EACD;AAED,QAAO,IAAI8B,SAASK,GAASC,MAAW;EACtC,IAAMC,KACJC,MACG;AACH,GAAIA,EAAM9C,MAAMD,OAAOwC,EAAQxC,OAC7BiD,OAAOC,oBAAoB,WAAWJ,EAAS,EAC3CC,EAAM9C,KAAKE,UACbyC,EAAQG,EAAM9C,KAAKA,KAAK,GAExB4C,EAAWb,MAAMe,EAAM9C,KAAKG,MAAM,CAAC;;AAazC6C,EARAb,GAAQe,iBAAiB,eAAe;AAEtCN,GADAI,OAAOC,oBAAoB,WAAWJ,EAAS,EAC/CD,EAAOT,EAAOgB,OAAO;IACrB,EAEFH,OAAOE,iBAAiB,WAAWL,EAAS,EAG5CG,OAAOI,OAAOC,YAAYd,GAAS,IAAI;GACvC"}
|