@kodiak-finance/orderly-react-app 2.8.19 → 2.8.21-alpha.0
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/index.d.mts +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.js +17 -1
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +17 -1
- package/dist/index.mjs.map +1 -1
- package/package.json +7 -7
package/dist/index.d.mts
CHANGED
|
@@ -126,7 +126,7 @@ declare function useCanTrade(): boolean;
|
|
|
126
126
|
* SDK Version - BUMP THIS WHEN RELEASING
|
|
127
127
|
* Keep in sync with root package.json version
|
|
128
128
|
*/
|
|
129
|
-
declare const SDK_VERSION = "2.8.
|
|
129
|
+
declare const SDK_VERSION = "2.8.20";
|
|
130
130
|
type ChangesetEntry = {
|
|
131
131
|
date: string;
|
|
132
132
|
title: string;
|
package/dist/index.d.ts
CHANGED
|
@@ -126,7 +126,7 @@ declare function useCanTrade(): boolean;
|
|
|
126
126
|
* SDK Version - BUMP THIS WHEN RELEASING
|
|
127
127
|
* Keep in sync with root package.json version
|
|
128
128
|
*/
|
|
129
|
-
declare const SDK_VERSION = "2.8.
|
|
129
|
+
declare const SDK_VERSION = "2.8.20";
|
|
130
130
|
type ChangesetEntry = {
|
|
131
131
|
date: string;
|
|
132
132
|
title: string;
|
package/dist/index.js
CHANGED
|
@@ -1142,8 +1142,24 @@ function useCanTrade() {
|
|
|
1142
1142
|
}
|
|
1143
1143
|
|
|
1144
1144
|
// src/constants/changesets.ts
|
|
1145
|
-
var SDK_VERSION = "2.8.
|
|
1145
|
+
var SDK_VERSION = "2.8.20";
|
|
1146
1146
|
var CHANGESETS = {
|
|
1147
|
+
"2.8.20": {
|
|
1148
|
+
date: "2025-12-13",
|
|
1149
|
+
title: "Better pagination and notification routing",
|
|
1150
|
+
summary: "Fixed in-app notification links. Volume stats now use cleaner labels.",
|
|
1151
|
+
highlights: [
|
|
1152
|
+
"Notification links respect internal vs external navigation for both bell and popup to keep in-app links in the same tab"
|
|
1153
|
+
],
|
|
1154
|
+
packages: [
|
|
1155
|
+
"kodiak-orderly-ui",
|
|
1156
|
+
"kodiak-orderly-ui-scaffold",
|
|
1157
|
+
"kodiak-orderly-ui-notification",
|
|
1158
|
+
"kodiak-orderly-portfolio",
|
|
1159
|
+
"kodiak-orderly-i18n"
|
|
1160
|
+
],
|
|
1161
|
+
type: "improvement"
|
|
1162
|
+
},
|
|
1147
1163
|
"2.8.19": {
|
|
1148
1164
|
date: "2025-12-12",
|
|
1149
1165
|
title: "Orderly SDK sync with new features and optimizations",
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/provider/orderlyAppProvider.tsx","../src/hooks/useBootstrap.ts","../src/hooks/useExecutionReport.tsx","../src/hooks/getOrderExecutionReportMsg.ts","../src/hooks/useUILocale.ts","../src/provider/appConfigContext.tsx","../src/provider/appConfigProvider.tsx","../src/provider/appStateProvider.tsx","../src/hooks/useAssetconvertEvent.ts","../src/hooks/useCurrentChainId.ts","../src/hooks/useLinkDevice.ts","../src/hooks/useSettleEvent.ts","../src/hooks/useWalletConnectError.ts","../src/hooks/useWalletEvent.ts","../src/hooks/useWalletStateHandle.ts","../src/provider/appStateContext.tsx","../src/hooks/useDataTap.ts","../src/common/useOrderEntryFormErrorMsg.ts","../src/provider/ErrorBoundary.tsx","../src/hooks/useCanTrade.ts","../src/constants/changesets.ts"],"names":["useTrack","useEffect","OrderStatus","data","jsx","useState","useMemo","useTranslation","toast","useConfig","useLocalStorage","useWalletConnector","useEventEmitter","useRef","capitalizeString","useAccount","useChains","WALLET_KEY","namespace","createContext","useContext","jsxs","i18n","AccountStatusEnum"],"mappings":"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","sourcesContent":["import React, { PropsWithChildren } from \"react\";\nimport { OrderlyConfigProvider, useTrack } from \"@kodiak-finance/orderly-hooks\";\nimport {\n LocaleProvider as UILocaleProvider,\n ModalProvider,\n OrderlyThemeProvider,\n Toaster,\n TooltipProvider,\n} from \"@kodiak-finance/orderly-ui\";\nimport { OrderlyThemeProviderProps } from \"@kodiak-finance/orderly-ui\";\nimport { useBootstrap } from \"../hooks/useBootstrap\";\nimport { useExecutionReport } from \"../hooks/useExecutionReport\";\nimport { useUILocale } from \"../hooks/useUILocale\";\nimport { OrderlyAppConfig } from \"../types\";\nimport { AppConfigProvider } from \"./appConfigProvider\";\nimport { AppStateProvider, AppStateProviderProps } from \"./appStateProvider\";\n\nexport type OrderlyAppProviderProps = PropsWithChildren<\n OrderlyAppConfig & AppStateProviderProps & OrderlyThemeProviderProps\n>;\n\n// Cannot be called outside of Provider because useExecutionReport requires useOrderlyContext.\nconst ExecutionReportListener: React.FC = () => {\n useExecutionReport();\n return null;\n};\n\nconst OrderlyAppProvider: React.FC<OrderlyAppProviderProps> = (props) => {\n const {\n // dateFormatting,\n components,\n appIcons,\n onChainChanged,\n defaultChain,\n widgetConfigs,\n ...configProps\n } = props;\n\n useTrack();\n useBootstrap();\n\n const uiLocale = useUILocale();\n\n return (\n <AppConfigProvider appIcons={appIcons} brokerName={props.brokerName!}>\n <OrderlyThemeProvider\n // dateFormatting={dateFormatting}\n components={components}\n overrides={props.overrides}\n >\n <OrderlyConfigProvider {...configProps}>\n <ExecutionReportListener />\n <AppStateProvider\n onChainChanged={onChainChanged}\n defaultChain={defaultChain}\n restrictedInfo={props.restrictedInfo}\n onRouteChange={props.onRouteChange}\n widgetConfigs={widgetConfigs}\n customAnnouncements={props.customAnnouncements}\n >\n <UILocaleProvider locale={uiLocale}>\n <TooltipProvider delayDuration={300}>\n <ModalProvider>{props.children}</ModalProvider>\n </TooltipProvider>\n </UILocaleProvider>\n </AppStateProvider>\n <Toaster />\n </OrderlyConfigProvider>\n </OrderlyThemeProvider>\n </AppConfigProvider>\n );\n};\n\nif (process.env.NODE_ENV !== \"production\") {\n OrderlyAppProvider.displayName = \"OrderlyAppProvider\";\n}\n\nexport { OrderlyAppProvider };\n","import { useEffect } from \"react\";\n\nexport const useBootstrap = () => {\n useEffect(() => {\n const searchParams = new URLSearchParams(window.location.search);\n const refCode = searchParams.get(\"ref\");\n if (refCode) {\n localStorage.setItem(\"referral_code\", refCode);\n }\n }, []);\n};\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { useEffect, useRef } from \"react\";\nimport {\n useSymbolsInfo,\n useEventEmitter,\n useDebouncedCallback,\n useAudioPlayer,\n useLocalStorage,\n useOrderlyContext,\n} from \"@kodiak-finance/orderly-hooks\";\nimport { OrderStatus } from \"@kodiak-finance/orderly-types\";\nimport { toast } from \"@kodiak-finance/orderly-ui\";\nimport { getOrderExecutionReportMsg } from \"./getOrderExecutionReportMsg\";\n\nexport const ORDERLY_ORDER_SOUND_ALERT_KEY = \"orderly_order_sound_alert\";\n\nexport const useExecutionReport = () => {\n const ee = useEventEmitter();\n\n const symbolsInfo = useSymbolsInfo();\n const symbolsInfoRef = useRef({});\n\n const { notification } = useOrderlyContext();\n\n useEffect(() => {\n symbolsInfoRef.current = symbolsInfo;\n }, [symbolsInfo]);\n\n const src = notification?.orderFilled?.media ?? \"\";\n\n const [soundAutoPlay] = useLocalStorage<boolean>(\n ORDERLY_ORDER_SOUND_ALERT_KEY,\n notification?.orderFilled?.defaultOpen ?? false,\n );\n\n const [audioElement] = useAudioPlayer(src, {\n autoPlay: soundAutoPlay,\n volume: 1,\n });\n\n const handler = useDebouncedCallback((data: any) => {\n const showToast = (data: any) => {\n const { title, msg, status } = getOrderExecutionReportMsg(\n data,\n symbolsInfoRef.current,\n );\n const isFilled =\n status === OrderStatus.FILLED || status === OrderStatus.PARTIAL_FILLED;\n // only show latest msg for same order type\n const orderType = data.algo_type || data.type;\n if (title && msg) {\n toast.success(\n <div>\n {title}\n <br />\n <div className=\"orderly-text-white/[0.54] orderly-text-xs\">\n {msg}\n </div>\n {isFilled && audioElement}\n </div>,\n { id: orderType },\n );\n }\n };\n showToast(data);\n }, 100);\n\n useEffect(() => {\n ee.on(\"orders:changed\", handler);\n return () => {\n ee.off(\"orders:changed\", handler);\n handler.cancel();\n };\n }, [ee, handler]);\n};\n","import { i18n } from \"@kodiak-finance/orderly-i18n\";\nimport { API, OrderStatus, OrderType } from \"@kodiak-finance/orderly-types\";\nimport { AlgoOrderRootType } from \"@kodiak-finance/orderly-types\";\nimport { parseNumber } from \"@kodiak-finance/orderly-ui\";\nimport {\n capitalizeString,\n transSymbolformString,\n} from \"@kodiak-finance/orderly-utils\";\n\nfunction getDisplaySide(side: string) {\n if (side === \"BUY\") {\n return i18n.t(\"common.buy\");\n } else if (side === \"SELL\") {\n return i18n.t(\"common.sell\");\n }\n return capitalizeString(side);\n}\n\ntype AlgoOrderFieldChanges = Partial<\n Record<OrderType, Partial<Record<keyof API.AlgoOrder, boolean>>>\n>;\n\nexport function getOrderExecutionReportMsg(\n data: (API.AlgoOrder | API.Order) & {\n fieldChanges?: AlgoOrderFieldChanges;\n },\n symbolsInfo: any,\n) {\n const { symbol, side, quantity, client_order_id, fieldChanges } = data;\n const total_executed_quantity =\n \"total_executed_quantity\" in data ? data.total_executed_quantity : 0;\n const status = \"status\" in data ? data.status : data.algo_status;\n const getSymbolInfo = symbolsInfo[symbol];\n const base_dp = getSymbolInfo(\"base_dp\");\n const quote_dp = getSymbolInfo(\"quote_dp\");\n const displaySide = getDisplaySide(side);\n const displaySymbol = transSymbolformString(symbol);\n const displayQuantity =\n \"algo_type\" in data && data.algo_type === AlgoOrderRootType.POSITIONAL_TP_SL\n ? i18n.t(\"tpsl.entirePosition\")\n : base_dp === undefined\n ? quantity\n : parseNumber(quantity, { dp: base_dp });\n\n let title = \"\";\n let msg = \"\";\n switch (status) {\n case OrderStatus.NEW:\n const isScaledOrder = client_order_id?.startsWith(\"scaled_\");\n // if client_order_id is scaled order, show the scaled order message\n if (isScaledOrder) {\n title = i18n.t(\"orders.status.scaledSubOrderOpened.toast.title\");\n msg = `${displaySide} ${displaySymbol} ${displayQuantity}`;\n } else {\n title = i18n.t(\"orders.status.opened.toast.title\");\n msg = `${displaySide} ${displaySymbol} ${displayQuantity}`;\n }\n\n break;\n case OrderStatus.FILLED:\n case OrderStatus.PARTIAL_FILLED:\n const displayTotalExecutedQuantity =\n base_dp === undefined\n ? total_executed_quantity\n : parseNumber(total_executed_quantity, { dp: base_dp });\n title = i18n.t(\"orders.status.filled.toast.title\");\n msg = `${displaySide} ${displaySymbol} ${displayTotalExecutedQuantity} / ${displayQuantity}`;\n break;\n case OrderStatus.CANCELLED:\n title = i18n.t(\"orders.status.canceled.toast.title\");\n msg = `${displaySide} ${displaySymbol} ${displayQuantity}`;\n break;\n case OrderStatus.REJECTED:\n title = i18n.t(\"orders.status.rejected.toast.title\");\n msg = `${displaySide} ${displaySymbol} ${displayQuantity}`;\n break;\n case OrderStatus.REPLACED:\n const { algo_type, activated_price } = data as API.AlgoOrder;\n if (algo_type === AlgoOrderRootType.TRAILING_STOP) {\n const fieldChange =\n fieldChanges?.[AlgoOrderRootType.TRAILING_STOP] || {};\n // when trailing stop order is activated, and extreme_price will also changed\n if (\n fieldChange.is_activated &&\n fieldChange.extreme_price &&\n activated_price\n ) {\n title = i18n.t(\"orders.trailingStop.activated\");\n msg = `${displaySymbol} @${activated_price}`;\n } else if (fieldChange.extreme_price) {\n // if extreme_price is changed, skip show the message\n title = \"\";\n msg = \"\";\n }\n } else {\n title = i18n.t(\"orders.status.replaced.toast.title\");\n msg = `${side} ${displaySymbol} ${total_executed_quantity} / ${displayQuantity}`;\n }\n\n break;\n default:\n break;\n }\n\n return {\n title,\n msg,\n status,\n };\n}\n","import { useMemo } from \"react\";\nimport {\n useTranslation,\n useLocaleCode,\n LocaleEnum,\n} from \"@kodiak-finance/orderly-i18n\";\nimport { Locale } from \"@kodiak-finance/orderly-ui\";\nimport { enUS, zhCN, ja, es, ko, vi, de, fr, nl } from \"date-fns/locale\";\n\nexport function useUILocale() {\n const { t } = useTranslation();\n const localeCode = useLocaleCode();\n\n return useMemo<Locale>(() => {\n const calendarLocale = {\n [LocaleEnum.en]: enUS,\n [LocaleEnum.zh]: zhCN,\n // [LocaleEnum.ja]: ja,\n // [LocaleEnum.es]: es,\n // [LocaleEnum.ko]: ko,\n // [LocaleEnum.vi]: vi,\n // [LocaleEnum.de]: de,\n // [LocaleEnum.fr]: fr,\n // [LocaleEnum.nl]: nl,\n };\n return {\n locale: localeCode,\n dialog: {\n ok: t(\"common.ok\"),\n cancel: t(\"common.cancel\"),\n },\n modal: {\n confirm: t(\"common.confirm\"),\n cancel: t(\"common.cancel\"),\n },\n pagination: {\n morePages: t(\"ui.pagination.morePages\"),\n rowsPerPage: t(\"ui.pagination.rowsPerPage\"),\n },\n picker: {\n selectDate: t(\"ui.picker.selectDate\"),\n dayPicker: calendarLocale[localeCode as keyof typeof calendarLocale],\n },\n empty: {\n description: t(\"ui.empty.description\"),\n },\n } as const;\n }, [t, localeCode]);\n}\n","import { createContext, useContext } from \"react\";\nimport { AppLogos } from \"../types\";\n\nexport type ThemeContextState = {\n appIcons?: AppLogos;\n brokerName: string;\n};\n\nexport const AppConfigContext = createContext({} as ThemeContextState);\n\nexport const useAppConfig = () => {\n return useContext(AppConfigContext);\n};\n","import { FC, PropsWithChildren } from \"react\";\nimport { AppLogos } from \"../types\";\nimport { AppConfigContext } from \"./appConfigContext\";\n\nexport type ThemeContextState = {\n appIcons?: AppLogos;\n brokerName: string;\n};\n\nexport const AppConfigProvider: FC<\n PropsWithChildren<{ appIcons?: AppLogos; brokerName: string }>\n> = (props) => {\n return (\n <AppConfigContext.Provider value={props}>\n {props.children}\n </AppConfigContext.Provider>\n );\n};\n","import { FC, PropsWithChildren, useState, useMemo } from \"react\";\nimport {\n RestrictedInfoOptions,\n useRestrictedInfo,\n useTrackingInstance,\n} from \"@kodiak-finance/orderly-hooks\";\nimport { useAssetconvertEvent } from \"../hooks/useAssetconvertEvent\";\nimport { DefaultChain, useCurrentChainId } from \"../hooks/useCurrentChainId\";\nimport { useLinkDevice } from \"../hooks/useLinkDevice\";\nimport { useSettleEvent } from \"../hooks/useSettleEvent\";\nimport { useWalletConnectError } from \"../hooks/useWalletConnectError\";\nimport { useWalletEvent } from \"../hooks/useWalletEvent\";\nimport { useWalletStateHandle } from \"../hooks/useWalletStateHandle\";\nimport { AppContextState, AppStateContext } from \"./appStateContext\";\n\nexport type RouteOption = {\n href: \"/portfolio\" | \"/portfolio/history\";\n name: string;\n};\n\nexport type AppStateProviderProps = {\n defaultChain?: DefaultChain;\n restrictedInfo?: RestrictedInfoOptions;\n} & Pick<\n AppContextState,\n \"onChainChanged\" | \"onRouteChange\" | \"widgetConfigs\" | \"customAnnouncements\"\n>;\n\nexport const AppStateProvider: FC<PropsWithChildren<AppStateProviderProps>> = (\n props,\n) => {\n const [showAnnouncement, setShowAnnouncement] = useState(false);\n const [currentChainId, setCurrentChainId] = useCurrentChainId(\n props.defaultChain,\n );\n useLinkDevice();\n useTrackingInstance();\n\n const { connectWallet, wrongNetwork } = useWalletStateHandle({\n // onChainChanged: props.onChainChanged,\n currentChainId,\n });\n\n useWalletEvent();\n useSettleEvent();\n useAssetconvertEvent();\n useWalletConnectError();\n\n const restrictedInfo = useRestrictedInfo(props.restrictedInfo);\n\n const disabledConnect = restrictedInfo.restrictedOpen;\n\n const memoizedValue = useMemo<AppContextState>(\n () => ({\n connectWallet,\n wrongNetwork,\n currentChainId,\n setCurrentChainId,\n onChainChanged: props.onChainChanged,\n disabledConnect,\n restrictedInfo,\n showAnnouncement,\n setShowAnnouncement,\n onRouteChange: props.onRouteChange,\n widgetConfigs: props.widgetConfigs,\n customAnnouncements: props.customAnnouncements,\n }),\n [\n connectWallet,\n currentChainId,\n disabledConnect,\n props.onChainChanged,\n restrictedInfo,\n setCurrentChainId,\n showAnnouncement,\n wrongNetwork,\n props.onRouteChange,\n props.widgetConfigs,\n props.customAnnouncements,\n ],\n );\n\n return (\n <AppStateContext.Provider value={memoizedValue}>\n {props.children}\n </AppStateContext.Provider>\n );\n};\n","import { useEffect } from \"react\";\nimport { useWS } from \"@kodiak-finance/orderly-hooks\";\nimport { useTranslation } from \"@kodiak-finance/orderly-i18n\";\nimport { toast } from \"@kodiak-finance/orderly-ui\";\nimport { getTimestamp } from \"@kodiak-finance/orderly-utils\";\n\nexport const useAssetconvertEvent = () => {\n const ws = useWS();\n const { t } = useTranslation();\n useEffect(() => {\n const unsubscribe = ws.privateSubscribe(\n {\n id: \"assetconvert\",\n event: \"subscribe\",\n topic: \"assetconvert\",\n ts: getTimestamp(),\n },\n {\n onMessage(data) {\n if (data.convertId) {\n toast.success(t(\"transfer.convert.completed\"));\n }\n },\n },\n );\n return () => unsubscribe();\n }, []);\n};\n","import { useEffect, useState } from \"react\";\nimport {\n Chains,\n useChains,\n useConfig,\n useStorageChain,\n useWalletConnector,\n} from \"@kodiak-finance/orderly-hooks\";\nimport { Chain, NetworkId } from \"@kodiak-finance/orderly-types\";\ntype ReturnChain = Pick<Chain, \"id\"> & Partial<Omit<Chain, \"id\">>;\n\nexport type DefaultChain =\n | {\n mainnet?: ReturnChain;\n testnet?: ReturnChain;\n }\n | ((networkId: NetworkId, chains: Chains) => ReturnChain)\n | undefined;\n\nexport function useCurrentChainId(defaultChain?: DefaultChain) {\n const { storageChain, setStorageChain } = useStorageChain();\n const [currentChainId, setCurrentChainId] = useState<number | undefined>();\n\n const [chains] = useChains();\n const networkId = useConfig(\"networkId\") as NetworkId;\n\n const { connectedChain } = useWalletConnector();\n\n useEffect(() => {\n if (connectedChain) {\n setCurrentChainId?.(\n typeof connectedChain.id === \"number\"\n ? connectedChain.id\n : parseInt(connectedChain.id)\n );\n } else {\n if (!!currentChainId) return;\n let fallbackChain: Partial<Chain> | undefined;\n\n const firstChain =\n networkId === \"mainnet\" ? chains.mainnet?.[0] : chains.testnet?.[0];\n\n if (typeof defaultChain === \"function\") {\n fallbackChain = defaultChain(networkId, chains);\n } else if (typeof defaultChain === \"object\") {\n fallbackChain =\n networkId === \"mainnet\"\n ? defaultChain?.mainnet\n : defaultChain?.testnet;\n }\n\n const chainId = fallbackChain?.id || firstChain?.network_infos?.chain_id;\n if (!chainId) return;\n\n if (storageChain) {\n setCurrentChainId?.(storageChain.chainId);\n } else {\n setStorageChain(chainId);\n setCurrentChainId?.(chainId);\n \n }\n }\n }, [\n connectedChain,\n chains,\n currentChainId,\n networkId,\n setCurrentChainId,\n defaultChain,\n ]);\n\n return [currentChainId, setCurrentChainId] as const;\n}\n","import { useEffect } from \"react\";\nimport {\n parseJSON,\n useAccount,\n useConfig,\n useLocalStorage,\n useWalletConnector,\n} from \"@kodiak-finance/orderly-hooks\";\nimport { ChainNamespace } from \"@kodiak-finance/orderly-types\";\nimport { useCanLinkDevice } from \"@kodiak-finance/orderly-ui\";\n\ntype DecodedData = {\n /** secret key */\n k: string;\n /* timestamp */\n t: number;\n /** address */\n a: string;\n /** chain id */\n i: number;\n /** chain namespace */\n n: ChainNamespace;\n};\n\ntype LinkDeviceStorage = { chainId: number; chainNamespace: ChainNamespace };\n\nconst WALLET_KEY = \"orderly:wallet-info\";\n\nexport function useLinkDevice() {\n const { connectedChain, disconnect } = useWalletConnector();\n const [_, setLinkDeviceStorage] = useLocalStorage(\n \"orderly_link_device\",\n {} as LinkDeviceStorage,\n );\n\n const { account } = useAccount();\n const canLinkDevice = useCanLinkDevice();\n const configStore = useConfig();\n\n const onDisconnect = async (label: string) => {\n // The cache must be cleared first, otherwise it will be auto connect wallet\n localStorage.removeItem(WALLET_KEY);\n await account.disconnect();\n await disconnect({ label });\n };\n\n useEffect(() => {\n const linkData = getLinkDeviceData();\n const walletInfo = JSON.parse(localStorage.getItem(WALLET_KEY) ?? \"{}\");\n if (linkData && walletInfo) {\n // clear connect data when link device\n onDisconnect(walletInfo.label);\n }\n }, []);\n\n const linkDevice = async () => {\n const linkData = getLinkDeviceData();\n if (!linkData) return;\n\n const { address, secretKey, chainId, chainNamespace } = linkData;\n const isSuccess = await account.importOrderlyKey({\n address,\n secretKey,\n chainNamespace,\n });\n if (!isSuccess) return;\n setLinkDeviceStorage({\n chainId,\n chainNamespace,\n });\n\n const url = new URL(window.location.href);\n url.searchParams.delete(\"link\");\n // use set instead of append, because the param possibly in the url\n url.searchParams.set(\"utm_medium\", \"qrcode\");\n const decodedUrl = decodeURIComponent(url.toString());\n history.replaceState(null, \"\", decodedUrl);\n };\n\n useEffect(() => {\n if (canLinkDevice && !connectedChain) {\n linkDevice();\n }\n }, [account, connectedChain, canLinkDevice]);\n\n const autoLinkDevice = async () => {\n // Only auto-link if device linking data exists in storage AND it's actually a linkable device\n const { chainId, chainNamespace } = getLinkDeviceStorage() || {};\n if (canLinkDevice && !connectedChain && chainId && chainNamespace) {\n const address = account.keyStore.getAddress();\n const orderlyKey = account.keyStore.getOrderlyKey();\n const accountId = account.keyStore.getAccountId(address!);\n const res = await account.checkOrderlyKey(\n address!,\n orderlyKey!,\n accountId!,\n );\n if (res) {\n configStore.set(\"chainNamespace\", chainNamespace);\n }\n }\n };\n\n // persist status when refresh page\n useEffect(() => {\n autoLinkDevice();\n }, [account, canLinkDevice, connectedChain]);\n\n return { linkDevice };\n}\n\nfunction getLinkDeviceStorage() {\n try {\n const linkDeviceStorage = localStorage.getItem(\"orderly_link_device\");\n const json = linkDeviceStorage ? parseJSON(linkDeviceStorage) : null;\n return json as LinkDeviceStorage;\n } catch (err) {\n console.error(\"getLinkDeviceStorage\", err);\n }\n}\n\nexport function getLinkDeviceData() {\n const url = new URL(window.location.href);\n const link = url.searchParams.get(\"link\");\n\n if (!link) return;\n\n const {\n a: address,\n k: secretKey,\n i: chainId,\n n: chainNamespace,\n } = decodeBase64(link) || {};\n\n if (address && secretKey && chainId && chainNamespace) {\n return {\n address,\n secretKey,\n chainId,\n chainNamespace,\n };\n }\n}\n\nfunction decodeBase64(base64: string) {\n try {\n const data = JSON.parse(window.atob(base64)) as DecodedData;\n console.log(\"decodeBase64\", data);\n const currentTime = Math.floor(Date.now() / 1000);\n const expiredTime = data.t;\n\n if (!expiredTime || currentTime > expiredTime) {\n console.error(\"Orderly key has expired.\");\n return;\n }\n\n return data;\n } catch (error) {\n console.error(\"Invalid or expired orderly key.\");\n }\n}\n","import { useSettleSubscription } from \"@kodiak-finance/orderly-hooks\";\nimport { toast } from \"@kodiak-finance/orderly-ui\";\nimport { useTranslation } from \"@kodiak-finance/orderly-i18n\";\n\nexport function useSettleEvent() {\n const { t } = useTranslation();\n\n useSettleSubscription({\n onMessage: (data: any) => {\n const { status } = data;\n\n // console.log(\"settle ws: \", data);\n\n switch (status) {\n case \"COMPLETED\":\n toast.success(t(\"settle.settlement.completed\"));\n break;\n case \"FAILED\":\n toast.error(t(\"settle.settlement.failed\"));\n break;\n default:\n break;\n }\n },\n });\n}\n","import { useEventEmitter } from \"@kodiak-finance/orderly-hooks\";\nimport { useEffect } from \"react\";\nimport { modal, toast } from \"@kodiak-finance/orderly-ui\";\nimport { LedgerWalletKey } from \"@kodiak-finance/orderly-types\";\nimport { useStorageLedgerAddress } from \"@kodiak-finance/orderly-hooks\";\nimport { useTranslation } from \"@kodiak-finance/orderly-i18n\";\n\nexport function useWalletConnectError() {\n const { t } = useTranslation();\n const ee = useEventEmitter();\n const { setLedgerAddress } = useStorageLedgerAddress();\n\n useEffect(() => {\n ee.on(\"wallet:connect-error\", (data) => {\n toast.error(data.message);\n });\n ee.on(\n \"wallet:sign-message-with-ledger-error\",\n (data: { userAddress: string; message: string }) => {\n window.setTimeout(() => {\n modal\n .confirm({\n title: t(\"connector.ledger.signMessageFailed\"),\n content: t(\"connector.ledger.signMessageFailed.description\"),\n size: \"sm\",\n onOk: async () => {\n console.log(\"-- use ledger\", true);\n setLedgerAddress(data.userAddress);\n\n return Promise.resolve();\n },\n okLabel: t(\"common.ok\"),\n onCancel: async () => {\n toast.error(data.message);\n return Promise.resolve();\n },\n cancelLabel: t(\"common.no\"),\n })\n .then((res) => {\n console.log(\"-- dialog res\", res);\n });\n });\n }\n );\n }, [ee, t]);\n\n return {};\n}\n","import { useRef } from \"react\";\nimport {\n useEventEmitter,\n useSessionStorage,\n useWalletSubscription,\n} from \"@kodiak-finance/orderly-hooks\";\nimport { useTranslation } from \"@kodiak-finance/orderly-i18n\";\nimport { toast } from \"@kodiak-finance/orderly-ui\";\nimport { capitalizeString } from \"@kodiak-finance/orderly-utils\";\n\nexport function useWalletEvent() {\n const { t } = useTranslation();\n const ee = useEventEmitter();\n\n const recordRef = useRef<Record<number, boolean>>({});\n\n const [record, setRecord] = useSessionStorage(\n \"orderly_wallet_change_id\",\n {} as Record<number, boolean>,\n );\n\n recordRef.current = record;\n\n useWalletSubscription({\n onMessage: (data: any) => {\n console.log(\"wallet:changed\", data);\n const { id, side, transStatus } = data;\n let showToast = true;\n\n // DEPOSIT and WITHDRAW will push twice COMPLETED and FAILED event\n if (\n [\"DEPOSIT\", \"WITHDRAW\"].includes(side) &&\n [\"COMPLETED\", \"FAILED\"].includes(transStatus)\n ) {\n const isPushed = !!recordRef.current[id];\n if (!isPushed) {\n recordRef.current[id] = true;\n setRecord((prev: Record<number, boolean>) => ({\n ...prev,\n [id]: true,\n }));\n }\n showToast = !isPushed;\n }\n\n if (transStatus === \"COMPLETED\" && showToast) {\n let msg = `${capitalizeString(side)} completed`;\n\n if (side === \"DEPOSIT\") {\n msg = t(\"transfer.deposit.completed\");\n } else if (side === \"WITHDRAW\") {\n msg = t(\"transfer.withdraw.completed\");\n }\n\n toast.success(msg);\n } else if (transStatus === \"FAILED\" && showToast) {\n let msg = `${capitalizeString(side)} failed`;\n\n if (side === \"DEPOSIT\") {\n msg = t(\"transfer.deposit.failed\");\n } else if (side === \"WITHDRAW\") {\n msg = t(\"transfer.withdraw.failed\");\n }\n toast.error(msg);\n }\n\n ee.emit(\"wallet:changed\", data);\n },\n });\n}\n","import { useEffect, useMemo, useRef, useState } from \"react\";\nimport {\n useConfig,\n useEventEmitter,\n useTrack,\n WalletState,\n} from \"@kodiak-finance/orderly-hooks\";\nimport {\n useAccount,\n useChains,\n useKeyStore,\n useWalletConnector,\n} from \"@kodiak-finance/orderly-hooks\";\nimport {\n AccountStatusEnum,\n SDKError,\n ChainNamespace,\n NetworkId,\n TrackerEventName,\n ABSTRACT_CHAIN_ID_MAP,\n} from \"@kodiak-finance/orderly-types\";\nimport {\n parseChainIdToNumber,\n praseChainIdToNumber,\n windowGuard,\n} from \"@kodiak-finance/orderly-utils\";\nimport { getLinkDeviceData } from \"./useLinkDevice\";\n\nconst WALLET_KEY = \"orderly:wallet-info\";\nconst CHAIN_NAMESPACE = \"orderly:chain-namespace\";\n\nexport const useWalletStateHandle = (options: {\n // onChainChanged?: (chainId: number, isTestnet: boolean) => void;\n currentChainId?: number;\n}) => {\n const {\n wallet: connectedWallet,\n connect,\n connectedChain,\n disconnect,\n namespace,\n } = useWalletConnector();\n //\n // console.log(\"🔗 wallet state handle\", {\n // connectedWallet,\n // connectedChain,\n // namespace,\n // });\n\n if (typeof connect !== \"function\") {\n throw new SDKError(\"Please provide a wallet connector provider\");\n }\n\n const ee = useEventEmitter();\n const isManualConnect = useRef<boolean>(false);\n const brokerId = useConfig(\"brokerId\");\n const { account, state: accountState } = useAccount();\n const keyStore = useKeyStore();\n const networkId = useConfig(\"networkId\") as NetworkId;\n const [chains, { checkChainSupport }] = useChains();\n\n const [unsupported, setUnsupported] = useState(false);\n const { track, setTrackUserId } = useTrack();\n\n // current connected wallet address\n const currentWalletAddress = useMemo<string | undefined>(() => {\n return connectedWallet?.accounts?.[0]?.address;\n }, [connectedWallet]);\n\n // current connected chain id\n const currentChain = useMemo<\n { id: number; namespace: string } | undefined\n >(() => {\n const id = connectedWallet?.chains?.[0]?.id;\n const namespace = connectedWallet?.chains?.[0]?.namespace as string;\n if (typeof id === \"undefined\") return undefined;\n return {\n id: parseChainIdToNumber(id),\n namespace,\n };\n }, [connectedWallet]);\n\n useEffect(() => {\n if (\n accountState.status >= AccountStatusEnum.EnableTrading &&\n account.accountId\n ) {\n setTrackUserId(account.accountId!);\n }\n }, [account, accountState]);\n\n useEffect(() => {\n if (!connectedChain) {\n setUnsupported(false);\n return;\n }\n\n let isSupported = checkChainSupport(\n connectedChain.id,\n networkId,\n // networkId === \"testnet\" ? chains.testnet : chains.mainnet\n );\n if (\n ABSTRACT_CHAIN_ID_MAP.has(parseInt(connectedChain.id as string)) &&\n connectedWallet?.label !== \"AGW\"\n ) {\n isSupported = false;\n }\n\n setUnsupported(!isSupported);\n }, [connectedChain, chains, checkChainSupport, networkId, connectedWallet]);\n\n useEffect(() => {\n // if (unsupported) return;\n\n windowGuard(() => {\n const localAddress = keyStore.getAddress();\n const walletInfo = JSON.parse(localStorage.getItem(WALLET_KEY) ?? \"{}\");\n\n /**\n * if locale address is exist, restore account state\n */\n if (connectedChain?.namespace === ChainNamespace.solana) {\n return;\n }\n if (\n localAddress &&\n account.address !== localAddress &&\n walletInfo.label\n ) {\n connect({\n autoSelect: {\n label: walletInfo.label,\n disableModals: true,\n },\n }).then(\n (res) => {\n console.log(\"silent connect wallet successes\", res);\n },\n (error) => console.log(\"connect error\", error),\n );\n }\n });\n }, [connectedWallet, account.address]);\n\n /**\n * handle wallet connection\n */\n useEffect(() => {\n if (\n connectedWallet === null &&\n accountState.status > AccountStatusEnum.NotConnected &&\n !accountState.validating\n ) {\n account.disconnect();\n return;\n }\n\n if (unsupported || !connectedChain) return;\n if (isManualConnect.current) return;\n\n const linkData = getLinkDeviceData();\n\n // updateAccount(currentWalletAddress!, connectedWallet!, currentChainId!);\n /**\n * switch account\n */\n if (\n !!currentWalletAddress &&\n currentWalletAddress !== account.address &&\n !linkData\n ) {\n account.setAddress(currentWalletAddress, {\n provider: connectedWallet?.provider,\n chain: {\n id: praseChainIdToNumber(currentChain!.id),\n namespace: currentChain!.namespace.toUpperCase() as ChainNamespace,\n },\n wallet: {\n name: connectedWallet?.label ?? \"\",\n },\n additionalInfo: connectedWallet?.additionalInfo ?? {},\n });\n track(TrackerEventName.walletConnect, {\n wallet: connectedWallet?.label ?? \"\",\n network: currentChain!.namespace.toUpperCase() as ChainNamespace,\n });\n\n // save wallet connector info to local storage\n windowGuard(() => {\n localStorage.setItem(\n WALLET_KEY,\n JSON.stringify({\n label: connectedWallet?.label ?? \"\",\n }),\n );\n });\n }\n\n /**\n * switch chainId\n */\n if (currentChain?.id !== account.chainId) {\n account.switchChainId(currentChain?.id!);\n\n // emit chain changed event\n // options.onChainChanged?.(currentChainId!, isTestnet(networkId));\n }\n }, [\n connectedWallet,\n connectedChain,\n currentWalletAddress,\n currentChain,\n account.address,\n accountState,\n account.chainId,\n unsupported,\n ]);\n\n /**\n * User manually connects to wallet\n */\n const connectWallet = async (): Promise<{\n wallet?: WalletState;\n status?: AccountStatusEnum;\n wrongNetwork?: boolean;\n } | null> => {\n isManualConnect.current = true;\n // const walletState = await connect();\n\n return connect({ chainId: options.currentChainId })\n .then(async (walletState) => {\n if (\n Array.isArray(walletState) &&\n walletState.length > 0 &&\n walletState[0] &&\n walletState[0].accounts.length > 0\n ) {\n const wallet = walletState[0];\n const chainId = praseChainIdToNumber(wallet.chains[0].id);\n\n if (!checkChainSupport(chainId, networkId)) {\n return {\n wrongNetwork: true,\n };\n }\n //\n if (!account) {\n throw new Error(\"account is not initialized\");\n }\n // clear link device data when connect wallt\n if (\n accountState.status ===\n AccountStatusEnum.EnableTradingWithoutConnected\n ) {\n localStorage.removeItem(\"orderly_link_device\");\n await account.disconnect();\n }\n\n const status = await account.setAddress(wallet.accounts[0].address, {\n provider: wallet.provider,\n chain: {\n id: praseChainIdToNumber(wallet.chains[0].id),\n namespace:\n wallet.chains[0].namespace.toUpperCase() as ChainNamespace,\n },\n wallet: {\n name: wallet.label,\n },\n // label: ,\n });\n track(TrackerEventName.walletConnect, {\n wallet: wallet.label,\n network: wallet.chains[0].namespace.toUpperCase() as ChainNamespace,\n });\n console.log(\"-- xxxxxx status\", status);\n\n return { wallet, status, wrongNetwork: false };\n }\n\n return null;\n })\n .finally(() => {\n isManualConnect.current = false;\n });\n };\n\n return {\n connectWallet,\n wrongNetwork: unsupported,\n };\n};\n","import React, { createContext, useContext } from \"react\";\nimport { RestrictedInfoReturns } from \"@kodiak-finance/orderly-hooks\";\nimport { API } from \"@kodiak-finance/orderly-types\";\nimport { useWalletStateHandle } from \"../hooks/useWalletStateHandle\";\n\nexport type RouteOption = {\n href: \"/portfolio\" | \"/portfolio/history\";\n name: string;\n};\n\nexport type WidgetConfigs = {\n scanQRCode?: {\n onSuccess?: (url: string) => void;\n };\n subAccount?: {\n /** @deprecated The number of custom sub-accounts needs to be configured in sync with the backend. If you’re not sure about it, please don’t set this value. */\n maxSubAccountCount: number;\n };\n};\n\nexport type AppContextState = {\n connectWallet: ReturnType<typeof useWalletStateHandle>[\"connectWallet\"];\n /**\n * Whether the current network is not supported\n */\n wrongNetwork: boolean;\n disabledConnect: boolean;\n currentChainId: number | undefined;\n setCurrentChainId: (chainId: number | undefined) => void;\n onChainChanged?: (\n chainId: number,\n state: { isTestnet: boolean; isWalletConnected: boolean },\n ) => void;\n // networkStatus: ReturnType<typeof useAppState>[\"networkStatus\"];\n restrictedInfo: RestrictedInfoReturns;\n showAnnouncement: boolean;\n setShowAnnouncement: (show: boolean) => void;\n onRouteChange?: (option: RouteOption) => void;\n widgetConfigs?: WidgetConfigs;\n /** Custom announcements to merge with API announcements */\n customAnnouncements?: API.AnnouncementRow[];\n};\n\nexport const AppStateContext = createContext<AppContextState>({\n setCurrentChainId: (chainId?: number) => {},\n restrictedInfo: {},\n setShowAnnouncement: (show: boolean) => {},\n} as AppContextState);\n\nexport const useAppContext = () => {\n return useContext(AppStateContext);\n};\n","import { useAccount } from \"@kodiak-finance/orderly-hooks\";\nimport { AccountStatusEnum } from \"@kodiak-finance/orderly-types\";\nimport { useAppContext } from \"../provider/appStateContext\";\n\nexport const useDataTap = <T = any>(\n data: T,\n options?: {\n skip?: false;\n fallbackData?: T;\n accountStatus?: AccountStatusEnum;\n },\n): T | null => {\n const { wrongNetwork, disabledConnect } = useAppContext();\n const { state } = useAccount();\n /**\n * ignore\n */\n if (options?.skip) {\n return data;\n }\n\n if (wrongNetwork || disabledConnect) {\n return typeof options?.fallbackData !== \"undefined\"\n ? options.fallbackData\n : null;\n }\n\n if (typeof options?.accountStatus !== \"undefined\") {\n if (state.status < options.accountStatus) {\n return typeof options?.fallbackData !== \"undefined\"\n ? options.fallbackData\n : null;\n }\n }\n\n // return wrongNetwork\n // ? typeof options?.fallbackData !== \"undefined\"\n // ? options.fallbackData\n // : null\n // : data;\n //\n return data;\n};\n","import { useCallback } from \"react\";\nimport {\n ERROR_MSG_CODES,\n OrderValidationItem,\n OrderValidationResult,\n} from \"@kodiak-finance/orderly-hooks\";\nimport { useTranslation } from \"@kodiak-finance/orderly-i18n\";\n\ntype Keys = keyof OrderValidationResult;\ntype ErrorType = Partial<OrderValidationItem[\"type\"]>;\n\nexport function useOrderEntryFormErrorMsg(\n errors: OrderValidationResult | null,\n) {\n const { t } = useTranslation();\n\n const getMessage = (\n key: Keys,\n type: ErrorType,\n params: {\n value?: string | number;\n min?: string | number;\n max?: string | number;\n },\n ) => {\n const { value, min, max } = params || {};\n const map: Partial<Record<Keys, Partial<Record<ErrorType, string>>>> = {\n quantity: {\n required: t(\"orderEntry.orderQuantity.error.required\"),\n min: t(\"orderEntry.orderQuantity.error.min\", { value }),\n max: t(\"orderEntry.orderQuantity.error.max\", { value }),\n },\n order_quantity: {\n required: t(\"orderEntry.orderQuantity.error.required\"),\n min: t(\"orderEntry.orderQuantity.error.min\", { value }),\n max: t(\"orderEntry.orderQuantity.error.max\", { value }),\n },\n order_price: {\n required: t(\"orderEntry.orderPrice.error.required\"),\n min: t(\"orderEntry.orderPrice.error.min\", { value }),\n max: t(\"orderEntry.orderPrice.error.max\", { value }),\n },\n trigger_price: {\n required: t(\"orderEntry.triggerPrice.error.required\"),\n min: t(\"orderEntry.triggerPrice.error.min\", { value }),\n max: t(\"orderEntry.triggerPrice.error.max\", { value }),\n },\n tp_trigger_price: {\n required: t(\"tpsl.validate.tpTriggerPrice.error.required\"),\n min: t(\"orderEntry.tpTriggerPrice.error.min\", { value }),\n max: t(\"orderEntry.tpTriggerPrice.error.max\", { value }),\n priceErrorMin: t(\"tpsl.validate.tpTriggerPrice.error.priceErrorMin\"),\n priceErrorMax: t(\"tpsl.validate.tpTriggerPrice.error.priceErrorMax\"),\n },\n sl_trigger_price: {\n required: t(\"tpsl.validate.slTriggerPrice.error.required\"),\n min: t(\"orderEntry.slTriggerPrice.error.min\", { value }),\n max: t(\"orderEntry.slTriggerPrice.error.max\", { value }),\n priceErrorMin: t(\"tpsl.validate.slTriggerPrice.error.priceErrorMin\"),\n priceErrorMax: t(\"tpsl.validate.slTriggerPrice.error.priceErrorMax\"),\n [ERROR_MSG_CODES.SL_PRICE_WARNING]: t(\n \"tpsl.validate.slTriggerPrice.warning.closeToLiqPrice\",\n ),\n [ERROR_MSG_CODES.SL_PRICE_ERROR]: t(\n \"tpsl.validate.slTriggerPrice.error.crossLiqPrice\",\n ),\n },\n tp_order_price: {\n required: t(\"tpsl.validate.tpOrderPrice.error.required\"),\n min: t(\"tpsl.validate.tpOrderPrice.error.min\", { value }),\n max: t(\"tpsl.validate.tpOrderPrice.error.max\", { value }),\n },\n sl_order_price: {\n required: t(\"tpsl.validate.slOrderPrice.error.required\"),\n min: t(\"tpsl.validate.slOrderPrice.error.min\", { value }),\n max: t(\"tpsl.validate.slOrderPrice.error.max\", { value }),\n },\n total: {\n min: t(\"orderEntry.total.error.min\", { value }),\n },\n // not show form input tooltip\n // slippage: {\n // max: t(\"orderEntry.slippage.error.max\"),\n // },\n start_price: {\n required: t(\"orderEntry.startPrice.error.required\"),\n min: t(\"orderEntry.startPrice.error.min\", { value }),\n max: t(\"orderEntry.startPrice.error.max\", { value }),\n },\n end_price: {\n required: t(\"orderEntry.endPrice.error.required\"),\n min: t(\"orderEntry.endPrice.error.min\", { value }),\n max: t(\"orderEntry.endPrice.error.max\", { value }),\n },\n total_orders: {\n required: t(\"orderEntry.totalOrders.error.required\"),\n range: t(\"orderEntry.totalOrders.error.range\"),\n },\n skew: {\n required: t(\"orderEntry.skew.error.required\"),\n min: t(\"orderEntry.skew.error.min\", { value }),\n max: t(\"orderEntry.skew.error.max\", { value }),\n },\n activated_price: {\n min: t(\"orderEntry.triggerPrice.error.min\", { value }),\n max: t(\"orderEntry.triggerPrice.error.max\", { value }),\n },\n callback_value: {\n required: t(\"orderEntry.callbackValue.error.required\"),\n min: t(\"orderEntry.callbackValue.error.min\", { value }),\n range: t(\"orderEntry.callbackValue.error.range\", {\n min,\n max,\n }),\n },\n callback_rate: {\n required: t(\"orderEntry.callbackRate.error.required\"),\n range: t(\"orderEntry.callbackRate.error.range\", {\n min,\n max,\n }),\n },\n };\n\n return map[key]?.[type] || \"\";\n };\n\n const getErrorMsg = useCallback(\n (key: Keys, customValue?: string) => {\n const { type, value, min, max } = errors?.[key] || ({} as any);\n if (type) {\n return getMessage(key, type, { value: customValue || value, min, max });\n }\n return \"\";\n },\n [errors],\n );\n\n return {\n getErrorMsg,\n };\n}\n","import { PropsWithChildren, Component, ErrorInfo, ReactNode } from \"react\";\nimport { i18n } from \"@kodiak-finance/orderly-i18n\";\nimport { Button, cn, Flex, Text } from \"@kodiak-finance/orderly-ui\";\n\ntype ErrorBoundaryState = {\n hasError: boolean;\n error?: Error;\n errorInfo?: ErrorInfo;\n};\n\ntype ErrorBoundaryProps = PropsWithChildren<{\n className?: string;\n onError?: (error: Error, errorInfo: ErrorInfo) => void;\n icon?: ReactNode;\n title?: string;\n description?: string;\n refreshButtonText?: string;\n onRefresh?: () => void;\n}>;\n\nexport class ErrorBoundary extends Component<\n ErrorBoundaryProps,\n ErrorBoundaryState\n> {\n constructor(props: PropsWithChildren) {\n super(props);\n this.state = { hasError: false };\n }\n\n static getDerivedStateFromError(error: Error): ErrorBoundaryState {\n return { hasError: true, error };\n }\n\n componentDidCatch(error: Error, errorInfo: ErrorInfo) {\n this.setState({\n error,\n errorInfo,\n });\n\n // Log error to console in development\n if (process.env.NODE_ENV === \"development\") {\n console.error(\"ErrorBoundary caught an error:\", error, errorInfo);\n }\n\n this.props.onError?.(error, errorInfo);\n\n // You can also log the error to an error reporting service here\n // Example: errorReportingService.logError(error, errorInfo);\n }\n\n render() {\n if (this.state.hasError) {\n return (\n <Flex\n direction=\"column\"\n width=\"100%\"\n itemAlign=\"center\"\n justify=\"center\"\n className={cn(\"oui-h-screen oui-px-[10%]\", this.props.className)}\n >\n {this.props.icon || <Icon />}\n <Text\n className={cn(\n \"oui-mt-10\",\n \"oui-text-[32px] oui-leading-[40px]\",\n \"md:oui-text-[48px] md:oui-leading-[56px]\",\n )}\n intensity={80}\n weight=\"bold\"\n >\n {this.props.title || i18n.t(\"errorBoundary.title\")}\n </Text>\n <Text\n className={cn(\n \"oui-mt-2\",\n \"oui-text-[16px] oui-leading-[24px]\",\n \"md:oui-text-[20px] md:oui-leading-[28px]\",\n \"oui-text-center\",\n )}\n weight=\"semibold\"\n intensity={36}\n >\n {this.props.description || i18n.t(\"errorBoundary.description\")}\n </Text>\n <Button\n onClick={() => {\n if (typeof this.props.onRefresh === \"function\") {\n this.props.onRefresh();\n } else {\n window.location.reload();\n }\n }}\n className=\"oui-mt-4 oui-font-semibold\"\n variant=\"gradient\"\n size=\"md\"\n >\n <RefreshIcon className=\"oui-mr-1\" />\n {this.props.refreshButtonText || i18n.t(\"errorBoundary.refresh\")}\n </Button>\n {/* {process.env.NODE_ENV === \"development\" && this.state.error && (\n <details className=\"mt-4 p-4 bg-red-50 border border-red-200 rounded text-left max-w-2xl\">\n <summary className=\"cursor-pointer font-medium text-red-800\">\n Error Details\n </summary>\n <pre className=\"mt-2 text-sm text-red-700 overflow-auto\">\n {this.state.error.toString()}\n {this.state.errorInfo?.componentStack}\n </pre>\n </details>\n )} */}\n </Flex>\n );\n }\n\n return this.props.children;\n }\n}\n\nconst Icon = (props: { className?: string }) => {\n return (\n <svg\n width=\"156\"\n height=\"165\"\n viewBox=\"0 0 156 165\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n className={props.className}\n >\n <path\n d=\"M77.958 11.2581C117.408 11.2581 149.224 43.7623 149.225 83.635C149.225 123.508 117.408 156.013 77.958 156.013C38.5076 156.013 6.69141 123.508 6.69141 83.635C6.69161 43.7623 38.5077 11.2581 77.958 11.2581Z\"\n stroke=\"url(#paint0_linear_32953_90176)\"\n strokeWidth=\"12\"\n />\n <path\n d=\"M74.1236 18.8531C74.8967 18.2272 76.0309 18.3465 76.6568 19.1196L99.9666 47.9101C100.593 48.6832 100.473 49.8174 99.7001 50.4433C98.927 51.0692 97.7928 50.9499 97.1669 50.1768L73.8571 21.3863C73.2312 20.6132 73.3505 19.479 74.1236 18.8531Z\"\n fill=\"#394155\"\n />\n <path\n d=\"M67.4775 153.345C66.5687 153.75 65.5041 153.341 65.0996 152.432L47.5699 113.05C47.1654 112.142 47.5742 111.077 48.483 110.672C49.3918 110.268 50.4564 110.677 50.8609 111.585L68.3906 150.967C68.7951 151.876 68.3863 152.941 67.4775 153.345Z\"\n fill=\"#394155\"\n />\n <path\n d=\"M87.1937 2.50608C88.9032 1.12201 91.4111 1.38582 92.7951 3.09532L117.65 33.7939C119.034 35.5033 118.77 38.0112 117.06 39.3952L106.349 48.0675C104.64 49.4515 102.132 49.1877 100.748 47.4782L75.8932 16.7797C74.5092 15.0702 74.773 12.5624 76.4825 11.1783L87.1937 2.50608Z\"\n fill=\"url(#paint1_linear_32953_90176)\"\n />\n <path\n d=\"M54.8689 163.161C52.8595 164.055 50.5054 163.152 49.6109 161.142L30.369 117.913C29.4745 115.904 30.3784 113.55 32.3879 112.655L38.8256 109.79C40.8351 108.895 43.1892 109.799 44.0836 111.809L63.3256 155.037C64.22 157.047 63.3161 159.401 61.3067 160.295L54.8689 163.161Z\"\n fill=\"url(#paint2_linear_32953_90176)\"\n />\n <path\n d=\"M21.0497 137.635C19.2748 138.425 17.1955 137.627 16.4054 135.852C15.6154 134.077 16.4138 131.998 18.1887 131.208L29.4767 126.183C31.2516 125.393 33.331 126.191 34.121 127.966C34.911 129.741 34.1127 131.821 32.3377 132.611L21.0497 137.635Z\"\n fill=\"url(#paint3_linear_32953_90176)\"\n />\n <path\n d=\"M31.0067 160.657C29.2318 161.447 27.1525 160.649 26.3625 158.874C25.5724 157.099 26.3708 155.02 28.1457 154.23L39.4338 149.205C41.2087 148.415 43.288 149.213 44.078 150.988C44.8681 152.763 44.0697 154.843 42.2948 155.633L31.0067 160.657Z\"\n fill=\"url(#paint4_linear_32953_90176)\"\n />\n <path\n d=\"M94.2979 17.9219C94.2979 19.7549 92.812 21.2408 90.979 21.2408C89.1461 21.2408 87.6602 19.7549 87.6602 17.9219C87.6602 16.0889 89.1461 14.603 90.979 14.603C92.812 14.603 94.2979 16.0889 94.2979 17.9219Z\"\n fill=\"#07080A\"\n />\n <path\n d=\"M106.243 32.5249C106.243 34.3579 104.757 35.8438 102.924 35.8438C101.091 35.8438 99.6055 34.3579 99.6055 32.5249C99.6055 30.692 101.091 29.2061 102.924 29.2061C104.757 29.2061 106.243 30.692 106.243 32.5249Z\"\n fill=\"#07080A\"\n />\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M143.238 87.3294C143.283 86.3294 143.306 85.3235 143.306 84.3123C143.306 80.0077 142.89 75.8003 142.096 71.728C137.49 69.544 132.251 67.6307 127.118 66.8126C122.674 66.1042 117.636 66.1072 113.053 68.1318C108.166 70.2911 104.601 74.3958 102.851 80.1999C101.677 84.091 100.713 87.7506 99.857 90.9972L99.8569 90.9974C99.5483 92.1682 99.2539 93.2853 98.969 94.3402C97.8574 98.455 96.882 101.656 95.6795 104.319C94.5159 106.895 93.2041 108.812 91.5007 110.366C89.7881 111.929 87.3882 113.389 83.7037 114.64L87.9295 127.083C92.9507 125.378 97.0389 123.101 100.357 120.074C103.684 117.039 105.944 113.516 107.655 109.727C109.327 106.025 110.528 101.937 111.655 97.7671C111.977 96.5735 112.294 95.3715 112.616 94.1496L112.616 94.1488L112.616 94.1487C113.456 90.9644 114.33 87.646 115.432 83.9941C116.178 81.5196 117.297 80.6226 118.363 80.1517C119.734 79.5462 121.92 79.2905 125.05 79.7894C131.168 80.7644 138.314 84.1982 143.238 87.3294ZM13.9805 70.6827C14.9192 66.2565 16.3058 61.9957 18.0906 57.9501C23.709 58.5554 30.4365 58.6747 37.3538 57.7247C48.6584 56.1721 59.8141 51.8684 67.7619 42.9131L77.5901 51.6356C66.8783 63.7052 52.3551 68.9284 39.1417 70.7431C29.9766 72.0018 21.1264 71.6711 13.9805 70.6827Z\"\n fill=\"#394155\"\n />\n <path\n d=\"M68.7641 23.3532C70.4736 21.9692 72.9814 22.233 74.3655 23.9425L94.9298 49.3421C96.3139 51.0515 96.0501 53.5594 94.3406 54.9434L86.1984 61.5356C84.4889 62.9197 81.9811 62.6559 80.597 60.9464L60.0326 35.5468C58.6486 33.8373 58.9124 31.3295 60.6219 29.9454L68.7641 23.3532Z\"\n fill=\"#535E7B\"\n />\n <path\n d=\"M74.0447 150.372C72.0352 151.267 69.6811 150.363 68.7867 148.353L53.0318 112.959C52.1373 110.949 53.0412 108.595 55.0507 107.7L72.5225 99.9234C74.532 99.029 76.8861 99.9329 77.7806 101.942L93.5355 137.337C94.4299 139.347 93.526 141.701 91.5165 142.595L74.0447 150.372Z\"\n fill=\"#535E7B\"\n />\n <defs>\n <linearGradient\n id=\"paint0_linear_32953_90176\"\n x1=\"71.7422\"\n y1=\"138.236\"\n x2=\"124.758\"\n y2=\"41.3888\"\n gradientUnits=\"userSpaceOnUse\"\n >\n <stop stopColor=\"#1B1D22\" />\n <stop offset=\"1\" stopColor=\"#26292E\" />\n </linearGradient>\n <linearGradient\n id=\"paint1_linear_32953_90176\"\n x1=\"111.705\"\n y1=\"43.7314\"\n x2=\"81.8381\"\n y2=\"6.84218\"\n gradientUnits=\"userSpaceOnUse\"\n >\n <stop stopColor=\"rgb(var(--oui-gradient-brand-end))\" />\n <stop offset=\"1\" stopColor=\"rgb(var(--oui-gradient-brand-start))\" />\n </linearGradient>\n <linearGradient\n id=\"paint2_linear_32953_90176\"\n x1=\"35.6067\"\n y1=\"111.223\"\n x2=\"58.0878\"\n y2=\"161.728\"\n gradientUnits=\"userSpaceOnUse\"\n >\n <stop stopColor=\"rgb(var(--oui-gradient-brand-end))\" />\n <stop offset=\"1\" stopColor=\"rgb(var(--oui-gradient-brand-start))\" />\n </linearGradient>\n <linearGradient\n id=\"paint3_linear_32953_90176\"\n x1=\"23.8327\"\n y1=\"128.695\"\n x2=\"26.6937\"\n y2=\"135.123\"\n gradientUnits=\"userSpaceOnUse\"\n >\n <stop stopColor=\"rgb(var(--oui-gradient-brand-end))\" />\n <stop offset=\"1\" stopColor=\"rgb(var(--oui-gradient-brand-start))\" />\n </linearGradient>\n <linearGradient\n id=\"paint4_linear_32953_90176\"\n x1=\"33.7897\"\n y1=\"151.717\"\n x2=\"36.6508\"\n y2=\"158.145\"\n gradientUnits=\"userSpaceOnUse\"\n >\n <stop stopColor=\"rgb(var(--oui-gradient-brand-end))\" />\n <stop offset=\"1\" stopColor=\"rgb(var(--oui-gradient-brand-start))\" />\n </linearGradient>\n </defs>\n </svg>\n );\n};\n\nconst RefreshIcon = (props: { className?: string }) => {\n return (\n <svg\n width=\"15\"\n height=\"15\"\n viewBox=\"0 0 15 15\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n className={props.className}\n >\n <path\n d=\"M7.5026 2.52515C6.30444 2.52515 5.15994 2.92706 4.23944 3.65565C3.98686 3.85515 3.94835 4.22322 4.14844 4.47581C4.34852 4.72839 4.71602 4.76689 4.96861 4.56681C5.68436 4.00039 6.56985 3.69181 7.5026 3.69181C9.75777 3.69181 11.5859 5.51998 11.5859 7.77514H10.4193L12.1693 10.1085L13.9193 7.77514H12.7526C12.7526 4.87539 10.4024 2.52515 7.5026 2.52515ZM2.83594 5.44181L1.08594 7.77514H2.2526C2.2526 10.6749 4.60285 13.0251 7.5026 13.0251C8.70135 13.0251 9.84527 12.6238 10.7658 11.8946C11.0184 11.6951 11.0569 11.3271 10.8568 11.0745C10.6567 10.8219 10.2892 10.7834 10.0366 10.9835C9.32027 11.5505 8.43594 11.8585 7.5026 11.8585C5.24744 11.8585 3.41927 10.0303 3.41927 7.77514H4.58594L2.83594 5.44181Z\"\n fill=\"black\"\n />\n </svg>\n );\n};\n","import { useMemo } from \"react\";\nimport { useAccount } from \"@kodiak-finance/orderly-hooks\";\nimport { AccountStatusEnum } from \"@kodiak-finance/orderly-types\";\nimport { useAppContext } from \"../provider/appStateContext\";\n\nexport function useCanTrade() {\n const { state } = useAccount();\n\n const { wrongNetwork, disabledConnect } = useAppContext();\n\n const canTrade = useMemo(() => {\n return (\n !wrongNetwork &&\n !disabledConnect &&\n (state.status === AccountStatusEnum.EnableTrading ||\n state.status === AccountStatusEnum.EnableTradingWithoutConnected)\n );\n }, [state.status, wrongNetwork, disabledConnect]);\n\n return canTrade;\n}\n","/**\n * SDK Version - BUMP THIS WHEN RELEASING\n * Keep in sync with root package.json version\n */\nexport const SDK_VERSION = \"2.8.19\";\n\nexport type ChangesetEntry = {\n date: string;\n title: string;\n summary: string;\n highlights: string[];\n packages: string[];\n type: \"breaking\" | \"feature\" | \"bugfix\" | \"improvement\";\n};\n\nexport type Changesets = Record<string, ChangesetEntry>;\n\n/**\n * Changesets - What's new in each version\n * ADD NEW ENTRIES WHEN BUMPING SDK_VERSION\n */\nexport const CHANGESETS: Changesets = {\n \"2.8.19\": {\n date: \"2025-12-12\",\n title: \"Orderly SDK sync with new features and optimizations\",\n summary:\n \"Synced with latest Orderly SDK versions, added reverse position feature, improved stop loss logic, and enhanced UX across deposits, withdrawals, and notifications.\",\n highlights: [\n \"One-click Reverse Position to flip exposure instantly\",\n \"Safer stop loss logic that avoids liquidation traps\",\n \"Clearer deposit and withdrawal messages\",\n \"More accurate vault APY display\",\n \"Smart notification links - internal open in same tab, external in new tab\",\n \"Close position now defaults to LIMIT orders with mark price pre-filled\",\n ],\n packages: [\n \"kodiak-orderly-ui-positions\",\n \"kodiak-orderly-ui-notification\",\n \"kodiak-orderly-ui-transfer\",\n \"kodiak-orderly-ui-tpsl\",\n \"kodiak-orderly-vaults\",\n \"kodiak-orderly-hooks\",\n ],\n type: \"feature\",\n },\n \"2.8.18\": {\n date: \"2025-12-09\",\n title: \"Production API endpoint migration\",\n summary:\n \"Migrated from staging backend to production backend API endpoint for improved reliability and performance.\",\n highlights: [\n \"Updated API endpoint to production backend\",\n \"Improved API stability and performance\",\n ],\n packages: [\"kodiak-orderly-types\"],\n type: \"improvement\",\n },\n \"2.8.17\": {\n date: \"2025-11-29\",\n title: \"Symbol performance analysis\",\n summary:\n \"New symbol performance analysis feature with comprehensive per-symbol trading metrics and visualization.\",\n highlights: [\n \"New symbol-specific performance analytics dashboard\",\n \"View detailed P&L, volume, and fees for individual symbols\",\n \"Symbol performance tracking with customizable date ranges\",\n \"Comprehensive performance visualization per trading symbol\",\n ],\n packages: [\"kodiak-orderly-portfolio\"],\n type: \"feature\",\n },\n \"2.8.16\": {\n date: \"2025-11-29\",\n title: \"Fixed funded account address reversion issue\",\n summary:\n \"Restored isMobile guard in device linking to prevent funded accounts from reverting to wallet address. Fixes auto-sync behavior that was causing address switching issues.\",\n highlights: [\n \"Restored isMobile guard in useLinkDevice to prevent unintended auto-sync\",\n \"Fixed funded account address reverting to MetaMask\",\n \"Maintains device linking functionality for mobile devices\",\n \"Prevents auto-sync from being triggered on all devices\",\n ],\n packages: [\n \"kodiak-orderly-react-app\",\n \"kodiak-orderly-portfolio\",\n \"kodiak-orderly-hooks\",\n \"kodiak-orderly-types\",\n \"kodiak-orderly-utils\",\n ],\n type: \"bugfix\",\n },\n \"2.8.15\": {\n date: \"2025-11-19\",\n title: \"Portfolio volume chart and CSV data export\",\n summary:\n \"Added volume tracking chart to portfolio performance metrics and improved date range handling. New CSV export functionality for trading data with support for custom date ranges.\",\n highlights: [\n \"New volume chart on portfolio performance component\",\n \"Fixed date range selection to properly update performance labels\",\n \"Leaderboard-style period detection for custom date ranges\",\n \"Default performance period now set to 30 days\",\n \"CSV export for portfolio and trading data\",\n \"Support for custom date range exports\",\n ],\n packages: [\n \"kodiak-orderly-portfolio\",\n \"kodiak-orderly-i18n\",\n \"kodiak-orderly-hooks\",\n \"kodiak-orderly-trading\",\n \"kodiak-orderly-ui-orders\",\n \"kodiak-orderly-ui-positions\",\n \"kodiak-orderly-ui\",\n ],\n type: \"feature\",\n },\n \"2.8.14\": {\n date: \"2025-11-17\",\n title: \"Fixed 1D broker stats date range issue\",\n summary:\n \"Fixed issue where 1D (1 day) broker stats were returning incorrect data by properly setting start_date and end_date to current date.\",\n highlights: [\n \"Fixed 1D broker stats to correctly fetch today's data only\",\n \"Properly set start_date and end_date parameters for 1D queries\",\n \"Broker stats now display accurate data for single-day periods\",\n ],\n packages: [\"kodiak-orderly-trading-leaderboard\"],\n type: \"bugfix\",\n },\n \"2.8.13\": {\n date: \"2025-11-13\",\n title: \"Fixed broker stats date range alignment\",\n summary:\n \"Fixed broker stats to use the exact date range from the leaderboard date picker, ensuring consistent behavior across all dates. Added currency symbols to stats values.\",\n highlights: [\n \"Broker stats now match leaderboard date picker exactly\",\n \"Date range handling works consistently on any day\",\n \"Currency symbols ($) added to all stats values\",\n \"Removed unused brokerStats.script file for cleaner codebase\",\n ],\n packages: [\"kodiak-orderly-trading-leaderboard\"],\n type: \"bugfix\",\n },\n \"2.8.12\": {\n date: \"2025-11-13\",\n title: \"Updated broker stats with new endpoint\",\n summary:\n \"Integrated new staging backend stats endpoint for real-time broker statistics with improved date range handling and accurate data aggregation.\",\n highlights: [\n \"Connected to new stats endpoint for accurate data\",\n \"Improved date range calculations for stats display\",\n \"Fixed stats data parsing from aggregated endpoint\",\n \"Better performance with optimized API calls\",\n ],\n packages: [\"kodiak-orderly-trading-leaderboard\"],\n type: \"improvement\",\n },\n \"2.8.11\": {\n date: \"2025-11-12\",\n title: \"Broker stats and improved date filtering\",\n summary:\n \"Added broker trading stats dashboard and new 1D filter option with improved date range handling.\",\n highlights: [\n \"View broker stats: volume, fees, revenue, and P&L\",\n \"New 1D filter for quick analysis\",\n \"Fixed OrderlyProvider context issues\",\n ],\n packages: [\"kodiak-orderly-trading-leaderboard\"],\n type: \"feature\",\n },\n \"2.8.10\": {\n date: \"2025-11-07\",\n title: \"Your trading metrics now display correctly on the leaderboard\",\n summary:\n \"Fixed an issue where your trading volume and P&L weren't showing on your leaderboard row. Your trading stats now display accurately so you can see your real performance.\",\n highlights: [\n \"Your trading volume now shows in your leaderboard row\",\n \"Realized P&L displays correctly for your account\",\n \"All your trading metrics are now visible and up to date\",\n \"Works smoothly across both the default and custom leaderboards\",\n ],\n packages: [\"kodiak-orderly-trading-leaderboard\"],\n type: \"bugfix\",\n },\n \"2.8.9\": {\n date: \"2025-11-07\",\n title: \"Leaderboard performance improvements\",\n summary:\n \"Made the leaderboard faster and more reliable. Your rankings now load quicker and metrics display more smoothly.\",\n highlights: [\n \"Leaderboard loads faster\",\n \"Smoother sorting and filtering experience\",\n \"More reliable data display\",\n \"Better handling of large leaderboards\",\n ],\n packages: [\"kodiak-orderly-trading-leaderboard\"],\n type: \"improvement\",\n },\n \"2.8.8\": {\n date: \"2025-11-07\",\n title: \"See your points and compete on the leaderboard\",\n summary:\n \"You can now compete by trading volume, profit/loss, or all-time points. Sort and compare your performance against other traders in real-time.\",\n highlights: [\n \"View all-time points earned on the leaderboard\",\n \"Sort by trading volume, P&L, or points\",\n \"See your rank for each metric\",\n \"Faster leaderboard loading\",\n ],\n packages: [\"kodiak-orderly-trading-leaderboard\"],\n type: \"feature\",\n },\n \"2.8.7\": {\n date: \"2025-11-05\",\n title: \"Custom leaderboard periods and broker announcements\",\n summary:\n \"Brokers can now show custom messages in announcement and set flexible date ranges for leaderboards. View any time period - daily, weekly, monthly, or custom ranges.\",\n highlights: [\n \"View leaderboards for any time period you want\",\n \"Brokers can display important announcements\",\n \"Change leaderboard dates without app updates\",\n \"Campaign-specific leaderboards with custom dates\",\n ],\n packages: [\n \"kodiak-orderly-react-app\",\n \"kodiak-orderly-ui-scaffold\",\n \"kodiak-orderly-i18n\",\n \"kodiak-orderly-trading-leaderboard\",\n ],\n type: \"feature\",\n },\n \"2.8.6\": {\n date: \"2025-11-04\",\n title: \"Faster app and smoother trading experience\",\n summary:\n \"Fixed performance issues and improved the user experience. Trading is now smoother and the app responds faster when you switch between screens.\",\n highlights: [\n \"Points display cleanly without decimals\",\n \"Withdraw form works smoothly with all networks\",\n \"Trading input fields handle decimals better\",\n \"Price data updates instantly when you return to the app\",\n \"Faster performance on slower connections\",\n ],\n packages: [\n \"kodiak-orderly-trading-leaderboard\",\n \"kodiak-orderly-ui-transfer\",\n \"kodiak-orderly-ui-order-entry\",\n \"kodiak-orderly-hooks\",\n ],\n type: \"improvement\",\n },\n \"2.8.5\": {\n date: \"2025-11-03\",\n title: \"Track your trading points on the leaderboard\",\n summary:\n \"Your all-time trading points are now displayed on the leaderboard. Compete based on the points you earn and see where you rank.\",\n highlights: [\n \"View your all-time points earned\",\n \"See points on desktop leaderboard\",\n \"Switch between Volume, P&L, and Points on mobile\",\n \"Compare your points against other traders\",\n ],\n packages: [\n \"kodiak-orderly-trading-leaderboard\",\n \"kodiak-orderly-ui-scaffold\",\n ],\n type: \"feature\",\n },\n \"2.8.4\": {\n date: \"2025-10-28\",\n title: \"Better mobile trading and Mac support\",\n summary:\n \"Trading on mobile is now easier and faster. Fixed issues on Mac and improved the overall experience across all devices.\",\n highlights: [\n \"Mobile: Right keyboard automatically appears for entering prices\",\n \"Mobile: Quick number entry for order sizes\",\n \"Mac: Fixed trackpad scrolling in dropdowns\",\n \"Know which trading pair you're canceling orders from\",\n \"Easier stop-loss and take-profit management on mobile\",\n ],\n packages: [\n \"kodiak-orderly-ui-transfer\",\n \"kodiak-orderly-ui-order-entry\",\n \"kodiak-orderly-ui-orders\",\n \"kodiak-orderly-ui-positions\",\n \"kodiak-orderly-ui-tpsl\",\n ],\n type: \"improvement\",\n },\n \"2.8.3\": {\n date: \"2025-10-20\",\n title: \"More reliable orders and connections\",\n summary:\n \"Fixed issues with order submission and improved network stability. Your orders now process reliably.\",\n highlights: [\n \"Orders submit without errors\",\n \"Connection stays stable during network changes\",\n \"Faster recovery from connection drops\",\n ],\n packages: [\"kodiak-orderly-core\", \"kodiak-orderly-net\"],\n type: \"bugfix\",\n },\n};\n\n/**\n * Get changeset for a specific version\n * @param version - Version string (e.g., \"2.8.3\")\n * @returns ChangesetEntry or undefined if not found\n */\nexport function getChangesetForVersion(\n version: string = SDK_VERSION,\n): ChangesetEntry | undefined {\n return CHANGESETS[version];\n}\n\n/**\n * Get the latest changeset\n * @returns ChangesetEntry for current SDK_VERSION\n */\nexport function getLatestChangeset(): ChangesetEntry | undefined {\n return getChangesetForVersion(SDK_VERSION);\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/provider/orderlyAppProvider.tsx","../src/hooks/useBootstrap.ts","../src/hooks/useExecutionReport.tsx","../src/hooks/getOrderExecutionReportMsg.ts","../src/hooks/useUILocale.ts","../src/provider/appConfigContext.tsx","../src/provider/appConfigProvider.tsx","../src/provider/appStateProvider.tsx","../src/hooks/useAssetconvertEvent.ts","../src/hooks/useCurrentChainId.ts","../src/hooks/useLinkDevice.ts","../src/hooks/useSettleEvent.ts","../src/hooks/useWalletConnectError.ts","../src/hooks/useWalletEvent.ts","../src/hooks/useWalletStateHandle.ts","../src/provider/appStateContext.tsx","../src/hooks/useDataTap.ts","../src/common/useOrderEntryFormErrorMsg.ts","../src/provider/ErrorBoundary.tsx","../src/hooks/useCanTrade.ts","../src/constants/changesets.ts"],"names":["useTrack","useEffect","OrderStatus","data","jsx","useState","useMemo","useTranslation","toast","useConfig","useLocalStorage","useWalletConnector","useEventEmitter","useRef","capitalizeString","useAccount","useChains","WALLET_KEY","namespace","createContext","useContext","jsxs","i18n","AccountStatusEnum"],"mappings":"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","sourcesContent":["import React, { PropsWithChildren } from \"react\";\nimport { OrderlyConfigProvider, useTrack } from \"@kodiak-finance/orderly-hooks\";\nimport {\n LocaleProvider as UILocaleProvider,\n ModalProvider,\n OrderlyThemeProvider,\n Toaster,\n TooltipProvider,\n} from \"@kodiak-finance/orderly-ui\";\nimport { OrderlyThemeProviderProps } from \"@kodiak-finance/orderly-ui\";\nimport { useBootstrap } from \"../hooks/useBootstrap\";\nimport { useExecutionReport } from \"../hooks/useExecutionReport\";\nimport { useUILocale } from \"../hooks/useUILocale\";\nimport { OrderlyAppConfig } from \"../types\";\nimport { AppConfigProvider } from \"./appConfigProvider\";\nimport { AppStateProvider, AppStateProviderProps } from \"./appStateProvider\";\n\nexport type OrderlyAppProviderProps = PropsWithChildren<\n OrderlyAppConfig & AppStateProviderProps & OrderlyThemeProviderProps\n>;\n\n// Cannot be called outside of Provider because useExecutionReport requires useOrderlyContext.\nconst ExecutionReportListener: React.FC = () => {\n useExecutionReport();\n return null;\n};\n\nconst OrderlyAppProvider: React.FC<OrderlyAppProviderProps> = (props) => {\n const {\n // dateFormatting,\n components,\n appIcons,\n onChainChanged,\n defaultChain,\n widgetConfigs,\n ...configProps\n } = props;\n\n useTrack();\n useBootstrap();\n\n const uiLocale = useUILocale();\n\n return (\n <AppConfigProvider appIcons={appIcons} brokerName={props.brokerName!}>\n <OrderlyThemeProvider\n // dateFormatting={dateFormatting}\n components={components}\n overrides={props.overrides}\n >\n <OrderlyConfigProvider {...configProps}>\n <ExecutionReportListener />\n <AppStateProvider\n onChainChanged={onChainChanged}\n defaultChain={defaultChain}\n restrictedInfo={props.restrictedInfo}\n onRouteChange={props.onRouteChange}\n widgetConfigs={widgetConfigs}\n customAnnouncements={props.customAnnouncements}\n >\n <UILocaleProvider locale={uiLocale}>\n <TooltipProvider delayDuration={300}>\n <ModalProvider>{props.children}</ModalProvider>\n </TooltipProvider>\n </UILocaleProvider>\n </AppStateProvider>\n <Toaster />\n </OrderlyConfigProvider>\n </OrderlyThemeProvider>\n </AppConfigProvider>\n );\n};\n\nif (process.env.NODE_ENV !== \"production\") {\n OrderlyAppProvider.displayName = \"OrderlyAppProvider\";\n}\n\nexport { OrderlyAppProvider };\n","import { useEffect } from \"react\";\n\nexport const useBootstrap = () => {\n useEffect(() => {\n const searchParams = new URLSearchParams(window.location.search);\n const refCode = searchParams.get(\"ref\");\n if (refCode) {\n localStorage.setItem(\"referral_code\", refCode);\n }\n }, []);\n};\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { useEffect, useRef } from \"react\";\nimport {\n useSymbolsInfo,\n useEventEmitter,\n useDebouncedCallback,\n useAudioPlayer,\n useLocalStorage,\n useOrderlyContext,\n} from \"@kodiak-finance/orderly-hooks\";\nimport { OrderStatus } from \"@kodiak-finance/orderly-types\";\nimport { toast } from \"@kodiak-finance/orderly-ui\";\nimport { getOrderExecutionReportMsg } from \"./getOrderExecutionReportMsg\";\n\nexport const ORDERLY_ORDER_SOUND_ALERT_KEY = \"orderly_order_sound_alert\";\n\nexport const useExecutionReport = () => {\n const ee = useEventEmitter();\n\n const symbolsInfo = useSymbolsInfo();\n const symbolsInfoRef = useRef({});\n\n const { notification } = useOrderlyContext();\n\n useEffect(() => {\n symbolsInfoRef.current = symbolsInfo;\n }, [symbolsInfo]);\n\n const src = notification?.orderFilled?.media ?? \"\";\n\n const [soundAutoPlay] = useLocalStorage<boolean>(\n ORDERLY_ORDER_SOUND_ALERT_KEY,\n notification?.orderFilled?.defaultOpen ?? false,\n );\n\n const [audioElement] = useAudioPlayer(src, {\n autoPlay: soundAutoPlay,\n volume: 1,\n });\n\n const handler = useDebouncedCallback((data: any) => {\n const showToast = (data: any) => {\n const { title, msg, status } = getOrderExecutionReportMsg(\n data,\n symbolsInfoRef.current,\n );\n const isFilled =\n status === OrderStatus.FILLED || status === OrderStatus.PARTIAL_FILLED;\n // only show latest msg for same order type\n const orderType = data.algo_type || data.type;\n if (title && msg) {\n toast.success(\n <div>\n {title}\n <br />\n <div className=\"orderly-text-white/[0.54] orderly-text-xs\">\n {msg}\n </div>\n {isFilled && audioElement}\n </div>,\n { id: orderType },\n );\n }\n };\n showToast(data);\n }, 100);\n\n useEffect(() => {\n ee.on(\"orders:changed\", handler);\n return () => {\n ee.off(\"orders:changed\", handler);\n handler.cancel();\n };\n }, [ee, handler]);\n};\n","import { i18n } from \"@kodiak-finance/orderly-i18n\";\nimport { API, OrderStatus, OrderType } from \"@kodiak-finance/orderly-types\";\nimport { AlgoOrderRootType } from \"@kodiak-finance/orderly-types\";\nimport { parseNumber } from \"@kodiak-finance/orderly-ui\";\nimport {\n capitalizeString,\n transSymbolformString,\n} from \"@kodiak-finance/orderly-utils\";\n\nfunction getDisplaySide(side: string) {\n if (side === \"BUY\") {\n return i18n.t(\"common.buy\");\n } else if (side === \"SELL\") {\n return i18n.t(\"common.sell\");\n }\n return capitalizeString(side);\n}\n\ntype AlgoOrderFieldChanges = Partial<\n Record<OrderType, Partial<Record<keyof API.AlgoOrder, boolean>>>\n>;\n\nexport function getOrderExecutionReportMsg(\n data: (API.AlgoOrder | API.Order) & {\n fieldChanges?: AlgoOrderFieldChanges;\n },\n symbolsInfo: any,\n) {\n const { symbol, side, quantity, client_order_id, fieldChanges } = data;\n const total_executed_quantity =\n \"total_executed_quantity\" in data ? data.total_executed_quantity : 0;\n const status = \"status\" in data ? data.status : data.algo_status;\n const getSymbolInfo = symbolsInfo[symbol];\n const base_dp = getSymbolInfo(\"base_dp\");\n const quote_dp = getSymbolInfo(\"quote_dp\");\n const displaySide = getDisplaySide(side);\n const displaySymbol = transSymbolformString(symbol);\n const displayQuantity =\n \"algo_type\" in data && data.algo_type === AlgoOrderRootType.POSITIONAL_TP_SL\n ? i18n.t(\"tpsl.entirePosition\")\n : base_dp === undefined\n ? quantity\n : parseNumber(quantity, { dp: base_dp });\n\n let title = \"\";\n let msg = \"\";\n switch (status) {\n case OrderStatus.NEW:\n const isScaledOrder = client_order_id?.startsWith(\"scaled_\");\n // if client_order_id is scaled order, show the scaled order message\n if (isScaledOrder) {\n title = i18n.t(\"orders.status.scaledSubOrderOpened.toast.title\");\n msg = `${displaySide} ${displaySymbol} ${displayQuantity}`;\n } else {\n title = i18n.t(\"orders.status.opened.toast.title\");\n msg = `${displaySide} ${displaySymbol} ${displayQuantity}`;\n }\n\n break;\n case OrderStatus.FILLED:\n case OrderStatus.PARTIAL_FILLED:\n const displayTotalExecutedQuantity =\n base_dp === undefined\n ? total_executed_quantity\n : parseNumber(total_executed_quantity, { dp: base_dp });\n title = i18n.t(\"orders.status.filled.toast.title\");\n msg = `${displaySide} ${displaySymbol} ${displayTotalExecutedQuantity} / ${displayQuantity}`;\n break;\n case OrderStatus.CANCELLED:\n title = i18n.t(\"orders.status.canceled.toast.title\");\n msg = `${displaySide} ${displaySymbol} ${displayQuantity}`;\n break;\n case OrderStatus.REJECTED:\n title = i18n.t(\"orders.status.rejected.toast.title\");\n msg = `${displaySide} ${displaySymbol} ${displayQuantity}`;\n break;\n case OrderStatus.REPLACED:\n const { algo_type, activated_price } = data as API.AlgoOrder;\n if (algo_type === AlgoOrderRootType.TRAILING_STOP) {\n const fieldChange =\n fieldChanges?.[AlgoOrderRootType.TRAILING_STOP] || {};\n // when trailing stop order is activated, and extreme_price will also changed\n if (\n fieldChange.is_activated &&\n fieldChange.extreme_price &&\n activated_price\n ) {\n title = i18n.t(\"orders.trailingStop.activated\");\n msg = `${displaySymbol} @${activated_price}`;\n } else if (fieldChange.extreme_price) {\n // if extreme_price is changed, skip show the message\n title = \"\";\n msg = \"\";\n }\n } else {\n title = i18n.t(\"orders.status.replaced.toast.title\");\n msg = `${side} ${displaySymbol} ${total_executed_quantity} / ${displayQuantity}`;\n }\n\n break;\n default:\n break;\n }\n\n return {\n title,\n msg,\n status,\n };\n}\n","import { useMemo } from \"react\";\nimport {\n useTranslation,\n useLocaleCode,\n LocaleEnum,\n} from \"@kodiak-finance/orderly-i18n\";\nimport { Locale } from \"@kodiak-finance/orderly-ui\";\nimport { enUS, zhCN, ja, es, ko, vi, de, fr, nl } from \"date-fns/locale\";\n\nexport function useUILocale() {\n const { t } = useTranslation();\n const localeCode = useLocaleCode();\n\n return useMemo<Locale>(() => {\n const calendarLocale = {\n [LocaleEnum.en]: enUS,\n [LocaleEnum.zh]: zhCN,\n // [LocaleEnum.ja]: ja,\n // [LocaleEnum.es]: es,\n // [LocaleEnum.ko]: ko,\n // [LocaleEnum.vi]: vi,\n // [LocaleEnum.de]: de,\n // [LocaleEnum.fr]: fr,\n // [LocaleEnum.nl]: nl,\n };\n return {\n locale: localeCode,\n dialog: {\n ok: t(\"common.ok\"),\n cancel: t(\"common.cancel\"),\n },\n modal: {\n confirm: t(\"common.confirm\"),\n cancel: t(\"common.cancel\"),\n },\n pagination: {\n morePages: t(\"ui.pagination.morePages\"),\n rowsPerPage: t(\"ui.pagination.rowsPerPage\"),\n },\n picker: {\n selectDate: t(\"ui.picker.selectDate\"),\n dayPicker: calendarLocale[localeCode as keyof typeof calendarLocale],\n },\n empty: {\n description: t(\"ui.empty.description\"),\n },\n } as const;\n }, [t, localeCode]);\n}\n","import { createContext, useContext } from \"react\";\nimport { AppLogos } from \"../types\";\n\nexport type ThemeContextState = {\n appIcons?: AppLogos;\n brokerName: string;\n};\n\nexport const AppConfigContext = createContext({} as ThemeContextState);\n\nexport const useAppConfig = () => {\n return useContext(AppConfigContext);\n};\n","import { FC, PropsWithChildren } from \"react\";\nimport { AppLogos } from \"../types\";\nimport { AppConfigContext } from \"./appConfigContext\";\n\nexport type ThemeContextState = {\n appIcons?: AppLogos;\n brokerName: string;\n};\n\nexport const AppConfigProvider: FC<\n PropsWithChildren<{ appIcons?: AppLogos; brokerName: string }>\n> = (props) => {\n return (\n <AppConfigContext.Provider value={props}>\n {props.children}\n </AppConfigContext.Provider>\n );\n};\n","import { FC, PropsWithChildren, useState, useMemo } from \"react\";\nimport {\n RestrictedInfoOptions,\n useRestrictedInfo,\n useTrackingInstance,\n} from \"@kodiak-finance/orderly-hooks\";\nimport { useAssetconvertEvent } from \"../hooks/useAssetconvertEvent\";\nimport { DefaultChain, useCurrentChainId } from \"../hooks/useCurrentChainId\";\nimport { useLinkDevice } from \"../hooks/useLinkDevice\";\nimport { useSettleEvent } from \"../hooks/useSettleEvent\";\nimport { useWalletConnectError } from \"../hooks/useWalletConnectError\";\nimport { useWalletEvent } from \"../hooks/useWalletEvent\";\nimport { useWalletStateHandle } from \"../hooks/useWalletStateHandle\";\nimport { AppContextState, AppStateContext } from \"./appStateContext\";\n\nexport type RouteOption = {\n href: \"/portfolio\" | \"/portfolio/history\";\n name: string;\n};\n\nexport type AppStateProviderProps = {\n defaultChain?: DefaultChain;\n restrictedInfo?: RestrictedInfoOptions;\n} & Pick<\n AppContextState,\n \"onChainChanged\" | \"onRouteChange\" | \"widgetConfigs\" | \"customAnnouncements\"\n>;\n\nexport const AppStateProvider: FC<PropsWithChildren<AppStateProviderProps>> = (\n props,\n) => {\n const [showAnnouncement, setShowAnnouncement] = useState(false);\n const [currentChainId, setCurrentChainId] = useCurrentChainId(\n props.defaultChain,\n );\n useLinkDevice();\n useTrackingInstance();\n\n const { connectWallet, wrongNetwork } = useWalletStateHandle({\n // onChainChanged: props.onChainChanged,\n currentChainId,\n });\n\n useWalletEvent();\n useSettleEvent();\n useAssetconvertEvent();\n useWalletConnectError();\n\n const restrictedInfo = useRestrictedInfo(props.restrictedInfo);\n\n const disabledConnect = restrictedInfo.restrictedOpen;\n\n const memoizedValue = useMemo<AppContextState>(\n () => ({\n connectWallet,\n wrongNetwork,\n currentChainId,\n setCurrentChainId,\n onChainChanged: props.onChainChanged,\n disabledConnect,\n restrictedInfo,\n showAnnouncement,\n setShowAnnouncement,\n onRouteChange: props.onRouteChange,\n widgetConfigs: props.widgetConfigs,\n customAnnouncements: props.customAnnouncements,\n }),\n [\n connectWallet,\n currentChainId,\n disabledConnect,\n props.onChainChanged,\n restrictedInfo,\n setCurrentChainId,\n showAnnouncement,\n wrongNetwork,\n props.onRouteChange,\n props.widgetConfigs,\n props.customAnnouncements,\n ],\n );\n\n return (\n <AppStateContext.Provider value={memoizedValue}>\n {props.children}\n </AppStateContext.Provider>\n );\n};\n","import { useEffect } from \"react\";\nimport { useWS } from \"@kodiak-finance/orderly-hooks\";\nimport { useTranslation } from \"@kodiak-finance/orderly-i18n\";\nimport { toast } from \"@kodiak-finance/orderly-ui\";\nimport { getTimestamp } from \"@kodiak-finance/orderly-utils\";\n\nexport const useAssetconvertEvent = () => {\n const ws = useWS();\n const { t } = useTranslation();\n useEffect(() => {\n const unsubscribe = ws.privateSubscribe(\n {\n id: \"assetconvert\",\n event: \"subscribe\",\n topic: \"assetconvert\",\n ts: getTimestamp(),\n },\n {\n onMessage(data) {\n if (data.convertId) {\n toast.success(t(\"transfer.convert.completed\"));\n }\n },\n },\n );\n return () => unsubscribe();\n }, []);\n};\n","import { useEffect, useState } from \"react\";\nimport {\n Chains,\n useChains,\n useConfig,\n useStorageChain,\n useWalletConnector,\n} from \"@kodiak-finance/orderly-hooks\";\nimport { Chain, NetworkId } from \"@kodiak-finance/orderly-types\";\ntype ReturnChain = Pick<Chain, \"id\"> & Partial<Omit<Chain, \"id\">>;\n\nexport type DefaultChain =\n | {\n mainnet?: ReturnChain;\n testnet?: ReturnChain;\n }\n | ((networkId: NetworkId, chains: Chains) => ReturnChain)\n | undefined;\n\nexport function useCurrentChainId(defaultChain?: DefaultChain) {\n const { storageChain, setStorageChain } = useStorageChain();\n const [currentChainId, setCurrentChainId] = useState<number | undefined>();\n\n const [chains] = useChains();\n const networkId = useConfig(\"networkId\") as NetworkId;\n\n const { connectedChain } = useWalletConnector();\n\n useEffect(() => {\n if (connectedChain) {\n setCurrentChainId?.(\n typeof connectedChain.id === \"number\"\n ? connectedChain.id\n : parseInt(connectedChain.id)\n );\n } else {\n if (!!currentChainId) return;\n let fallbackChain: Partial<Chain> | undefined;\n\n const firstChain =\n networkId === \"mainnet\" ? chains.mainnet?.[0] : chains.testnet?.[0];\n\n if (typeof defaultChain === \"function\") {\n fallbackChain = defaultChain(networkId, chains);\n } else if (typeof defaultChain === \"object\") {\n fallbackChain =\n networkId === \"mainnet\"\n ? defaultChain?.mainnet\n : defaultChain?.testnet;\n }\n\n const chainId = fallbackChain?.id || firstChain?.network_infos?.chain_id;\n if (!chainId) return;\n\n if (storageChain) {\n setCurrentChainId?.(storageChain.chainId);\n } else {\n setStorageChain(chainId);\n setCurrentChainId?.(chainId);\n \n }\n }\n }, [\n connectedChain,\n chains,\n currentChainId,\n networkId,\n setCurrentChainId,\n defaultChain,\n ]);\n\n return [currentChainId, setCurrentChainId] as const;\n}\n","import { useEffect } from \"react\";\nimport {\n parseJSON,\n useAccount,\n useConfig,\n useLocalStorage,\n useWalletConnector,\n} from \"@kodiak-finance/orderly-hooks\";\nimport { ChainNamespace } from \"@kodiak-finance/orderly-types\";\nimport { useCanLinkDevice } from \"@kodiak-finance/orderly-ui\";\n\ntype DecodedData = {\n /** secret key */\n k: string;\n /* timestamp */\n t: number;\n /** address */\n a: string;\n /** chain id */\n i: number;\n /** chain namespace */\n n: ChainNamespace;\n};\n\ntype LinkDeviceStorage = { chainId: number; chainNamespace: ChainNamespace };\n\nconst WALLET_KEY = \"orderly:wallet-info\";\n\nexport function useLinkDevice() {\n const { connectedChain, disconnect } = useWalletConnector();\n const [_, setLinkDeviceStorage] = useLocalStorage(\n \"orderly_link_device\",\n {} as LinkDeviceStorage,\n );\n\n const { account } = useAccount();\n const canLinkDevice = useCanLinkDevice();\n const configStore = useConfig();\n\n const onDisconnect = async (label: string) => {\n // The cache must be cleared first, otherwise it will be auto connect wallet\n localStorage.removeItem(WALLET_KEY);\n await account.disconnect();\n await disconnect({ label });\n };\n\n useEffect(() => {\n const linkData = getLinkDeviceData();\n const walletInfo = JSON.parse(localStorage.getItem(WALLET_KEY) ?? \"{}\");\n if (linkData && walletInfo) {\n // clear connect data when link device\n onDisconnect(walletInfo.label);\n }\n }, []);\n\n const linkDevice = async () => {\n const linkData = getLinkDeviceData();\n if (!linkData) return;\n\n const { address, secretKey, chainId, chainNamespace } = linkData;\n const isSuccess = await account.importOrderlyKey({\n address,\n secretKey,\n chainNamespace,\n });\n if (!isSuccess) return;\n setLinkDeviceStorage({\n chainId,\n chainNamespace,\n });\n\n const url = new URL(window.location.href);\n url.searchParams.delete(\"link\");\n // use set instead of append, because the param possibly in the url\n url.searchParams.set(\"utm_medium\", \"qrcode\");\n const decodedUrl = decodeURIComponent(url.toString());\n history.replaceState(null, \"\", decodedUrl);\n };\n\n useEffect(() => {\n if (canLinkDevice && !connectedChain) {\n linkDevice();\n }\n }, [account, connectedChain, canLinkDevice]);\n\n const autoLinkDevice = async () => {\n // Only auto-link if device linking data exists in storage AND it's actually a linkable device\n const { chainId, chainNamespace } = getLinkDeviceStorage() || {};\n if (canLinkDevice && !connectedChain && chainId && chainNamespace) {\n const address = account.keyStore.getAddress();\n const orderlyKey = account.keyStore.getOrderlyKey();\n const accountId = account.keyStore.getAccountId(address!);\n const res = await account.checkOrderlyKey(\n address!,\n orderlyKey!,\n accountId!,\n );\n if (res) {\n configStore.set(\"chainNamespace\", chainNamespace);\n }\n }\n };\n\n // persist status when refresh page\n useEffect(() => {\n autoLinkDevice();\n }, [account, canLinkDevice, connectedChain]);\n\n return { linkDevice };\n}\n\nfunction getLinkDeviceStorage() {\n try {\n const linkDeviceStorage = localStorage.getItem(\"orderly_link_device\");\n const json = linkDeviceStorage ? parseJSON(linkDeviceStorage) : null;\n return json as LinkDeviceStorage;\n } catch (err) {\n console.error(\"getLinkDeviceStorage\", err);\n }\n}\n\nexport function getLinkDeviceData() {\n const url = new URL(window.location.href);\n const link = url.searchParams.get(\"link\");\n\n if (!link) return;\n\n const {\n a: address,\n k: secretKey,\n i: chainId,\n n: chainNamespace,\n } = decodeBase64(link) || {};\n\n if (address && secretKey && chainId && chainNamespace) {\n return {\n address,\n secretKey,\n chainId,\n chainNamespace,\n };\n }\n}\n\nfunction decodeBase64(base64: string) {\n try {\n const data = JSON.parse(window.atob(base64)) as DecodedData;\n console.log(\"decodeBase64\", data);\n const currentTime = Math.floor(Date.now() / 1000);\n const expiredTime = data.t;\n\n if (!expiredTime || currentTime > expiredTime) {\n console.error(\"Orderly key has expired.\");\n return;\n }\n\n return data;\n } catch (error) {\n console.error(\"Invalid or expired orderly key.\");\n }\n}\n","import { useSettleSubscription } from \"@kodiak-finance/orderly-hooks\";\nimport { toast } from \"@kodiak-finance/orderly-ui\";\nimport { useTranslation } from \"@kodiak-finance/orderly-i18n\";\n\nexport function useSettleEvent() {\n const { t } = useTranslation();\n\n useSettleSubscription({\n onMessage: (data: any) => {\n const { status } = data;\n\n // console.log(\"settle ws: \", data);\n\n switch (status) {\n case \"COMPLETED\":\n toast.success(t(\"settle.settlement.completed\"));\n break;\n case \"FAILED\":\n toast.error(t(\"settle.settlement.failed\"));\n break;\n default:\n break;\n }\n },\n });\n}\n","import { useEventEmitter } from \"@kodiak-finance/orderly-hooks\";\nimport { useEffect } from \"react\";\nimport { modal, toast } from \"@kodiak-finance/orderly-ui\";\nimport { LedgerWalletKey } from \"@kodiak-finance/orderly-types\";\nimport { useStorageLedgerAddress } from \"@kodiak-finance/orderly-hooks\";\nimport { useTranslation } from \"@kodiak-finance/orderly-i18n\";\n\nexport function useWalletConnectError() {\n const { t } = useTranslation();\n const ee = useEventEmitter();\n const { setLedgerAddress } = useStorageLedgerAddress();\n\n useEffect(() => {\n ee.on(\"wallet:connect-error\", (data) => {\n toast.error(data.message);\n });\n ee.on(\n \"wallet:sign-message-with-ledger-error\",\n (data: { userAddress: string; message: string }) => {\n window.setTimeout(() => {\n modal\n .confirm({\n title: t(\"connector.ledger.signMessageFailed\"),\n content: t(\"connector.ledger.signMessageFailed.description\"),\n size: \"sm\",\n onOk: async () => {\n console.log(\"-- use ledger\", true);\n setLedgerAddress(data.userAddress);\n\n return Promise.resolve();\n },\n okLabel: t(\"common.ok\"),\n onCancel: async () => {\n toast.error(data.message);\n return Promise.resolve();\n },\n cancelLabel: t(\"common.no\"),\n })\n .then((res) => {\n console.log(\"-- dialog res\", res);\n });\n });\n }\n );\n }, [ee, t]);\n\n return {};\n}\n","import { useRef } from \"react\";\nimport {\n useEventEmitter,\n useSessionStorage,\n useWalletSubscription,\n} from \"@kodiak-finance/orderly-hooks\";\nimport { useTranslation } from \"@kodiak-finance/orderly-i18n\";\nimport { toast } from \"@kodiak-finance/orderly-ui\";\nimport { capitalizeString } from \"@kodiak-finance/orderly-utils\";\n\nexport function useWalletEvent() {\n const { t } = useTranslation();\n const ee = useEventEmitter();\n\n const recordRef = useRef<Record<number, boolean>>({});\n\n const [record, setRecord] = useSessionStorage(\n \"orderly_wallet_change_id\",\n {} as Record<number, boolean>,\n );\n\n recordRef.current = record;\n\n useWalletSubscription({\n onMessage: (data: any) => {\n console.log(\"wallet:changed\", data);\n const { id, side, transStatus } = data;\n let showToast = true;\n\n // DEPOSIT and WITHDRAW will push twice COMPLETED and FAILED event\n if (\n [\"DEPOSIT\", \"WITHDRAW\"].includes(side) &&\n [\"COMPLETED\", \"FAILED\"].includes(transStatus)\n ) {\n const isPushed = !!recordRef.current[id];\n if (!isPushed) {\n recordRef.current[id] = true;\n setRecord((prev: Record<number, boolean>) => ({\n ...prev,\n [id]: true,\n }));\n }\n showToast = !isPushed;\n }\n\n if (transStatus === \"COMPLETED\" && showToast) {\n let msg = `${capitalizeString(side)} completed`;\n\n if (side === \"DEPOSIT\") {\n msg = t(\"transfer.deposit.completed\");\n } else if (side === \"WITHDRAW\") {\n msg = t(\"transfer.withdraw.completed\");\n }\n\n toast.success(msg);\n } else if (transStatus === \"FAILED\" && showToast) {\n let msg = `${capitalizeString(side)} failed`;\n\n if (side === \"DEPOSIT\") {\n msg = t(\"transfer.deposit.failed\");\n } else if (side === \"WITHDRAW\") {\n msg = t(\"transfer.withdraw.failed\");\n }\n toast.error(msg);\n }\n\n ee.emit(\"wallet:changed\", data);\n },\n });\n}\n","import { useEffect, useMemo, useRef, useState } from \"react\";\nimport {\n useConfig,\n useEventEmitter,\n useTrack,\n WalletState,\n} from \"@kodiak-finance/orderly-hooks\";\nimport {\n useAccount,\n useChains,\n useKeyStore,\n useWalletConnector,\n} from \"@kodiak-finance/orderly-hooks\";\nimport {\n AccountStatusEnum,\n SDKError,\n ChainNamespace,\n NetworkId,\n TrackerEventName,\n ABSTRACT_CHAIN_ID_MAP,\n} from \"@kodiak-finance/orderly-types\";\nimport {\n parseChainIdToNumber,\n praseChainIdToNumber,\n windowGuard,\n} from \"@kodiak-finance/orderly-utils\";\nimport { getLinkDeviceData } from \"./useLinkDevice\";\n\nconst WALLET_KEY = \"orderly:wallet-info\";\nconst CHAIN_NAMESPACE = \"orderly:chain-namespace\";\n\nexport const useWalletStateHandle = (options: {\n // onChainChanged?: (chainId: number, isTestnet: boolean) => void;\n currentChainId?: number;\n}) => {\n const {\n wallet: connectedWallet,\n connect,\n connectedChain,\n disconnect,\n namespace,\n } = useWalletConnector();\n //\n // console.log(\"🔗 wallet state handle\", {\n // connectedWallet,\n // connectedChain,\n // namespace,\n // });\n\n if (typeof connect !== \"function\") {\n throw new SDKError(\"Please provide a wallet connector provider\");\n }\n\n const ee = useEventEmitter();\n const isManualConnect = useRef<boolean>(false);\n const brokerId = useConfig(\"brokerId\");\n const { account, state: accountState } = useAccount();\n const keyStore = useKeyStore();\n const networkId = useConfig(\"networkId\") as NetworkId;\n const [chains, { checkChainSupport }] = useChains();\n\n const [unsupported, setUnsupported] = useState(false);\n const { track, setTrackUserId } = useTrack();\n\n // current connected wallet address\n const currentWalletAddress = useMemo<string | undefined>(() => {\n return connectedWallet?.accounts?.[0]?.address;\n }, [connectedWallet]);\n\n // current connected chain id\n const currentChain = useMemo<\n { id: number; namespace: string } | undefined\n >(() => {\n const id = connectedWallet?.chains?.[0]?.id;\n const namespace = connectedWallet?.chains?.[0]?.namespace as string;\n if (typeof id === \"undefined\") return undefined;\n return {\n id: parseChainIdToNumber(id),\n namespace,\n };\n }, [connectedWallet]);\n\n useEffect(() => {\n if (\n accountState.status >= AccountStatusEnum.EnableTrading &&\n account.accountId\n ) {\n setTrackUserId(account.accountId!);\n }\n }, [account, accountState]);\n\n useEffect(() => {\n if (!connectedChain) {\n setUnsupported(false);\n return;\n }\n\n let isSupported = checkChainSupport(\n connectedChain.id,\n networkId,\n // networkId === \"testnet\" ? chains.testnet : chains.mainnet\n );\n if (\n ABSTRACT_CHAIN_ID_MAP.has(parseInt(connectedChain.id as string)) &&\n connectedWallet?.label !== \"AGW\"\n ) {\n isSupported = false;\n }\n\n setUnsupported(!isSupported);\n }, [connectedChain, chains, checkChainSupport, networkId, connectedWallet]);\n\n useEffect(() => {\n // if (unsupported) return;\n\n windowGuard(() => {\n const localAddress = keyStore.getAddress();\n const walletInfo = JSON.parse(localStorage.getItem(WALLET_KEY) ?? \"{}\");\n\n /**\n * if locale address is exist, restore account state\n */\n if (connectedChain?.namespace === ChainNamespace.solana) {\n return;\n }\n if (\n localAddress &&\n account.address !== localAddress &&\n walletInfo.label\n ) {\n connect({\n autoSelect: {\n label: walletInfo.label,\n disableModals: true,\n },\n }).then(\n (res) => {\n console.log(\"silent connect wallet successes\", res);\n },\n (error) => console.log(\"connect error\", error),\n );\n }\n });\n }, [connectedWallet, account.address]);\n\n /**\n * handle wallet connection\n */\n useEffect(() => {\n if (\n connectedWallet === null &&\n accountState.status > AccountStatusEnum.NotConnected &&\n !accountState.validating\n ) {\n account.disconnect();\n return;\n }\n\n if (unsupported || !connectedChain) return;\n if (isManualConnect.current) return;\n\n const linkData = getLinkDeviceData();\n\n // updateAccount(currentWalletAddress!, connectedWallet!, currentChainId!);\n /**\n * switch account\n */\n if (\n !!currentWalletAddress &&\n currentWalletAddress !== account.address &&\n !linkData\n ) {\n account.setAddress(currentWalletAddress, {\n provider: connectedWallet?.provider,\n chain: {\n id: praseChainIdToNumber(currentChain!.id),\n namespace: currentChain!.namespace.toUpperCase() as ChainNamespace,\n },\n wallet: {\n name: connectedWallet?.label ?? \"\",\n },\n additionalInfo: connectedWallet?.additionalInfo ?? {},\n });\n track(TrackerEventName.walletConnect, {\n wallet: connectedWallet?.label ?? \"\",\n network: currentChain!.namespace.toUpperCase() as ChainNamespace,\n });\n\n // save wallet connector info to local storage\n windowGuard(() => {\n localStorage.setItem(\n WALLET_KEY,\n JSON.stringify({\n label: connectedWallet?.label ?? \"\",\n }),\n );\n });\n }\n\n /**\n * switch chainId\n */\n if (currentChain?.id !== account.chainId) {\n account.switchChainId(currentChain?.id!);\n\n // emit chain changed event\n // options.onChainChanged?.(currentChainId!, isTestnet(networkId));\n }\n }, [\n connectedWallet,\n connectedChain,\n currentWalletAddress,\n currentChain,\n account.address,\n accountState,\n account.chainId,\n unsupported,\n ]);\n\n /**\n * User manually connects to wallet\n */\n const connectWallet = async (): Promise<{\n wallet?: WalletState;\n status?: AccountStatusEnum;\n wrongNetwork?: boolean;\n } | null> => {\n isManualConnect.current = true;\n // const walletState = await connect();\n\n return connect({ chainId: options.currentChainId })\n .then(async (walletState) => {\n if (\n Array.isArray(walletState) &&\n walletState.length > 0 &&\n walletState[0] &&\n walletState[0].accounts.length > 0\n ) {\n const wallet = walletState[0];\n const chainId = praseChainIdToNumber(wallet.chains[0].id);\n\n if (!checkChainSupport(chainId, networkId)) {\n return {\n wrongNetwork: true,\n };\n }\n //\n if (!account) {\n throw new Error(\"account is not initialized\");\n }\n // clear link device data when connect wallt\n if (\n accountState.status ===\n AccountStatusEnum.EnableTradingWithoutConnected\n ) {\n localStorage.removeItem(\"orderly_link_device\");\n await account.disconnect();\n }\n\n const status = await account.setAddress(wallet.accounts[0].address, {\n provider: wallet.provider,\n chain: {\n id: praseChainIdToNumber(wallet.chains[0].id),\n namespace:\n wallet.chains[0].namespace.toUpperCase() as ChainNamespace,\n },\n wallet: {\n name: wallet.label,\n },\n // label: ,\n });\n track(TrackerEventName.walletConnect, {\n wallet: wallet.label,\n network: wallet.chains[0].namespace.toUpperCase() as ChainNamespace,\n });\n console.log(\"-- xxxxxx status\", status);\n\n return { wallet, status, wrongNetwork: false };\n }\n\n return null;\n })\n .finally(() => {\n isManualConnect.current = false;\n });\n };\n\n return {\n connectWallet,\n wrongNetwork: unsupported,\n };\n};\n","import React, { createContext, useContext } from \"react\";\nimport { RestrictedInfoReturns } from \"@kodiak-finance/orderly-hooks\";\nimport { API } from \"@kodiak-finance/orderly-types\";\nimport { useWalletStateHandle } from \"../hooks/useWalletStateHandle\";\n\nexport type RouteOption = {\n href: \"/portfolio\" | \"/portfolio/history\";\n name: string;\n};\n\nexport type WidgetConfigs = {\n scanQRCode?: {\n onSuccess?: (url: string) => void;\n };\n subAccount?: {\n /** @deprecated The number of custom sub-accounts needs to be configured in sync with the backend. If you’re not sure about it, please don’t set this value. */\n maxSubAccountCount: number;\n };\n};\n\nexport type AppContextState = {\n connectWallet: ReturnType<typeof useWalletStateHandle>[\"connectWallet\"];\n /**\n * Whether the current network is not supported\n */\n wrongNetwork: boolean;\n disabledConnect: boolean;\n currentChainId: number | undefined;\n setCurrentChainId: (chainId: number | undefined) => void;\n onChainChanged?: (\n chainId: number,\n state: { isTestnet: boolean; isWalletConnected: boolean },\n ) => void;\n // networkStatus: ReturnType<typeof useAppState>[\"networkStatus\"];\n restrictedInfo: RestrictedInfoReturns;\n showAnnouncement: boolean;\n setShowAnnouncement: (show: boolean) => void;\n onRouteChange?: (option: RouteOption) => void;\n widgetConfigs?: WidgetConfigs;\n /** Custom announcements to merge with API announcements */\n customAnnouncements?: API.AnnouncementRow[];\n};\n\nexport const AppStateContext = createContext<AppContextState>({\n setCurrentChainId: (chainId?: number) => {},\n restrictedInfo: {},\n setShowAnnouncement: (show: boolean) => {},\n} as AppContextState);\n\nexport const useAppContext = () => {\n return useContext(AppStateContext);\n};\n","import { useAccount } from \"@kodiak-finance/orderly-hooks\";\nimport { AccountStatusEnum } from \"@kodiak-finance/orderly-types\";\nimport { useAppContext } from \"../provider/appStateContext\";\n\nexport const useDataTap = <T = any>(\n data: T,\n options?: {\n skip?: false;\n fallbackData?: T;\n accountStatus?: AccountStatusEnum;\n },\n): T | null => {\n const { wrongNetwork, disabledConnect } = useAppContext();\n const { state } = useAccount();\n /**\n * ignore\n */\n if (options?.skip) {\n return data;\n }\n\n if (wrongNetwork || disabledConnect) {\n return typeof options?.fallbackData !== \"undefined\"\n ? options.fallbackData\n : null;\n }\n\n if (typeof options?.accountStatus !== \"undefined\") {\n if (state.status < options.accountStatus) {\n return typeof options?.fallbackData !== \"undefined\"\n ? options.fallbackData\n : null;\n }\n }\n\n // return wrongNetwork\n // ? typeof options?.fallbackData !== \"undefined\"\n // ? options.fallbackData\n // : null\n // : data;\n //\n return data;\n};\n","import { useCallback } from \"react\";\nimport {\n ERROR_MSG_CODES,\n OrderValidationItem,\n OrderValidationResult,\n} from \"@kodiak-finance/orderly-hooks\";\nimport { useTranslation } from \"@kodiak-finance/orderly-i18n\";\n\ntype Keys = keyof OrderValidationResult;\ntype ErrorType = Partial<OrderValidationItem[\"type\"]>;\n\nexport function useOrderEntryFormErrorMsg(\n errors: OrderValidationResult | null,\n) {\n const { t } = useTranslation();\n\n const getMessage = (\n key: Keys,\n type: ErrorType,\n params: {\n value?: string | number;\n min?: string | number;\n max?: string | number;\n },\n ) => {\n const { value, min, max } = params || {};\n const map: Partial<Record<Keys, Partial<Record<ErrorType, string>>>> = {\n quantity: {\n required: t(\"orderEntry.orderQuantity.error.required\"),\n min: t(\"orderEntry.orderQuantity.error.min\", { value }),\n max: t(\"orderEntry.orderQuantity.error.max\", { value }),\n },\n order_quantity: {\n required: t(\"orderEntry.orderQuantity.error.required\"),\n min: t(\"orderEntry.orderQuantity.error.min\", { value }),\n max: t(\"orderEntry.orderQuantity.error.max\", { value }),\n },\n order_price: {\n required: t(\"orderEntry.orderPrice.error.required\"),\n min: t(\"orderEntry.orderPrice.error.min\", { value }),\n max: t(\"orderEntry.orderPrice.error.max\", { value }),\n },\n trigger_price: {\n required: t(\"orderEntry.triggerPrice.error.required\"),\n min: t(\"orderEntry.triggerPrice.error.min\", { value }),\n max: t(\"orderEntry.triggerPrice.error.max\", { value }),\n },\n tp_trigger_price: {\n required: t(\"tpsl.validate.tpTriggerPrice.error.required\"),\n min: t(\"orderEntry.tpTriggerPrice.error.min\", { value }),\n max: t(\"orderEntry.tpTriggerPrice.error.max\", { value }),\n priceErrorMin: t(\"tpsl.validate.tpTriggerPrice.error.priceErrorMin\"),\n priceErrorMax: t(\"tpsl.validate.tpTriggerPrice.error.priceErrorMax\"),\n },\n sl_trigger_price: {\n required: t(\"tpsl.validate.slTriggerPrice.error.required\"),\n min: t(\"orderEntry.slTriggerPrice.error.min\", { value }),\n max: t(\"orderEntry.slTriggerPrice.error.max\", { value }),\n priceErrorMin: t(\"tpsl.validate.slTriggerPrice.error.priceErrorMin\"),\n priceErrorMax: t(\"tpsl.validate.slTriggerPrice.error.priceErrorMax\"),\n [ERROR_MSG_CODES.SL_PRICE_WARNING]: t(\n \"tpsl.validate.slTriggerPrice.warning.closeToLiqPrice\",\n ),\n [ERROR_MSG_CODES.SL_PRICE_ERROR]: t(\n \"tpsl.validate.slTriggerPrice.error.crossLiqPrice\",\n ),\n },\n tp_order_price: {\n required: t(\"tpsl.validate.tpOrderPrice.error.required\"),\n min: t(\"tpsl.validate.tpOrderPrice.error.min\", { value }),\n max: t(\"tpsl.validate.tpOrderPrice.error.max\", { value }),\n },\n sl_order_price: {\n required: t(\"tpsl.validate.slOrderPrice.error.required\"),\n min: t(\"tpsl.validate.slOrderPrice.error.min\", { value }),\n max: t(\"tpsl.validate.slOrderPrice.error.max\", { value }),\n },\n total: {\n min: t(\"orderEntry.total.error.min\", { value }),\n },\n // not show form input tooltip\n // slippage: {\n // max: t(\"orderEntry.slippage.error.max\"),\n // },\n start_price: {\n required: t(\"orderEntry.startPrice.error.required\"),\n min: t(\"orderEntry.startPrice.error.min\", { value }),\n max: t(\"orderEntry.startPrice.error.max\", { value }),\n },\n end_price: {\n required: t(\"orderEntry.endPrice.error.required\"),\n min: t(\"orderEntry.endPrice.error.min\", { value }),\n max: t(\"orderEntry.endPrice.error.max\", { value }),\n },\n total_orders: {\n required: t(\"orderEntry.totalOrders.error.required\"),\n range: t(\"orderEntry.totalOrders.error.range\"),\n },\n skew: {\n required: t(\"orderEntry.skew.error.required\"),\n min: t(\"orderEntry.skew.error.min\", { value }),\n max: t(\"orderEntry.skew.error.max\", { value }),\n },\n activated_price: {\n min: t(\"orderEntry.triggerPrice.error.min\", { value }),\n max: t(\"orderEntry.triggerPrice.error.max\", { value }),\n },\n callback_value: {\n required: t(\"orderEntry.callbackValue.error.required\"),\n min: t(\"orderEntry.callbackValue.error.min\", { value }),\n range: t(\"orderEntry.callbackValue.error.range\", {\n min,\n max,\n }),\n },\n callback_rate: {\n required: t(\"orderEntry.callbackRate.error.required\"),\n range: t(\"orderEntry.callbackRate.error.range\", {\n min,\n max,\n }),\n },\n };\n\n return map[key]?.[type] || \"\";\n };\n\n const getErrorMsg = useCallback(\n (key: Keys, customValue?: string) => {\n const { type, value, min, max } = errors?.[key] || ({} as any);\n if (type) {\n return getMessage(key, type, { value: customValue || value, min, max });\n }\n return \"\";\n },\n [errors],\n );\n\n return {\n getErrorMsg,\n };\n}\n","import { PropsWithChildren, Component, ErrorInfo, ReactNode } from \"react\";\nimport { i18n } from \"@kodiak-finance/orderly-i18n\";\nimport { Button, cn, Flex, Text } from \"@kodiak-finance/orderly-ui\";\n\ntype ErrorBoundaryState = {\n hasError: boolean;\n error?: Error;\n errorInfo?: ErrorInfo;\n};\n\ntype ErrorBoundaryProps = PropsWithChildren<{\n className?: string;\n onError?: (error: Error, errorInfo: ErrorInfo) => void;\n icon?: ReactNode;\n title?: string;\n description?: string;\n refreshButtonText?: string;\n onRefresh?: () => void;\n}>;\n\nexport class ErrorBoundary extends Component<\n ErrorBoundaryProps,\n ErrorBoundaryState\n> {\n constructor(props: PropsWithChildren) {\n super(props);\n this.state = { hasError: false };\n }\n\n static getDerivedStateFromError(error: Error): ErrorBoundaryState {\n return { hasError: true, error };\n }\n\n componentDidCatch(error: Error, errorInfo: ErrorInfo) {\n this.setState({\n error,\n errorInfo,\n });\n\n // Log error to console in development\n if (process.env.NODE_ENV === \"development\") {\n console.error(\"ErrorBoundary caught an error:\", error, errorInfo);\n }\n\n this.props.onError?.(error, errorInfo);\n\n // You can also log the error to an error reporting service here\n // Example: errorReportingService.logError(error, errorInfo);\n }\n\n render() {\n if (this.state.hasError) {\n return (\n <Flex\n direction=\"column\"\n width=\"100%\"\n itemAlign=\"center\"\n justify=\"center\"\n className={cn(\"oui-h-screen oui-px-[10%]\", this.props.className)}\n >\n {this.props.icon || <Icon />}\n <Text\n className={cn(\n \"oui-mt-10\",\n \"oui-text-[32px] oui-leading-[40px]\",\n \"md:oui-text-[48px] md:oui-leading-[56px]\",\n )}\n intensity={80}\n weight=\"bold\"\n >\n {this.props.title || i18n.t(\"errorBoundary.title\")}\n </Text>\n <Text\n className={cn(\n \"oui-mt-2\",\n \"oui-text-[16px] oui-leading-[24px]\",\n \"md:oui-text-[20px] md:oui-leading-[28px]\",\n \"oui-text-center\",\n )}\n weight=\"semibold\"\n intensity={36}\n >\n {this.props.description || i18n.t(\"errorBoundary.description\")}\n </Text>\n <Button\n onClick={() => {\n if (typeof this.props.onRefresh === \"function\") {\n this.props.onRefresh();\n } else {\n window.location.reload();\n }\n }}\n className=\"oui-mt-4 oui-font-semibold\"\n variant=\"gradient\"\n size=\"md\"\n >\n <RefreshIcon className=\"oui-mr-1\" />\n {this.props.refreshButtonText || i18n.t(\"errorBoundary.refresh\")}\n </Button>\n {/* {process.env.NODE_ENV === \"development\" && this.state.error && (\n <details className=\"mt-4 p-4 bg-red-50 border border-red-200 rounded text-left max-w-2xl\">\n <summary className=\"cursor-pointer font-medium text-red-800\">\n Error Details\n </summary>\n <pre className=\"mt-2 text-sm text-red-700 overflow-auto\">\n {this.state.error.toString()}\n {this.state.errorInfo?.componentStack}\n </pre>\n </details>\n )} */}\n </Flex>\n );\n }\n\n return this.props.children;\n }\n}\n\nconst Icon = (props: { className?: string }) => {\n return (\n <svg\n width=\"156\"\n height=\"165\"\n viewBox=\"0 0 156 165\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n className={props.className}\n >\n <path\n d=\"M77.958 11.2581C117.408 11.2581 149.224 43.7623 149.225 83.635C149.225 123.508 117.408 156.013 77.958 156.013C38.5076 156.013 6.69141 123.508 6.69141 83.635C6.69161 43.7623 38.5077 11.2581 77.958 11.2581Z\"\n stroke=\"url(#paint0_linear_32953_90176)\"\n strokeWidth=\"12\"\n />\n <path\n d=\"M74.1236 18.8531C74.8967 18.2272 76.0309 18.3465 76.6568 19.1196L99.9666 47.9101C100.593 48.6832 100.473 49.8174 99.7001 50.4433C98.927 51.0692 97.7928 50.9499 97.1669 50.1768L73.8571 21.3863C73.2312 20.6132 73.3505 19.479 74.1236 18.8531Z\"\n fill=\"#394155\"\n />\n <path\n d=\"M67.4775 153.345C66.5687 153.75 65.5041 153.341 65.0996 152.432L47.5699 113.05C47.1654 112.142 47.5742 111.077 48.483 110.672C49.3918 110.268 50.4564 110.677 50.8609 111.585L68.3906 150.967C68.7951 151.876 68.3863 152.941 67.4775 153.345Z\"\n fill=\"#394155\"\n />\n <path\n d=\"M87.1937 2.50608C88.9032 1.12201 91.4111 1.38582 92.7951 3.09532L117.65 33.7939C119.034 35.5033 118.77 38.0112 117.06 39.3952L106.349 48.0675C104.64 49.4515 102.132 49.1877 100.748 47.4782L75.8932 16.7797C74.5092 15.0702 74.773 12.5624 76.4825 11.1783L87.1937 2.50608Z\"\n fill=\"url(#paint1_linear_32953_90176)\"\n />\n <path\n d=\"M54.8689 163.161C52.8595 164.055 50.5054 163.152 49.6109 161.142L30.369 117.913C29.4745 115.904 30.3784 113.55 32.3879 112.655L38.8256 109.79C40.8351 108.895 43.1892 109.799 44.0836 111.809L63.3256 155.037C64.22 157.047 63.3161 159.401 61.3067 160.295L54.8689 163.161Z\"\n fill=\"url(#paint2_linear_32953_90176)\"\n />\n <path\n d=\"M21.0497 137.635C19.2748 138.425 17.1955 137.627 16.4054 135.852C15.6154 134.077 16.4138 131.998 18.1887 131.208L29.4767 126.183C31.2516 125.393 33.331 126.191 34.121 127.966C34.911 129.741 34.1127 131.821 32.3377 132.611L21.0497 137.635Z\"\n fill=\"url(#paint3_linear_32953_90176)\"\n />\n <path\n d=\"M31.0067 160.657C29.2318 161.447 27.1525 160.649 26.3625 158.874C25.5724 157.099 26.3708 155.02 28.1457 154.23L39.4338 149.205C41.2087 148.415 43.288 149.213 44.078 150.988C44.8681 152.763 44.0697 154.843 42.2948 155.633L31.0067 160.657Z\"\n fill=\"url(#paint4_linear_32953_90176)\"\n />\n <path\n d=\"M94.2979 17.9219C94.2979 19.7549 92.812 21.2408 90.979 21.2408C89.1461 21.2408 87.6602 19.7549 87.6602 17.9219C87.6602 16.0889 89.1461 14.603 90.979 14.603C92.812 14.603 94.2979 16.0889 94.2979 17.9219Z\"\n fill=\"#07080A\"\n />\n <path\n d=\"M106.243 32.5249C106.243 34.3579 104.757 35.8438 102.924 35.8438C101.091 35.8438 99.6055 34.3579 99.6055 32.5249C99.6055 30.692 101.091 29.2061 102.924 29.2061C104.757 29.2061 106.243 30.692 106.243 32.5249Z\"\n fill=\"#07080A\"\n />\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M143.238 87.3294C143.283 86.3294 143.306 85.3235 143.306 84.3123C143.306 80.0077 142.89 75.8003 142.096 71.728C137.49 69.544 132.251 67.6307 127.118 66.8126C122.674 66.1042 117.636 66.1072 113.053 68.1318C108.166 70.2911 104.601 74.3958 102.851 80.1999C101.677 84.091 100.713 87.7506 99.857 90.9972L99.8569 90.9974C99.5483 92.1682 99.2539 93.2853 98.969 94.3402C97.8574 98.455 96.882 101.656 95.6795 104.319C94.5159 106.895 93.2041 108.812 91.5007 110.366C89.7881 111.929 87.3882 113.389 83.7037 114.64L87.9295 127.083C92.9507 125.378 97.0389 123.101 100.357 120.074C103.684 117.039 105.944 113.516 107.655 109.727C109.327 106.025 110.528 101.937 111.655 97.7671C111.977 96.5735 112.294 95.3715 112.616 94.1496L112.616 94.1488L112.616 94.1487C113.456 90.9644 114.33 87.646 115.432 83.9941C116.178 81.5196 117.297 80.6226 118.363 80.1517C119.734 79.5462 121.92 79.2905 125.05 79.7894C131.168 80.7644 138.314 84.1982 143.238 87.3294ZM13.9805 70.6827C14.9192 66.2565 16.3058 61.9957 18.0906 57.9501C23.709 58.5554 30.4365 58.6747 37.3538 57.7247C48.6584 56.1721 59.8141 51.8684 67.7619 42.9131L77.5901 51.6356C66.8783 63.7052 52.3551 68.9284 39.1417 70.7431C29.9766 72.0018 21.1264 71.6711 13.9805 70.6827Z\"\n fill=\"#394155\"\n />\n <path\n d=\"M68.7641 23.3532C70.4736 21.9692 72.9814 22.233 74.3655 23.9425L94.9298 49.3421C96.3139 51.0515 96.0501 53.5594 94.3406 54.9434L86.1984 61.5356C84.4889 62.9197 81.9811 62.6559 80.597 60.9464L60.0326 35.5468C58.6486 33.8373 58.9124 31.3295 60.6219 29.9454L68.7641 23.3532Z\"\n fill=\"#535E7B\"\n />\n <path\n d=\"M74.0447 150.372C72.0352 151.267 69.6811 150.363 68.7867 148.353L53.0318 112.959C52.1373 110.949 53.0412 108.595 55.0507 107.7L72.5225 99.9234C74.532 99.029 76.8861 99.9329 77.7806 101.942L93.5355 137.337C94.4299 139.347 93.526 141.701 91.5165 142.595L74.0447 150.372Z\"\n fill=\"#535E7B\"\n />\n <defs>\n <linearGradient\n id=\"paint0_linear_32953_90176\"\n x1=\"71.7422\"\n y1=\"138.236\"\n x2=\"124.758\"\n y2=\"41.3888\"\n gradientUnits=\"userSpaceOnUse\"\n >\n <stop stopColor=\"#1B1D22\" />\n <stop offset=\"1\" stopColor=\"#26292E\" />\n </linearGradient>\n <linearGradient\n id=\"paint1_linear_32953_90176\"\n x1=\"111.705\"\n y1=\"43.7314\"\n x2=\"81.8381\"\n y2=\"6.84218\"\n gradientUnits=\"userSpaceOnUse\"\n >\n <stop stopColor=\"rgb(var(--oui-gradient-brand-end))\" />\n <stop offset=\"1\" stopColor=\"rgb(var(--oui-gradient-brand-start))\" />\n </linearGradient>\n <linearGradient\n id=\"paint2_linear_32953_90176\"\n x1=\"35.6067\"\n y1=\"111.223\"\n x2=\"58.0878\"\n y2=\"161.728\"\n gradientUnits=\"userSpaceOnUse\"\n >\n <stop stopColor=\"rgb(var(--oui-gradient-brand-end))\" />\n <stop offset=\"1\" stopColor=\"rgb(var(--oui-gradient-brand-start))\" />\n </linearGradient>\n <linearGradient\n id=\"paint3_linear_32953_90176\"\n x1=\"23.8327\"\n y1=\"128.695\"\n x2=\"26.6937\"\n y2=\"135.123\"\n gradientUnits=\"userSpaceOnUse\"\n >\n <stop stopColor=\"rgb(var(--oui-gradient-brand-end))\" />\n <stop offset=\"1\" stopColor=\"rgb(var(--oui-gradient-brand-start))\" />\n </linearGradient>\n <linearGradient\n id=\"paint4_linear_32953_90176\"\n x1=\"33.7897\"\n y1=\"151.717\"\n x2=\"36.6508\"\n y2=\"158.145\"\n gradientUnits=\"userSpaceOnUse\"\n >\n <stop stopColor=\"rgb(var(--oui-gradient-brand-end))\" />\n <stop offset=\"1\" stopColor=\"rgb(var(--oui-gradient-brand-start))\" />\n </linearGradient>\n </defs>\n </svg>\n );\n};\n\nconst RefreshIcon = (props: { className?: string }) => {\n return (\n <svg\n width=\"15\"\n height=\"15\"\n viewBox=\"0 0 15 15\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n className={props.className}\n >\n <path\n d=\"M7.5026 2.52515C6.30444 2.52515 5.15994 2.92706 4.23944 3.65565C3.98686 3.85515 3.94835 4.22322 4.14844 4.47581C4.34852 4.72839 4.71602 4.76689 4.96861 4.56681C5.68436 4.00039 6.56985 3.69181 7.5026 3.69181C9.75777 3.69181 11.5859 5.51998 11.5859 7.77514H10.4193L12.1693 10.1085L13.9193 7.77514H12.7526C12.7526 4.87539 10.4024 2.52515 7.5026 2.52515ZM2.83594 5.44181L1.08594 7.77514H2.2526C2.2526 10.6749 4.60285 13.0251 7.5026 13.0251C8.70135 13.0251 9.84527 12.6238 10.7658 11.8946C11.0184 11.6951 11.0569 11.3271 10.8568 11.0745C10.6567 10.8219 10.2892 10.7834 10.0366 10.9835C9.32027 11.5505 8.43594 11.8585 7.5026 11.8585C5.24744 11.8585 3.41927 10.0303 3.41927 7.77514H4.58594L2.83594 5.44181Z\"\n fill=\"black\"\n />\n </svg>\n );\n};\n","import { useMemo } from \"react\";\nimport { useAccount } from \"@kodiak-finance/orderly-hooks\";\nimport { AccountStatusEnum } from \"@kodiak-finance/orderly-types\";\nimport { useAppContext } from \"../provider/appStateContext\";\n\nexport function useCanTrade() {\n const { state } = useAccount();\n\n const { wrongNetwork, disabledConnect } = useAppContext();\n\n const canTrade = useMemo(() => {\n return (\n !wrongNetwork &&\n !disabledConnect &&\n (state.status === AccountStatusEnum.EnableTrading ||\n state.status === AccountStatusEnum.EnableTradingWithoutConnected)\n );\n }, [state.status, wrongNetwork, disabledConnect]);\n\n return canTrade;\n}\n","/**\n * SDK Version - BUMP THIS WHEN RELEASING\n * Keep in sync with root package.json version\n */\nexport const SDK_VERSION = \"2.8.20\";\n\nexport type ChangesetEntry = {\n date: string;\n title: string;\n summary: string;\n highlights: string[];\n packages: string[];\n type: \"breaking\" | \"feature\" | \"bugfix\" | \"improvement\";\n};\n\nexport type Changesets = Record<string, ChangesetEntry>;\n\n/**\n * Changesets - What's new in each version\n * ADD NEW ENTRIES WHEN BUMPING SDK_VERSION\n */\nexport const CHANGESETS: Changesets = {\n \"2.8.20\": {\n date: \"2025-12-13\",\n title: \"Better pagination and notification routing\",\n summary:\n \"Fixed in-app notification links. Volume stats now use cleaner labels.\",\n highlights: [\n \"Notification links respect internal vs external navigation for both bell and popup to keep in-app links in the same tab\",\n ],\n packages: [\n \"kodiak-orderly-ui\",\n \"kodiak-orderly-ui-scaffold\",\n \"kodiak-orderly-ui-notification\",\n \"kodiak-orderly-portfolio\",\n \"kodiak-orderly-i18n\",\n ],\n type: \"improvement\",\n },\n \"2.8.19\": {\n date: \"2025-12-12\",\n title: \"Orderly SDK sync with new features and optimizations\",\n summary:\n \"Synced with latest Orderly SDK versions, added reverse position feature, improved stop loss logic, and enhanced UX across deposits, withdrawals, and notifications.\",\n highlights: [\n \"One-click Reverse Position to flip exposure instantly\",\n \"Safer stop loss logic that avoids liquidation traps\",\n \"Clearer deposit and withdrawal messages\",\n \"More accurate vault APY display\",\n \"Smart notification links - internal open in same tab, external in new tab\",\n \"Close position now defaults to LIMIT orders with mark price pre-filled\",\n ],\n packages: [\n \"kodiak-orderly-ui-positions\",\n \"kodiak-orderly-ui-notification\",\n \"kodiak-orderly-ui-transfer\",\n \"kodiak-orderly-ui-tpsl\",\n \"kodiak-orderly-vaults\",\n \"kodiak-orderly-hooks\",\n ],\n type: \"feature\",\n },\n \"2.8.18\": {\n date: \"2025-12-09\",\n title: \"Production API endpoint migration\",\n summary:\n \"Migrated from staging backend to production backend API endpoint for improved reliability and performance.\",\n highlights: [\n \"Updated API endpoint to production backend\",\n \"Improved API stability and performance\",\n ],\n packages: [\"kodiak-orderly-types\"],\n type: \"improvement\",\n },\n \"2.8.17\": {\n date: \"2025-11-29\",\n title: \"Symbol performance analysis\",\n summary:\n \"New symbol performance analysis feature with comprehensive per-symbol trading metrics and visualization.\",\n highlights: [\n \"New symbol-specific performance analytics dashboard\",\n \"View detailed P&L, volume, and fees for individual symbols\",\n \"Symbol performance tracking with customizable date ranges\",\n \"Comprehensive performance visualization per trading symbol\",\n ],\n packages: [\"kodiak-orderly-portfolio\"],\n type: \"feature\",\n },\n \"2.8.16\": {\n date: \"2025-11-29\",\n title: \"Fixed funded account address reversion issue\",\n summary:\n \"Restored isMobile guard in device linking to prevent funded accounts from reverting to wallet address. Fixes auto-sync behavior that was causing address switching issues.\",\n highlights: [\n \"Restored isMobile guard in useLinkDevice to prevent unintended auto-sync\",\n \"Fixed funded account address reverting to MetaMask\",\n \"Maintains device linking functionality for mobile devices\",\n \"Prevents auto-sync from being triggered on all devices\",\n ],\n packages: [\n \"kodiak-orderly-react-app\",\n \"kodiak-orderly-portfolio\",\n \"kodiak-orderly-hooks\",\n \"kodiak-orderly-types\",\n \"kodiak-orderly-utils\",\n ],\n type: \"bugfix\",\n },\n \"2.8.15\": {\n date: \"2025-11-19\",\n title: \"Portfolio volume chart and CSV data export\",\n summary:\n \"Added volume tracking chart to portfolio performance metrics and improved date range handling. New CSV export functionality for trading data with support for custom date ranges.\",\n highlights: [\n \"New volume chart on portfolio performance component\",\n \"Fixed date range selection to properly update performance labels\",\n \"Leaderboard-style period detection for custom date ranges\",\n \"Default performance period now set to 30 days\",\n \"CSV export for portfolio and trading data\",\n \"Support for custom date range exports\",\n ],\n packages: [\n \"kodiak-orderly-portfolio\",\n \"kodiak-orderly-i18n\",\n \"kodiak-orderly-hooks\",\n \"kodiak-orderly-trading\",\n \"kodiak-orderly-ui-orders\",\n \"kodiak-orderly-ui-positions\",\n \"kodiak-orderly-ui\",\n ],\n type: \"feature\",\n },\n \"2.8.14\": {\n date: \"2025-11-17\",\n title: \"Fixed 1D broker stats date range issue\",\n summary:\n \"Fixed issue where 1D (1 day) broker stats were returning incorrect data by properly setting start_date and end_date to current date.\",\n highlights: [\n \"Fixed 1D broker stats to correctly fetch today's data only\",\n \"Properly set start_date and end_date parameters for 1D queries\",\n \"Broker stats now display accurate data for single-day periods\",\n ],\n packages: [\"kodiak-orderly-trading-leaderboard\"],\n type: \"bugfix\",\n },\n \"2.8.13\": {\n date: \"2025-11-13\",\n title: \"Fixed broker stats date range alignment\",\n summary:\n \"Fixed broker stats to use the exact date range from the leaderboard date picker, ensuring consistent behavior across all dates. Added currency symbols to stats values.\",\n highlights: [\n \"Broker stats now match leaderboard date picker exactly\",\n \"Date range handling works consistently on any day\",\n \"Currency symbols ($) added to all stats values\",\n \"Removed unused brokerStats.script file for cleaner codebase\",\n ],\n packages: [\"kodiak-orderly-trading-leaderboard\"],\n type: \"bugfix\",\n },\n \"2.8.12\": {\n date: \"2025-11-13\",\n title: \"Updated broker stats with new endpoint\",\n summary:\n \"Integrated new staging backend stats endpoint for real-time broker statistics with improved date range handling and accurate data aggregation.\",\n highlights: [\n \"Connected to new stats endpoint for accurate data\",\n \"Improved date range calculations for stats display\",\n \"Fixed stats data parsing from aggregated endpoint\",\n \"Better performance with optimized API calls\",\n ],\n packages: [\"kodiak-orderly-trading-leaderboard\"],\n type: \"improvement\",\n },\n \"2.8.11\": {\n date: \"2025-11-12\",\n title: \"Broker stats and improved date filtering\",\n summary:\n \"Added broker trading stats dashboard and new 1D filter option with improved date range handling.\",\n highlights: [\n \"View broker stats: volume, fees, revenue, and P&L\",\n \"New 1D filter for quick analysis\",\n \"Fixed OrderlyProvider context issues\",\n ],\n packages: [\"kodiak-orderly-trading-leaderboard\"],\n type: \"feature\",\n },\n \"2.8.10\": {\n date: \"2025-11-07\",\n title: \"Your trading metrics now display correctly on the leaderboard\",\n summary:\n \"Fixed an issue where your trading volume and P&L weren't showing on your leaderboard row. Your trading stats now display accurately so you can see your real performance.\",\n highlights: [\n \"Your trading volume now shows in your leaderboard row\",\n \"Realized P&L displays correctly for your account\",\n \"All your trading metrics are now visible and up to date\",\n \"Works smoothly across both the default and custom leaderboards\",\n ],\n packages: [\"kodiak-orderly-trading-leaderboard\"],\n type: \"bugfix\",\n },\n \"2.8.9\": {\n date: \"2025-11-07\",\n title: \"Leaderboard performance improvements\",\n summary:\n \"Made the leaderboard faster and more reliable. Your rankings now load quicker and metrics display more smoothly.\",\n highlights: [\n \"Leaderboard loads faster\",\n \"Smoother sorting and filtering experience\",\n \"More reliable data display\",\n \"Better handling of large leaderboards\",\n ],\n packages: [\"kodiak-orderly-trading-leaderboard\"],\n type: \"improvement\",\n },\n \"2.8.8\": {\n date: \"2025-11-07\",\n title: \"See your points and compete on the leaderboard\",\n summary:\n \"You can now compete by trading volume, profit/loss, or all-time points. Sort and compare your performance against other traders in real-time.\",\n highlights: [\n \"View all-time points earned on the leaderboard\",\n \"Sort by trading volume, P&L, or points\",\n \"See your rank for each metric\",\n \"Faster leaderboard loading\",\n ],\n packages: [\"kodiak-orderly-trading-leaderboard\"],\n type: \"feature\",\n },\n \"2.8.7\": {\n date: \"2025-11-05\",\n title: \"Custom leaderboard periods and broker announcements\",\n summary:\n \"Brokers can now show custom messages in announcement and set flexible date ranges for leaderboards. View any time period - daily, weekly, monthly, or custom ranges.\",\n highlights: [\n \"View leaderboards for any time period you want\",\n \"Brokers can display important announcements\",\n \"Change leaderboard dates without app updates\",\n \"Campaign-specific leaderboards with custom dates\",\n ],\n packages: [\n \"kodiak-orderly-react-app\",\n \"kodiak-orderly-ui-scaffold\",\n \"kodiak-orderly-i18n\",\n \"kodiak-orderly-trading-leaderboard\",\n ],\n type: \"feature\",\n },\n \"2.8.6\": {\n date: \"2025-11-04\",\n title: \"Faster app and smoother trading experience\",\n summary:\n \"Fixed performance issues and improved the user experience. Trading is now smoother and the app responds faster when you switch between screens.\",\n highlights: [\n \"Points display cleanly without decimals\",\n \"Withdraw form works smoothly with all networks\",\n \"Trading input fields handle decimals better\",\n \"Price data updates instantly when you return to the app\",\n \"Faster performance on slower connections\",\n ],\n packages: [\n \"kodiak-orderly-trading-leaderboard\",\n \"kodiak-orderly-ui-transfer\",\n \"kodiak-orderly-ui-order-entry\",\n \"kodiak-orderly-hooks\",\n ],\n type: \"improvement\",\n },\n \"2.8.5\": {\n date: \"2025-11-03\",\n title: \"Track your trading points on the leaderboard\",\n summary:\n \"Your all-time trading points are now displayed on the leaderboard. Compete based on the points you earn and see where you rank.\",\n highlights: [\n \"View your all-time points earned\",\n \"See points on desktop leaderboard\",\n \"Switch between Volume, P&L, and Points on mobile\",\n \"Compare your points against other traders\",\n ],\n packages: [\n \"kodiak-orderly-trading-leaderboard\",\n \"kodiak-orderly-ui-scaffold\",\n ],\n type: \"feature\",\n },\n \"2.8.4\": {\n date: \"2025-10-28\",\n title: \"Better mobile trading and Mac support\",\n summary:\n \"Trading on mobile is now easier and faster. Fixed issues on Mac and improved the overall experience across all devices.\",\n highlights: [\n \"Mobile: Right keyboard automatically appears for entering prices\",\n \"Mobile: Quick number entry for order sizes\",\n \"Mac: Fixed trackpad scrolling in dropdowns\",\n \"Know which trading pair you're canceling orders from\",\n \"Easier stop-loss and take-profit management on mobile\",\n ],\n packages: [\n \"kodiak-orderly-ui-transfer\",\n \"kodiak-orderly-ui-order-entry\",\n \"kodiak-orderly-ui-orders\",\n \"kodiak-orderly-ui-positions\",\n \"kodiak-orderly-ui-tpsl\",\n ],\n type: \"improvement\",\n },\n \"2.8.3\": {\n date: \"2025-10-20\",\n title: \"More reliable orders and connections\",\n summary:\n \"Fixed issues with order submission and improved network stability. Your orders now process reliably.\",\n highlights: [\n \"Orders submit without errors\",\n \"Connection stays stable during network changes\",\n \"Faster recovery from connection drops\",\n ],\n packages: [\"kodiak-orderly-core\", \"kodiak-orderly-net\"],\n type: \"bugfix\",\n },\n};\n\n/**\n * Get changeset for a specific version\n * @param version - Version string (e.g., \"2.8.3\")\n * @returns ChangesetEntry or undefined if not found\n */\nexport function getChangesetForVersion(\n version: string = SDK_VERSION,\n): ChangesetEntry | undefined {\n return CHANGESETS[version];\n}\n\n/**\n * Get the latest changeset\n * @returns ChangesetEntry for current SDK_VERSION\n */\nexport function getLatestChangeset(): ChangesetEntry | undefined {\n return getChangesetForVersion(SDK_VERSION);\n}\n"]}
|
package/dist/index.mjs
CHANGED
|
@@ -1140,8 +1140,24 @@ function useCanTrade() {
|
|
|
1140
1140
|
}
|
|
1141
1141
|
|
|
1142
1142
|
// src/constants/changesets.ts
|
|
1143
|
-
var SDK_VERSION = "2.8.
|
|
1143
|
+
var SDK_VERSION = "2.8.20";
|
|
1144
1144
|
var CHANGESETS = {
|
|
1145
|
+
"2.8.20": {
|
|
1146
|
+
date: "2025-12-13",
|
|
1147
|
+
title: "Better pagination and notification routing",
|
|
1148
|
+
summary: "Fixed in-app notification links. Volume stats now use cleaner labels.",
|
|
1149
|
+
highlights: [
|
|
1150
|
+
"Notification links respect internal vs external navigation for both bell and popup to keep in-app links in the same tab"
|
|
1151
|
+
],
|
|
1152
|
+
packages: [
|
|
1153
|
+
"kodiak-orderly-ui",
|
|
1154
|
+
"kodiak-orderly-ui-scaffold",
|
|
1155
|
+
"kodiak-orderly-ui-notification",
|
|
1156
|
+
"kodiak-orderly-portfolio",
|
|
1157
|
+
"kodiak-orderly-i18n"
|
|
1158
|
+
],
|
|
1159
|
+
type: "improvement"
|
|
1160
|
+
},
|
|
1145
1161
|
"2.8.19": {
|
|
1146
1162
|
date: "2025-12-12",
|
|
1147
1163
|
title: "Orderly SDK sync with new features and optimizations",
|
package/dist/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/provider/orderlyAppProvider.tsx","../src/hooks/useBootstrap.ts","../src/hooks/useExecutionReport.tsx","../src/hooks/getOrderExecutionReportMsg.ts","../src/hooks/useUILocale.ts","../src/provider/appConfigContext.tsx","../src/provider/appConfigProvider.tsx","../src/provider/appStateProvider.tsx","../src/hooks/useAssetconvertEvent.ts","../src/hooks/useCurrentChainId.ts","../src/hooks/useLinkDevice.ts","../src/hooks/useSettleEvent.ts","../src/hooks/useWalletConnectError.ts","../src/hooks/useWalletEvent.ts","../src/hooks/useWalletStateHandle.ts","../src/provider/appStateContext.tsx","../src/hooks/useDataTap.ts","../src/common/useOrderEntryFormErrorMsg.ts","../src/provider/ErrorBoundary.tsx","../src/hooks/useCanTrade.ts","../src/constants/changesets.ts"],"names":["useTrack","useEffect","OrderStatus","data","jsx","useState","useMemo","useTranslation","toast","useConfig","useLocalStorage","useWalletConnector","useEventEmitter","useRef","capitalizeString","useAccount","useChains","WALLET_KEY","namespace","createContext","useContext","jsxs","i18n","AccountStatusEnum"],"mappings":"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","sourcesContent":["import React, { PropsWithChildren } from \"react\";\nimport { OrderlyConfigProvider, useTrack } from \"@kodiak-finance/orderly-hooks\";\nimport {\n LocaleProvider as UILocaleProvider,\n ModalProvider,\n OrderlyThemeProvider,\n Toaster,\n TooltipProvider,\n} from \"@kodiak-finance/orderly-ui\";\nimport { OrderlyThemeProviderProps } from \"@kodiak-finance/orderly-ui\";\nimport { useBootstrap } from \"../hooks/useBootstrap\";\nimport { useExecutionReport } from \"../hooks/useExecutionReport\";\nimport { useUILocale } from \"../hooks/useUILocale\";\nimport { OrderlyAppConfig } from \"../types\";\nimport { AppConfigProvider } from \"./appConfigProvider\";\nimport { AppStateProvider, AppStateProviderProps } from \"./appStateProvider\";\n\nexport type OrderlyAppProviderProps = PropsWithChildren<\n OrderlyAppConfig & AppStateProviderProps & OrderlyThemeProviderProps\n>;\n\n// Cannot be called outside of Provider because useExecutionReport requires useOrderlyContext.\nconst ExecutionReportListener: React.FC = () => {\n useExecutionReport();\n return null;\n};\n\nconst OrderlyAppProvider: React.FC<OrderlyAppProviderProps> = (props) => {\n const {\n // dateFormatting,\n components,\n appIcons,\n onChainChanged,\n defaultChain,\n widgetConfigs,\n ...configProps\n } = props;\n\n useTrack();\n useBootstrap();\n\n const uiLocale = useUILocale();\n\n return (\n <AppConfigProvider appIcons={appIcons} brokerName={props.brokerName!}>\n <OrderlyThemeProvider\n // dateFormatting={dateFormatting}\n components={components}\n overrides={props.overrides}\n >\n <OrderlyConfigProvider {...configProps}>\n <ExecutionReportListener />\n <AppStateProvider\n onChainChanged={onChainChanged}\n defaultChain={defaultChain}\n restrictedInfo={props.restrictedInfo}\n onRouteChange={props.onRouteChange}\n widgetConfigs={widgetConfigs}\n customAnnouncements={props.customAnnouncements}\n >\n <UILocaleProvider locale={uiLocale}>\n <TooltipProvider delayDuration={300}>\n <ModalProvider>{props.children}</ModalProvider>\n </TooltipProvider>\n </UILocaleProvider>\n </AppStateProvider>\n <Toaster />\n </OrderlyConfigProvider>\n </OrderlyThemeProvider>\n </AppConfigProvider>\n );\n};\n\nif (process.env.NODE_ENV !== \"production\") {\n OrderlyAppProvider.displayName = \"OrderlyAppProvider\";\n}\n\nexport { OrderlyAppProvider };\n","import { useEffect } from \"react\";\n\nexport const useBootstrap = () => {\n useEffect(() => {\n const searchParams = new URLSearchParams(window.location.search);\n const refCode = searchParams.get(\"ref\");\n if (refCode) {\n localStorage.setItem(\"referral_code\", refCode);\n }\n }, []);\n};\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { useEffect, useRef } from \"react\";\nimport {\n useSymbolsInfo,\n useEventEmitter,\n useDebouncedCallback,\n useAudioPlayer,\n useLocalStorage,\n useOrderlyContext,\n} from \"@kodiak-finance/orderly-hooks\";\nimport { OrderStatus } from \"@kodiak-finance/orderly-types\";\nimport { toast } from \"@kodiak-finance/orderly-ui\";\nimport { getOrderExecutionReportMsg } from \"./getOrderExecutionReportMsg\";\n\nexport const ORDERLY_ORDER_SOUND_ALERT_KEY = \"orderly_order_sound_alert\";\n\nexport const useExecutionReport = () => {\n const ee = useEventEmitter();\n\n const symbolsInfo = useSymbolsInfo();\n const symbolsInfoRef = useRef({});\n\n const { notification } = useOrderlyContext();\n\n useEffect(() => {\n symbolsInfoRef.current = symbolsInfo;\n }, [symbolsInfo]);\n\n const src = notification?.orderFilled?.media ?? \"\";\n\n const [soundAutoPlay] = useLocalStorage<boolean>(\n ORDERLY_ORDER_SOUND_ALERT_KEY,\n notification?.orderFilled?.defaultOpen ?? false,\n );\n\n const [audioElement] = useAudioPlayer(src, {\n autoPlay: soundAutoPlay,\n volume: 1,\n });\n\n const handler = useDebouncedCallback((data: any) => {\n const showToast = (data: any) => {\n const { title, msg, status } = getOrderExecutionReportMsg(\n data,\n symbolsInfoRef.current,\n );\n const isFilled =\n status === OrderStatus.FILLED || status === OrderStatus.PARTIAL_FILLED;\n // only show latest msg for same order type\n const orderType = data.algo_type || data.type;\n if (title && msg) {\n toast.success(\n <div>\n {title}\n <br />\n <div className=\"orderly-text-white/[0.54] orderly-text-xs\">\n {msg}\n </div>\n {isFilled && audioElement}\n </div>,\n { id: orderType },\n );\n }\n };\n showToast(data);\n }, 100);\n\n useEffect(() => {\n ee.on(\"orders:changed\", handler);\n return () => {\n ee.off(\"orders:changed\", handler);\n handler.cancel();\n };\n }, [ee, handler]);\n};\n","import { i18n } from \"@kodiak-finance/orderly-i18n\";\nimport { API, OrderStatus, OrderType } from \"@kodiak-finance/orderly-types\";\nimport { AlgoOrderRootType } from \"@kodiak-finance/orderly-types\";\nimport { parseNumber } from \"@kodiak-finance/orderly-ui\";\nimport {\n capitalizeString,\n transSymbolformString,\n} from \"@kodiak-finance/orderly-utils\";\n\nfunction getDisplaySide(side: string) {\n if (side === \"BUY\") {\n return i18n.t(\"common.buy\");\n } else if (side === \"SELL\") {\n return i18n.t(\"common.sell\");\n }\n return capitalizeString(side);\n}\n\ntype AlgoOrderFieldChanges = Partial<\n Record<OrderType, Partial<Record<keyof API.AlgoOrder, boolean>>>\n>;\n\nexport function getOrderExecutionReportMsg(\n data: (API.AlgoOrder | API.Order) & {\n fieldChanges?: AlgoOrderFieldChanges;\n },\n symbolsInfo: any,\n) {\n const { symbol, side, quantity, client_order_id, fieldChanges } = data;\n const total_executed_quantity =\n \"total_executed_quantity\" in data ? data.total_executed_quantity : 0;\n const status = \"status\" in data ? data.status : data.algo_status;\n const getSymbolInfo = symbolsInfo[symbol];\n const base_dp = getSymbolInfo(\"base_dp\");\n const quote_dp = getSymbolInfo(\"quote_dp\");\n const displaySide = getDisplaySide(side);\n const displaySymbol = transSymbolformString(symbol);\n const displayQuantity =\n \"algo_type\" in data && data.algo_type === AlgoOrderRootType.POSITIONAL_TP_SL\n ? i18n.t(\"tpsl.entirePosition\")\n : base_dp === undefined\n ? quantity\n : parseNumber(quantity, { dp: base_dp });\n\n let title = \"\";\n let msg = \"\";\n switch (status) {\n case OrderStatus.NEW:\n const isScaledOrder = client_order_id?.startsWith(\"scaled_\");\n // if client_order_id is scaled order, show the scaled order message\n if (isScaledOrder) {\n title = i18n.t(\"orders.status.scaledSubOrderOpened.toast.title\");\n msg = `${displaySide} ${displaySymbol} ${displayQuantity}`;\n } else {\n title = i18n.t(\"orders.status.opened.toast.title\");\n msg = `${displaySide} ${displaySymbol} ${displayQuantity}`;\n }\n\n break;\n case OrderStatus.FILLED:\n case OrderStatus.PARTIAL_FILLED:\n const displayTotalExecutedQuantity =\n base_dp === undefined\n ? total_executed_quantity\n : parseNumber(total_executed_quantity, { dp: base_dp });\n title = i18n.t(\"orders.status.filled.toast.title\");\n msg = `${displaySide} ${displaySymbol} ${displayTotalExecutedQuantity} / ${displayQuantity}`;\n break;\n case OrderStatus.CANCELLED:\n title = i18n.t(\"orders.status.canceled.toast.title\");\n msg = `${displaySide} ${displaySymbol} ${displayQuantity}`;\n break;\n case OrderStatus.REJECTED:\n title = i18n.t(\"orders.status.rejected.toast.title\");\n msg = `${displaySide} ${displaySymbol} ${displayQuantity}`;\n break;\n case OrderStatus.REPLACED:\n const { algo_type, activated_price } = data as API.AlgoOrder;\n if (algo_type === AlgoOrderRootType.TRAILING_STOP) {\n const fieldChange =\n fieldChanges?.[AlgoOrderRootType.TRAILING_STOP] || {};\n // when trailing stop order is activated, and extreme_price will also changed\n if (\n fieldChange.is_activated &&\n fieldChange.extreme_price &&\n activated_price\n ) {\n title = i18n.t(\"orders.trailingStop.activated\");\n msg = `${displaySymbol} @${activated_price}`;\n } else if (fieldChange.extreme_price) {\n // if extreme_price is changed, skip show the message\n title = \"\";\n msg = \"\";\n }\n } else {\n title = i18n.t(\"orders.status.replaced.toast.title\");\n msg = `${side} ${displaySymbol} ${total_executed_quantity} / ${displayQuantity}`;\n }\n\n break;\n default:\n break;\n }\n\n return {\n title,\n msg,\n status,\n };\n}\n","import { useMemo } from \"react\";\nimport {\n useTranslation,\n useLocaleCode,\n LocaleEnum,\n} from \"@kodiak-finance/orderly-i18n\";\nimport { Locale } from \"@kodiak-finance/orderly-ui\";\nimport { enUS, zhCN, ja, es, ko, vi, de, fr, nl } from \"date-fns/locale\";\n\nexport function useUILocale() {\n const { t } = useTranslation();\n const localeCode = useLocaleCode();\n\n return useMemo<Locale>(() => {\n const calendarLocale = {\n [LocaleEnum.en]: enUS,\n [LocaleEnum.zh]: zhCN,\n // [LocaleEnum.ja]: ja,\n // [LocaleEnum.es]: es,\n // [LocaleEnum.ko]: ko,\n // [LocaleEnum.vi]: vi,\n // [LocaleEnum.de]: de,\n // [LocaleEnum.fr]: fr,\n // [LocaleEnum.nl]: nl,\n };\n return {\n locale: localeCode,\n dialog: {\n ok: t(\"common.ok\"),\n cancel: t(\"common.cancel\"),\n },\n modal: {\n confirm: t(\"common.confirm\"),\n cancel: t(\"common.cancel\"),\n },\n pagination: {\n morePages: t(\"ui.pagination.morePages\"),\n rowsPerPage: t(\"ui.pagination.rowsPerPage\"),\n },\n picker: {\n selectDate: t(\"ui.picker.selectDate\"),\n dayPicker: calendarLocale[localeCode as keyof typeof calendarLocale],\n },\n empty: {\n description: t(\"ui.empty.description\"),\n },\n } as const;\n }, [t, localeCode]);\n}\n","import { createContext, useContext } from \"react\";\nimport { AppLogos } from \"../types\";\n\nexport type ThemeContextState = {\n appIcons?: AppLogos;\n brokerName: string;\n};\n\nexport const AppConfigContext = createContext({} as ThemeContextState);\n\nexport const useAppConfig = () => {\n return useContext(AppConfigContext);\n};\n","import { FC, PropsWithChildren } from \"react\";\nimport { AppLogos } from \"../types\";\nimport { AppConfigContext } from \"./appConfigContext\";\n\nexport type ThemeContextState = {\n appIcons?: AppLogos;\n brokerName: string;\n};\n\nexport const AppConfigProvider: FC<\n PropsWithChildren<{ appIcons?: AppLogos; brokerName: string }>\n> = (props) => {\n return (\n <AppConfigContext.Provider value={props}>\n {props.children}\n </AppConfigContext.Provider>\n );\n};\n","import { FC, PropsWithChildren, useState, useMemo } from \"react\";\nimport {\n RestrictedInfoOptions,\n useRestrictedInfo,\n useTrackingInstance,\n} from \"@kodiak-finance/orderly-hooks\";\nimport { useAssetconvertEvent } from \"../hooks/useAssetconvertEvent\";\nimport { DefaultChain, useCurrentChainId } from \"../hooks/useCurrentChainId\";\nimport { useLinkDevice } from \"../hooks/useLinkDevice\";\nimport { useSettleEvent } from \"../hooks/useSettleEvent\";\nimport { useWalletConnectError } from \"../hooks/useWalletConnectError\";\nimport { useWalletEvent } from \"../hooks/useWalletEvent\";\nimport { useWalletStateHandle } from \"../hooks/useWalletStateHandle\";\nimport { AppContextState, AppStateContext } from \"./appStateContext\";\n\nexport type RouteOption = {\n href: \"/portfolio\" | \"/portfolio/history\";\n name: string;\n};\n\nexport type AppStateProviderProps = {\n defaultChain?: DefaultChain;\n restrictedInfo?: RestrictedInfoOptions;\n} & Pick<\n AppContextState,\n \"onChainChanged\" | \"onRouteChange\" | \"widgetConfigs\" | \"customAnnouncements\"\n>;\n\nexport const AppStateProvider: FC<PropsWithChildren<AppStateProviderProps>> = (\n props,\n) => {\n const [showAnnouncement, setShowAnnouncement] = useState(false);\n const [currentChainId, setCurrentChainId] = useCurrentChainId(\n props.defaultChain,\n );\n useLinkDevice();\n useTrackingInstance();\n\n const { connectWallet, wrongNetwork } = useWalletStateHandle({\n // onChainChanged: props.onChainChanged,\n currentChainId,\n });\n\n useWalletEvent();\n useSettleEvent();\n useAssetconvertEvent();\n useWalletConnectError();\n\n const restrictedInfo = useRestrictedInfo(props.restrictedInfo);\n\n const disabledConnect = restrictedInfo.restrictedOpen;\n\n const memoizedValue = useMemo<AppContextState>(\n () => ({\n connectWallet,\n wrongNetwork,\n currentChainId,\n setCurrentChainId,\n onChainChanged: props.onChainChanged,\n disabledConnect,\n restrictedInfo,\n showAnnouncement,\n setShowAnnouncement,\n onRouteChange: props.onRouteChange,\n widgetConfigs: props.widgetConfigs,\n customAnnouncements: props.customAnnouncements,\n }),\n [\n connectWallet,\n currentChainId,\n disabledConnect,\n props.onChainChanged,\n restrictedInfo,\n setCurrentChainId,\n showAnnouncement,\n wrongNetwork,\n props.onRouteChange,\n props.widgetConfigs,\n props.customAnnouncements,\n ],\n );\n\n return (\n <AppStateContext.Provider value={memoizedValue}>\n {props.children}\n </AppStateContext.Provider>\n );\n};\n","import { useEffect } from \"react\";\nimport { useWS } from \"@kodiak-finance/orderly-hooks\";\nimport { useTranslation } from \"@kodiak-finance/orderly-i18n\";\nimport { toast } from \"@kodiak-finance/orderly-ui\";\nimport { getTimestamp } from \"@kodiak-finance/orderly-utils\";\n\nexport const useAssetconvertEvent = () => {\n const ws = useWS();\n const { t } = useTranslation();\n useEffect(() => {\n const unsubscribe = ws.privateSubscribe(\n {\n id: \"assetconvert\",\n event: \"subscribe\",\n topic: \"assetconvert\",\n ts: getTimestamp(),\n },\n {\n onMessage(data) {\n if (data.convertId) {\n toast.success(t(\"transfer.convert.completed\"));\n }\n },\n },\n );\n return () => unsubscribe();\n }, []);\n};\n","import { useEffect, useState } from \"react\";\nimport {\n Chains,\n useChains,\n useConfig,\n useStorageChain,\n useWalletConnector,\n} from \"@kodiak-finance/orderly-hooks\";\nimport { Chain, NetworkId } from \"@kodiak-finance/orderly-types\";\ntype ReturnChain = Pick<Chain, \"id\"> & Partial<Omit<Chain, \"id\">>;\n\nexport type DefaultChain =\n | {\n mainnet?: ReturnChain;\n testnet?: ReturnChain;\n }\n | ((networkId: NetworkId, chains: Chains) => ReturnChain)\n | undefined;\n\nexport function useCurrentChainId(defaultChain?: DefaultChain) {\n const { storageChain, setStorageChain } = useStorageChain();\n const [currentChainId, setCurrentChainId] = useState<number | undefined>();\n\n const [chains] = useChains();\n const networkId = useConfig(\"networkId\") as NetworkId;\n\n const { connectedChain } = useWalletConnector();\n\n useEffect(() => {\n if (connectedChain) {\n setCurrentChainId?.(\n typeof connectedChain.id === \"number\"\n ? connectedChain.id\n : parseInt(connectedChain.id)\n );\n } else {\n if (!!currentChainId) return;\n let fallbackChain: Partial<Chain> | undefined;\n\n const firstChain =\n networkId === \"mainnet\" ? chains.mainnet?.[0] : chains.testnet?.[0];\n\n if (typeof defaultChain === \"function\") {\n fallbackChain = defaultChain(networkId, chains);\n } else if (typeof defaultChain === \"object\") {\n fallbackChain =\n networkId === \"mainnet\"\n ? defaultChain?.mainnet\n : defaultChain?.testnet;\n }\n\n const chainId = fallbackChain?.id || firstChain?.network_infos?.chain_id;\n if (!chainId) return;\n\n if (storageChain) {\n setCurrentChainId?.(storageChain.chainId);\n } else {\n setStorageChain(chainId);\n setCurrentChainId?.(chainId);\n \n }\n }\n }, [\n connectedChain,\n chains,\n currentChainId,\n networkId,\n setCurrentChainId,\n defaultChain,\n ]);\n\n return [currentChainId, setCurrentChainId] as const;\n}\n","import { useEffect } from \"react\";\nimport {\n parseJSON,\n useAccount,\n useConfig,\n useLocalStorage,\n useWalletConnector,\n} from \"@kodiak-finance/orderly-hooks\";\nimport { ChainNamespace } from \"@kodiak-finance/orderly-types\";\nimport { useCanLinkDevice } from \"@kodiak-finance/orderly-ui\";\n\ntype DecodedData = {\n /** secret key */\n k: string;\n /* timestamp */\n t: number;\n /** address */\n a: string;\n /** chain id */\n i: number;\n /** chain namespace */\n n: ChainNamespace;\n};\n\ntype LinkDeviceStorage = { chainId: number; chainNamespace: ChainNamespace };\n\nconst WALLET_KEY = \"orderly:wallet-info\";\n\nexport function useLinkDevice() {\n const { connectedChain, disconnect } = useWalletConnector();\n const [_, setLinkDeviceStorage] = useLocalStorage(\n \"orderly_link_device\",\n {} as LinkDeviceStorage,\n );\n\n const { account } = useAccount();\n const canLinkDevice = useCanLinkDevice();\n const configStore = useConfig();\n\n const onDisconnect = async (label: string) => {\n // The cache must be cleared first, otherwise it will be auto connect wallet\n localStorage.removeItem(WALLET_KEY);\n await account.disconnect();\n await disconnect({ label });\n };\n\n useEffect(() => {\n const linkData = getLinkDeviceData();\n const walletInfo = JSON.parse(localStorage.getItem(WALLET_KEY) ?? \"{}\");\n if (linkData && walletInfo) {\n // clear connect data when link device\n onDisconnect(walletInfo.label);\n }\n }, []);\n\n const linkDevice = async () => {\n const linkData = getLinkDeviceData();\n if (!linkData) return;\n\n const { address, secretKey, chainId, chainNamespace } = linkData;\n const isSuccess = await account.importOrderlyKey({\n address,\n secretKey,\n chainNamespace,\n });\n if (!isSuccess) return;\n setLinkDeviceStorage({\n chainId,\n chainNamespace,\n });\n\n const url = new URL(window.location.href);\n url.searchParams.delete(\"link\");\n // use set instead of append, because the param possibly in the url\n url.searchParams.set(\"utm_medium\", \"qrcode\");\n const decodedUrl = decodeURIComponent(url.toString());\n history.replaceState(null, \"\", decodedUrl);\n };\n\n useEffect(() => {\n if (canLinkDevice && !connectedChain) {\n linkDevice();\n }\n }, [account, connectedChain, canLinkDevice]);\n\n const autoLinkDevice = async () => {\n // Only auto-link if device linking data exists in storage AND it's actually a linkable device\n const { chainId, chainNamespace } = getLinkDeviceStorage() || {};\n if (canLinkDevice && !connectedChain && chainId && chainNamespace) {\n const address = account.keyStore.getAddress();\n const orderlyKey = account.keyStore.getOrderlyKey();\n const accountId = account.keyStore.getAccountId(address!);\n const res = await account.checkOrderlyKey(\n address!,\n orderlyKey!,\n accountId!,\n );\n if (res) {\n configStore.set(\"chainNamespace\", chainNamespace);\n }\n }\n };\n\n // persist status when refresh page\n useEffect(() => {\n autoLinkDevice();\n }, [account, canLinkDevice, connectedChain]);\n\n return { linkDevice };\n}\n\nfunction getLinkDeviceStorage() {\n try {\n const linkDeviceStorage = localStorage.getItem(\"orderly_link_device\");\n const json = linkDeviceStorage ? parseJSON(linkDeviceStorage) : null;\n return json as LinkDeviceStorage;\n } catch (err) {\n console.error(\"getLinkDeviceStorage\", err);\n }\n}\n\nexport function getLinkDeviceData() {\n const url = new URL(window.location.href);\n const link = url.searchParams.get(\"link\");\n\n if (!link) return;\n\n const {\n a: address,\n k: secretKey,\n i: chainId,\n n: chainNamespace,\n } = decodeBase64(link) || {};\n\n if (address && secretKey && chainId && chainNamespace) {\n return {\n address,\n secretKey,\n chainId,\n chainNamespace,\n };\n }\n}\n\nfunction decodeBase64(base64: string) {\n try {\n const data = JSON.parse(window.atob(base64)) as DecodedData;\n console.log(\"decodeBase64\", data);\n const currentTime = Math.floor(Date.now() / 1000);\n const expiredTime = data.t;\n\n if (!expiredTime || currentTime > expiredTime) {\n console.error(\"Orderly key has expired.\");\n return;\n }\n\n return data;\n } catch (error) {\n console.error(\"Invalid or expired orderly key.\");\n }\n}\n","import { useSettleSubscription } from \"@kodiak-finance/orderly-hooks\";\nimport { toast } from \"@kodiak-finance/orderly-ui\";\nimport { useTranslation } from \"@kodiak-finance/orderly-i18n\";\n\nexport function useSettleEvent() {\n const { t } = useTranslation();\n\n useSettleSubscription({\n onMessage: (data: any) => {\n const { status } = data;\n\n // console.log(\"settle ws: \", data);\n\n switch (status) {\n case \"COMPLETED\":\n toast.success(t(\"settle.settlement.completed\"));\n break;\n case \"FAILED\":\n toast.error(t(\"settle.settlement.failed\"));\n break;\n default:\n break;\n }\n },\n });\n}\n","import { useEventEmitter } from \"@kodiak-finance/orderly-hooks\";\nimport { useEffect } from \"react\";\nimport { modal, toast } from \"@kodiak-finance/orderly-ui\";\nimport { LedgerWalletKey } from \"@kodiak-finance/orderly-types\";\nimport { useStorageLedgerAddress } from \"@kodiak-finance/orderly-hooks\";\nimport { useTranslation } from \"@kodiak-finance/orderly-i18n\";\n\nexport function useWalletConnectError() {\n const { t } = useTranslation();\n const ee = useEventEmitter();\n const { setLedgerAddress } = useStorageLedgerAddress();\n\n useEffect(() => {\n ee.on(\"wallet:connect-error\", (data) => {\n toast.error(data.message);\n });\n ee.on(\n \"wallet:sign-message-with-ledger-error\",\n (data: { userAddress: string; message: string }) => {\n window.setTimeout(() => {\n modal\n .confirm({\n title: t(\"connector.ledger.signMessageFailed\"),\n content: t(\"connector.ledger.signMessageFailed.description\"),\n size: \"sm\",\n onOk: async () => {\n console.log(\"-- use ledger\", true);\n setLedgerAddress(data.userAddress);\n\n return Promise.resolve();\n },\n okLabel: t(\"common.ok\"),\n onCancel: async () => {\n toast.error(data.message);\n return Promise.resolve();\n },\n cancelLabel: t(\"common.no\"),\n })\n .then((res) => {\n console.log(\"-- dialog res\", res);\n });\n });\n }\n );\n }, [ee, t]);\n\n return {};\n}\n","import { useRef } from \"react\";\nimport {\n useEventEmitter,\n useSessionStorage,\n useWalletSubscription,\n} from \"@kodiak-finance/orderly-hooks\";\nimport { useTranslation } from \"@kodiak-finance/orderly-i18n\";\nimport { toast } from \"@kodiak-finance/orderly-ui\";\nimport { capitalizeString } from \"@kodiak-finance/orderly-utils\";\n\nexport function useWalletEvent() {\n const { t } = useTranslation();\n const ee = useEventEmitter();\n\n const recordRef = useRef<Record<number, boolean>>({});\n\n const [record, setRecord] = useSessionStorage(\n \"orderly_wallet_change_id\",\n {} as Record<number, boolean>,\n );\n\n recordRef.current = record;\n\n useWalletSubscription({\n onMessage: (data: any) => {\n console.log(\"wallet:changed\", data);\n const { id, side, transStatus } = data;\n let showToast = true;\n\n // DEPOSIT and WITHDRAW will push twice COMPLETED and FAILED event\n if (\n [\"DEPOSIT\", \"WITHDRAW\"].includes(side) &&\n [\"COMPLETED\", \"FAILED\"].includes(transStatus)\n ) {\n const isPushed = !!recordRef.current[id];\n if (!isPushed) {\n recordRef.current[id] = true;\n setRecord((prev: Record<number, boolean>) => ({\n ...prev,\n [id]: true,\n }));\n }\n showToast = !isPushed;\n }\n\n if (transStatus === \"COMPLETED\" && showToast) {\n let msg = `${capitalizeString(side)} completed`;\n\n if (side === \"DEPOSIT\") {\n msg = t(\"transfer.deposit.completed\");\n } else if (side === \"WITHDRAW\") {\n msg = t(\"transfer.withdraw.completed\");\n }\n\n toast.success(msg);\n } else if (transStatus === \"FAILED\" && showToast) {\n let msg = `${capitalizeString(side)} failed`;\n\n if (side === \"DEPOSIT\") {\n msg = t(\"transfer.deposit.failed\");\n } else if (side === \"WITHDRAW\") {\n msg = t(\"transfer.withdraw.failed\");\n }\n toast.error(msg);\n }\n\n ee.emit(\"wallet:changed\", data);\n },\n });\n}\n","import { useEffect, useMemo, useRef, useState } from \"react\";\nimport {\n useConfig,\n useEventEmitter,\n useTrack,\n WalletState,\n} from \"@kodiak-finance/orderly-hooks\";\nimport {\n useAccount,\n useChains,\n useKeyStore,\n useWalletConnector,\n} from \"@kodiak-finance/orderly-hooks\";\nimport {\n AccountStatusEnum,\n SDKError,\n ChainNamespace,\n NetworkId,\n TrackerEventName,\n ABSTRACT_CHAIN_ID_MAP,\n} from \"@kodiak-finance/orderly-types\";\nimport {\n parseChainIdToNumber,\n praseChainIdToNumber,\n windowGuard,\n} from \"@kodiak-finance/orderly-utils\";\nimport { getLinkDeviceData } from \"./useLinkDevice\";\n\nconst WALLET_KEY = \"orderly:wallet-info\";\nconst CHAIN_NAMESPACE = \"orderly:chain-namespace\";\n\nexport const useWalletStateHandle = (options: {\n // onChainChanged?: (chainId: number, isTestnet: boolean) => void;\n currentChainId?: number;\n}) => {\n const {\n wallet: connectedWallet,\n connect,\n connectedChain,\n disconnect,\n namespace,\n } = useWalletConnector();\n //\n // console.log(\"🔗 wallet state handle\", {\n // connectedWallet,\n // connectedChain,\n // namespace,\n // });\n\n if (typeof connect !== \"function\") {\n throw new SDKError(\"Please provide a wallet connector provider\");\n }\n\n const ee = useEventEmitter();\n const isManualConnect = useRef<boolean>(false);\n const brokerId = useConfig(\"brokerId\");\n const { account, state: accountState } = useAccount();\n const keyStore = useKeyStore();\n const networkId = useConfig(\"networkId\") as NetworkId;\n const [chains, { checkChainSupport }] = useChains();\n\n const [unsupported, setUnsupported] = useState(false);\n const { track, setTrackUserId } = useTrack();\n\n // current connected wallet address\n const currentWalletAddress = useMemo<string | undefined>(() => {\n return connectedWallet?.accounts?.[0]?.address;\n }, [connectedWallet]);\n\n // current connected chain id\n const currentChain = useMemo<\n { id: number; namespace: string } | undefined\n >(() => {\n const id = connectedWallet?.chains?.[0]?.id;\n const namespace = connectedWallet?.chains?.[0]?.namespace as string;\n if (typeof id === \"undefined\") return undefined;\n return {\n id: parseChainIdToNumber(id),\n namespace,\n };\n }, [connectedWallet]);\n\n useEffect(() => {\n if (\n accountState.status >= AccountStatusEnum.EnableTrading &&\n account.accountId\n ) {\n setTrackUserId(account.accountId!);\n }\n }, [account, accountState]);\n\n useEffect(() => {\n if (!connectedChain) {\n setUnsupported(false);\n return;\n }\n\n let isSupported = checkChainSupport(\n connectedChain.id,\n networkId,\n // networkId === \"testnet\" ? chains.testnet : chains.mainnet\n );\n if (\n ABSTRACT_CHAIN_ID_MAP.has(parseInt(connectedChain.id as string)) &&\n connectedWallet?.label !== \"AGW\"\n ) {\n isSupported = false;\n }\n\n setUnsupported(!isSupported);\n }, [connectedChain, chains, checkChainSupport, networkId, connectedWallet]);\n\n useEffect(() => {\n // if (unsupported) return;\n\n windowGuard(() => {\n const localAddress = keyStore.getAddress();\n const walletInfo = JSON.parse(localStorage.getItem(WALLET_KEY) ?? \"{}\");\n\n /**\n * if locale address is exist, restore account state\n */\n if (connectedChain?.namespace === ChainNamespace.solana) {\n return;\n }\n if (\n localAddress &&\n account.address !== localAddress &&\n walletInfo.label\n ) {\n connect({\n autoSelect: {\n label: walletInfo.label,\n disableModals: true,\n },\n }).then(\n (res) => {\n console.log(\"silent connect wallet successes\", res);\n },\n (error) => console.log(\"connect error\", error),\n );\n }\n });\n }, [connectedWallet, account.address]);\n\n /**\n * handle wallet connection\n */\n useEffect(() => {\n if (\n connectedWallet === null &&\n accountState.status > AccountStatusEnum.NotConnected &&\n !accountState.validating\n ) {\n account.disconnect();\n return;\n }\n\n if (unsupported || !connectedChain) return;\n if (isManualConnect.current) return;\n\n const linkData = getLinkDeviceData();\n\n // updateAccount(currentWalletAddress!, connectedWallet!, currentChainId!);\n /**\n * switch account\n */\n if (\n !!currentWalletAddress &&\n currentWalletAddress !== account.address &&\n !linkData\n ) {\n account.setAddress(currentWalletAddress, {\n provider: connectedWallet?.provider,\n chain: {\n id: praseChainIdToNumber(currentChain!.id),\n namespace: currentChain!.namespace.toUpperCase() as ChainNamespace,\n },\n wallet: {\n name: connectedWallet?.label ?? \"\",\n },\n additionalInfo: connectedWallet?.additionalInfo ?? {},\n });\n track(TrackerEventName.walletConnect, {\n wallet: connectedWallet?.label ?? \"\",\n network: currentChain!.namespace.toUpperCase() as ChainNamespace,\n });\n\n // save wallet connector info to local storage\n windowGuard(() => {\n localStorage.setItem(\n WALLET_KEY,\n JSON.stringify({\n label: connectedWallet?.label ?? \"\",\n }),\n );\n });\n }\n\n /**\n * switch chainId\n */\n if (currentChain?.id !== account.chainId) {\n account.switchChainId(currentChain?.id!);\n\n // emit chain changed event\n // options.onChainChanged?.(currentChainId!, isTestnet(networkId));\n }\n }, [\n connectedWallet,\n connectedChain,\n currentWalletAddress,\n currentChain,\n account.address,\n accountState,\n account.chainId,\n unsupported,\n ]);\n\n /**\n * User manually connects to wallet\n */\n const connectWallet = async (): Promise<{\n wallet?: WalletState;\n status?: AccountStatusEnum;\n wrongNetwork?: boolean;\n } | null> => {\n isManualConnect.current = true;\n // const walletState = await connect();\n\n return connect({ chainId: options.currentChainId })\n .then(async (walletState) => {\n if (\n Array.isArray(walletState) &&\n walletState.length > 0 &&\n walletState[0] &&\n walletState[0].accounts.length > 0\n ) {\n const wallet = walletState[0];\n const chainId = praseChainIdToNumber(wallet.chains[0].id);\n\n if (!checkChainSupport(chainId, networkId)) {\n return {\n wrongNetwork: true,\n };\n }\n //\n if (!account) {\n throw new Error(\"account is not initialized\");\n }\n // clear link device data when connect wallt\n if (\n accountState.status ===\n AccountStatusEnum.EnableTradingWithoutConnected\n ) {\n localStorage.removeItem(\"orderly_link_device\");\n await account.disconnect();\n }\n\n const status = await account.setAddress(wallet.accounts[0].address, {\n provider: wallet.provider,\n chain: {\n id: praseChainIdToNumber(wallet.chains[0].id),\n namespace:\n wallet.chains[0].namespace.toUpperCase() as ChainNamespace,\n },\n wallet: {\n name: wallet.label,\n },\n // label: ,\n });\n track(TrackerEventName.walletConnect, {\n wallet: wallet.label,\n network: wallet.chains[0].namespace.toUpperCase() as ChainNamespace,\n });\n console.log(\"-- xxxxxx status\", status);\n\n return { wallet, status, wrongNetwork: false };\n }\n\n return null;\n })\n .finally(() => {\n isManualConnect.current = false;\n });\n };\n\n return {\n connectWallet,\n wrongNetwork: unsupported,\n };\n};\n","import React, { createContext, useContext } from \"react\";\nimport { RestrictedInfoReturns } from \"@kodiak-finance/orderly-hooks\";\nimport { API } from \"@kodiak-finance/orderly-types\";\nimport { useWalletStateHandle } from \"../hooks/useWalletStateHandle\";\n\nexport type RouteOption = {\n href: \"/portfolio\" | \"/portfolio/history\";\n name: string;\n};\n\nexport type WidgetConfigs = {\n scanQRCode?: {\n onSuccess?: (url: string) => void;\n };\n subAccount?: {\n /** @deprecated The number of custom sub-accounts needs to be configured in sync with the backend. If you’re not sure about it, please don’t set this value. */\n maxSubAccountCount: number;\n };\n};\n\nexport type AppContextState = {\n connectWallet: ReturnType<typeof useWalletStateHandle>[\"connectWallet\"];\n /**\n * Whether the current network is not supported\n */\n wrongNetwork: boolean;\n disabledConnect: boolean;\n currentChainId: number | undefined;\n setCurrentChainId: (chainId: number | undefined) => void;\n onChainChanged?: (\n chainId: number,\n state: { isTestnet: boolean; isWalletConnected: boolean },\n ) => void;\n // networkStatus: ReturnType<typeof useAppState>[\"networkStatus\"];\n restrictedInfo: RestrictedInfoReturns;\n showAnnouncement: boolean;\n setShowAnnouncement: (show: boolean) => void;\n onRouteChange?: (option: RouteOption) => void;\n widgetConfigs?: WidgetConfigs;\n /** Custom announcements to merge with API announcements */\n customAnnouncements?: API.AnnouncementRow[];\n};\n\nexport const AppStateContext = createContext<AppContextState>({\n setCurrentChainId: (chainId?: number) => {},\n restrictedInfo: {},\n setShowAnnouncement: (show: boolean) => {},\n} as AppContextState);\n\nexport const useAppContext = () => {\n return useContext(AppStateContext);\n};\n","import { useAccount } from \"@kodiak-finance/orderly-hooks\";\nimport { AccountStatusEnum } from \"@kodiak-finance/orderly-types\";\nimport { useAppContext } from \"../provider/appStateContext\";\n\nexport const useDataTap = <T = any>(\n data: T,\n options?: {\n skip?: false;\n fallbackData?: T;\n accountStatus?: AccountStatusEnum;\n },\n): T | null => {\n const { wrongNetwork, disabledConnect } = useAppContext();\n const { state } = useAccount();\n /**\n * ignore\n */\n if (options?.skip) {\n return data;\n }\n\n if (wrongNetwork || disabledConnect) {\n return typeof options?.fallbackData !== \"undefined\"\n ? options.fallbackData\n : null;\n }\n\n if (typeof options?.accountStatus !== \"undefined\") {\n if (state.status < options.accountStatus) {\n return typeof options?.fallbackData !== \"undefined\"\n ? options.fallbackData\n : null;\n }\n }\n\n // return wrongNetwork\n // ? typeof options?.fallbackData !== \"undefined\"\n // ? options.fallbackData\n // : null\n // : data;\n //\n return data;\n};\n","import { useCallback } from \"react\";\nimport {\n ERROR_MSG_CODES,\n OrderValidationItem,\n OrderValidationResult,\n} from \"@kodiak-finance/orderly-hooks\";\nimport { useTranslation } from \"@kodiak-finance/orderly-i18n\";\n\ntype Keys = keyof OrderValidationResult;\ntype ErrorType = Partial<OrderValidationItem[\"type\"]>;\n\nexport function useOrderEntryFormErrorMsg(\n errors: OrderValidationResult | null,\n) {\n const { t } = useTranslation();\n\n const getMessage = (\n key: Keys,\n type: ErrorType,\n params: {\n value?: string | number;\n min?: string | number;\n max?: string | number;\n },\n ) => {\n const { value, min, max } = params || {};\n const map: Partial<Record<Keys, Partial<Record<ErrorType, string>>>> = {\n quantity: {\n required: t(\"orderEntry.orderQuantity.error.required\"),\n min: t(\"orderEntry.orderQuantity.error.min\", { value }),\n max: t(\"orderEntry.orderQuantity.error.max\", { value }),\n },\n order_quantity: {\n required: t(\"orderEntry.orderQuantity.error.required\"),\n min: t(\"orderEntry.orderQuantity.error.min\", { value }),\n max: t(\"orderEntry.orderQuantity.error.max\", { value }),\n },\n order_price: {\n required: t(\"orderEntry.orderPrice.error.required\"),\n min: t(\"orderEntry.orderPrice.error.min\", { value }),\n max: t(\"orderEntry.orderPrice.error.max\", { value }),\n },\n trigger_price: {\n required: t(\"orderEntry.triggerPrice.error.required\"),\n min: t(\"orderEntry.triggerPrice.error.min\", { value }),\n max: t(\"orderEntry.triggerPrice.error.max\", { value }),\n },\n tp_trigger_price: {\n required: t(\"tpsl.validate.tpTriggerPrice.error.required\"),\n min: t(\"orderEntry.tpTriggerPrice.error.min\", { value }),\n max: t(\"orderEntry.tpTriggerPrice.error.max\", { value }),\n priceErrorMin: t(\"tpsl.validate.tpTriggerPrice.error.priceErrorMin\"),\n priceErrorMax: t(\"tpsl.validate.tpTriggerPrice.error.priceErrorMax\"),\n },\n sl_trigger_price: {\n required: t(\"tpsl.validate.slTriggerPrice.error.required\"),\n min: t(\"orderEntry.slTriggerPrice.error.min\", { value }),\n max: t(\"orderEntry.slTriggerPrice.error.max\", { value }),\n priceErrorMin: t(\"tpsl.validate.slTriggerPrice.error.priceErrorMin\"),\n priceErrorMax: t(\"tpsl.validate.slTriggerPrice.error.priceErrorMax\"),\n [ERROR_MSG_CODES.SL_PRICE_WARNING]: t(\n \"tpsl.validate.slTriggerPrice.warning.closeToLiqPrice\",\n ),\n [ERROR_MSG_CODES.SL_PRICE_ERROR]: t(\n \"tpsl.validate.slTriggerPrice.error.crossLiqPrice\",\n ),\n },\n tp_order_price: {\n required: t(\"tpsl.validate.tpOrderPrice.error.required\"),\n min: t(\"tpsl.validate.tpOrderPrice.error.min\", { value }),\n max: t(\"tpsl.validate.tpOrderPrice.error.max\", { value }),\n },\n sl_order_price: {\n required: t(\"tpsl.validate.slOrderPrice.error.required\"),\n min: t(\"tpsl.validate.slOrderPrice.error.min\", { value }),\n max: t(\"tpsl.validate.slOrderPrice.error.max\", { value }),\n },\n total: {\n min: t(\"orderEntry.total.error.min\", { value }),\n },\n // not show form input tooltip\n // slippage: {\n // max: t(\"orderEntry.slippage.error.max\"),\n // },\n start_price: {\n required: t(\"orderEntry.startPrice.error.required\"),\n min: t(\"orderEntry.startPrice.error.min\", { value }),\n max: t(\"orderEntry.startPrice.error.max\", { value }),\n },\n end_price: {\n required: t(\"orderEntry.endPrice.error.required\"),\n min: t(\"orderEntry.endPrice.error.min\", { value }),\n max: t(\"orderEntry.endPrice.error.max\", { value }),\n },\n total_orders: {\n required: t(\"orderEntry.totalOrders.error.required\"),\n range: t(\"orderEntry.totalOrders.error.range\"),\n },\n skew: {\n required: t(\"orderEntry.skew.error.required\"),\n min: t(\"orderEntry.skew.error.min\", { value }),\n max: t(\"orderEntry.skew.error.max\", { value }),\n },\n activated_price: {\n min: t(\"orderEntry.triggerPrice.error.min\", { value }),\n max: t(\"orderEntry.triggerPrice.error.max\", { value }),\n },\n callback_value: {\n required: t(\"orderEntry.callbackValue.error.required\"),\n min: t(\"orderEntry.callbackValue.error.min\", { value }),\n range: t(\"orderEntry.callbackValue.error.range\", {\n min,\n max,\n }),\n },\n callback_rate: {\n required: t(\"orderEntry.callbackRate.error.required\"),\n range: t(\"orderEntry.callbackRate.error.range\", {\n min,\n max,\n }),\n },\n };\n\n return map[key]?.[type] || \"\";\n };\n\n const getErrorMsg = useCallback(\n (key: Keys, customValue?: string) => {\n const { type, value, min, max } = errors?.[key] || ({} as any);\n if (type) {\n return getMessage(key, type, { value: customValue || value, min, max });\n }\n return \"\";\n },\n [errors],\n );\n\n return {\n getErrorMsg,\n };\n}\n","import { PropsWithChildren, Component, ErrorInfo, ReactNode } from \"react\";\nimport { i18n } from \"@kodiak-finance/orderly-i18n\";\nimport { Button, cn, Flex, Text } from \"@kodiak-finance/orderly-ui\";\n\ntype ErrorBoundaryState = {\n hasError: boolean;\n error?: Error;\n errorInfo?: ErrorInfo;\n};\n\ntype ErrorBoundaryProps = PropsWithChildren<{\n className?: string;\n onError?: (error: Error, errorInfo: ErrorInfo) => void;\n icon?: ReactNode;\n title?: string;\n description?: string;\n refreshButtonText?: string;\n onRefresh?: () => void;\n}>;\n\nexport class ErrorBoundary extends Component<\n ErrorBoundaryProps,\n ErrorBoundaryState\n> {\n constructor(props: PropsWithChildren) {\n super(props);\n this.state = { hasError: false };\n }\n\n static getDerivedStateFromError(error: Error): ErrorBoundaryState {\n return { hasError: true, error };\n }\n\n componentDidCatch(error: Error, errorInfo: ErrorInfo) {\n this.setState({\n error,\n errorInfo,\n });\n\n // Log error to console in development\n if (process.env.NODE_ENV === \"development\") {\n console.error(\"ErrorBoundary caught an error:\", error, errorInfo);\n }\n\n this.props.onError?.(error, errorInfo);\n\n // You can also log the error to an error reporting service here\n // Example: errorReportingService.logError(error, errorInfo);\n }\n\n render() {\n if (this.state.hasError) {\n return (\n <Flex\n direction=\"column\"\n width=\"100%\"\n itemAlign=\"center\"\n justify=\"center\"\n className={cn(\"oui-h-screen oui-px-[10%]\", this.props.className)}\n >\n {this.props.icon || <Icon />}\n <Text\n className={cn(\n \"oui-mt-10\",\n \"oui-text-[32px] oui-leading-[40px]\",\n \"md:oui-text-[48px] md:oui-leading-[56px]\",\n )}\n intensity={80}\n weight=\"bold\"\n >\n {this.props.title || i18n.t(\"errorBoundary.title\")}\n </Text>\n <Text\n className={cn(\n \"oui-mt-2\",\n \"oui-text-[16px] oui-leading-[24px]\",\n \"md:oui-text-[20px] md:oui-leading-[28px]\",\n \"oui-text-center\",\n )}\n weight=\"semibold\"\n intensity={36}\n >\n {this.props.description || i18n.t(\"errorBoundary.description\")}\n </Text>\n <Button\n onClick={() => {\n if (typeof this.props.onRefresh === \"function\") {\n this.props.onRefresh();\n } else {\n window.location.reload();\n }\n }}\n className=\"oui-mt-4 oui-font-semibold\"\n variant=\"gradient\"\n size=\"md\"\n >\n <RefreshIcon className=\"oui-mr-1\" />\n {this.props.refreshButtonText || i18n.t(\"errorBoundary.refresh\")}\n </Button>\n {/* {process.env.NODE_ENV === \"development\" && this.state.error && (\n <details className=\"mt-4 p-4 bg-red-50 border border-red-200 rounded text-left max-w-2xl\">\n <summary className=\"cursor-pointer font-medium text-red-800\">\n Error Details\n </summary>\n <pre className=\"mt-2 text-sm text-red-700 overflow-auto\">\n {this.state.error.toString()}\n {this.state.errorInfo?.componentStack}\n </pre>\n </details>\n )} */}\n </Flex>\n );\n }\n\n return this.props.children;\n }\n}\n\nconst Icon = (props: { className?: string }) => {\n return (\n <svg\n width=\"156\"\n height=\"165\"\n viewBox=\"0 0 156 165\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n className={props.className}\n >\n <path\n d=\"M77.958 11.2581C117.408 11.2581 149.224 43.7623 149.225 83.635C149.225 123.508 117.408 156.013 77.958 156.013C38.5076 156.013 6.69141 123.508 6.69141 83.635C6.69161 43.7623 38.5077 11.2581 77.958 11.2581Z\"\n stroke=\"url(#paint0_linear_32953_90176)\"\n strokeWidth=\"12\"\n />\n <path\n d=\"M74.1236 18.8531C74.8967 18.2272 76.0309 18.3465 76.6568 19.1196L99.9666 47.9101C100.593 48.6832 100.473 49.8174 99.7001 50.4433C98.927 51.0692 97.7928 50.9499 97.1669 50.1768L73.8571 21.3863C73.2312 20.6132 73.3505 19.479 74.1236 18.8531Z\"\n fill=\"#394155\"\n />\n <path\n d=\"M67.4775 153.345C66.5687 153.75 65.5041 153.341 65.0996 152.432L47.5699 113.05C47.1654 112.142 47.5742 111.077 48.483 110.672C49.3918 110.268 50.4564 110.677 50.8609 111.585L68.3906 150.967C68.7951 151.876 68.3863 152.941 67.4775 153.345Z\"\n fill=\"#394155\"\n />\n <path\n d=\"M87.1937 2.50608C88.9032 1.12201 91.4111 1.38582 92.7951 3.09532L117.65 33.7939C119.034 35.5033 118.77 38.0112 117.06 39.3952L106.349 48.0675C104.64 49.4515 102.132 49.1877 100.748 47.4782L75.8932 16.7797C74.5092 15.0702 74.773 12.5624 76.4825 11.1783L87.1937 2.50608Z\"\n fill=\"url(#paint1_linear_32953_90176)\"\n />\n <path\n d=\"M54.8689 163.161C52.8595 164.055 50.5054 163.152 49.6109 161.142L30.369 117.913C29.4745 115.904 30.3784 113.55 32.3879 112.655L38.8256 109.79C40.8351 108.895 43.1892 109.799 44.0836 111.809L63.3256 155.037C64.22 157.047 63.3161 159.401 61.3067 160.295L54.8689 163.161Z\"\n fill=\"url(#paint2_linear_32953_90176)\"\n />\n <path\n d=\"M21.0497 137.635C19.2748 138.425 17.1955 137.627 16.4054 135.852C15.6154 134.077 16.4138 131.998 18.1887 131.208L29.4767 126.183C31.2516 125.393 33.331 126.191 34.121 127.966C34.911 129.741 34.1127 131.821 32.3377 132.611L21.0497 137.635Z\"\n fill=\"url(#paint3_linear_32953_90176)\"\n />\n <path\n d=\"M31.0067 160.657C29.2318 161.447 27.1525 160.649 26.3625 158.874C25.5724 157.099 26.3708 155.02 28.1457 154.23L39.4338 149.205C41.2087 148.415 43.288 149.213 44.078 150.988C44.8681 152.763 44.0697 154.843 42.2948 155.633L31.0067 160.657Z\"\n fill=\"url(#paint4_linear_32953_90176)\"\n />\n <path\n d=\"M94.2979 17.9219C94.2979 19.7549 92.812 21.2408 90.979 21.2408C89.1461 21.2408 87.6602 19.7549 87.6602 17.9219C87.6602 16.0889 89.1461 14.603 90.979 14.603C92.812 14.603 94.2979 16.0889 94.2979 17.9219Z\"\n fill=\"#07080A\"\n />\n <path\n d=\"M106.243 32.5249C106.243 34.3579 104.757 35.8438 102.924 35.8438C101.091 35.8438 99.6055 34.3579 99.6055 32.5249C99.6055 30.692 101.091 29.2061 102.924 29.2061C104.757 29.2061 106.243 30.692 106.243 32.5249Z\"\n fill=\"#07080A\"\n />\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M143.238 87.3294C143.283 86.3294 143.306 85.3235 143.306 84.3123C143.306 80.0077 142.89 75.8003 142.096 71.728C137.49 69.544 132.251 67.6307 127.118 66.8126C122.674 66.1042 117.636 66.1072 113.053 68.1318C108.166 70.2911 104.601 74.3958 102.851 80.1999C101.677 84.091 100.713 87.7506 99.857 90.9972L99.8569 90.9974C99.5483 92.1682 99.2539 93.2853 98.969 94.3402C97.8574 98.455 96.882 101.656 95.6795 104.319C94.5159 106.895 93.2041 108.812 91.5007 110.366C89.7881 111.929 87.3882 113.389 83.7037 114.64L87.9295 127.083C92.9507 125.378 97.0389 123.101 100.357 120.074C103.684 117.039 105.944 113.516 107.655 109.727C109.327 106.025 110.528 101.937 111.655 97.7671C111.977 96.5735 112.294 95.3715 112.616 94.1496L112.616 94.1488L112.616 94.1487C113.456 90.9644 114.33 87.646 115.432 83.9941C116.178 81.5196 117.297 80.6226 118.363 80.1517C119.734 79.5462 121.92 79.2905 125.05 79.7894C131.168 80.7644 138.314 84.1982 143.238 87.3294ZM13.9805 70.6827C14.9192 66.2565 16.3058 61.9957 18.0906 57.9501C23.709 58.5554 30.4365 58.6747 37.3538 57.7247C48.6584 56.1721 59.8141 51.8684 67.7619 42.9131L77.5901 51.6356C66.8783 63.7052 52.3551 68.9284 39.1417 70.7431C29.9766 72.0018 21.1264 71.6711 13.9805 70.6827Z\"\n fill=\"#394155\"\n />\n <path\n d=\"M68.7641 23.3532C70.4736 21.9692 72.9814 22.233 74.3655 23.9425L94.9298 49.3421C96.3139 51.0515 96.0501 53.5594 94.3406 54.9434L86.1984 61.5356C84.4889 62.9197 81.9811 62.6559 80.597 60.9464L60.0326 35.5468C58.6486 33.8373 58.9124 31.3295 60.6219 29.9454L68.7641 23.3532Z\"\n fill=\"#535E7B\"\n />\n <path\n d=\"M74.0447 150.372C72.0352 151.267 69.6811 150.363 68.7867 148.353L53.0318 112.959C52.1373 110.949 53.0412 108.595 55.0507 107.7L72.5225 99.9234C74.532 99.029 76.8861 99.9329 77.7806 101.942L93.5355 137.337C94.4299 139.347 93.526 141.701 91.5165 142.595L74.0447 150.372Z\"\n fill=\"#535E7B\"\n />\n <defs>\n <linearGradient\n id=\"paint0_linear_32953_90176\"\n x1=\"71.7422\"\n y1=\"138.236\"\n x2=\"124.758\"\n y2=\"41.3888\"\n gradientUnits=\"userSpaceOnUse\"\n >\n <stop stopColor=\"#1B1D22\" />\n <stop offset=\"1\" stopColor=\"#26292E\" />\n </linearGradient>\n <linearGradient\n id=\"paint1_linear_32953_90176\"\n x1=\"111.705\"\n y1=\"43.7314\"\n x2=\"81.8381\"\n y2=\"6.84218\"\n gradientUnits=\"userSpaceOnUse\"\n >\n <stop stopColor=\"rgb(var(--oui-gradient-brand-end))\" />\n <stop offset=\"1\" stopColor=\"rgb(var(--oui-gradient-brand-start))\" />\n </linearGradient>\n <linearGradient\n id=\"paint2_linear_32953_90176\"\n x1=\"35.6067\"\n y1=\"111.223\"\n x2=\"58.0878\"\n y2=\"161.728\"\n gradientUnits=\"userSpaceOnUse\"\n >\n <stop stopColor=\"rgb(var(--oui-gradient-brand-end))\" />\n <stop offset=\"1\" stopColor=\"rgb(var(--oui-gradient-brand-start))\" />\n </linearGradient>\n <linearGradient\n id=\"paint3_linear_32953_90176\"\n x1=\"23.8327\"\n y1=\"128.695\"\n x2=\"26.6937\"\n y2=\"135.123\"\n gradientUnits=\"userSpaceOnUse\"\n >\n <stop stopColor=\"rgb(var(--oui-gradient-brand-end))\" />\n <stop offset=\"1\" stopColor=\"rgb(var(--oui-gradient-brand-start))\" />\n </linearGradient>\n <linearGradient\n id=\"paint4_linear_32953_90176\"\n x1=\"33.7897\"\n y1=\"151.717\"\n x2=\"36.6508\"\n y2=\"158.145\"\n gradientUnits=\"userSpaceOnUse\"\n >\n <stop stopColor=\"rgb(var(--oui-gradient-brand-end))\" />\n <stop offset=\"1\" stopColor=\"rgb(var(--oui-gradient-brand-start))\" />\n </linearGradient>\n </defs>\n </svg>\n );\n};\n\nconst RefreshIcon = (props: { className?: string }) => {\n return (\n <svg\n width=\"15\"\n height=\"15\"\n viewBox=\"0 0 15 15\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n className={props.className}\n >\n <path\n d=\"M7.5026 2.52515C6.30444 2.52515 5.15994 2.92706 4.23944 3.65565C3.98686 3.85515 3.94835 4.22322 4.14844 4.47581C4.34852 4.72839 4.71602 4.76689 4.96861 4.56681C5.68436 4.00039 6.56985 3.69181 7.5026 3.69181C9.75777 3.69181 11.5859 5.51998 11.5859 7.77514H10.4193L12.1693 10.1085L13.9193 7.77514H12.7526C12.7526 4.87539 10.4024 2.52515 7.5026 2.52515ZM2.83594 5.44181L1.08594 7.77514H2.2526C2.2526 10.6749 4.60285 13.0251 7.5026 13.0251C8.70135 13.0251 9.84527 12.6238 10.7658 11.8946C11.0184 11.6951 11.0569 11.3271 10.8568 11.0745C10.6567 10.8219 10.2892 10.7834 10.0366 10.9835C9.32027 11.5505 8.43594 11.8585 7.5026 11.8585C5.24744 11.8585 3.41927 10.0303 3.41927 7.77514H4.58594L2.83594 5.44181Z\"\n fill=\"black\"\n />\n </svg>\n );\n};\n","import { useMemo } from \"react\";\nimport { useAccount } from \"@kodiak-finance/orderly-hooks\";\nimport { AccountStatusEnum } from \"@kodiak-finance/orderly-types\";\nimport { useAppContext } from \"../provider/appStateContext\";\n\nexport function useCanTrade() {\n const { state } = useAccount();\n\n const { wrongNetwork, disabledConnect } = useAppContext();\n\n const canTrade = useMemo(() => {\n return (\n !wrongNetwork &&\n !disabledConnect &&\n (state.status === AccountStatusEnum.EnableTrading ||\n state.status === AccountStatusEnum.EnableTradingWithoutConnected)\n );\n }, [state.status, wrongNetwork, disabledConnect]);\n\n return canTrade;\n}\n","/**\n * SDK Version - BUMP THIS WHEN RELEASING\n * Keep in sync with root package.json version\n */\nexport const SDK_VERSION = \"2.8.19\";\n\nexport type ChangesetEntry = {\n date: string;\n title: string;\n summary: string;\n highlights: string[];\n packages: string[];\n type: \"breaking\" | \"feature\" | \"bugfix\" | \"improvement\";\n};\n\nexport type Changesets = Record<string, ChangesetEntry>;\n\n/**\n * Changesets - What's new in each version\n * ADD NEW ENTRIES WHEN BUMPING SDK_VERSION\n */\nexport const CHANGESETS: Changesets = {\n \"2.8.19\": {\n date: \"2025-12-12\",\n title: \"Orderly SDK sync with new features and optimizations\",\n summary:\n \"Synced with latest Orderly SDK versions, added reverse position feature, improved stop loss logic, and enhanced UX across deposits, withdrawals, and notifications.\",\n highlights: [\n \"One-click Reverse Position to flip exposure instantly\",\n \"Safer stop loss logic that avoids liquidation traps\",\n \"Clearer deposit and withdrawal messages\",\n \"More accurate vault APY display\",\n \"Smart notification links - internal open in same tab, external in new tab\",\n \"Close position now defaults to LIMIT orders with mark price pre-filled\",\n ],\n packages: [\n \"kodiak-orderly-ui-positions\",\n \"kodiak-orderly-ui-notification\",\n \"kodiak-orderly-ui-transfer\",\n \"kodiak-orderly-ui-tpsl\",\n \"kodiak-orderly-vaults\",\n \"kodiak-orderly-hooks\",\n ],\n type: \"feature\",\n },\n \"2.8.18\": {\n date: \"2025-12-09\",\n title: \"Production API endpoint migration\",\n summary:\n \"Migrated from staging backend to production backend API endpoint for improved reliability and performance.\",\n highlights: [\n \"Updated API endpoint to production backend\",\n \"Improved API stability and performance\",\n ],\n packages: [\"kodiak-orderly-types\"],\n type: \"improvement\",\n },\n \"2.8.17\": {\n date: \"2025-11-29\",\n title: \"Symbol performance analysis\",\n summary:\n \"New symbol performance analysis feature with comprehensive per-symbol trading metrics and visualization.\",\n highlights: [\n \"New symbol-specific performance analytics dashboard\",\n \"View detailed P&L, volume, and fees for individual symbols\",\n \"Symbol performance tracking with customizable date ranges\",\n \"Comprehensive performance visualization per trading symbol\",\n ],\n packages: [\"kodiak-orderly-portfolio\"],\n type: \"feature\",\n },\n \"2.8.16\": {\n date: \"2025-11-29\",\n title: \"Fixed funded account address reversion issue\",\n summary:\n \"Restored isMobile guard in device linking to prevent funded accounts from reverting to wallet address. Fixes auto-sync behavior that was causing address switching issues.\",\n highlights: [\n \"Restored isMobile guard in useLinkDevice to prevent unintended auto-sync\",\n \"Fixed funded account address reverting to MetaMask\",\n \"Maintains device linking functionality for mobile devices\",\n \"Prevents auto-sync from being triggered on all devices\",\n ],\n packages: [\n \"kodiak-orderly-react-app\",\n \"kodiak-orderly-portfolio\",\n \"kodiak-orderly-hooks\",\n \"kodiak-orderly-types\",\n \"kodiak-orderly-utils\",\n ],\n type: \"bugfix\",\n },\n \"2.8.15\": {\n date: \"2025-11-19\",\n title: \"Portfolio volume chart and CSV data export\",\n summary:\n \"Added volume tracking chart to portfolio performance metrics and improved date range handling. New CSV export functionality for trading data with support for custom date ranges.\",\n highlights: [\n \"New volume chart on portfolio performance component\",\n \"Fixed date range selection to properly update performance labels\",\n \"Leaderboard-style period detection for custom date ranges\",\n \"Default performance period now set to 30 days\",\n \"CSV export for portfolio and trading data\",\n \"Support for custom date range exports\",\n ],\n packages: [\n \"kodiak-orderly-portfolio\",\n \"kodiak-orderly-i18n\",\n \"kodiak-orderly-hooks\",\n \"kodiak-orderly-trading\",\n \"kodiak-orderly-ui-orders\",\n \"kodiak-orderly-ui-positions\",\n \"kodiak-orderly-ui\",\n ],\n type: \"feature\",\n },\n \"2.8.14\": {\n date: \"2025-11-17\",\n title: \"Fixed 1D broker stats date range issue\",\n summary:\n \"Fixed issue where 1D (1 day) broker stats were returning incorrect data by properly setting start_date and end_date to current date.\",\n highlights: [\n \"Fixed 1D broker stats to correctly fetch today's data only\",\n \"Properly set start_date and end_date parameters for 1D queries\",\n \"Broker stats now display accurate data for single-day periods\",\n ],\n packages: [\"kodiak-orderly-trading-leaderboard\"],\n type: \"bugfix\",\n },\n \"2.8.13\": {\n date: \"2025-11-13\",\n title: \"Fixed broker stats date range alignment\",\n summary:\n \"Fixed broker stats to use the exact date range from the leaderboard date picker, ensuring consistent behavior across all dates. Added currency symbols to stats values.\",\n highlights: [\n \"Broker stats now match leaderboard date picker exactly\",\n \"Date range handling works consistently on any day\",\n \"Currency symbols ($) added to all stats values\",\n \"Removed unused brokerStats.script file for cleaner codebase\",\n ],\n packages: [\"kodiak-orderly-trading-leaderboard\"],\n type: \"bugfix\",\n },\n \"2.8.12\": {\n date: \"2025-11-13\",\n title: \"Updated broker stats with new endpoint\",\n summary:\n \"Integrated new staging backend stats endpoint for real-time broker statistics with improved date range handling and accurate data aggregation.\",\n highlights: [\n \"Connected to new stats endpoint for accurate data\",\n \"Improved date range calculations for stats display\",\n \"Fixed stats data parsing from aggregated endpoint\",\n \"Better performance with optimized API calls\",\n ],\n packages: [\"kodiak-orderly-trading-leaderboard\"],\n type: \"improvement\",\n },\n \"2.8.11\": {\n date: \"2025-11-12\",\n title: \"Broker stats and improved date filtering\",\n summary:\n \"Added broker trading stats dashboard and new 1D filter option with improved date range handling.\",\n highlights: [\n \"View broker stats: volume, fees, revenue, and P&L\",\n \"New 1D filter for quick analysis\",\n \"Fixed OrderlyProvider context issues\",\n ],\n packages: [\"kodiak-orderly-trading-leaderboard\"],\n type: \"feature\",\n },\n \"2.8.10\": {\n date: \"2025-11-07\",\n title: \"Your trading metrics now display correctly on the leaderboard\",\n summary:\n \"Fixed an issue where your trading volume and P&L weren't showing on your leaderboard row. Your trading stats now display accurately so you can see your real performance.\",\n highlights: [\n \"Your trading volume now shows in your leaderboard row\",\n \"Realized P&L displays correctly for your account\",\n \"All your trading metrics are now visible and up to date\",\n \"Works smoothly across both the default and custom leaderboards\",\n ],\n packages: [\"kodiak-orderly-trading-leaderboard\"],\n type: \"bugfix\",\n },\n \"2.8.9\": {\n date: \"2025-11-07\",\n title: \"Leaderboard performance improvements\",\n summary:\n \"Made the leaderboard faster and more reliable. Your rankings now load quicker and metrics display more smoothly.\",\n highlights: [\n \"Leaderboard loads faster\",\n \"Smoother sorting and filtering experience\",\n \"More reliable data display\",\n \"Better handling of large leaderboards\",\n ],\n packages: [\"kodiak-orderly-trading-leaderboard\"],\n type: \"improvement\",\n },\n \"2.8.8\": {\n date: \"2025-11-07\",\n title: \"See your points and compete on the leaderboard\",\n summary:\n \"You can now compete by trading volume, profit/loss, or all-time points. Sort and compare your performance against other traders in real-time.\",\n highlights: [\n \"View all-time points earned on the leaderboard\",\n \"Sort by trading volume, P&L, or points\",\n \"See your rank for each metric\",\n \"Faster leaderboard loading\",\n ],\n packages: [\"kodiak-orderly-trading-leaderboard\"],\n type: \"feature\",\n },\n \"2.8.7\": {\n date: \"2025-11-05\",\n title: \"Custom leaderboard periods and broker announcements\",\n summary:\n \"Brokers can now show custom messages in announcement and set flexible date ranges for leaderboards. View any time period - daily, weekly, monthly, or custom ranges.\",\n highlights: [\n \"View leaderboards for any time period you want\",\n \"Brokers can display important announcements\",\n \"Change leaderboard dates without app updates\",\n \"Campaign-specific leaderboards with custom dates\",\n ],\n packages: [\n \"kodiak-orderly-react-app\",\n \"kodiak-orderly-ui-scaffold\",\n \"kodiak-orderly-i18n\",\n \"kodiak-orderly-trading-leaderboard\",\n ],\n type: \"feature\",\n },\n \"2.8.6\": {\n date: \"2025-11-04\",\n title: \"Faster app and smoother trading experience\",\n summary:\n \"Fixed performance issues and improved the user experience. Trading is now smoother and the app responds faster when you switch between screens.\",\n highlights: [\n \"Points display cleanly without decimals\",\n \"Withdraw form works smoothly with all networks\",\n \"Trading input fields handle decimals better\",\n \"Price data updates instantly when you return to the app\",\n \"Faster performance on slower connections\",\n ],\n packages: [\n \"kodiak-orderly-trading-leaderboard\",\n \"kodiak-orderly-ui-transfer\",\n \"kodiak-orderly-ui-order-entry\",\n \"kodiak-orderly-hooks\",\n ],\n type: \"improvement\",\n },\n \"2.8.5\": {\n date: \"2025-11-03\",\n title: \"Track your trading points on the leaderboard\",\n summary:\n \"Your all-time trading points are now displayed on the leaderboard. Compete based on the points you earn and see where you rank.\",\n highlights: [\n \"View your all-time points earned\",\n \"See points on desktop leaderboard\",\n \"Switch between Volume, P&L, and Points on mobile\",\n \"Compare your points against other traders\",\n ],\n packages: [\n \"kodiak-orderly-trading-leaderboard\",\n \"kodiak-orderly-ui-scaffold\",\n ],\n type: \"feature\",\n },\n \"2.8.4\": {\n date: \"2025-10-28\",\n title: \"Better mobile trading and Mac support\",\n summary:\n \"Trading on mobile is now easier and faster. Fixed issues on Mac and improved the overall experience across all devices.\",\n highlights: [\n \"Mobile: Right keyboard automatically appears for entering prices\",\n \"Mobile: Quick number entry for order sizes\",\n \"Mac: Fixed trackpad scrolling in dropdowns\",\n \"Know which trading pair you're canceling orders from\",\n \"Easier stop-loss and take-profit management on mobile\",\n ],\n packages: [\n \"kodiak-orderly-ui-transfer\",\n \"kodiak-orderly-ui-order-entry\",\n \"kodiak-orderly-ui-orders\",\n \"kodiak-orderly-ui-positions\",\n \"kodiak-orderly-ui-tpsl\",\n ],\n type: \"improvement\",\n },\n \"2.8.3\": {\n date: \"2025-10-20\",\n title: \"More reliable orders and connections\",\n summary:\n \"Fixed issues with order submission and improved network stability. Your orders now process reliably.\",\n highlights: [\n \"Orders submit without errors\",\n \"Connection stays stable during network changes\",\n \"Faster recovery from connection drops\",\n ],\n packages: [\"kodiak-orderly-core\", \"kodiak-orderly-net\"],\n type: \"bugfix\",\n },\n};\n\n/**\n * Get changeset for a specific version\n * @param version - Version string (e.g., \"2.8.3\")\n * @returns ChangesetEntry or undefined if not found\n */\nexport function getChangesetForVersion(\n version: string = SDK_VERSION,\n): ChangesetEntry | undefined {\n return CHANGESETS[version];\n}\n\n/**\n * Get the latest changeset\n * @returns ChangesetEntry for current SDK_VERSION\n */\nexport function getLatestChangeset(): ChangesetEntry | undefined {\n return getChangesetForVersion(SDK_VERSION);\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/provider/orderlyAppProvider.tsx","../src/hooks/useBootstrap.ts","../src/hooks/useExecutionReport.tsx","../src/hooks/getOrderExecutionReportMsg.ts","../src/hooks/useUILocale.ts","../src/provider/appConfigContext.tsx","../src/provider/appConfigProvider.tsx","../src/provider/appStateProvider.tsx","../src/hooks/useAssetconvertEvent.ts","../src/hooks/useCurrentChainId.ts","../src/hooks/useLinkDevice.ts","../src/hooks/useSettleEvent.ts","../src/hooks/useWalletConnectError.ts","../src/hooks/useWalletEvent.ts","../src/hooks/useWalletStateHandle.ts","../src/provider/appStateContext.tsx","../src/hooks/useDataTap.ts","../src/common/useOrderEntryFormErrorMsg.ts","../src/provider/ErrorBoundary.tsx","../src/hooks/useCanTrade.ts","../src/constants/changesets.ts"],"names":["useTrack","useEffect","OrderStatus","data","jsx","useState","useMemo","useTranslation","toast","useConfig","useLocalStorage","useWalletConnector","useEventEmitter","useRef","capitalizeString","useAccount","useChains","WALLET_KEY","namespace","createContext","useContext","jsxs","i18n","AccountStatusEnum"],"mappings":"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","sourcesContent":["import React, { PropsWithChildren } from \"react\";\nimport { OrderlyConfigProvider, useTrack } from \"@kodiak-finance/orderly-hooks\";\nimport {\n LocaleProvider as UILocaleProvider,\n ModalProvider,\n OrderlyThemeProvider,\n Toaster,\n TooltipProvider,\n} from \"@kodiak-finance/orderly-ui\";\nimport { OrderlyThemeProviderProps } from \"@kodiak-finance/orderly-ui\";\nimport { useBootstrap } from \"../hooks/useBootstrap\";\nimport { useExecutionReport } from \"../hooks/useExecutionReport\";\nimport { useUILocale } from \"../hooks/useUILocale\";\nimport { OrderlyAppConfig } from \"../types\";\nimport { AppConfigProvider } from \"./appConfigProvider\";\nimport { AppStateProvider, AppStateProviderProps } from \"./appStateProvider\";\n\nexport type OrderlyAppProviderProps = PropsWithChildren<\n OrderlyAppConfig & AppStateProviderProps & OrderlyThemeProviderProps\n>;\n\n// Cannot be called outside of Provider because useExecutionReport requires useOrderlyContext.\nconst ExecutionReportListener: React.FC = () => {\n useExecutionReport();\n return null;\n};\n\nconst OrderlyAppProvider: React.FC<OrderlyAppProviderProps> = (props) => {\n const {\n // dateFormatting,\n components,\n appIcons,\n onChainChanged,\n defaultChain,\n widgetConfigs,\n ...configProps\n } = props;\n\n useTrack();\n useBootstrap();\n\n const uiLocale = useUILocale();\n\n return (\n <AppConfigProvider appIcons={appIcons} brokerName={props.brokerName!}>\n <OrderlyThemeProvider\n // dateFormatting={dateFormatting}\n components={components}\n overrides={props.overrides}\n >\n <OrderlyConfigProvider {...configProps}>\n <ExecutionReportListener />\n <AppStateProvider\n onChainChanged={onChainChanged}\n defaultChain={defaultChain}\n restrictedInfo={props.restrictedInfo}\n onRouteChange={props.onRouteChange}\n widgetConfigs={widgetConfigs}\n customAnnouncements={props.customAnnouncements}\n >\n <UILocaleProvider locale={uiLocale}>\n <TooltipProvider delayDuration={300}>\n <ModalProvider>{props.children}</ModalProvider>\n </TooltipProvider>\n </UILocaleProvider>\n </AppStateProvider>\n <Toaster />\n </OrderlyConfigProvider>\n </OrderlyThemeProvider>\n </AppConfigProvider>\n );\n};\n\nif (process.env.NODE_ENV !== \"production\") {\n OrderlyAppProvider.displayName = \"OrderlyAppProvider\";\n}\n\nexport { OrderlyAppProvider };\n","import { useEffect } from \"react\";\n\nexport const useBootstrap = () => {\n useEffect(() => {\n const searchParams = new URLSearchParams(window.location.search);\n const refCode = searchParams.get(\"ref\");\n if (refCode) {\n localStorage.setItem(\"referral_code\", refCode);\n }\n }, []);\n};\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { useEffect, useRef } from \"react\";\nimport {\n useSymbolsInfo,\n useEventEmitter,\n useDebouncedCallback,\n useAudioPlayer,\n useLocalStorage,\n useOrderlyContext,\n} from \"@kodiak-finance/orderly-hooks\";\nimport { OrderStatus } from \"@kodiak-finance/orderly-types\";\nimport { toast } from \"@kodiak-finance/orderly-ui\";\nimport { getOrderExecutionReportMsg } from \"./getOrderExecutionReportMsg\";\n\nexport const ORDERLY_ORDER_SOUND_ALERT_KEY = \"orderly_order_sound_alert\";\n\nexport const useExecutionReport = () => {\n const ee = useEventEmitter();\n\n const symbolsInfo = useSymbolsInfo();\n const symbolsInfoRef = useRef({});\n\n const { notification } = useOrderlyContext();\n\n useEffect(() => {\n symbolsInfoRef.current = symbolsInfo;\n }, [symbolsInfo]);\n\n const src = notification?.orderFilled?.media ?? \"\";\n\n const [soundAutoPlay] = useLocalStorage<boolean>(\n ORDERLY_ORDER_SOUND_ALERT_KEY,\n notification?.orderFilled?.defaultOpen ?? false,\n );\n\n const [audioElement] = useAudioPlayer(src, {\n autoPlay: soundAutoPlay,\n volume: 1,\n });\n\n const handler = useDebouncedCallback((data: any) => {\n const showToast = (data: any) => {\n const { title, msg, status } = getOrderExecutionReportMsg(\n data,\n symbolsInfoRef.current,\n );\n const isFilled =\n status === OrderStatus.FILLED || status === OrderStatus.PARTIAL_FILLED;\n // only show latest msg for same order type\n const orderType = data.algo_type || data.type;\n if (title && msg) {\n toast.success(\n <div>\n {title}\n <br />\n <div className=\"orderly-text-white/[0.54] orderly-text-xs\">\n {msg}\n </div>\n {isFilled && audioElement}\n </div>,\n { id: orderType },\n );\n }\n };\n showToast(data);\n }, 100);\n\n useEffect(() => {\n ee.on(\"orders:changed\", handler);\n return () => {\n ee.off(\"orders:changed\", handler);\n handler.cancel();\n };\n }, [ee, handler]);\n};\n","import { i18n } from \"@kodiak-finance/orderly-i18n\";\nimport { API, OrderStatus, OrderType } from \"@kodiak-finance/orderly-types\";\nimport { AlgoOrderRootType } from \"@kodiak-finance/orderly-types\";\nimport { parseNumber } from \"@kodiak-finance/orderly-ui\";\nimport {\n capitalizeString,\n transSymbolformString,\n} from \"@kodiak-finance/orderly-utils\";\n\nfunction getDisplaySide(side: string) {\n if (side === \"BUY\") {\n return i18n.t(\"common.buy\");\n } else if (side === \"SELL\") {\n return i18n.t(\"common.sell\");\n }\n return capitalizeString(side);\n}\n\ntype AlgoOrderFieldChanges = Partial<\n Record<OrderType, Partial<Record<keyof API.AlgoOrder, boolean>>>\n>;\n\nexport function getOrderExecutionReportMsg(\n data: (API.AlgoOrder | API.Order) & {\n fieldChanges?: AlgoOrderFieldChanges;\n },\n symbolsInfo: any,\n) {\n const { symbol, side, quantity, client_order_id, fieldChanges } = data;\n const total_executed_quantity =\n \"total_executed_quantity\" in data ? data.total_executed_quantity : 0;\n const status = \"status\" in data ? data.status : data.algo_status;\n const getSymbolInfo = symbolsInfo[symbol];\n const base_dp = getSymbolInfo(\"base_dp\");\n const quote_dp = getSymbolInfo(\"quote_dp\");\n const displaySide = getDisplaySide(side);\n const displaySymbol = transSymbolformString(symbol);\n const displayQuantity =\n \"algo_type\" in data && data.algo_type === AlgoOrderRootType.POSITIONAL_TP_SL\n ? i18n.t(\"tpsl.entirePosition\")\n : base_dp === undefined\n ? quantity\n : parseNumber(quantity, { dp: base_dp });\n\n let title = \"\";\n let msg = \"\";\n switch (status) {\n case OrderStatus.NEW:\n const isScaledOrder = client_order_id?.startsWith(\"scaled_\");\n // if client_order_id is scaled order, show the scaled order message\n if (isScaledOrder) {\n title = i18n.t(\"orders.status.scaledSubOrderOpened.toast.title\");\n msg = `${displaySide} ${displaySymbol} ${displayQuantity}`;\n } else {\n title = i18n.t(\"orders.status.opened.toast.title\");\n msg = `${displaySide} ${displaySymbol} ${displayQuantity}`;\n }\n\n break;\n case OrderStatus.FILLED:\n case OrderStatus.PARTIAL_FILLED:\n const displayTotalExecutedQuantity =\n base_dp === undefined\n ? total_executed_quantity\n : parseNumber(total_executed_quantity, { dp: base_dp });\n title = i18n.t(\"orders.status.filled.toast.title\");\n msg = `${displaySide} ${displaySymbol} ${displayTotalExecutedQuantity} / ${displayQuantity}`;\n break;\n case OrderStatus.CANCELLED:\n title = i18n.t(\"orders.status.canceled.toast.title\");\n msg = `${displaySide} ${displaySymbol} ${displayQuantity}`;\n break;\n case OrderStatus.REJECTED:\n title = i18n.t(\"orders.status.rejected.toast.title\");\n msg = `${displaySide} ${displaySymbol} ${displayQuantity}`;\n break;\n case OrderStatus.REPLACED:\n const { algo_type, activated_price } = data as API.AlgoOrder;\n if (algo_type === AlgoOrderRootType.TRAILING_STOP) {\n const fieldChange =\n fieldChanges?.[AlgoOrderRootType.TRAILING_STOP] || {};\n // when trailing stop order is activated, and extreme_price will also changed\n if (\n fieldChange.is_activated &&\n fieldChange.extreme_price &&\n activated_price\n ) {\n title = i18n.t(\"orders.trailingStop.activated\");\n msg = `${displaySymbol} @${activated_price}`;\n } else if (fieldChange.extreme_price) {\n // if extreme_price is changed, skip show the message\n title = \"\";\n msg = \"\";\n }\n } else {\n title = i18n.t(\"orders.status.replaced.toast.title\");\n msg = `${side} ${displaySymbol} ${total_executed_quantity} / ${displayQuantity}`;\n }\n\n break;\n default:\n break;\n }\n\n return {\n title,\n msg,\n status,\n };\n}\n","import { useMemo } from \"react\";\nimport {\n useTranslation,\n useLocaleCode,\n LocaleEnum,\n} from \"@kodiak-finance/orderly-i18n\";\nimport { Locale } from \"@kodiak-finance/orderly-ui\";\nimport { enUS, zhCN, ja, es, ko, vi, de, fr, nl } from \"date-fns/locale\";\n\nexport function useUILocale() {\n const { t } = useTranslation();\n const localeCode = useLocaleCode();\n\n return useMemo<Locale>(() => {\n const calendarLocale = {\n [LocaleEnum.en]: enUS,\n [LocaleEnum.zh]: zhCN,\n // [LocaleEnum.ja]: ja,\n // [LocaleEnum.es]: es,\n // [LocaleEnum.ko]: ko,\n // [LocaleEnum.vi]: vi,\n // [LocaleEnum.de]: de,\n // [LocaleEnum.fr]: fr,\n // [LocaleEnum.nl]: nl,\n };\n return {\n locale: localeCode,\n dialog: {\n ok: t(\"common.ok\"),\n cancel: t(\"common.cancel\"),\n },\n modal: {\n confirm: t(\"common.confirm\"),\n cancel: t(\"common.cancel\"),\n },\n pagination: {\n morePages: t(\"ui.pagination.morePages\"),\n rowsPerPage: t(\"ui.pagination.rowsPerPage\"),\n },\n picker: {\n selectDate: t(\"ui.picker.selectDate\"),\n dayPicker: calendarLocale[localeCode as keyof typeof calendarLocale],\n },\n empty: {\n description: t(\"ui.empty.description\"),\n },\n } as const;\n }, [t, localeCode]);\n}\n","import { createContext, useContext } from \"react\";\nimport { AppLogos } from \"../types\";\n\nexport type ThemeContextState = {\n appIcons?: AppLogos;\n brokerName: string;\n};\n\nexport const AppConfigContext = createContext({} as ThemeContextState);\n\nexport const useAppConfig = () => {\n return useContext(AppConfigContext);\n};\n","import { FC, PropsWithChildren } from \"react\";\nimport { AppLogos } from \"../types\";\nimport { AppConfigContext } from \"./appConfigContext\";\n\nexport type ThemeContextState = {\n appIcons?: AppLogos;\n brokerName: string;\n};\n\nexport const AppConfigProvider: FC<\n PropsWithChildren<{ appIcons?: AppLogos; brokerName: string }>\n> = (props) => {\n return (\n <AppConfigContext.Provider value={props}>\n {props.children}\n </AppConfigContext.Provider>\n );\n};\n","import { FC, PropsWithChildren, useState, useMemo } from \"react\";\nimport {\n RestrictedInfoOptions,\n useRestrictedInfo,\n useTrackingInstance,\n} from \"@kodiak-finance/orderly-hooks\";\nimport { useAssetconvertEvent } from \"../hooks/useAssetconvertEvent\";\nimport { DefaultChain, useCurrentChainId } from \"../hooks/useCurrentChainId\";\nimport { useLinkDevice } from \"../hooks/useLinkDevice\";\nimport { useSettleEvent } from \"../hooks/useSettleEvent\";\nimport { useWalletConnectError } from \"../hooks/useWalletConnectError\";\nimport { useWalletEvent } from \"../hooks/useWalletEvent\";\nimport { useWalletStateHandle } from \"../hooks/useWalletStateHandle\";\nimport { AppContextState, AppStateContext } from \"./appStateContext\";\n\nexport type RouteOption = {\n href: \"/portfolio\" | \"/portfolio/history\";\n name: string;\n};\n\nexport type AppStateProviderProps = {\n defaultChain?: DefaultChain;\n restrictedInfo?: RestrictedInfoOptions;\n} & Pick<\n AppContextState,\n \"onChainChanged\" | \"onRouteChange\" | \"widgetConfigs\" | \"customAnnouncements\"\n>;\n\nexport const AppStateProvider: FC<PropsWithChildren<AppStateProviderProps>> = (\n props,\n) => {\n const [showAnnouncement, setShowAnnouncement] = useState(false);\n const [currentChainId, setCurrentChainId] = useCurrentChainId(\n props.defaultChain,\n );\n useLinkDevice();\n useTrackingInstance();\n\n const { connectWallet, wrongNetwork } = useWalletStateHandle({\n // onChainChanged: props.onChainChanged,\n currentChainId,\n });\n\n useWalletEvent();\n useSettleEvent();\n useAssetconvertEvent();\n useWalletConnectError();\n\n const restrictedInfo = useRestrictedInfo(props.restrictedInfo);\n\n const disabledConnect = restrictedInfo.restrictedOpen;\n\n const memoizedValue = useMemo<AppContextState>(\n () => ({\n connectWallet,\n wrongNetwork,\n currentChainId,\n setCurrentChainId,\n onChainChanged: props.onChainChanged,\n disabledConnect,\n restrictedInfo,\n showAnnouncement,\n setShowAnnouncement,\n onRouteChange: props.onRouteChange,\n widgetConfigs: props.widgetConfigs,\n customAnnouncements: props.customAnnouncements,\n }),\n [\n connectWallet,\n currentChainId,\n disabledConnect,\n props.onChainChanged,\n restrictedInfo,\n setCurrentChainId,\n showAnnouncement,\n wrongNetwork,\n props.onRouteChange,\n props.widgetConfigs,\n props.customAnnouncements,\n ],\n );\n\n return (\n <AppStateContext.Provider value={memoizedValue}>\n {props.children}\n </AppStateContext.Provider>\n );\n};\n","import { useEffect } from \"react\";\nimport { useWS } from \"@kodiak-finance/orderly-hooks\";\nimport { useTranslation } from \"@kodiak-finance/orderly-i18n\";\nimport { toast } from \"@kodiak-finance/orderly-ui\";\nimport { getTimestamp } from \"@kodiak-finance/orderly-utils\";\n\nexport const useAssetconvertEvent = () => {\n const ws = useWS();\n const { t } = useTranslation();\n useEffect(() => {\n const unsubscribe = ws.privateSubscribe(\n {\n id: \"assetconvert\",\n event: \"subscribe\",\n topic: \"assetconvert\",\n ts: getTimestamp(),\n },\n {\n onMessage(data) {\n if (data.convertId) {\n toast.success(t(\"transfer.convert.completed\"));\n }\n },\n },\n );\n return () => unsubscribe();\n }, []);\n};\n","import { useEffect, useState } from \"react\";\nimport {\n Chains,\n useChains,\n useConfig,\n useStorageChain,\n useWalletConnector,\n} from \"@kodiak-finance/orderly-hooks\";\nimport { Chain, NetworkId } from \"@kodiak-finance/orderly-types\";\ntype ReturnChain = Pick<Chain, \"id\"> & Partial<Omit<Chain, \"id\">>;\n\nexport type DefaultChain =\n | {\n mainnet?: ReturnChain;\n testnet?: ReturnChain;\n }\n | ((networkId: NetworkId, chains: Chains) => ReturnChain)\n | undefined;\n\nexport function useCurrentChainId(defaultChain?: DefaultChain) {\n const { storageChain, setStorageChain } = useStorageChain();\n const [currentChainId, setCurrentChainId] = useState<number | undefined>();\n\n const [chains] = useChains();\n const networkId = useConfig(\"networkId\") as NetworkId;\n\n const { connectedChain } = useWalletConnector();\n\n useEffect(() => {\n if (connectedChain) {\n setCurrentChainId?.(\n typeof connectedChain.id === \"number\"\n ? connectedChain.id\n : parseInt(connectedChain.id)\n );\n } else {\n if (!!currentChainId) return;\n let fallbackChain: Partial<Chain> | undefined;\n\n const firstChain =\n networkId === \"mainnet\" ? chains.mainnet?.[0] : chains.testnet?.[0];\n\n if (typeof defaultChain === \"function\") {\n fallbackChain = defaultChain(networkId, chains);\n } else if (typeof defaultChain === \"object\") {\n fallbackChain =\n networkId === \"mainnet\"\n ? defaultChain?.mainnet\n : defaultChain?.testnet;\n }\n\n const chainId = fallbackChain?.id || firstChain?.network_infos?.chain_id;\n if (!chainId) return;\n\n if (storageChain) {\n setCurrentChainId?.(storageChain.chainId);\n } else {\n setStorageChain(chainId);\n setCurrentChainId?.(chainId);\n \n }\n }\n }, [\n connectedChain,\n chains,\n currentChainId,\n networkId,\n setCurrentChainId,\n defaultChain,\n ]);\n\n return [currentChainId, setCurrentChainId] as const;\n}\n","import { useEffect } from \"react\";\nimport {\n parseJSON,\n useAccount,\n useConfig,\n useLocalStorage,\n useWalletConnector,\n} from \"@kodiak-finance/orderly-hooks\";\nimport { ChainNamespace } from \"@kodiak-finance/orderly-types\";\nimport { useCanLinkDevice } from \"@kodiak-finance/orderly-ui\";\n\ntype DecodedData = {\n /** secret key */\n k: string;\n /* timestamp */\n t: number;\n /** address */\n a: string;\n /** chain id */\n i: number;\n /** chain namespace */\n n: ChainNamespace;\n};\n\ntype LinkDeviceStorage = { chainId: number; chainNamespace: ChainNamespace };\n\nconst WALLET_KEY = \"orderly:wallet-info\";\n\nexport function useLinkDevice() {\n const { connectedChain, disconnect } = useWalletConnector();\n const [_, setLinkDeviceStorage] = useLocalStorage(\n \"orderly_link_device\",\n {} as LinkDeviceStorage,\n );\n\n const { account } = useAccount();\n const canLinkDevice = useCanLinkDevice();\n const configStore = useConfig();\n\n const onDisconnect = async (label: string) => {\n // The cache must be cleared first, otherwise it will be auto connect wallet\n localStorage.removeItem(WALLET_KEY);\n await account.disconnect();\n await disconnect({ label });\n };\n\n useEffect(() => {\n const linkData = getLinkDeviceData();\n const walletInfo = JSON.parse(localStorage.getItem(WALLET_KEY) ?? \"{}\");\n if (linkData && walletInfo) {\n // clear connect data when link device\n onDisconnect(walletInfo.label);\n }\n }, []);\n\n const linkDevice = async () => {\n const linkData = getLinkDeviceData();\n if (!linkData) return;\n\n const { address, secretKey, chainId, chainNamespace } = linkData;\n const isSuccess = await account.importOrderlyKey({\n address,\n secretKey,\n chainNamespace,\n });\n if (!isSuccess) return;\n setLinkDeviceStorage({\n chainId,\n chainNamespace,\n });\n\n const url = new URL(window.location.href);\n url.searchParams.delete(\"link\");\n // use set instead of append, because the param possibly in the url\n url.searchParams.set(\"utm_medium\", \"qrcode\");\n const decodedUrl = decodeURIComponent(url.toString());\n history.replaceState(null, \"\", decodedUrl);\n };\n\n useEffect(() => {\n if (canLinkDevice && !connectedChain) {\n linkDevice();\n }\n }, [account, connectedChain, canLinkDevice]);\n\n const autoLinkDevice = async () => {\n // Only auto-link if device linking data exists in storage AND it's actually a linkable device\n const { chainId, chainNamespace } = getLinkDeviceStorage() || {};\n if (canLinkDevice && !connectedChain && chainId && chainNamespace) {\n const address = account.keyStore.getAddress();\n const orderlyKey = account.keyStore.getOrderlyKey();\n const accountId = account.keyStore.getAccountId(address!);\n const res = await account.checkOrderlyKey(\n address!,\n orderlyKey!,\n accountId!,\n );\n if (res) {\n configStore.set(\"chainNamespace\", chainNamespace);\n }\n }\n };\n\n // persist status when refresh page\n useEffect(() => {\n autoLinkDevice();\n }, [account, canLinkDevice, connectedChain]);\n\n return { linkDevice };\n}\n\nfunction getLinkDeviceStorage() {\n try {\n const linkDeviceStorage = localStorage.getItem(\"orderly_link_device\");\n const json = linkDeviceStorage ? parseJSON(linkDeviceStorage) : null;\n return json as LinkDeviceStorage;\n } catch (err) {\n console.error(\"getLinkDeviceStorage\", err);\n }\n}\n\nexport function getLinkDeviceData() {\n const url = new URL(window.location.href);\n const link = url.searchParams.get(\"link\");\n\n if (!link) return;\n\n const {\n a: address,\n k: secretKey,\n i: chainId,\n n: chainNamespace,\n } = decodeBase64(link) || {};\n\n if (address && secretKey && chainId && chainNamespace) {\n return {\n address,\n secretKey,\n chainId,\n chainNamespace,\n };\n }\n}\n\nfunction decodeBase64(base64: string) {\n try {\n const data = JSON.parse(window.atob(base64)) as DecodedData;\n console.log(\"decodeBase64\", data);\n const currentTime = Math.floor(Date.now() / 1000);\n const expiredTime = data.t;\n\n if (!expiredTime || currentTime > expiredTime) {\n console.error(\"Orderly key has expired.\");\n return;\n }\n\n return data;\n } catch (error) {\n console.error(\"Invalid or expired orderly key.\");\n }\n}\n","import { useSettleSubscription } from \"@kodiak-finance/orderly-hooks\";\nimport { toast } from \"@kodiak-finance/orderly-ui\";\nimport { useTranslation } from \"@kodiak-finance/orderly-i18n\";\n\nexport function useSettleEvent() {\n const { t } = useTranslation();\n\n useSettleSubscription({\n onMessage: (data: any) => {\n const { status } = data;\n\n // console.log(\"settle ws: \", data);\n\n switch (status) {\n case \"COMPLETED\":\n toast.success(t(\"settle.settlement.completed\"));\n break;\n case \"FAILED\":\n toast.error(t(\"settle.settlement.failed\"));\n break;\n default:\n break;\n }\n },\n });\n}\n","import { useEventEmitter } from \"@kodiak-finance/orderly-hooks\";\nimport { useEffect } from \"react\";\nimport { modal, toast } from \"@kodiak-finance/orderly-ui\";\nimport { LedgerWalletKey } from \"@kodiak-finance/orderly-types\";\nimport { useStorageLedgerAddress } from \"@kodiak-finance/orderly-hooks\";\nimport { useTranslation } from \"@kodiak-finance/orderly-i18n\";\n\nexport function useWalletConnectError() {\n const { t } = useTranslation();\n const ee = useEventEmitter();\n const { setLedgerAddress } = useStorageLedgerAddress();\n\n useEffect(() => {\n ee.on(\"wallet:connect-error\", (data) => {\n toast.error(data.message);\n });\n ee.on(\n \"wallet:sign-message-with-ledger-error\",\n (data: { userAddress: string; message: string }) => {\n window.setTimeout(() => {\n modal\n .confirm({\n title: t(\"connector.ledger.signMessageFailed\"),\n content: t(\"connector.ledger.signMessageFailed.description\"),\n size: \"sm\",\n onOk: async () => {\n console.log(\"-- use ledger\", true);\n setLedgerAddress(data.userAddress);\n\n return Promise.resolve();\n },\n okLabel: t(\"common.ok\"),\n onCancel: async () => {\n toast.error(data.message);\n return Promise.resolve();\n },\n cancelLabel: t(\"common.no\"),\n })\n .then((res) => {\n console.log(\"-- dialog res\", res);\n });\n });\n }\n );\n }, [ee, t]);\n\n return {};\n}\n","import { useRef } from \"react\";\nimport {\n useEventEmitter,\n useSessionStorage,\n useWalletSubscription,\n} from \"@kodiak-finance/orderly-hooks\";\nimport { useTranslation } from \"@kodiak-finance/orderly-i18n\";\nimport { toast } from \"@kodiak-finance/orderly-ui\";\nimport { capitalizeString } from \"@kodiak-finance/orderly-utils\";\n\nexport function useWalletEvent() {\n const { t } = useTranslation();\n const ee = useEventEmitter();\n\n const recordRef = useRef<Record<number, boolean>>({});\n\n const [record, setRecord] = useSessionStorage(\n \"orderly_wallet_change_id\",\n {} as Record<number, boolean>,\n );\n\n recordRef.current = record;\n\n useWalletSubscription({\n onMessage: (data: any) => {\n console.log(\"wallet:changed\", data);\n const { id, side, transStatus } = data;\n let showToast = true;\n\n // DEPOSIT and WITHDRAW will push twice COMPLETED and FAILED event\n if (\n [\"DEPOSIT\", \"WITHDRAW\"].includes(side) &&\n [\"COMPLETED\", \"FAILED\"].includes(transStatus)\n ) {\n const isPushed = !!recordRef.current[id];\n if (!isPushed) {\n recordRef.current[id] = true;\n setRecord((prev: Record<number, boolean>) => ({\n ...prev,\n [id]: true,\n }));\n }\n showToast = !isPushed;\n }\n\n if (transStatus === \"COMPLETED\" && showToast) {\n let msg = `${capitalizeString(side)} completed`;\n\n if (side === \"DEPOSIT\") {\n msg = t(\"transfer.deposit.completed\");\n } else if (side === \"WITHDRAW\") {\n msg = t(\"transfer.withdraw.completed\");\n }\n\n toast.success(msg);\n } else if (transStatus === \"FAILED\" && showToast) {\n let msg = `${capitalizeString(side)} failed`;\n\n if (side === \"DEPOSIT\") {\n msg = t(\"transfer.deposit.failed\");\n } else if (side === \"WITHDRAW\") {\n msg = t(\"transfer.withdraw.failed\");\n }\n toast.error(msg);\n }\n\n ee.emit(\"wallet:changed\", data);\n },\n });\n}\n","import { useEffect, useMemo, useRef, useState } from \"react\";\nimport {\n useConfig,\n useEventEmitter,\n useTrack,\n WalletState,\n} from \"@kodiak-finance/orderly-hooks\";\nimport {\n useAccount,\n useChains,\n useKeyStore,\n useWalletConnector,\n} from \"@kodiak-finance/orderly-hooks\";\nimport {\n AccountStatusEnum,\n SDKError,\n ChainNamespace,\n NetworkId,\n TrackerEventName,\n ABSTRACT_CHAIN_ID_MAP,\n} from \"@kodiak-finance/orderly-types\";\nimport {\n parseChainIdToNumber,\n praseChainIdToNumber,\n windowGuard,\n} from \"@kodiak-finance/orderly-utils\";\nimport { getLinkDeviceData } from \"./useLinkDevice\";\n\nconst WALLET_KEY = \"orderly:wallet-info\";\nconst CHAIN_NAMESPACE = \"orderly:chain-namespace\";\n\nexport const useWalletStateHandle = (options: {\n // onChainChanged?: (chainId: number, isTestnet: boolean) => void;\n currentChainId?: number;\n}) => {\n const {\n wallet: connectedWallet,\n connect,\n connectedChain,\n disconnect,\n namespace,\n } = useWalletConnector();\n //\n // console.log(\"🔗 wallet state handle\", {\n // connectedWallet,\n // connectedChain,\n // namespace,\n // });\n\n if (typeof connect !== \"function\") {\n throw new SDKError(\"Please provide a wallet connector provider\");\n }\n\n const ee = useEventEmitter();\n const isManualConnect = useRef<boolean>(false);\n const brokerId = useConfig(\"brokerId\");\n const { account, state: accountState } = useAccount();\n const keyStore = useKeyStore();\n const networkId = useConfig(\"networkId\") as NetworkId;\n const [chains, { checkChainSupport }] = useChains();\n\n const [unsupported, setUnsupported] = useState(false);\n const { track, setTrackUserId } = useTrack();\n\n // current connected wallet address\n const currentWalletAddress = useMemo<string | undefined>(() => {\n return connectedWallet?.accounts?.[0]?.address;\n }, [connectedWallet]);\n\n // current connected chain id\n const currentChain = useMemo<\n { id: number; namespace: string } | undefined\n >(() => {\n const id = connectedWallet?.chains?.[0]?.id;\n const namespace = connectedWallet?.chains?.[0]?.namespace as string;\n if (typeof id === \"undefined\") return undefined;\n return {\n id: parseChainIdToNumber(id),\n namespace,\n };\n }, [connectedWallet]);\n\n useEffect(() => {\n if (\n accountState.status >= AccountStatusEnum.EnableTrading &&\n account.accountId\n ) {\n setTrackUserId(account.accountId!);\n }\n }, [account, accountState]);\n\n useEffect(() => {\n if (!connectedChain) {\n setUnsupported(false);\n return;\n }\n\n let isSupported = checkChainSupport(\n connectedChain.id,\n networkId,\n // networkId === \"testnet\" ? chains.testnet : chains.mainnet\n );\n if (\n ABSTRACT_CHAIN_ID_MAP.has(parseInt(connectedChain.id as string)) &&\n connectedWallet?.label !== \"AGW\"\n ) {\n isSupported = false;\n }\n\n setUnsupported(!isSupported);\n }, [connectedChain, chains, checkChainSupport, networkId, connectedWallet]);\n\n useEffect(() => {\n // if (unsupported) return;\n\n windowGuard(() => {\n const localAddress = keyStore.getAddress();\n const walletInfo = JSON.parse(localStorage.getItem(WALLET_KEY) ?? \"{}\");\n\n /**\n * if locale address is exist, restore account state\n */\n if (connectedChain?.namespace === ChainNamespace.solana) {\n return;\n }\n if (\n localAddress &&\n account.address !== localAddress &&\n walletInfo.label\n ) {\n connect({\n autoSelect: {\n label: walletInfo.label,\n disableModals: true,\n },\n }).then(\n (res) => {\n console.log(\"silent connect wallet successes\", res);\n },\n (error) => console.log(\"connect error\", error),\n );\n }\n });\n }, [connectedWallet, account.address]);\n\n /**\n * handle wallet connection\n */\n useEffect(() => {\n if (\n connectedWallet === null &&\n accountState.status > AccountStatusEnum.NotConnected &&\n !accountState.validating\n ) {\n account.disconnect();\n return;\n }\n\n if (unsupported || !connectedChain) return;\n if (isManualConnect.current) return;\n\n const linkData = getLinkDeviceData();\n\n // updateAccount(currentWalletAddress!, connectedWallet!, currentChainId!);\n /**\n * switch account\n */\n if (\n !!currentWalletAddress &&\n currentWalletAddress !== account.address &&\n !linkData\n ) {\n account.setAddress(currentWalletAddress, {\n provider: connectedWallet?.provider,\n chain: {\n id: praseChainIdToNumber(currentChain!.id),\n namespace: currentChain!.namespace.toUpperCase() as ChainNamespace,\n },\n wallet: {\n name: connectedWallet?.label ?? \"\",\n },\n additionalInfo: connectedWallet?.additionalInfo ?? {},\n });\n track(TrackerEventName.walletConnect, {\n wallet: connectedWallet?.label ?? \"\",\n network: currentChain!.namespace.toUpperCase() as ChainNamespace,\n });\n\n // save wallet connector info to local storage\n windowGuard(() => {\n localStorage.setItem(\n WALLET_KEY,\n JSON.stringify({\n label: connectedWallet?.label ?? \"\",\n }),\n );\n });\n }\n\n /**\n * switch chainId\n */\n if (currentChain?.id !== account.chainId) {\n account.switchChainId(currentChain?.id!);\n\n // emit chain changed event\n // options.onChainChanged?.(currentChainId!, isTestnet(networkId));\n }\n }, [\n connectedWallet,\n connectedChain,\n currentWalletAddress,\n currentChain,\n account.address,\n accountState,\n account.chainId,\n unsupported,\n ]);\n\n /**\n * User manually connects to wallet\n */\n const connectWallet = async (): Promise<{\n wallet?: WalletState;\n status?: AccountStatusEnum;\n wrongNetwork?: boolean;\n } | null> => {\n isManualConnect.current = true;\n // const walletState = await connect();\n\n return connect({ chainId: options.currentChainId })\n .then(async (walletState) => {\n if (\n Array.isArray(walletState) &&\n walletState.length > 0 &&\n walletState[0] &&\n walletState[0].accounts.length > 0\n ) {\n const wallet = walletState[0];\n const chainId = praseChainIdToNumber(wallet.chains[0].id);\n\n if (!checkChainSupport(chainId, networkId)) {\n return {\n wrongNetwork: true,\n };\n }\n //\n if (!account) {\n throw new Error(\"account is not initialized\");\n }\n // clear link device data when connect wallt\n if (\n accountState.status ===\n AccountStatusEnum.EnableTradingWithoutConnected\n ) {\n localStorage.removeItem(\"orderly_link_device\");\n await account.disconnect();\n }\n\n const status = await account.setAddress(wallet.accounts[0].address, {\n provider: wallet.provider,\n chain: {\n id: praseChainIdToNumber(wallet.chains[0].id),\n namespace:\n wallet.chains[0].namespace.toUpperCase() as ChainNamespace,\n },\n wallet: {\n name: wallet.label,\n },\n // label: ,\n });\n track(TrackerEventName.walletConnect, {\n wallet: wallet.label,\n network: wallet.chains[0].namespace.toUpperCase() as ChainNamespace,\n });\n console.log(\"-- xxxxxx status\", status);\n\n return { wallet, status, wrongNetwork: false };\n }\n\n return null;\n })\n .finally(() => {\n isManualConnect.current = false;\n });\n };\n\n return {\n connectWallet,\n wrongNetwork: unsupported,\n };\n};\n","import React, { createContext, useContext } from \"react\";\nimport { RestrictedInfoReturns } from \"@kodiak-finance/orderly-hooks\";\nimport { API } from \"@kodiak-finance/orderly-types\";\nimport { useWalletStateHandle } from \"../hooks/useWalletStateHandle\";\n\nexport type RouteOption = {\n href: \"/portfolio\" | \"/portfolio/history\";\n name: string;\n};\n\nexport type WidgetConfigs = {\n scanQRCode?: {\n onSuccess?: (url: string) => void;\n };\n subAccount?: {\n /** @deprecated The number of custom sub-accounts needs to be configured in sync with the backend. If you’re not sure about it, please don’t set this value. */\n maxSubAccountCount: number;\n };\n};\n\nexport type AppContextState = {\n connectWallet: ReturnType<typeof useWalletStateHandle>[\"connectWallet\"];\n /**\n * Whether the current network is not supported\n */\n wrongNetwork: boolean;\n disabledConnect: boolean;\n currentChainId: number | undefined;\n setCurrentChainId: (chainId: number | undefined) => void;\n onChainChanged?: (\n chainId: number,\n state: { isTestnet: boolean; isWalletConnected: boolean },\n ) => void;\n // networkStatus: ReturnType<typeof useAppState>[\"networkStatus\"];\n restrictedInfo: RestrictedInfoReturns;\n showAnnouncement: boolean;\n setShowAnnouncement: (show: boolean) => void;\n onRouteChange?: (option: RouteOption) => void;\n widgetConfigs?: WidgetConfigs;\n /** Custom announcements to merge with API announcements */\n customAnnouncements?: API.AnnouncementRow[];\n};\n\nexport const AppStateContext = createContext<AppContextState>({\n setCurrentChainId: (chainId?: number) => {},\n restrictedInfo: {},\n setShowAnnouncement: (show: boolean) => {},\n} as AppContextState);\n\nexport const useAppContext = () => {\n return useContext(AppStateContext);\n};\n","import { useAccount } from \"@kodiak-finance/orderly-hooks\";\nimport { AccountStatusEnum } from \"@kodiak-finance/orderly-types\";\nimport { useAppContext } from \"../provider/appStateContext\";\n\nexport const useDataTap = <T = any>(\n data: T,\n options?: {\n skip?: false;\n fallbackData?: T;\n accountStatus?: AccountStatusEnum;\n },\n): T | null => {\n const { wrongNetwork, disabledConnect } = useAppContext();\n const { state } = useAccount();\n /**\n * ignore\n */\n if (options?.skip) {\n return data;\n }\n\n if (wrongNetwork || disabledConnect) {\n return typeof options?.fallbackData !== \"undefined\"\n ? options.fallbackData\n : null;\n }\n\n if (typeof options?.accountStatus !== \"undefined\") {\n if (state.status < options.accountStatus) {\n return typeof options?.fallbackData !== \"undefined\"\n ? options.fallbackData\n : null;\n }\n }\n\n // return wrongNetwork\n // ? typeof options?.fallbackData !== \"undefined\"\n // ? options.fallbackData\n // : null\n // : data;\n //\n return data;\n};\n","import { useCallback } from \"react\";\nimport {\n ERROR_MSG_CODES,\n OrderValidationItem,\n OrderValidationResult,\n} from \"@kodiak-finance/orderly-hooks\";\nimport { useTranslation } from \"@kodiak-finance/orderly-i18n\";\n\ntype Keys = keyof OrderValidationResult;\ntype ErrorType = Partial<OrderValidationItem[\"type\"]>;\n\nexport function useOrderEntryFormErrorMsg(\n errors: OrderValidationResult | null,\n) {\n const { t } = useTranslation();\n\n const getMessage = (\n key: Keys,\n type: ErrorType,\n params: {\n value?: string | number;\n min?: string | number;\n max?: string | number;\n },\n ) => {\n const { value, min, max } = params || {};\n const map: Partial<Record<Keys, Partial<Record<ErrorType, string>>>> = {\n quantity: {\n required: t(\"orderEntry.orderQuantity.error.required\"),\n min: t(\"orderEntry.orderQuantity.error.min\", { value }),\n max: t(\"orderEntry.orderQuantity.error.max\", { value }),\n },\n order_quantity: {\n required: t(\"orderEntry.orderQuantity.error.required\"),\n min: t(\"orderEntry.orderQuantity.error.min\", { value }),\n max: t(\"orderEntry.orderQuantity.error.max\", { value }),\n },\n order_price: {\n required: t(\"orderEntry.orderPrice.error.required\"),\n min: t(\"orderEntry.orderPrice.error.min\", { value }),\n max: t(\"orderEntry.orderPrice.error.max\", { value }),\n },\n trigger_price: {\n required: t(\"orderEntry.triggerPrice.error.required\"),\n min: t(\"orderEntry.triggerPrice.error.min\", { value }),\n max: t(\"orderEntry.triggerPrice.error.max\", { value }),\n },\n tp_trigger_price: {\n required: t(\"tpsl.validate.tpTriggerPrice.error.required\"),\n min: t(\"orderEntry.tpTriggerPrice.error.min\", { value }),\n max: t(\"orderEntry.tpTriggerPrice.error.max\", { value }),\n priceErrorMin: t(\"tpsl.validate.tpTriggerPrice.error.priceErrorMin\"),\n priceErrorMax: t(\"tpsl.validate.tpTriggerPrice.error.priceErrorMax\"),\n },\n sl_trigger_price: {\n required: t(\"tpsl.validate.slTriggerPrice.error.required\"),\n min: t(\"orderEntry.slTriggerPrice.error.min\", { value }),\n max: t(\"orderEntry.slTriggerPrice.error.max\", { value }),\n priceErrorMin: t(\"tpsl.validate.slTriggerPrice.error.priceErrorMin\"),\n priceErrorMax: t(\"tpsl.validate.slTriggerPrice.error.priceErrorMax\"),\n [ERROR_MSG_CODES.SL_PRICE_WARNING]: t(\n \"tpsl.validate.slTriggerPrice.warning.closeToLiqPrice\",\n ),\n [ERROR_MSG_CODES.SL_PRICE_ERROR]: t(\n \"tpsl.validate.slTriggerPrice.error.crossLiqPrice\",\n ),\n },\n tp_order_price: {\n required: t(\"tpsl.validate.tpOrderPrice.error.required\"),\n min: t(\"tpsl.validate.tpOrderPrice.error.min\", { value }),\n max: t(\"tpsl.validate.tpOrderPrice.error.max\", { value }),\n },\n sl_order_price: {\n required: t(\"tpsl.validate.slOrderPrice.error.required\"),\n min: t(\"tpsl.validate.slOrderPrice.error.min\", { value }),\n max: t(\"tpsl.validate.slOrderPrice.error.max\", { value }),\n },\n total: {\n min: t(\"orderEntry.total.error.min\", { value }),\n },\n // not show form input tooltip\n // slippage: {\n // max: t(\"orderEntry.slippage.error.max\"),\n // },\n start_price: {\n required: t(\"orderEntry.startPrice.error.required\"),\n min: t(\"orderEntry.startPrice.error.min\", { value }),\n max: t(\"orderEntry.startPrice.error.max\", { value }),\n },\n end_price: {\n required: t(\"orderEntry.endPrice.error.required\"),\n min: t(\"orderEntry.endPrice.error.min\", { value }),\n max: t(\"orderEntry.endPrice.error.max\", { value }),\n },\n total_orders: {\n required: t(\"orderEntry.totalOrders.error.required\"),\n range: t(\"orderEntry.totalOrders.error.range\"),\n },\n skew: {\n required: t(\"orderEntry.skew.error.required\"),\n min: t(\"orderEntry.skew.error.min\", { value }),\n max: t(\"orderEntry.skew.error.max\", { value }),\n },\n activated_price: {\n min: t(\"orderEntry.triggerPrice.error.min\", { value }),\n max: t(\"orderEntry.triggerPrice.error.max\", { value }),\n },\n callback_value: {\n required: t(\"orderEntry.callbackValue.error.required\"),\n min: t(\"orderEntry.callbackValue.error.min\", { value }),\n range: t(\"orderEntry.callbackValue.error.range\", {\n min,\n max,\n }),\n },\n callback_rate: {\n required: t(\"orderEntry.callbackRate.error.required\"),\n range: t(\"orderEntry.callbackRate.error.range\", {\n min,\n max,\n }),\n },\n };\n\n return map[key]?.[type] || \"\";\n };\n\n const getErrorMsg = useCallback(\n (key: Keys, customValue?: string) => {\n const { type, value, min, max } = errors?.[key] || ({} as any);\n if (type) {\n return getMessage(key, type, { value: customValue || value, min, max });\n }\n return \"\";\n },\n [errors],\n );\n\n return {\n getErrorMsg,\n };\n}\n","import { PropsWithChildren, Component, ErrorInfo, ReactNode } from \"react\";\nimport { i18n } from \"@kodiak-finance/orderly-i18n\";\nimport { Button, cn, Flex, Text } from \"@kodiak-finance/orderly-ui\";\n\ntype ErrorBoundaryState = {\n hasError: boolean;\n error?: Error;\n errorInfo?: ErrorInfo;\n};\n\ntype ErrorBoundaryProps = PropsWithChildren<{\n className?: string;\n onError?: (error: Error, errorInfo: ErrorInfo) => void;\n icon?: ReactNode;\n title?: string;\n description?: string;\n refreshButtonText?: string;\n onRefresh?: () => void;\n}>;\n\nexport class ErrorBoundary extends Component<\n ErrorBoundaryProps,\n ErrorBoundaryState\n> {\n constructor(props: PropsWithChildren) {\n super(props);\n this.state = { hasError: false };\n }\n\n static getDerivedStateFromError(error: Error): ErrorBoundaryState {\n return { hasError: true, error };\n }\n\n componentDidCatch(error: Error, errorInfo: ErrorInfo) {\n this.setState({\n error,\n errorInfo,\n });\n\n // Log error to console in development\n if (process.env.NODE_ENV === \"development\") {\n console.error(\"ErrorBoundary caught an error:\", error, errorInfo);\n }\n\n this.props.onError?.(error, errorInfo);\n\n // You can also log the error to an error reporting service here\n // Example: errorReportingService.logError(error, errorInfo);\n }\n\n render() {\n if (this.state.hasError) {\n return (\n <Flex\n direction=\"column\"\n width=\"100%\"\n itemAlign=\"center\"\n justify=\"center\"\n className={cn(\"oui-h-screen oui-px-[10%]\", this.props.className)}\n >\n {this.props.icon || <Icon />}\n <Text\n className={cn(\n \"oui-mt-10\",\n \"oui-text-[32px] oui-leading-[40px]\",\n \"md:oui-text-[48px] md:oui-leading-[56px]\",\n )}\n intensity={80}\n weight=\"bold\"\n >\n {this.props.title || i18n.t(\"errorBoundary.title\")}\n </Text>\n <Text\n className={cn(\n \"oui-mt-2\",\n \"oui-text-[16px] oui-leading-[24px]\",\n \"md:oui-text-[20px] md:oui-leading-[28px]\",\n \"oui-text-center\",\n )}\n weight=\"semibold\"\n intensity={36}\n >\n {this.props.description || i18n.t(\"errorBoundary.description\")}\n </Text>\n <Button\n onClick={() => {\n if (typeof this.props.onRefresh === \"function\") {\n this.props.onRefresh();\n } else {\n window.location.reload();\n }\n }}\n className=\"oui-mt-4 oui-font-semibold\"\n variant=\"gradient\"\n size=\"md\"\n >\n <RefreshIcon className=\"oui-mr-1\" />\n {this.props.refreshButtonText || i18n.t(\"errorBoundary.refresh\")}\n </Button>\n {/* {process.env.NODE_ENV === \"development\" && this.state.error && (\n <details className=\"mt-4 p-4 bg-red-50 border border-red-200 rounded text-left max-w-2xl\">\n <summary className=\"cursor-pointer font-medium text-red-800\">\n Error Details\n </summary>\n <pre className=\"mt-2 text-sm text-red-700 overflow-auto\">\n {this.state.error.toString()}\n {this.state.errorInfo?.componentStack}\n </pre>\n </details>\n )} */}\n </Flex>\n );\n }\n\n return this.props.children;\n }\n}\n\nconst Icon = (props: { className?: string }) => {\n return (\n <svg\n width=\"156\"\n height=\"165\"\n viewBox=\"0 0 156 165\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n className={props.className}\n >\n <path\n d=\"M77.958 11.2581C117.408 11.2581 149.224 43.7623 149.225 83.635C149.225 123.508 117.408 156.013 77.958 156.013C38.5076 156.013 6.69141 123.508 6.69141 83.635C6.69161 43.7623 38.5077 11.2581 77.958 11.2581Z\"\n stroke=\"url(#paint0_linear_32953_90176)\"\n strokeWidth=\"12\"\n />\n <path\n d=\"M74.1236 18.8531C74.8967 18.2272 76.0309 18.3465 76.6568 19.1196L99.9666 47.9101C100.593 48.6832 100.473 49.8174 99.7001 50.4433C98.927 51.0692 97.7928 50.9499 97.1669 50.1768L73.8571 21.3863C73.2312 20.6132 73.3505 19.479 74.1236 18.8531Z\"\n fill=\"#394155\"\n />\n <path\n d=\"M67.4775 153.345C66.5687 153.75 65.5041 153.341 65.0996 152.432L47.5699 113.05C47.1654 112.142 47.5742 111.077 48.483 110.672C49.3918 110.268 50.4564 110.677 50.8609 111.585L68.3906 150.967C68.7951 151.876 68.3863 152.941 67.4775 153.345Z\"\n fill=\"#394155\"\n />\n <path\n d=\"M87.1937 2.50608C88.9032 1.12201 91.4111 1.38582 92.7951 3.09532L117.65 33.7939C119.034 35.5033 118.77 38.0112 117.06 39.3952L106.349 48.0675C104.64 49.4515 102.132 49.1877 100.748 47.4782L75.8932 16.7797C74.5092 15.0702 74.773 12.5624 76.4825 11.1783L87.1937 2.50608Z\"\n fill=\"url(#paint1_linear_32953_90176)\"\n />\n <path\n d=\"M54.8689 163.161C52.8595 164.055 50.5054 163.152 49.6109 161.142L30.369 117.913C29.4745 115.904 30.3784 113.55 32.3879 112.655L38.8256 109.79C40.8351 108.895 43.1892 109.799 44.0836 111.809L63.3256 155.037C64.22 157.047 63.3161 159.401 61.3067 160.295L54.8689 163.161Z\"\n fill=\"url(#paint2_linear_32953_90176)\"\n />\n <path\n d=\"M21.0497 137.635C19.2748 138.425 17.1955 137.627 16.4054 135.852C15.6154 134.077 16.4138 131.998 18.1887 131.208L29.4767 126.183C31.2516 125.393 33.331 126.191 34.121 127.966C34.911 129.741 34.1127 131.821 32.3377 132.611L21.0497 137.635Z\"\n fill=\"url(#paint3_linear_32953_90176)\"\n />\n <path\n d=\"M31.0067 160.657C29.2318 161.447 27.1525 160.649 26.3625 158.874C25.5724 157.099 26.3708 155.02 28.1457 154.23L39.4338 149.205C41.2087 148.415 43.288 149.213 44.078 150.988C44.8681 152.763 44.0697 154.843 42.2948 155.633L31.0067 160.657Z\"\n fill=\"url(#paint4_linear_32953_90176)\"\n />\n <path\n d=\"M94.2979 17.9219C94.2979 19.7549 92.812 21.2408 90.979 21.2408C89.1461 21.2408 87.6602 19.7549 87.6602 17.9219C87.6602 16.0889 89.1461 14.603 90.979 14.603C92.812 14.603 94.2979 16.0889 94.2979 17.9219Z\"\n fill=\"#07080A\"\n />\n <path\n d=\"M106.243 32.5249C106.243 34.3579 104.757 35.8438 102.924 35.8438C101.091 35.8438 99.6055 34.3579 99.6055 32.5249C99.6055 30.692 101.091 29.2061 102.924 29.2061C104.757 29.2061 106.243 30.692 106.243 32.5249Z\"\n fill=\"#07080A\"\n />\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M143.238 87.3294C143.283 86.3294 143.306 85.3235 143.306 84.3123C143.306 80.0077 142.89 75.8003 142.096 71.728C137.49 69.544 132.251 67.6307 127.118 66.8126C122.674 66.1042 117.636 66.1072 113.053 68.1318C108.166 70.2911 104.601 74.3958 102.851 80.1999C101.677 84.091 100.713 87.7506 99.857 90.9972L99.8569 90.9974C99.5483 92.1682 99.2539 93.2853 98.969 94.3402C97.8574 98.455 96.882 101.656 95.6795 104.319C94.5159 106.895 93.2041 108.812 91.5007 110.366C89.7881 111.929 87.3882 113.389 83.7037 114.64L87.9295 127.083C92.9507 125.378 97.0389 123.101 100.357 120.074C103.684 117.039 105.944 113.516 107.655 109.727C109.327 106.025 110.528 101.937 111.655 97.7671C111.977 96.5735 112.294 95.3715 112.616 94.1496L112.616 94.1488L112.616 94.1487C113.456 90.9644 114.33 87.646 115.432 83.9941C116.178 81.5196 117.297 80.6226 118.363 80.1517C119.734 79.5462 121.92 79.2905 125.05 79.7894C131.168 80.7644 138.314 84.1982 143.238 87.3294ZM13.9805 70.6827C14.9192 66.2565 16.3058 61.9957 18.0906 57.9501C23.709 58.5554 30.4365 58.6747 37.3538 57.7247C48.6584 56.1721 59.8141 51.8684 67.7619 42.9131L77.5901 51.6356C66.8783 63.7052 52.3551 68.9284 39.1417 70.7431C29.9766 72.0018 21.1264 71.6711 13.9805 70.6827Z\"\n fill=\"#394155\"\n />\n <path\n d=\"M68.7641 23.3532C70.4736 21.9692 72.9814 22.233 74.3655 23.9425L94.9298 49.3421C96.3139 51.0515 96.0501 53.5594 94.3406 54.9434L86.1984 61.5356C84.4889 62.9197 81.9811 62.6559 80.597 60.9464L60.0326 35.5468C58.6486 33.8373 58.9124 31.3295 60.6219 29.9454L68.7641 23.3532Z\"\n fill=\"#535E7B\"\n />\n <path\n d=\"M74.0447 150.372C72.0352 151.267 69.6811 150.363 68.7867 148.353L53.0318 112.959C52.1373 110.949 53.0412 108.595 55.0507 107.7L72.5225 99.9234C74.532 99.029 76.8861 99.9329 77.7806 101.942L93.5355 137.337C94.4299 139.347 93.526 141.701 91.5165 142.595L74.0447 150.372Z\"\n fill=\"#535E7B\"\n />\n <defs>\n <linearGradient\n id=\"paint0_linear_32953_90176\"\n x1=\"71.7422\"\n y1=\"138.236\"\n x2=\"124.758\"\n y2=\"41.3888\"\n gradientUnits=\"userSpaceOnUse\"\n >\n <stop stopColor=\"#1B1D22\" />\n <stop offset=\"1\" stopColor=\"#26292E\" />\n </linearGradient>\n <linearGradient\n id=\"paint1_linear_32953_90176\"\n x1=\"111.705\"\n y1=\"43.7314\"\n x2=\"81.8381\"\n y2=\"6.84218\"\n gradientUnits=\"userSpaceOnUse\"\n >\n <stop stopColor=\"rgb(var(--oui-gradient-brand-end))\" />\n <stop offset=\"1\" stopColor=\"rgb(var(--oui-gradient-brand-start))\" />\n </linearGradient>\n <linearGradient\n id=\"paint2_linear_32953_90176\"\n x1=\"35.6067\"\n y1=\"111.223\"\n x2=\"58.0878\"\n y2=\"161.728\"\n gradientUnits=\"userSpaceOnUse\"\n >\n <stop stopColor=\"rgb(var(--oui-gradient-brand-end))\" />\n <stop offset=\"1\" stopColor=\"rgb(var(--oui-gradient-brand-start))\" />\n </linearGradient>\n <linearGradient\n id=\"paint3_linear_32953_90176\"\n x1=\"23.8327\"\n y1=\"128.695\"\n x2=\"26.6937\"\n y2=\"135.123\"\n gradientUnits=\"userSpaceOnUse\"\n >\n <stop stopColor=\"rgb(var(--oui-gradient-brand-end))\" />\n <stop offset=\"1\" stopColor=\"rgb(var(--oui-gradient-brand-start))\" />\n </linearGradient>\n <linearGradient\n id=\"paint4_linear_32953_90176\"\n x1=\"33.7897\"\n y1=\"151.717\"\n x2=\"36.6508\"\n y2=\"158.145\"\n gradientUnits=\"userSpaceOnUse\"\n >\n <stop stopColor=\"rgb(var(--oui-gradient-brand-end))\" />\n <stop offset=\"1\" stopColor=\"rgb(var(--oui-gradient-brand-start))\" />\n </linearGradient>\n </defs>\n </svg>\n );\n};\n\nconst RefreshIcon = (props: { className?: string }) => {\n return (\n <svg\n width=\"15\"\n height=\"15\"\n viewBox=\"0 0 15 15\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n className={props.className}\n >\n <path\n d=\"M7.5026 2.52515C6.30444 2.52515 5.15994 2.92706 4.23944 3.65565C3.98686 3.85515 3.94835 4.22322 4.14844 4.47581C4.34852 4.72839 4.71602 4.76689 4.96861 4.56681C5.68436 4.00039 6.56985 3.69181 7.5026 3.69181C9.75777 3.69181 11.5859 5.51998 11.5859 7.77514H10.4193L12.1693 10.1085L13.9193 7.77514H12.7526C12.7526 4.87539 10.4024 2.52515 7.5026 2.52515ZM2.83594 5.44181L1.08594 7.77514H2.2526C2.2526 10.6749 4.60285 13.0251 7.5026 13.0251C8.70135 13.0251 9.84527 12.6238 10.7658 11.8946C11.0184 11.6951 11.0569 11.3271 10.8568 11.0745C10.6567 10.8219 10.2892 10.7834 10.0366 10.9835C9.32027 11.5505 8.43594 11.8585 7.5026 11.8585C5.24744 11.8585 3.41927 10.0303 3.41927 7.77514H4.58594L2.83594 5.44181Z\"\n fill=\"black\"\n />\n </svg>\n );\n};\n","import { useMemo } from \"react\";\nimport { useAccount } from \"@kodiak-finance/orderly-hooks\";\nimport { AccountStatusEnum } from \"@kodiak-finance/orderly-types\";\nimport { useAppContext } from \"../provider/appStateContext\";\n\nexport function useCanTrade() {\n const { state } = useAccount();\n\n const { wrongNetwork, disabledConnect } = useAppContext();\n\n const canTrade = useMemo(() => {\n return (\n !wrongNetwork &&\n !disabledConnect &&\n (state.status === AccountStatusEnum.EnableTrading ||\n state.status === AccountStatusEnum.EnableTradingWithoutConnected)\n );\n }, [state.status, wrongNetwork, disabledConnect]);\n\n return canTrade;\n}\n","/**\n * SDK Version - BUMP THIS WHEN RELEASING\n * Keep in sync with root package.json version\n */\nexport const SDK_VERSION = \"2.8.20\";\n\nexport type ChangesetEntry = {\n date: string;\n title: string;\n summary: string;\n highlights: string[];\n packages: string[];\n type: \"breaking\" | \"feature\" | \"bugfix\" | \"improvement\";\n};\n\nexport type Changesets = Record<string, ChangesetEntry>;\n\n/**\n * Changesets - What's new in each version\n * ADD NEW ENTRIES WHEN BUMPING SDK_VERSION\n */\nexport const CHANGESETS: Changesets = {\n \"2.8.20\": {\n date: \"2025-12-13\",\n title: \"Better pagination and notification routing\",\n summary:\n \"Fixed in-app notification links. Volume stats now use cleaner labels.\",\n highlights: [\n \"Notification links respect internal vs external navigation for both bell and popup to keep in-app links in the same tab\",\n ],\n packages: [\n \"kodiak-orderly-ui\",\n \"kodiak-orderly-ui-scaffold\",\n \"kodiak-orderly-ui-notification\",\n \"kodiak-orderly-portfolio\",\n \"kodiak-orderly-i18n\",\n ],\n type: \"improvement\",\n },\n \"2.8.19\": {\n date: \"2025-12-12\",\n title: \"Orderly SDK sync with new features and optimizations\",\n summary:\n \"Synced with latest Orderly SDK versions, added reverse position feature, improved stop loss logic, and enhanced UX across deposits, withdrawals, and notifications.\",\n highlights: [\n \"One-click Reverse Position to flip exposure instantly\",\n \"Safer stop loss logic that avoids liquidation traps\",\n \"Clearer deposit and withdrawal messages\",\n \"More accurate vault APY display\",\n \"Smart notification links - internal open in same tab, external in new tab\",\n \"Close position now defaults to LIMIT orders with mark price pre-filled\",\n ],\n packages: [\n \"kodiak-orderly-ui-positions\",\n \"kodiak-orderly-ui-notification\",\n \"kodiak-orderly-ui-transfer\",\n \"kodiak-orderly-ui-tpsl\",\n \"kodiak-orderly-vaults\",\n \"kodiak-orderly-hooks\",\n ],\n type: \"feature\",\n },\n \"2.8.18\": {\n date: \"2025-12-09\",\n title: \"Production API endpoint migration\",\n summary:\n \"Migrated from staging backend to production backend API endpoint for improved reliability and performance.\",\n highlights: [\n \"Updated API endpoint to production backend\",\n \"Improved API stability and performance\",\n ],\n packages: [\"kodiak-orderly-types\"],\n type: \"improvement\",\n },\n \"2.8.17\": {\n date: \"2025-11-29\",\n title: \"Symbol performance analysis\",\n summary:\n \"New symbol performance analysis feature with comprehensive per-symbol trading metrics and visualization.\",\n highlights: [\n \"New symbol-specific performance analytics dashboard\",\n \"View detailed P&L, volume, and fees for individual symbols\",\n \"Symbol performance tracking with customizable date ranges\",\n \"Comprehensive performance visualization per trading symbol\",\n ],\n packages: [\"kodiak-orderly-portfolio\"],\n type: \"feature\",\n },\n \"2.8.16\": {\n date: \"2025-11-29\",\n title: \"Fixed funded account address reversion issue\",\n summary:\n \"Restored isMobile guard in device linking to prevent funded accounts from reverting to wallet address. Fixes auto-sync behavior that was causing address switching issues.\",\n highlights: [\n \"Restored isMobile guard in useLinkDevice to prevent unintended auto-sync\",\n \"Fixed funded account address reverting to MetaMask\",\n \"Maintains device linking functionality for mobile devices\",\n \"Prevents auto-sync from being triggered on all devices\",\n ],\n packages: [\n \"kodiak-orderly-react-app\",\n \"kodiak-orderly-portfolio\",\n \"kodiak-orderly-hooks\",\n \"kodiak-orderly-types\",\n \"kodiak-orderly-utils\",\n ],\n type: \"bugfix\",\n },\n \"2.8.15\": {\n date: \"2025-11-19\",\n title: \"Portfolio volume chart and CSV data export\",\n summary:\n \"Added volume tracking chart to portfolio performance metrics and improved date range handling. New CSV export functionality for trading data with support for custom date ranges.\",\n highlights: [\n \"New volume chart on portfolio performance component\",\n \"Fixed date range selection to properly update performance labels\",\n \"Leaderboard-style period detection for custom date ranges\",\n \"Default performance period now set to 30 days\",\n \"CSV export for portfolio and trading data\",\n \"Support for custom date range exports\",\n ],\n packages: [\n \"kodiak-orderly-portfolio\",\n \"kodiak-orderly-i18n\",\n \"kodiak-orderly-hooks\",\n \"kodiak-orderly-trading\",\n \"kodiak-orderly-ui-orders\",\n \"kodiak-orderly-ui-positions\",\n \"kodiak-orderly-ui\",\n ],\n type: \"feature\",\n },\n \"2.8.14\": {\n date: \"2025-11-17\",\n title: \"Fixed 1D broker stats date range issue\",\n summary:\n \"Fixed issue where 1D (1 day) broker stats were returning incorrect data by properly setting start_date and end_date to current date.\",\n highlights: [\n \"Fixed 1D broker stats to correctly fetch today's data only\",\n \"Properly set start_date and end_date parameters for 1D queries\",\n \"Broker stats now display accurate data for single-day periods\",\n ],\n packages: [\"kodiak-orderly-trading-leaderboard\"],\n type: \"bugfix\",\n },\n \"2.8.13\": {\n date: \"2025-11-13\",\n title: \"Fixed broker stats date range alignment\",\n summary:\n \"Fixed broker stats to use the exact date range from the leaderboard date picker, ensuring consistent behavior across all dates. Added currency symbols to stats values.\",\n highlights: [\n \"Broker stats now match leaderboard date picker exactly\",\n \"Date range handling works consistently on any day\",\n \"Currency symbols ($) added to all stats values\",\n \"Removed unused brokerStats.script file for cleaner codebase\",\n ],\n packages: [\"kodiak-orderly-trading-leaderboard\"],\n type: \"bugfix\",\n },\n \"2.8.12\": {\n date: \"2025-11-13\",\n title: \"Updated broker stats with new endpoint\",\n summary:\n \"Integrated new staging backend stats endpoint for real-time broker statistics with improved date range handling and accurate data aggregation.\",\n highlights: [\n \"Connected to new stats endpoint for accurate data\",\n \"Improved date range calculations for stats display\",\n \"Fixed stats data parsing from aggregated endpoint\",\n \"Better performance with optimized API calls\",\n ],\n packages: [\"kodiak-orderly-trading-leaderboard\"],\n type: \"improvement\",\n },\n \"2.8.11\": {\n date: \"2025-11-12\",\n title: \"Broker stats and improved date filtering\",\n summary:\n \"Added broker trading stats dashboard and new 1D filter option with improved date range handling.\",\n highlights: [\n \"View broker stats: volume, fees, revenue, and P&L\",\n \"New 1D filter for quick analysis\",\n \"Fixed OrderlyProvider context issues\",\n ],\n packages: [\"kodiak-orderly-trading-leaderboard\"],\n type: \"feature\",\n },\n \"2.8.10\": {\n date: \"2025-11-07\",\n title: \"Your trading metrics now display correctly on the leaderboard\",\n summary:\n \"Fixed an issue where your trading volume and P&L weren't showing on your leaderboard row. Your trading stats now display accurately so you can see your real performance.\",\n highlights: [\n \"Your trading volume now shows in your leaderboard row\",\n \"Realized P&L displays correctly for your account\",\n \"All your trading metrics are now visible and up to date\",\n \"Works smoothly across both the default and custom leaderboards\",\n ],\n packages: [\"kodiak-orderly-trading-leaderboard\"],\n type: \"bugfix\",\n },\n \"2.8.9\": {\n date: \"2025-11-07\",\n title: \"Leaderboard performance improvements\",\n summary:\n \"Made the leaderboard faster and more reliable. Your rankings now load quicker and metrics display more smoothly.\",\n highlights: [\n \"Leaderboard loads faster\",\n \"Smoother sorting and filtering experience\",\n \"More reliable data display\",\n \"Better handling of large leaderboards\",\n ],\n packages: [\"kodiak-orderly-trading-leaderboard\"],\n type: \"improvement\",\n },\n \"2.8.8\": {\n date: \"2025-11-07\",\n title: \"See your points and compete on the leaderboard\",\n summary:\n \"You can now compete by trading volume, profit/loss, or all-time points. Sort and compare your performance against other traders in real-time.\",\n highlights: [\n \"View all-time points earned on the leaderboard\",\n \"Sort by trading volume, P&L, or points\",\n \"See your rank for each metric\",\n \"Faster leaderboard loading\",\n ],\n packages: [\"kodiak-orderly-trading-leaderboard\"],\n type: \"feature\",\n },\n \"2.8.7\": {\n date: \"2025-11-05\",\n title: \"Custom leaderboard periods and broker announcements\",\n summary:\n \"Brokers can now show custom messages in announcement and set flexible date ranges for leaderboards. View any time period - daily, weekly, monthly, or custom ranges.\",\n highlights: [\n \"View leaderboards for any time period you want\",\n \"Brokers can display important announcements\",\n \"Change leaderboard dates without app updates\",\n \"Campaign-specific leaderboards with custom dates\",\n ],\n packages: [\n \"kodiak-orderly-react-app\",\n \"kodiak-orderly-ui-scaffold\",\n \"kodiak-orderly-i18n\",\n \"kodiak-orderly-trading-leaderboard\",\n ],\n type: \"feature\",\n },\n \"2.8.6\": {\n date: \"2025-11-04\",\n title: \"Faster app and smoother trading experience\",\n summary:\n \"Fixed performance issues and improved the user experience. Trading is now smoother and the app responds faster when you switch between screens.\",\n highlights: [\n \"Points display cleanly without decimals\",\n \"Withdraw form works smoothly with all networks\",\n \"Trading input fields handle decimals better\",\n \"Price data updates instantly when you return to the app\",\n \"Faster performance on slower connections\",\n ],\n packages: [\n \"kodiak-orderly-trading-leaderboard\",\n \"kodiak-orderly-ui-transfer\",\n \"kodiak-orderly-ui-order-entry\",\n \"kodiak-orderly-hooks\",\n ],\n type: \"improvement\",\n },\n \"2.8.5\": {\n date: \"2025-11-03\",\n title: \"Track your trading points on the leaderboard\",\n summary:\n \"Your all-time trading points are now displayed on the leaderboard. Compete based on the points you earn and see where you rank.\",\n highlights: [\n \"View your all-time points earned\",\n \"See points on desktop leaderboard\",\n \"Switch between Volume, P&L, and Points on mobile\",\n \"Compare your points against other traders\",\n ],\n packages: [\n \"kodiak-orderly-trading-leaderboard\",\n \"kodiak-orderly-ui-scaffold\",\n ],\n type: \"feature\",\n },\n \"2.8.4\": {\n date: \"2025-10-28\",\n title: \"Better mobile trading and Mac support\",\n summary:\n \"Trading on mobile is now easier and faster. Fixed issues on Mac and improved the overall experience across all devices.\",\n highlights: [\n \"Mobile: Right keyboard automatically appears for entering prices\",\n \"Mobile: Quick number entry for order sizes\",\n \"Mac: Fixed trackpad scrolling in dropdowns\",\n \"Know which trading pair you're canceling orders from\",\n \"Easier stop-loss and take-profit management on mobile\",\n ],\n packages: [\n \"kodiak-orderly-ui-transfer\",\n \"kodiak-orderly-ui-order-entry\",\n \"kodiak-orderly-ui-orders\",\n \"kodiak-orderly-ui-positions\",\n \"kodiak-orderly-ui-tpsl\",\n ],\n type: \"improvement\",\n },\n \"2.8.3\": {\n date: \"2025-10-20\",\n title: \"More reliable orders and connections\",\n summary:\n \"Fixed issues with order submission and improved network stability. Your orders now process reliably.\",\n highlights: [\n \"Orders submit without errors\",\n \"Connection stays stable during network changes\",\n \"Faster recovery from connection drops\",\n ],\n packages: [\"kodiak-orderly-core\", \"kodiak-orderly-net\"],\n type: \"bugfix\",\n },\n};\n\n/**\n * Get changeset for a specific version\n * @param version - Version string (e.g., \"2.8.3\")\n * @returns ChangesetEntry or undefined if not found\n */\nexport function getChangesetForVersion(\n version: string = SDK_VERSION,\n): ChangesetEntry | undefined {\n return CHANGESETS[version];\n}\n\n/**\n * Get the latest changeset\n * @returns ChangesetEntry for current SDK_VERSION\n */\nexport function getLatestChangeset(): ChangesetEntry | undefined {\n return getChangesetForVersion(SDK_VERSION);\n}\n"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@kodiak-finance/orderly-react-app",
|
|
3
|
-
"version": "2.8.
|
|
3
|
+
"version": "2.8.21-alpha.0",
|
|
4
4
|
"description": "Create React App with Orderly Network components",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"module": "dist/index.mjs",
|
|
@@ -18,11 +18,11 @@
|
|
|
18
18
|
},
|
|
19
19
|
"dependencies": {
|
|
20
20
|
"date-fns": "^3.6.0",
|
|
21
|
-
"@kodiak-finance/orderly-ui": "2.8.
|
|
22
|
-
"@kodiak-finance/orderly-hooks": "2.8.
|
|
23
|
-
"@kodiak-finance/orderly-i18n": "2.8.
|
|
24
|
-
"@kodiak-finance/orderly-utils": "2.8.
|
|
25
|
-
"@kodiak-finance/orderly-types": "2.8.
|
|
21
|
+
"@kodiak-finance/orderly-ui": "2.8.21-alpha.0",
|
|
22
|
+
"@kodiak-finance/orderly-hooks": "2.8.21-alpha.0",
|
|
23
|
+
"@kodiak-finance/orderly-i18n": "2.8.21-alpha.0",
|
|
24
|
+
"@kodiak-finance/orderly-utils": "2.8.21-alpha.0",
|
|
25
|
+
"@kodiak-finance/orderly-types": "2.8.21-alpha.0"
|
|
26
26
|
},
|
|
27
27
|
"devDependencies": {
|
|
28
28
|
"@types/react": "^18.3.2",
|
|
@@ -31,7 +31,7 @@
|
|
|
31
31
|
"react-dom": "^18.2.0",
|
|
32
32
|
"tailwindcss": "^3.4.4",
|
|
33
33
|
"tsup": "^7.3.0",
|
|
34
|
-
"tsconfig": "0.11.
|
|
34
|
+
"tsconfig": "0.11.20-alpha.0"
|
|
35
35
|
},
|
|
36
36
|
"peerDependencies": {
|
|
37
37
|
"react": ">=18",
|