@agg-build/hooks 4.26.1 → 4.27.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (45) hide show
  1. package/dist/deposit.d.mts +142 -138
  2. package/dist/deposit.d.mts.map +1 -0
  3. package/dist/deposit.d.ts +142 -138
  4. package/dist/deposit.d.ts.map +1 -0
  5. package/dist/deposit.js +751 -2414
  6. package/dist/deposit.mjs +744 -727
  7. package/dist/deposit.mjs.map +1 -0
  8. package/dist/index-CbNR3EIA.d.mts +341 -0
  9. package/dist/index-CbNR3EIA.d.mts.map +1 -0
  10. package/dist/index-CsP1jRMD.d.ts +341 -0
  11. package/dist/index-CsP1jRMD.d.ts.map +1 -0
  12. package/dist/index-D0fXU85a.d.mts +743 -0
  13. package/dist/index-D0fXU85a.d.mts.map +1 -0
  14. package/dist/index-D0fXU85a.d.ts +743 -0
  15. package/dist/index-D0fXU85a.d.ts.map +1 -0
  16. package/dist/index.d.mts +6458 -7515
  17. package/dist/index.d.mts.map +1 -0
  18. package/dist/index.d.ts +6458 -7515
  19. package/dist/index.d.ts.map +1 -0
  20. package/dist/index.js +7451 -11417
  21. package/dist/index.mjs +7154 -5221
  22. package/dist/index.mjs.map +1 -0
  23. package/dist/use-ramp-session-7RAG9tvY.js +30 -0
  24. package/dist/use-ramp-session-BFWHCtuc.mjs +21 -0
  25. package/dist/use-ramp-session-BFWHCtuc.mjs.map +1 -0
  26. package/dist/use-sync-balances-BkcqInJh.mjs +1779 -0
  27. package/dist/use-sync-balances-BkcqInJh.mjs.map +1 -0
  28. package/dist/{use-sync-balances-CeD8qZWP.d.ts → use-sync-balances-CVEg__2V.d.mts} +7 -8
  29. package/dist/use-sync-balances-CVEg__2V.d.mts.map +1 -0
  30. package/dist/{use-sync-balances-CeD8qZWP.d.mts → use-sync-balances-CVEg__2V.d.ts} +7 -8
  31. package/dist/use-sync-balances-CVEg__2V.d.ts.map +1 -0
  32. package/dist/use-sync-balances-HryB8Q7F.js +1974 -0
  33. package/dist/withdraw--f5kYKJA.mjs +1474 -0
  34. package/dist/withdraw--f5kYKJA.mjs.map +1 -0
  35. package/dist/withdraw-BXWZYmJa.js +1591 -0
  36. package/dist/withdraw.d.mts +3 -351
  37. package/dist/withdraw.d.ts +3 -351
  38. package/dist/withdraw.js +10 -2229
  39. package/dist/withdraw.mjs +3 -20
  40. package/package.json +7 -6
  41. package/dist/chunk-JFJNW2PD.mjs +0 -5649
  42. package/dist/chunk-LNIAMJTZ.mjs +0 -505
  43. package/dist/chunk-OZQ3K47U.mjs +0 -31
  44. package/dist/use-deposit-addresses-B9ICS-3U.d.mts +0 -236
  45. package/dist/use-deposit-addresses-B9ICS-3U.d.ts +0 -236
@@ -0,0 +1,1974 @@
1
+ let _tanstack_react_query = require("@tanstack/react-query");
2
+ let react = require("react");
3
+ //#region src/core/ui-config/labels.ts
4
+ const enUsLabels = {
5
+ common: {
6
+ close: "Close",
7
+ loading: "Loading",
8
+ retry: "Retry",
9
+ errorPrefix: "Error",
10
+ tabsAria: "Tabs",
11
+ hiddenTabsAria: "Hidden tabs",
12
+ scrollTabsLeft: "Scroll tabs left",
13
+ scrollTabsRight: "Scroll tabs right",
14
+ selectAria: "Select",
15
+ lineChartAria: "Line chart",
16
+ candlestickChartAria: "Candlestick chart",
17
+ lineChartSeriesSwitchAria: "Chart series switch",
18
+ chartSources: (historyVenue, liquidityVenue) => `History: ${historyVenue} · Resting liquidity: ${liquidityVenue ?? "all venues"}`,
19
+ chartBidLiquidity: (amount) => `Bid ${amount}`,
20
+ chartAskLiquidity: (amount) => `Ask ${amount}`,
21
+ chartEmpty: "No price history in this range",
22
+ lineChartSeriesOptionAria: (seriesLabel) => `Show ${seriesLabel} series`,
23
+ chartTypeSwitchAria: "Chart type switch",
24
+ lineChartType: "Line",
25
+ candlestickChartType: "Candlestick"
26
+ },
27
+ venues: {
28
+ polymarket: "Polymarket",
29
+ kalshi: "Kalshi",
30
+ opinion: "Opinion",
31
+ predict: "Predict",
32
+ pred: "PRED",
33
+ tiprun: "Tip Run",
34
+ limitless: "Limitless",
35
+ probable: "Probable",
36
+ myriad: "Myriad",
37
+ hyperliquid: "Hyperliquid",
38
+ novig: "Novig",
39
+ prophetx: "ProphetX",
40
+ betdex: "BETDEX"
41
+ },
42
+ auth: {
43
+ connect: (connectorName) => connectorName ? `Sign in with ${connectorName}` : "Sign in",
44
+ signIn: "Sign in",
45
+ signingIn: "Signing in...",
46
+ signInStatement: "Sign in to AGG",
47
+ emailAddress: "Email address",
48
+ continue: "Continue",
49
+ emailUnavailable: "Email sign-in is currently unavailable.",
50
+ signInWithMethod: (methodLabel) => `Sign in with ${methodLabel}`,
51
+ socialWalletNotice: "A wallet will automatically be created for you when signing up with a social account.",
52
+ learnMore: "Learn more",
53
+ dividerOr: "OR",
54
+ connectWallet: "Connect wallet",
55
+ terms: "Terms",
56
+ privacyPolicy: "Privacy Policy",
57
+ legalNoticePrefix: "By signing in, you agree to our",
58
+ legalNoticeSeparator: "&",
59
+ deposit: "Deposit",
60
+ depositGeoBlocked: "Deposits are not available in your region.",
61
+ balances: "Balances",
62
+ viewAll: "View All",
63
+ loadingBalances: "Loading balances...",
64
+ myProfile: "My Profile",
65
+ withdraw: "Withdraw",
66
+ disconnect: "Disconnect",
67
+ claimWinnings: "Claim Now",
68
+ claimableWinningsBadge: (count) => `${count} claimable winning${count === 1 ? "" : "s"}`,
69
+ claimableWinningsTooltip: (count) => `${count} position${count === 1 ? "" : "s"} ready to claim`,
70
+ walletMenuFor: (profileLabel) => `Profile menu for ${profileLabel}`
71
+ },
72
+ balanceRefill: {
73
+ tabLabel: "Balance management",
74
+ title: "Automatic balance refill",
75
+ description: "Keep a minimum USDC balance on one network by moving funds from another managed network.",
76
+ networkLabel: "Network to maintain",
77
+ minimumLabel: "Minimum balance",
78
+ refillAmountLabel: "Refill by at least",
79
+ dailyCapLabel: "Maximum per day",
80
+ maximumFeeLabel: "Maximum fee per refill",
81
+ activeLabel: "Automatic refill is active",
82
+ pausedLabel: "Automatic refill is paused",
83
+ enableAction: "Enable automatic refill",
84
+ saveAction: "Save refill settings",
85
+ pauseAction: "Pause automatic refill",
86
+ resumeAction: "Resume automatic refill",
87
+ loading: "Loading refill settings...",
88
+ loadError: "Refill settings could not be loaded.",
89
+ saveError: "Refill settings could not be saved.",
90
+ saved: "Refill settings saved.",
91
+ consent: "By enabling, you authorize AGG to move USDC between your managed wallets within these limits.",
92
+ lastRefill: "Latest refill",
93
+ manageTitle: "Manage balances",
94
+ manageDescription: "Set a minimum balance and refill target for each venue. When a venue falls below your minimum, funds are automatically transferred from your balances on other venues to restore it to your refill target.",
95
+ noAutoRefill: "No auto-refill",
96
+ autoRefill: "Auto-refill",
97
+ minimumShortLabel: "Min",
98
+ refillToLabel: "Refill to",
99
+ unitLabel: "USDC",
100
+ resetAction: "Reset",
101
+ cancelAction: "Cancel",
102
+ saveChangesAction: "Save changes",
103
+ modalLoading: "Loading balances...",
104
+ modalEmptyTitle: "No supported networks",
105
+ modalEmptyDescription: "There are no supported networks to manage yet.",
106
+ modalLoadError: "Balances could not be loaded.",
107
+ requiredError: "Enter an amount.",
108
+ positiveError: "Enter an amount greater than 0.",
109
+ precisionError: "Use no more than 6 decimal places.",
110
+ relationshipError: "Refill to must be greater than or equal to Min.",
111
+ maximumError: (maximum) => `Enter an amount no greater than ${maximum} USDC.`,
112
+ createUnavailableError: "Auto-refill cannot be enabled for this network until refill limits are supported by the API.",
113
+ expandNetwork: (network) => `Expand ${network} balance settings`,
114
+ collapseNetwork: (network) => `Collapse ${network} balance settings`,
115
+ statuses: {
116
+ reserved: "Funds reserved",
117
+ executing: "Refill in progress",
118
+ completed: "Refill completed",
119
+ failed: "Refill failed"
120
+ }
121
+ },
122
+ deposit: {
123
+ title: "Deposit",
124
+ back: "Go back",
125
+ balancePrefix: "Balance:",
126
+ balanceLabel: "Balance",
127
+ done: "Done",
128
+ methods: {
129
+ walletTitle: (walletLabel) => `Use your wallet (${walletLabel})`,
130
+ walletDescription: "Deposit instantly from your connected wallet",
131
+ cryptoTitle: "Send crypto",
132
+ cryptoDescription: "Transfer from any wallet or exchange",
133
+ cardTitle: "Deposit with card",
134
+ cardDescription: "Buy crypto instantly with your card"
135
+ },
136
+ walletFlow: {
137
+ title: "Use your wallet",
138
+ tokenLabel: "Token",
139
+ networkLabel: "Network",
140
+ amountLabel: "Amount",
141
+ max: "Max",
142
+ feePrefix: "Fee ~",
143
+ confirm: "Confirm Deposit"
144
+ },
145
+ sendCrypto: {
146
+ title: "Send crypto",
147
+ tokenLabel: "Supported token",
148
+ networkLabel: "Supported network",
149
+ depositAddressLabel: "Your deposit address",
150
+ copy: "Copy",
151
+ copied: "Copied!",
152
+ minDepositPrefix: "Min deposit",
153
+ warning: "Send only the selected token on the selected network. Wrong token or network may results in permanently lost funds.",
154
+ qrPlaceholder: "QR code placeholder",
155
+ addressLoadingTitle: "Preparing your deposit address...",
156
+ addressLoadingDescription: "We're generating your address, this usually takes a few seconds."
157
+ },
158
+ cardFlow: {
159
+ title: "Buy crypto",
160
+ amountLabel: "Amount",
161
+ currencyLabel: "Currency",
162
+ tokenLabel: "Token",
163
+ networkLabel: "Network",
164
+ destinationWalletLabel: "Destination wallet",
165
+ getQuotes: "Get Quotes",
166
+ minRequired: (amount) => `Min required: ${amount}`,
167
+ minAmountError: (amount) => `Enter at least ${amount} to continue`,
168
+ selectProviderTitle: "Select provider",
169
+ feeLabel: "Fee",
170
+ providerBadges: {
171
+ best: "BEST",
172
+ lowKyc: "LOW KYC"
173
+ },
174
+ successTitle: "Purchase complete",
175
+ successDescription: "Your USDC has been successfully added to your balance.",
176
+ pendingTitle: (provider) => `Complete your payment on ${provider}`,
177
+ pendingDescription: "Once your transaction is finished, your balance may take a few minutes to update. The deposit will appear in your activity once it's successful.",
178
+ pendingWalletAddressHelp: "Some providers may ask for a wallet address during checkout, use this one to receive your deposit:",
179
+ pendingCopyAddress: "Copy deposit address",
180
+ viewActivity: "View Activity",
181
+ chooseAnotherProvider: "Choose another provider",
182
+ summary: {
183
+ provider: "Provider",
184
+ fees: "Fees"
185
+ },
186
+ loadingQuotes: "Finding the best rates...",
187
+ errorLoadingQuotesTitle: "Failed to load quotes",
188
+ errorLoadingQuotesDescription: "Please try again.",
189
+ retry: "Retry",
190
+ noQuotes: "No quotes available for this configuration.",
191
+ widgetTitle: "Complete Purchase"
192
+ },
193
+ processingTitle: "Processing deposit",
194
+ processingSteps: {
195
+ submitting: "Waiting for wallet confirmation",
196
+ submitted: "Wallet confirmed",
197
+ confirming: "Processing transaction…",
198
+ updatingBalance: "Updating balance",
199
+ fundsAvailable: "Funds available"
200
+ },
201
+ successTitle: "Deposit complete",
202
+ successDescription: "Your USDC has been successfully added to your balance.",
203
+ summary: {
204
+ amountReceived: "Amount received",
205
+ network: "Network",
206
+ fromWallet: "From wallet",
207
+ gasFee: "Gas fee"
208
+ }
209
+ },
210
+ withdraw: {
211
+ title: "Withdraw",
212
+ back: "Go back",
213
+ done: "Done",
214
+ balancePrefix: "Balance:",
215
+ methods: {
216
+ walletTitle: "Withdraw to wallet",
217
+ walletDescription: "Withdraw funds instantly to your crypto wallet",
218
+ cardTitle: "Withdraw with card",
219
+ cardDescription: "Withdraw funds to your card"
220
+ },
221
+ walletFlow: {
222
+ title: "Withdraw to wallet",
223
+ recipientAddressLabel: "Recipient address",
224
+ amountLabel: "Amount",
225
+ max: "Max",
226
+ tokenLabel: "Receive token",
227
+ networkLabel: "Receive network",
228
+ estimatedFees: "Est. fees",
229
+ networkReserve: "Network reserve",
230
+ networkReserveTooltipAria: "Network reserve details",
231
+ networkReserveTooltipLineOne: "This reserve helps cover network and bridge costs.",
232
+ networkReserveTooltipLineTwo: "Any unused amount stays in your balance.",
233
+ youReceive: "You'll receive",
234
+ confirm: "Confirm withdrawal",
235
+ calculatingFees: "Calculating fees…",
236
+ successTitle: "Withdrawal submitted",
237
+ successDescription: (tokenSymbol) => `Your ${tokenSymbol} withdrawal is being processed and will arrive shortly.`,
238
+ successTitleCompleted: "Withdrawal complete",
239
+ successDescriptionCompleted: (tokenSymbol) => `Your ${tokenSymbol} has been successfully sent to your wallet.`,
240
+ successTitlePartial: "Withdrawal partially completed",
241
+ successDescriptionPartial: () => "Part of your withdrawal was completed successfully, but the remaining funds failed to transfer and were returned to your balance.",
242
+ successTitleFailed: "Withdrawal failed",
243
+ successDescriptionFailed: () => "We couldn't complete your withdrawal. Your funds were returned to your balance.",
244
+ retry: "Try Again",
245
+ close: "Close",
246
+ loadingDescription: "This may take a few minutes. You can safely close this window and check the status later in your activity.",
247
+ summary: {
248
+ requestedWithdrawal: "Requested withdrawal",
249
+ amountReceived: "Amount",
250
+ network: "Network",
251
+ toWallet: "To wallet",
252
+ fees: "Fees"
253
+ },
254
+ lifecycle: {
255
+ pending: "Submitted — preparing your withdrawal…",
256
+ bridging: "Bridging funds across chains…",
257
+ transferring: "Transferring to your wallet…",
258
+ completed: "Withdrawal complete.",
259
+ partial: "Withdrawal partially completed — see details below.",
260
+ failed: "Withdrawal failed.",
261
+ loadingSteps: {
262
+ preparing: "Preparing funds",
263
+ bridging: "Bridging between networks",
264
+ sending: "Sending to your wallet",
265
+ confirming: "Waiting for network confirmation"
266
+ },
267
+ steps: {
268
+ bridge: (sourceChainName, destChainName) => `Bridging from ${sourceChainName} to ${destChainName}`,
269
+ transfer: (destChainName) => `Transferring on ${destChainName}`
270
+ }
271
+ }
272
+ },
273
+ cardFlow: {
274
+ title: "Sell crypto",
275
+ amountLabel: "Amount",
276
+ currencyLabel: "Currency",
277
+ tokenLabel: "Token",
278
+ networkLabel: "Network",
279
+ destinationWalletLabel: "Destination wallet",
280
+ getQuotes: "Get Quotes",
281
+ selectProviderTitle: "Select provider",
282
+ feeLabel: "Fee",
283
+ providerBadges: {
284
+ best: "BEST",
285
+ lowKyc: "LOW KYC"
286
+ },
287
+ successTitle: "Withdrawal complete",
288
+ successDescription: "Your USDC has been successfully sent to your wallet.",
289
+ summary: {
290
+ provider: "Provider",
291
+ toWallet: "To wallet",
292
+ fees: "Fees"
293
+ }
294
+ },
295
+ summary: {
296
+ amountReceived: "Amount",
297
+ network: "Network"
298
+ }
299
+ },
300
+ markets: {
301
+ emptyNoOpen: "No open markets available.",
302
+ emptyResolved: "This event has been resolved."
303
+ },
304
+ home: {
305
+ trending: "Trending",
306
+ topMarkets: "Trending",
307
+ newMarkets: "New Markets",
308
+ categoryTabsAria: "Home page category tabs"
309
+ },
310
+ userProfile: {
311
+ tabs: {
312
+ positions: "Positions",
313
+ openOrders: "Open limit orders",
314
+ activity: "Activity"
315
+ },
316
+ balance: {
317
+ availableBalance: "Balance",
318
+ manage: "Manage",
319
+ reservedForOpenOrders: (amount) => `${amount} reserved for open orders`,
320
+ positionsValue: "Positions Value",
321
+ kalshiBalance: "Kalshi Balance",
322
+ balanceByNetwork: "Balance by network",
323
+ venueAccount: "Venue account",
324
+ balanceUnavailable: "Balance unavailable",
325
+ paperModeNetwork: "Paper",
326
+ paperModeWarning: "Paper mode is enabled. These are simulated funds for paper trading.",
327
+ networkTooltipDescription: "Funds are stored across networks. We handle routing automatically, but keeping funds on the right network enables faster trades and lower fees. When depositing, you can choose your preferred network."
328
+ },
329
+ hostedBetdex: {
330
+ manageFunds: "Manage funds",
331
+ fromWallet: "Transfer from AGG wallet",
332
+ toWallet: "Use my AGG wallet",
333
+ transferToBetdex: "Transfer to BETDEX",
334
+ deposit: "Deposit USDC",
335
+ depositInstructions: {
336
+ production: "Send USDC on Solana to this BETDEX account address.",
337
+ sandbox: "This is a sandbox account. Use sandbox test funds only."
338
+ },
339
+ depositAddress: "BETDEX Solana deposit address",
340
+ transferUnavailable: "This transfer is temporarily unavailable. Check its status before trying again.",
341
+ withdraw: "Withdraw USDC",
342
+ withdrawalAmount: "Amount (USDC)",
343
+ withdrawalDestination: "Your Solana wallet address",
344
+ withdrawalSubmit: "Withdraw from BETDEX",
345
+ withdrawalCheck: "Check withdrawal",
346
+ withdrawalRetry: "Retry the same withdrawal",
347
+ withdrawalNew: "New withdrawal",
348
+ withdrawalUnknown: "The response was not confirmed. Your request is saved; retrying checks the same withdrawal.",
349
+ withdrawalStatuses: {
350
+ processing: "Withdrawal is processing.",
351
+ confirmed: "Withdrawal confirmed.",
352
+ failed: "Withdrawal failed. Funds are available again.",
353
+ flagged: "Withdrawal needs review. Funds remain reserved.",
354
+ review_required: "Withdrawal needs review. Funds remain reserved."
355
+ },
356
+ title: "BETDEX account",
357
+ description: "USDC held with BETDEX, separate from your connected wallets.",
358
+ sandbox: "Sandbox · simulated funds",
359
+ createAccount: "Set up BETDEX account",
360
+ checkSetup: "Check account setup",
361
+ provisioning: "Account setup is processing. Check again for confirmation.",
362
+ suspended: "This BETDEX account is suspended.",
363
+ unavailable: "BETDEX balance is temporarily unavailable.",
364
+ provisioningUnavailable: "BETDEX account setup is currently unavailable.",
365
+ total: "Total balance",
366
+ available: "Available to trade",
367
+ reserved: "Reserved for open orders",
368
+ refresh: "Refresh account",
369
+ creationFailed: "We could not confirm account setup. Refresh to check its status before trying again.",
370
+ showActivity: "Show account activity",
371
+ hideActivity: "Hide account activity",
372
+ activityTitle: "BETDEX account activity",
373
+ activityDescription: "Observed ledger entries, not spendable balances or per-order fees. A ledger entry alone does not confirm a withdrawal's completion.",
374
+ activityEmpty: "No account activity on this page.",
375
+ activityUnavailable: "BETDEX account activity is temporarily unavailable.",
376
+ activityPrevious: "Previous activity page",
377
+ activityNext: "Next activity page",
378
+ activityRefresh: "Refresh activity",
379
+ activityCodes: {
380
+ Deposit: "Deposit",
381
+ Withdrawal: "Withdrawal",
382
+ TradeCreation: "Trade created",
383
+ TradeVoid: "Trade voided",
384
+ TradeWin: "Trade payout",
385
+ WalletToWallet: "Wallet transfer",
386
+ Commission: "Commission",
387
+ MarketPositionVoid: "Position voided",
388
+ MarketPositionPayout: "Position payout",
389
+ MarketPositionRefund: "Position refund",
390
+ ManualDebit: "Manual debit",
391
+ ManualCredit: "Manual credit",
392
+ SettlementResidual: "Settlement adjustment"
393
+ }
394
+ },
395
+ activity: {
396
+ depositType: "Deposit",
397
+ redeemType: "Claim",
398
+ withdrawalType: "Withdrawal",
399
+ claimBreakdownModalAriaLabel: "Claim activity breakdown",
400
+ claimBreakdownTransactionLinkAria: (venue) => `Open ${venue} claim transaction`,
401
+ redeemStatusTitles: {
402
+ pending: "Processing claim",
403
+ completed: "Successful claim",
404
+ failed: "Failed claim",
405
+ canceled: "Canceled claim"
406
+ },
407
+ depositTitles: {
408
+ connectedWallet: "Deposit from connected wallet",
409
+ externalWallet: "Deposit from external wallet",
410
+ card: "Deposit with card"
411
+ },
412
+ depositStatusTitles: {
413
+ connectedWallet: {
414
+ pending: "Processing deposit from connected wallet",
415
+ completed: "Successful deposit from connected wallet",
416
+ failed: "Failed deposit from connected wallet",
417
+ canceled: "Canceled deposit from connected wallet"
418
+ },
419
+ externalWallet: {
420
+ pending: "Processing deposit from external wallet",
421
+ completed: "Successful deposit from external wallet",
422
+ failed: "Failed deposit from external wallet",
423
+ canceled: "Canceled deposit from external wallet"
424
+ },
425
+ card: {
426
+ pending: "Processing deposit with card",
427
+ completed: "Successful deposit with card",
428
+ failed: "Failed deposit with card",
429
+ canceled: "Canceled deposit with card"
430
+ }
431
+ },
432
+ withdrawalStatusTitles: {
433
+ pending: "Processing withdrawal",
434
+ completed: "Successful withdrawal",
435
+ failed: "Failed withdrawal",
436
+ canceled: "Canceled withdrawal"
437
+ },
438
+ withdrawalTitle: (tokenSymbol) => `Withdraw ${tokenSymbol}`
439
+ },
440
+ positions: {
441
+ activeFilter: "Active",
442
+ closedFilter: "Closed",
443
+ marketHeader: "Market",
444
+ totalTradedHeader: "Total traded",
445
+ currentValueHeader: "Current value",
446
+ statusHeader: "Status",
447
+ resolutionHeader: "Resolution",
448
+ payoutHeader: "Payout",
449
+ resultHeader: "Result",
450
+ amountWonHeader: "Amount won",
451
+ claimHeader: "Claim",
452
+ claim: "Claim",
453
+ claimed: "Claimed",
454
+ pending: "Pending",
455
+ open: "Open",
456
+ won: "Won",
457
+ lost: "Lost",
458
+ sold: "Sold",
459
+ resolved: "Resolved",
460
+ marketClosed: "Market closed",
461
+ closed: "Closed",
462
+ searchPlaceholder: "Search...",
463
+ noResults: "No results",
464
+ avgPrefix: "avg",
465
+ nowPrefix: "now",
466
+ finalPrefix: "final"
467
+ },
468
+ openOrders: {
469
+ marketHeader: "Market",
470
+ limitPriceHeader: "Limit price",
471
+ filledHeader: "Filled",
472
+ totalHeader: "Total",
473
+ filledShort: "Filled",
474
+ totalShort: "Total",
475
+ expirationHeader: "Expiration",
476
+ buy: "Buy",
477
+ sell: "Sell",
478
+ nowPrefix: "now",
479
+ goodTilCanceled: "Good 'til canceled",
480
+ expired: "Expired",
481
+ cancel: "Cancel",
482
+ pending: "Pending",
483
+ cancelOrderAria: (orderId) => `Cancel order ${orderId}`,
484
+ loading: "Loading open orders",
485
+ loadingMore: "Loading more open orders",
486
+ errorTitle: "Unable to load open orders",
487
+ errorDescription: "Please try again in a moment.",
488
+ emptyTitle: "No open orders",
489
+ emptyDescription: "Your open limit orders will appear here."
490
+ }
491
+ },
492
+ eventList: {
493
+ matchedTab: "Matched",
494
+ allTab: "All",
495
+ sortByLabel: "Sort by",
496
+ sortBy24hVolume: "24h volume",
497
+ sortByTopArbitrage: "Top arbitrage",
498
+ sortByTotalVolume: "Total volume",
499
+ sortByEndingSoon: "Ending soon",
500
+ subcategoriesLabel: "Subcategories",
501
+ subcategoriesAll: "All",
502
+ subcategoriesOpenAria: "Open subcategories",
503
+ subcategoriesCloseAria: "Close subcategories",
504
+ loading: (title) => `Loading ${title}`,
505
+ tabsAria: (title) => `${title} tabs`,
506
+ moreVenuesAria: (count) => `${count} more venues`,
507
+ moreVenuesListAria: "More venues",
508
+ emptyAria: "No events found",
509
+ emptyTitle: "No Events Found",
510
+ emptyDescription: "We couldn't find any events matching your filters.\nTry adjusting them or check back later.",
511
+ empty: "No events found for this tab.",
512
+ errorTitle: "Something went wrong",
513
+ errorDescription: "We're having trouble loading data right now.\nTry refreshing or check back later.",
514
+ viewResolved: "View resolved",
515
+ hideResolved: "Hide resolved"
516
+ },
517
+ search: {
518
+ placeholder: "Search...",
519
+ inputAria: "Search markets",
520
+ resultsAria: "Search results",
521
+ resultAria: (title) => `View ${title}`,
522
+ resultsSummary: (countLabel, query) => `${countLabel} search results for "${query}"`,
523
+ seeAllResults: "See all results",
524
+ loadingResults: "Loading search results",
525
+ noResultsTitle: "No markets found",
526
+ noResultsDescription: "Check your spelling or try a broader search term."
527
+ },
528
+ eventItem: {
529
+ loading: "Loading market tile",
530
+ unavailableAria: "Market tile unavailable",
531
+ unavailableTitle: "Market unavailable",
532
+ unavailableDescription: "We could not load this market right now.",
533
+ arbitrage: "Arbitrage",
534
+ volumeSuffix: "Vol.",
535
+ marketSingular: "Market",
536
+ marketPlural: "Markets",
537
+ venueSingular: "Venue",
538
+ venuePlural: "Venues",
539
+ matched: "Matched",
540
+ matchedCount: (count) => `${count} ${count === 1 ? "Match" : "Matches"}`,
541
+ remainingMarkets: (count) => `+${count} ${count === 1 ? "market" : "markets"}`,
542
+ priceGap: "Price Gap"
543
+ },
544
+ eventItemDetails: {
545
+ chartLegend: "Markets on chart",
546
+ selectChartMarkets: "Select an outcome above to show its history",
547
+ marketHistoryUnavailable: "History unavailable",
548
+ comparisonSource: (venue) => `${venue} · Outcome probabilities`,
549
+ comparisonSeriesCount: (shown, total) => `Showing ${shown} of ${total} series`,
550
+ comparisonSeriesPage: (page, total) => `Page ${page} of ${total}`,
551
+ comparisonSeriesBudget: (limit) => `Up to ${limit} series are live at once. Change pages to compare others; your selected outcome stays visible.`,
552
+ comparisonPreviousSeries: "Previous series",
553
+ comparisonNextSeries: "Next series",
554
+ comparisonSelectedSeries: "Selected",
555
+ comparisonHiddenSeries: "Hidden",
556
+ loading: "Loading market details",
557
+ unavailableAria: "Market details unavailable",
558
+ unavailableTitle: "Market details unavailable",
559
+ unavailableDescription: "We could not load this market right now.",
560
+ notFoundAria: "Event not found",
561
+ notFoundTitle: "Event Not Found",
562
+ notFoundDescription: "We couldn't find this event or it may no longer exist.",
563
+ chartUnavailableAria: "Chart unavailable",
564
+ chartUnavailableTitle: "Chart Unavailable",
565
+ chartUnavailableDescription: "We couldn't load live chart data for this event.",
566
+ historicalLineChartAria: (title) => `${title} historical line chart`,
567
+ outcomeSelectorAria: "Outcome selector",
568
+ yes: "Yes",
569
+ no: "No",
570
+ allTimeRange: "All",
571
+ volumeSuffix: "Vol.",
572
+ marketSelectPlaceholder: "Select market",
573
+ marketSelectSearchPlaceholder: "Search markets...",
574
+ marketSelectEmpty: "No markets found",
575
+ moreMarkets: "More",
576
+ liveMarket: "Live"
577
+ },
578
+ sportsLive: {
579
+ scoreAria: (firstName, firstScore, secondName, secondScore, status) => `${firstName} ${firstScore}, ${secondName} ${secondScore}, ${status}`,
580
+ scheduled: "Scheduled",
581
+ live: "Live",
582
+ paused: "Paused",
583
+ finished: "Final",
584
+ cancelled: "Cancelled",
585
+ postponed: "Postponed",
586
+ unknown: "Status unavailable"
587
+ },
588
+ settlementSummary: {
589
+ title: "Settlement differences",
590
+ readFullDetails: "Read full details",
591
+ showLess: "Show less"
592
+ },
593
+ leaderboard: {
594
+ title: "Leaderboard",
595
+ subtitle: (appName, periodLabel) => `Top traders${appName ? ` on ${appName}` : ""} · ${periodLabel} · updates every 5 minutes`,
596
+ periodLabel: "Period",
597
+ rankByLabel: "Rank by",
598
+ periods: {
599
+ "1d": "24h",
600
+ "7d": "7d",
601
+ "30d": "30d",
602
+ all: "All time"
603
+ },
604
+ metrics: {
605
+ realizedPnl: "Profit & loss",
606
+ volume: "Volume"
607
+ },
608
+ columns: {
609
+ rank: "#",
610
+ trader: "Trader",
611
+ orders: "Trades",
612
+ volume: "Volume",
613
+ realizedPnl: "P&L"
614
+ },
615
+ tradesCount: (count) => `${count} ${count === 1 ? "trade" : "trades"}`,
616
+ anonymousTrader: "Anonymous trader",
617
+ you: "You",
618
+ showMore: "Show more traders",
619
+ loadingAria: "Loading leaderboard",
620
+ emptyTitle: "No trades in this period yet",
621
+ emptyDescription: "Rankings appear once traders place orders. Try a longer period or check back later.",
622
+ errorTitle: "Couldn't load the leaderboard",
623
+ errorDescription: "Something went wrong on our side. Try again in a moment.",
624
+ pnlFootnote: "P&L is realized only: sells and settled markets, before fees. Volume counts both buys and sells. Trades are filled orders. Figures refresh every 5 minutes."
625
+ },
626
+ marketDetails: {
627
+ loading: "Loading market details",
628
+ unavailableAria: "Market details unavailable",
629
+ unavailableTitle: "Market details unavailable",
630
+ unavailableDescription: "We could not load this market right now.",
631
+ notFoundAria: "Market not found",
632
+ notFoundTitle: "Market Not Found",
633
+ notFoundDescription: "We couldn't find this market or it may no longer exist.",
634
+ chartUnavailableAria: "Chart unavailable",
635
+ chartUnavailableTitle: "Chart Unavailable",
636
+ chartUnavailableDescription: "We couldn't load live chart data for this market.",
637
+ orderBookEmptyAria: "No orders yet",
638
+ orderBookEmptyTitle: "No orders yet",
639
+ orderBookEmptyDescription: "Be the first to set the price on this market.",
640
+ orderBookResolvedAria: "Market resolved",
641
+ orderBookResolvedTitle: "Market Resolved",
642
+ orderBookResolvedDescription: "This market has been resolved and is no longer trading.",
643
+ orderBookUnavailableAria: "Orderbook unavailable",
644
+ orderBookUnavailableTitle: "Orderbook Unavailable",
645
+ orderBookUnavailableDescription: "We couldn't load live order data for this market.",
646
+ marketOutcomesAria: "Market outcomes",
647
+ tabsAria: "Market details tabs",
648
+ toggleOpenDetailsAria: (title) => `Open details for ${title}`,
649
+ toggleCloseDetailsAria: (title) => `Close details for ${title}`,
650
+ loadingOrderbookAria: "Loading orderbook",
651
+ loadingOrderbookLabel: "Loading orderbook...",
652
+ asks: "Asks",
653
+ bids: "Bids",
654
+ spread: "Spread",
655
+ midPrice: "Mid",
656
+ tradePrefix: "Trade",
657
+ priceColumn: "Price",
658
+ sharesColumn: "Shares",
659
+ totalColumn: "Total",
660
+ lastPrice: "Last",
661
+ graphAria: (title) => `${title} price history`,
662
+ outcomeSelectorAria: "Outcome selector",
663
+ showOutcomeAria: (label) => `Show ${label} outcome`,
664
+ viewResolved: "View resolved",
665
+ hideResolved: "Hide resolved",
666
+ resolvingBadge: "Resolving",
667
+ resolvingTitle: "Resolving market…",
668
+ resolvingDescription: "This market has closed. We're waiting for final settlement data and will update the result once it's confirmed on-chain.",
669
+ volumeUnavailable: "Volume unavailable",
670
+ tabs: {
671
+ orderBook: "Order Book",
672
+ graph: "Graph",
673
+ other: "Other"
674
+ },
675
+ meta: {
676
+ status: "Status",
677
+ created: "Created",
678
+ opens: "Opens",
679
+ closes: "Closes",
680
+ markets: "Markets",
681
+ unknown: "Unknown",
682
+ venueSingular: "Venue",
683
+ venuePlural: "Venues",
684
+ volumeSuffix: "Vol."
685
+ }
686
+ },
687
+ trading: {
688
+ settlementSection: "Settlement",
689
+ settlementDifferencesTitle: "Key differences across venues",
690
+ settlementFullRulesTitle: "Full rules by venue",
691
+ settlementCriticalDifferenceLabel: "Critical",
692
+ settlementValueUnavailable: "Not provided",
693
+ settlementLoading: "Loading settlement",
694
+ settlementDetailsLoadError: "Settlement details could not be loaded.",
695
+ settlementDetailsAria: (venueLabel) => `${venueLabel} settlement details`,
696
+ settlementShowMoreAria: (ctaLabel, venueLabel) => `${ctaLabel} for ${venueLabel}`,
697
+ settlementDescriptionLabel: "Description",
698
+ settlementRulesPrimaryLabel: "Resolution rules",
699
+ settlementRulesSecondaryLabel: "Additional rules",
700
+ settlementPrimaryRulesLabel: "Resolution rules",
701
+ settlementEmpty: "No settlement details available.",
702
+ disclaimer: "By trading, you agree to the Terms of Use of each exchange.",
703
+ geoBlockTermsLink: "Terms of Use",
704
+ geoBlockGenericMessage: "None of the venues for this market are available in your region. See ",
705
+ geoBlockVenueMessage: (venueLabel) => `Trading on ${venueLabel} is not available in your region. See `,
706
+ geoBlockMessageSuffix: " for more information.",
707
+ geoBlockModalAriaLabel: "Geo-restricted location",
708
+ geoBlockModalTitle: "Trading is not available in your current location",
709
+ geoBlockModalDescription: "You appear to be located in a restricted jurisdiction. You can still browse markets in view-only mode or return when you're in a supported region.",
710
+ geoBlockModalConfirm: "Confirm",
711
+ averagePrice: (value) => `${(value * 100).toLocaleString("en-US", {
712
+ minimumFractionDigits: 0,
713
+ maximumFractionDigits: 2
714
+ })}¢ avg. price`,
715
+ balance: (value) => `Balance ${value}`,
716
+ betdexBalance: (value) => `BETDEX balance ${value}`,
717
+ betdexBalanceUnavailable: "BETDEX balance unavailable",
718
+ manageBetdexAccount: "Manage BETDEX account",
719
+ shares: (value) => `${value.toLocaleString("en-US", {
720
+ minimumFractionDigits: Number.isInteger(value) ? 0 : 1,
721
+ maximumFractionDigits: 2
722
+ })} shares`,
723
+ maxShares: "Max",
724
+ slippage: (value) => `Slippage: ${value}%`,
725
+ editSlippage: (value) => `Edit ${value}`,
726
+ collapseSlippage: (value) => `Collapse ${value}`,
727
+ resetSlippage: "Auto",
728
+ slippageWarning: (value) => `Slippage below ${value}% may prevent your order from executing.`,
729
+ slippageLow: (value) => `Slippage below ${value}% may prevent your order from executing.`,
730
+ slippageHigh: (value) => `Slippage above ${value}% increases the chance of an unfavorable trade.`,
731
+ showAdditionalVenues: (count) => `Show ${count} more venue${count === 1 ? "" : "s"}`,
732
+ hideAdditionalVenues: "Hide additional venues",
733
+ quoteExpired: "Quote expired. Please refresh.",
734
+ orderSubmitted: "Order submitted",
735
+ orderPending: "Your order is being processed...",
736
+ orderFailed: "Order failed. Please try again.",
737
+ orderDisabledEventResolved: "This event has been resolved.",
738
+ orderDisabledEventClosed: "This event is no longer accepting orders.",
739
+ orderDisabledEventPaused: "Trading is temporarily paused for this event.",
740
+ orderDisabledEventUnopened: "Trading has not opened yet for this event.",
741
+ orderDisabledEventUnavailable: "Trading is currently unavailable.",
742
+ orderDisabledMarketResolved: "This market has been resolved.",
743
+ orderDisabledMarketClosed: "This market is no longer accepting orders.",
744
+ orderDisabledMarketPaused: "Trading is temporarily paused for this market.",
745
+ orderDisabledMarketUnopened: "Trading has not opened yet for this market.",
746
+ orderDisabledMarketUnavailable: "Trading is currently unavailable for this market.",
747
+ orderDisabledNoMarket: "Select a market to place an order.",
748
+ orderDisabledNoOutcome: "Select an outcome to place an order.",
749
+ orderDisabledNoEvent: "No event selected.",
750
+ insufficientBalance: "Insufficient balance",
751
+ insufficientBalanceDetails: "Insufficient balance details",
752
+ lowLiquidityWarning: "Your avg. price is higher than the market price due to your order size and available market liquidity.",
753
+ lowLiquiditySellWarning: "Your avg. price is lower than the market price due to your order size and available market liquidity.",
754
+ refreshQuote: "Refresh Quote",
755
+ confirmOrder: "Confirm Order",
756
+ withdrawSubmitted: "Withdrawal submitted",
757
+ withdrawProcessing: "Your withdrawal is being processed...",
758
+ estimatedCost: (value) => `Est. cost ${value}`,
759
+ partialFill: (filledSize, requestedSize) => `Only ${filledSize} of ${requestedSize} shares available at this price.`,
760
+ insufficientLiquidity: "Not enough liquidity available for this order size.",
761
+ noMarketSelected: "Select a market to place an order.",
762
+ noOrderbooks: "No live orderbooks are available for this market right now.",
763
+ quoteUnavailable: "Quote temporarily unavailable. Please try again.",
764
+ quoteBalanceMismatch: "Quote balance mismatch. Try a different amount.",
765
+ serviceTemporarilyUnavailable: "Service temporarily unavailable. Please try again in a moment.",
766
+ orderDeadlineExpiredBeforeSubmission: "Order deadline expired before submission. Please try again.",
767
+ sellNoOnchainPosition: "You don't currently hold any on-chain shares of this outcome. If you just sold or redeemed elsewhere, your position display will refresh shortly — try again after that.",
768
+ venueQuoteUnfillable: "The venue couldn't fill this order at the quoted price right now. Try a smaller size, a higher slippage tolerance, or wait a moment and re-quote.",
769
+ venueMinOrderSize: "Order size is below the venue minimum. Try a larger amount.",
770
+ sourceBalanceChanged: "Your balance changed since the quote. Refresh and try again, or pick a smaller amount.",
771
+ venueMarketResolved: "This market just resolved. Pick a different market or wait for the next round.",
772
+ dflowWalletUnverified: "This route is unavailable for your wallet. Check your account connection and try again.",
773
+ venueNoQuotePath: "No active quote path for this market right now. Try a different size, or wait a moment and re-quote.",
774
+ solanaBlockhashExpired: "Solana transaction expired before submission. Please re-quote and try again.",
775
+ venueRateLimited: "The venue is rate-limiting requests right now. Please wait a moment and try again.",
776
+ serviceBlockedOrder: "Something on our side blocked this order. Please contact support if it keeps happening — retrying with the same quote will hit the same issue.",
777
+ selectedVenueUnavailable: "The venue you selected is no longer available on this route. Review the updated options and try again.",
778
+ engineUnavailable: "The routing engine is temporarily unavailable. Please try again in a moment.",
779
+ insufficientInputAmount: "Trade amount is too small to cover bridging and execution costs. Increase your spend or deposit funds on the destination chain.",
780
+ minOrderSizeViolated: "Order size is below the venue minimum. Increase your spend.",
781
+ minimumOrderAmount: (amount) => `Minimum order is $${amount}`,
782
+ insufficientPosition: (totalShares) => `You only have ${totalShares} shares available to sell.`,
783
+ insufficientPositionGeneric: "You don't have enough shares to sell.",
784
+ insufficientSellDepth: "Not enough bid liquidity on the matched venues for this sell amount.",
785
+ noBidsAboveMinPrice: "No venue bids above the minimum price.",
786
+ signInToTrade: "Sign in to trade",
787
+ deposit: "Deposit",
788
+ addFundsToKalshi: "Add funds to Kalshi",
789
+ fundKalshiModal: {
790
+ ariaLabel: "Fund your Kalshi account",
791
+ title: "Fund Your Kalshi Account",
792
+ description: "Kalshi manages its own account balances, so funds can't be deposited through agg.market. Add funds directly in Kalshi, then return here to trade with your updated balance.",
793
+ howItWorks: "How it works",
794
+ kalshiLinkLabel: "Kalshi",
795
+ kalshiUrl: "https://kalshi.com",
796
+ firstStepPrefix: "Go to",
797
+ firstStepSuffix: "and sign in to your account.",
798
+ remainingSteps: [
799
+ "Click Add Funds.",
800
+ "Complete your deposit using your preferred payment method.",
801
+ "Return here - your Kalshi balance will be available automatically."
802
+ ],
803
+ doItLater: "I'll do it later",
804
+ done: "Done"
805
+ },
806
+ kycRequired: "Verify to trade Kalshi",
807
+ kycNotVerifiedTooltip: "You have not been verified yet",
808
+ kycVerify: "Verify Identity",
809
+ kycVerifyModalTitle: "Verify Your Identity",
810
+ kycVerifyModalDescription: "To start trading on Kalshi, you'll need to complete identity verification through dFlow. It only takes a few minutes and helps us stay compliant with regulations.",
811
+ kycStartVerification: "Start Verification",
812
+ kycDoItLater: "Do It Later",
813
+ kycSuccessTitle: "Verification successful",
814
+ kycSuccessDescription: "Your identity has been confirmed and you now have full access to trade on Kalshi markets.",
815
+ kycSuccessDone: "Done",
816
+ sharedKyc: {
817
+ required: "KYC required",
818
+ completeToTrade: "Complete KYC to trade",
819
+ checkingStatus: "Checking verification status",
820
+ modal: {
821
+ ariaLabel: "Identity verification",
822
+ title: "Verify Your Identity",
823
+ freeDescription: "Complete a one-time identity verification to trade all KYC-required venues.",
824
+ pendingTitle: "Verification pending",
825
+ pendingDescription: "Your verification is being reviewed. Check back for approval before trading.",
826
+ checkStatus: "Check verification status",
827
+ startVerification: "Start verification",
828
+ doItLater: "Do it later",
829
+ successTitle: "Verification successful",
830
+ successDescription: "Your identity has been verified. You can now trade on all KYC-required venues.",
831
+ done: "Done",
832
+ error: "We couldn't confirm your verification."
833
+ }
834
+ },
835
+ connectKalshi: "Connect Kalshi to trade",
836
+ connectProphetx: "Connect ProphetX to trade",
837
+ manageProphetx: "Manage ProphetX connection",
838
+ prophetxFundingNotice: "Manage funds on ProphetX",
839
+ prophetxSettlementNotice: "This position settles on ProphetX",
840
+ connectNovig: "Connect Novig to trade",
841
+ manageNovig: "Manage Novig connection",
842
+ novigFundingNotice: "Manage funds on Novig",
843
+ novigSettlementNotice: "This position settles on Novig",
844
+ requiresKalshiAccount: "Requires Kalshi account",
845
+ tradingAccessVenues: "Venues",
846
+ tradingAccessAvailable: "Available",
847
+ tradingAccessAddKalshiAccount: "Add Kalshi Account",
848
+ configureBetdexAccount: "Configure account",
849
+ outcome: (label) => `Outcome: ${label}`,
850
+ smartRouting: "Smart Routing",
851
+ limitRoutingCurrentPrice: (priceLabel, feeLabel) => feeLabel ? `Current ${priceLabel} · Fee ${feeLabel}` : `Current ${priceLabel}`,
852
+ orderTypeMarket: "Market",
853
+ orderTypeLimit: "Limit",
854
+ orderTypeAria: "Order type",
855
+ limitPrice: "Limit price",
856
+ limitPriceInputAria: "Limit price in cents",
857
+ limitPriceInvalid: "Limit price must be greater than 0 and less than 100.",
858
+ limitPriceAdjusted: (venueLabels, tickSizeCents, originalPriceLabel, side, adjustedPriceLabel) => {
859
+ return `${venueLabels.length <= 1 ? venueLabels.join("") : venueLabels.length === 2 ? `${venueLabels[0]} and ${venueLabels[1]}` : `${venueLabels.slice(0, -1).join(", ")} and ${venueLabels[venueLabels.length - 1]}`} price in ${tickSizeCents === 1 ? "whole cents" : `${tickSizeCents.toLocaleString("en-US", { maximumFractionDigits: 4 })}¢ increments`}, so your ${originalPriceLabel} ${side} rounds ${side === "buy" ? "down" : "up"} to ${adjustedPriceLabel}`;
860
+ },
861
+ limitPriceDecreaseAria: "Decrease limit price",
862
+ limitPriceIncreaseAria: "Increase limit price",
863
+ expiration: "Expiration",
864
+ expirationGoodTilCanceled: "Good 'til canceled",
865
+ expirationFiveMinutes: "5m",
866
+ expirationOneHour: "1h",
867
+ expirationEndOfDay: "End of day (EST)",
868
+ expirationCustom: "Custom",
869
+ expirationMenuAria: "Choose expiration",
870
+ expirationOptions: "Expiration options",
871
+ expirationDateAria: "Limit order expiration date",
872
+ expirationStartTime: "Start time",
873
+ expirationStartTimeHint: "24-hour format",
874
+ expirationCancel: "Cancel",
875
+ expirationApply: "Apply",
876
+ limitOrderPlacedTitle: "Limit order placed",
877
+ limitOrderPlacedDescription: "Your limit order has been submitted.",
878
+ orderSplitting: "Order Splitting",
879
+ splitOrderDescription: "We split your order for the best price:",
880
+ maximizePayout: "Maximize payout",
881
+ maximizePayoutDescription: "We’ll route your shares for the highest payout:",
882
+ venueInventory: (sharesLabel, priceLabel) => `${sharesLabel} · ${priceLabel}`,
883
+ insufficientVenueInventory: (sharesLabel, priceLabel) => `Only ${sharesLabel} · ${priceLabel}`,
884
+ viewAllRoutes: (count) => `View all (${count})`,
885
+ venueUnavailableInRegion: "Unavailable in your region",
886
+ venueTemporarilyUnavailable: "Temporarily unavailable",
887
+ verified: "Verified",
888
+ platformFee: "0% platform fees",
889
+ estimatedFees: "Estimated fees",
890
+ betdexSettlementFeeNotice: "BETDEX charges 1% of net profit per market at settlement, not per fill. The final fee depends on all positions in that market.",
891
+ executionReserve: "Execution reserve",
892
+ executionReserveTooltipAria: "Why funds are reserved",
893
+ executionReserveDescription: "Held for price movement or possible venue charges, not a confirmed fee. Unused funds are returned after execution.",
894
+ estimatedFeesTooltipAria: "Estimated fees breakdown",
895
+ feeBreakdownVenueFees: "Venue",
896
+ feeBreakdownBuilderFee: "Builder",
897
+ feeBreakdownBridgeFees: "Bridging",
898
+ feeBreakdownExecutionGas: "Gas",
899
+ feeBreakdownAggMarket: "agg.market",
900
+ feeBreakdownPlatformFeeBadge: "0% fee",
901
+ feeBreakdownTotalFees: "Total fees",
902
+ toWin: (tab) => tab === "buy" ? "To win" : "Payout",
903
+ buyingOutcome: (label) => `Buying ${label}`,
904
+ sellingOutcome: (label) => `Selling ${label}`,
905
+ findingBestRoute: "Finding the best route...",
906
+ findingBestOdds: "Finding best odds…",
907
+ updatingRoute: "Updating route…",
908
+ refreshingQuotes: "Refreshing quotes…",
909
+ checkingBalance: "Checking balance",
910
+ executingOrder: "Executing order...",
911
+ submittingOrderProgress: "Submitting order...",
912
+ executionOrderSubmitted: "Order submitted",
913
+ orderSubmittedProgress: (orderId) => `Order #${orderId.replace(/^#/, "")} submitted`,
914
+ executingOnVenue: (venueLabel) => `Executing on ${venueLabel}...`,
915
+ venueOrder: (venueLabel) => `${venueLabel} order`,
916
+ settingUpBridge: "Setting up bridging...",
917
+ bridgeSetupComplete: "Bridge setup complete",
918
+ bridgingFundsProgress: "Bridging funds...",
919
+ bridgeComplete: "Bridge complete",
920
+ bridgingFunds: (amount, sourceChain, destinationChain, tokenSymbol = "USDC") => `Bridging ${amount} ${tokenSymbol} from ${sourceChain} to ${destinationChain}...`,
921
+ fundsBridged: (amount, sourceChain, destinationChain, tokenSymbol = "USDC") => `Bridged ${amount} ${tokenSymbol} from ${sourceChain} to ${destinationChain}`,
922
+ depositingFunds: (amount, tokenSymbol, destinationChain) => `Depositing ${amount} ${tokenSymbol} to ${destinationChain}...`,
923
+ fundsDeposited: (amount, tokenSymbol, destinationChain) => `Deposited ${amount} ${tokenSymbol} to ${destinationChain}`,
924
+ fillingOnVenue: (venueLabel) => `Filling on ${venueLabel}...`,
925
+ orderStillSettling: "Still settling. This can take a bit — check your activity feed. You can keep trading.",
926
+ venueFilledAtPriceWithAmount: (venueLabel, amountLabel, priceLabel) => `${venueLabel} filled ${amountLabel} at ${priceLabel}`,
927
+ executionShares: (value) => `${value} shares`,
928
+ confirmTransactionInWallet: "Confirm the transaction in your wallet",
929
+ executionConfirmed: "Execution confirmed",
930
+ orderSuccessTitle: "Order placed",
931
+ orderSuccessDescription: "Your order has been submitted successfully.",
932
+ orderFailureTitle: "Order failed",
933
+ orderFailureDescription: (message) => message || "Something went wrong. Please try again.",
934
+ orderDone: "Done",
935
+ orderNewTrade: "New trade",
936
+ orderShare: "Share",
937
+ orderRetry: "Try again",
938
+ orderContinue: "Continue",
939
+ orderDismiss: "Dismiss",
940
+ orderRetryVenue: (venueLabel) => `Retry ${venueLabel}`,
941
+ orderPartialFillStatus: (venueLabel) => `${venueLabel} order partially filled`,
942
+ orderVenueUnavailableStatus: (venueLabel) => `${venueLabel} unavailable, your funds have not been charged.`,
943
+ orderMarketResolvedStatus: (venueLabel) => `Market resolved on ${venueLabel} and is no longer accepting orders.`,
944
+ orderSummaryShares: "Shares",
945
+ orderSummaryAvgPrice: "Avg. price",
946
+ orderSummaryEstCost: "Est. cost",
947
+ orderSummaryVenue: "Venue",
948
+ orderAmountFilled: "Amount filled",
949
+ orderAmountFilledOf: (requestedAmount) => `of ${requestedAmount}`,
950
+ orderPayout: "Payout",
951
+ orderFullyFilled: "Order fully filled",
952
+ orderPartiallyFilled: "Order partially filled",
953
+ orderAveragePrice: (priceLabel) => `avg. ${priceLabel}`,
954
+ orderAmount: "Order amount",
955
+ orderLimitPrice: (priceLabel) => `limit ${priceLabel}`,
956
+ limitVenueOrder: (venueLabel) => `${venueLabel} limit order`,
957
+ limitOrderSubmitting: "Submitting limit order...",
958
+ limitOrderSubmitted: "Limit order submitted",
959
+ orderComplete: "Order complete",
960
+ orderFilledAtPrice: (venueLabel, priceLabel) => `${venueLabel} order filled at ${priceLabel}`,
961
+ orderFilledAtPriceWithAmount: (venueLabel, priceLabel, amountLabel) => `${venueLabel} order filled at ${priceLabel} (${amountLabel})`,
962
+ orderPartiallyFilledAtPriceWithAmount: (venueLabel, priceLabel, amountLabel) => `${venueLabel} order partially filled at ${priceLabel} (${amountLabel})`,
963
+ orderSkip: "Skip",
964
+ orderRetryRemaining: "Retry remaining",
965
+ orderTryRemaining: (remainingLabel) => `Try remaining ${remainingLabel}`,
966
+ orderClose: "Close",
967
+ resolvedEarningsTitle: "Your Earnings",
968
+ resolvedResolutionDateLabel: "Resolution date",
969
+ resolvedSharesLabel: "Shares",
970
+ resolvedTotalPayoutLabel: "Total payout",
971
+ claimWinnings: "Claim Winnings",
972
+ boughtOutcomeAtPrice: (label, priceLabel) => `Bought ${label} at ${priceLabel}`,
973
+ soldOutcomeAtPrice: (label, priceLabel) => `Sold ${label} at ${priceLabel}`,
974
+ potentialReturnBonus: (value) => `+${value} Better Payout`,
975
+ potentialReturnBetter: (value) => `+${value} Better`,
976
+ withSmartRouting: "with Smart Routing",
977
+ buy: "Buy",
978
+ sell: "Sell",
979
+ amount: (side) => `${side === "buy" ? "Amount" : "Shares"}`
980
+ },
981
+ onboarding: {
982
+ modal: {
983
+ title: "Onboarding",
984
+ stepHowItWorks: "How it works",
985
+ stepProfileSetup: "Set up your profile",
986
+ stepConnectAccounts: "Connect accounts"
987
+ },
988
+ howItWorks: {
989
+ title: "How it works",
990
+ continue: "Continue",
991
+ features: {
992
+ createAccount: {
993
+ title: "Create Your Account",
994
+ description: "Add a few basic details to set up your account and personalize your experience on the platform."
995
+ },
996
+ linkAccounts: {
997
+ title: "Link Trading Accounts",
998
+ description: "Connect supported exchanges to unlock additional markets and liquidity. Trade across decentralized markets in one interface."
999
+ },
1000
+ bestPrices: {
1001
+ title: "Best Prices Always",
1002
+ description: "Our real-time aggregated orderbook lets you shop lines across exchanges and automatically splits predictions to optimize trades."
1003
+ },
1004
+ stayInControl: {
1005
+ title: "You Stay in Control",
1006
+ description: "All trades are executed on the original platform. We never custody funds or move money on your behalf."
1007
+ }
1008
+ }
1009
+ },
1010
+ profileSetup: {
1011
+ title: "Set up your profile",
1012
+ uploadProfilePictureAria: "Upload profile picture",
1013
+ profilePreviewAlt: "Profile preview",
1014
+ usernameLabel: "Username",
1015
+ usernamePlaceholder: "e.g. CryptoJohn",
1016
+ continue: "Continue"
1017
+ },
1018
+ connectAccounts: {
1019
+ title: "Connect Accounts",
1020
+ connect: "Connect",
1021
+ connectAccount: "Connect Account",
1022
+ continue: "Continue",
1023
+ onchainTitle: "Onchain exchanges",
1024
+ onchainMobileTitle: (additionalVenueCount) => `Polymarket +${additionalVenueCount} venues`,
1025
+ onchainDescription: "Trade multiple venues with one signature.",
1026
+ onchainMobileDescription: "Trade multiple exchanges with one signature",
1027
+ kalshiTitle: "US regulated exchanges",
1028
+ kalshiMobileTitle: "Kalshi",
1029
+ kalshiDescription: "Trade on regulated markets via Kalshi.",
1030
+ kalshiMobileDescription: "Connect your Kalshi account"
1031
+ },
1032
+ connectOnchainModal: {
1033
+ ariaLabel: "Connect Onchain Exchanges",
1034
+ title: "Connect Onchain Exchanges",
1035
+ description: "Sign in with your wallet to trade across supported\nonchain prediction markets.",
1036
+ supportedVenuesLabel: "Supported venues:",
1037
+ connect: "Sign In with Wallet",
1038
+ cancel: "Cancel",
1039
+ fallbackError: "Signature declined. Please try again."
1040
+ },
1041
+ connectProphetxModal: {
1042
+ disconnect: "Disconnect ProphetX",
1043
+ disconnecting: "Disconnecting…",
1044
+ disconnectError: "Could not disconnect ProphetX. Finish any open orders and try again.",
1045
+ title: "Connect ProphetX Account",
1046
+ description: "Add your ProphetX access key and secret key to trade with your existing account.",
1047
+ fundingNotice: "Trades use your ProphetX balance. Deposits, withdrawals, and transfers are managed on ProphetX, outside AGG.",
1048
+ instructions: "Create an API key in your ProphetX account settings",
1049
+ accessKey: "Access key",
1050
+ secretKey: "Secret key",
1051
+ verify: "Verify connection",
1052
+ verifying: "Verifying…",
1053
+ error: "Could not connect to ProphetX. Check your credentials and try again.",
1054
+ connected: "Your ProphetX account is connected.",
1055
+ done: "Done"
1056
+ },
1057
+ connectNovigModal: {
1058
+ disconnect: "Disconnect Novig",
1059
+ disconnecting: "Disconnecting…",
1060
+ disconnectError: "Could not disconnect Novig. Finish any open orders and try again.",
1061
+ title: "Connect Novig Account",
1062
+ description: "Add the trading key ID and private key for your funded Novig subaccount.",
1063
+ fundingNotice: "Trades use your Novig balance. Deposits, withdrawals, and transfers are managed on Novig, outside AGG.",
1064
+ instructions: "Set up a Novig trading subaccount",
1065
+ keyId: "Trading key ID",
1066
+ privateKey: "Private key",
1067
+ verify: "Verify connection",
1068
+ verifying: "Verifying…",
1069
+ error: "Could not connect to Novig. Check your credentials and try again.",
1070
+ connected: "Your Novig account is connected.",
1071
+ done: "Done"
1072
+ },
1073
+ connectKalshiModal: {
1074
+ ariaLabel: "Connect Kalshi Account",
1075
+ title: "Connect Kalshi Account",
1076
+ description: "You'll generate an API key in Kalshi profile and add it to connect your account. These keys are used only to execute trades on your behalf.",
1077
+ stepOne: {
1078
+ label: "Step 1",
1079
+ title: "Generate a Read/Write API Key in Kalshi",
1080
+ instructions: {
1081
+ signIn: "1. Sign in to your Kalshi account.",
1082
+ goToProfilePrefix: "2. Go to your",
1083
+ profileText: "Profile",
1084
+ goToProfileSeparator: ":",
1085
+ profileUrl: "https://kalshi.com/account/profile",
1086
+ clickCreateKeyPrefix: "3. Click",
1087
+ createKeyText: "Create Key",
1088
+ clickCreateKeySuffix: ".",
1089
+ selectPermissionsPrefix: "4. Select",
1090
+ readWriteText: "Read/Write",
1091
+ selectPermissionsSuffix: " permissions.",
1092
+ createKey: "5. Create the key."
1093
+ },
1094
+ footerLineOne: "Kalshi will display your API Key ID and Private Key.",
1095
+ footerLineTwo: "You'll need both for the next step."
1096
+ },
1097
+ stepTwo: {
1098
+ label: "Step 2",
1099
+ title: "Paste Your Kalshi API Credentials",
1100
+ description: "These credentials are encrypted and used only to execute trades on your behalf. We can't access your funds directly.",
1101
+ apiKeyIdLabel: "API Key ID",
1102
+ apiKeyIdPlaceholder: "a3f9c1b2-7d4e-4c91-9f2a-8b6e1d3c5a77",
1103
+ privateKeyLabel: "Private Key",
1104
+ privateKeyPlaceholder: "-----BEGIN PRIVATE KEY-----\nMIIEvQIBADANBgkqhkiG9w0BAQEFAASC..."
1105
+ },
1106
+ actions: {
1107
+ cancel: "Cancel",
1108
+ verifyConnection: "Verify Connection"
1109
+ },
1110
+ success: {
1111
+ title: "Kalshi Account Connected",
1112
+ description: "Your Kalshi account is now connected to AGG. You can start trading Kalshi markets.",
1113
+ done: "Done"
1114
+ },
1115
+ fallbackError: "Verification failed. Please check your credentials and try again."
1116
+ }
1117
+ },
1118
+ eventMarketPage: {
1119
+ loadMoreMarkets: "Load more markets",
1120
+ loadingMoreMarkets: "Loading markets…",
1121
+ openOrders: {
1122
+ title: "Open orders",
1123
+ limitPriceHeader: "Limit price",
1124
+ filledHeader: "Filled",
1125
+ totalHeader: "Total",
1126
+ expirationHeader: "Expiration",
1127
+ limitShort: "Limit",
1128
+ filledShort: "Filled",
1129
+ totalShort: "Tot.",
1130
+ expirationShort: "Exp."
1131
+ },
1132
+ unavailableAria: "Event market page unavailable",
1133
+ unavailableTitle: "Something went wrong",
1134
+ unavailableDescription: "We're having trouble loading this event right now.\nTry refreshing or check back later.",
1135
+ loadingSettlementQuestion: "Loading settlement",
1136
+ loadingSettlementDifferencesTitle: "Loading settlement",
1137
+ loadingSettlementPlaceholder: "Loading",
1138
+ tradingResolvedBadge: "Resolved",
1139
+ tradingResolvedTitle: "Market resolved",
1140
+ tradingResolvedDescription: "Trading has ended for this event. You can review the final result.",
1141
+ tradingClosedBadge: "Closed",
1142
+ tradingClosedTitle: "Trading closed",
1143
+ tradingClosedDescription: "This event is no longer accepting new orders.",
1144
+ tradingPausedBadge: "Paused",
1145
+ tradingPausedTitle: "Trading paused",
1146
+ tradingPausedDescription: "Trading is temporarily unavailable for this event.",
1147
+ tradingUnopenedBadge: "Upcoming",
1148
+ tradingUnopenedTitle: "Trading not open yet",
1149
+ tradingUnopenedDescription: "This event is listed, but trading has not opened yet.",
1150
+ tradingUnavailableBadge: "Unavailable",
1151
+ tradingUnavailableTitle: "Trading unavailable",
1152
+ tradingUnavailableDescription: "Trading is currently unavailable for this event.",
1153
+ resolvedAt: (dateLabel) => `Resolved ${dateLabel}`,
1154
+ closedAt: (dateLabel) => `Closed ${dateLabel}`,
1155
+ opensAt: (dateLabel) => `Opens ${dateLabel}`,
1156
+ winningOutcome: (label) => `Winning outcome: ${label}`,
1157
+ resolvedOutcome: (label) => `Resolved: ${label}`,
1158
+ marketDetailsAriaByDate: (dateLabel) => `Market details for ${dateLabel}`,
1159
+ marketDetailsAriaByQuestion: (question) => `Market details for ${question}`,
1160
+ recurringCountdownAria: (countdown) => `Current market ends in ${countdown}`,
1161
+ goToLive: "Go to live",
1162
+ liveMarketUnavailable: "A live market is not available yet",
1163
+ sports: {
1164
+ summaryAria: "Sports event summary",
1165
+ sectionTabsAria: "Sports market sections",
1166
+ lineSelectorAria: (marketTitle) => `Select line for ${marketTitle}`,
1167
+ previousLineAria: (marketTitle) => `Show previous lines for ${marketTitle}`,
1168
+ nextLineAria: (marketTitle) => `Show next lines for ${marketTitle}`,
1169
+ comparisonToggleAria: (marketTitle, expanded) => `${expanded ? "Hide" : "Show"} venue comparison for ${marketTitle}`,
1170
+ comparisonTitle: "Venue alternatives",
1171
+ compareVenues: (count) => `Compare ${count} venues`,
1172
+ marketCount: (count) => `${count} markets`,
1173
+ venueCount: (count) => `${count} venues`,
1174
+ volumeShort: "Vol.",
1175
+ totalVolumeShort: "Total Vol.",
1176
+ gameStarts: "Game starts",
1177
+ moreMarketsTitle: "More markets",
1178
+ gameLinesTab: "Game Lines",
1179
+ halvesTab: "Halves",
1180
+ quartersTab: "Quarters",
1181
+ setsTab: "Sets",
1182
+ playerPropsTab: "Player Props",
1183
+ exactScoreTab: "Exact Score",
1184
+ cornersTab: "Corners",
1185
+ goalsTab: "Goals",
1186
+ assistsTab: "Assists",
1187
+ shotsTab: "Shots",
1188
+ otherTab: "Other",
1189
+ moneylineTitle: "Moneyline",
1190
+ spreadTitle: "Spreads",
1191
+ totalTitle: "Totals",
1192
+ fullPeriod: "Regular time",
1193
+ firstHalfPeriod: "1st half",
1194
+ secondHalfPeriod: "2nd half",
1195
+ quarterOnePeriod: "1st quarter",
1196
+ quarterTwoPeriod: "2nd quarter",
1197
+ quarterThreePeriod: "3rd quarter",
1198
+ quarterFourPeriod: "4th quarter",
1199
+ overtimePeriod: "Overtime",
1200
+ otherPeriod: "Other",
1201
+ loadingTitle: "Loading section",
1202
+ loadingDescription: "Fetching the latest markets for this game.",
1203
+ emptyTitle: "No markets available",
1204
+ emptyDescription: (sectionLabel) => `There are no ${sectionLabel} markets yet.`,
1205
+ loadMore: "Load more",
1206
+ loadingMore: "Loading more",
1207
+ bestPriceBadge: "Best price",
1208
+ selectOutcomeAria: (marketTitle, outcomeLabel, priceLabel) => `Select ${outcomeLabel} in ${marketTitle} at ${priceLabel}`
1209
+ }
1210
+ },
1211
+ header: {
1212
+ bannerAria: "Site header",
1213
+ logoAria: "Home"
1214
+ },
1215
+ paperTrading: {
1216
+ badge: "Paper trading",
1217
+ badgeTooltip: "Trade real prediction markets with simulated funds. No real money at risk.",
1218
+ profile: {
1219
+ buyingPower: "Paper Buying Power",
1220
+ earnings: "Paper Earnings",
1221
+ earningsCaption: "Keep what you earn"
1222
+ },
1223
+ onboarding: {
1224
+ stepEyebrow: ({ current, total }) => `STEP ${current} OF ${total}`,
1225
+ skip: "Skip",
1226
+ back: "Back",
1227
+ next: "Next",
1228
+ done: "Get started",
1229
+ realMarkets: {
1230
+ title: "Real markets, real prices",
1231
+ body: "Follow live prediction markets and trade using real-time market prices from leading venues."
1232
+ },
1233
+ zeroRisk: {
1234
+ title: "Paper trading, zero risk",
1235
+ body: ({ amount }) => `Start with ${amount} in simulated funds. No deposit, no real money, and no risk.`
1236
+ },
1237
+ readyToTrade: {
1238
+ title: "You're ready to trade",
1239
+ body: "Pick a market, make your prediction, and track your performance."
1240
+ }
1241
+ }
1242
+ },
1243
+ notifications: {
1244
+ order: {
1245
+ filledTitle: "Order filled",
1246
+ filledMessage: ({ venueLabel, sideLabel, amountLabel, priceLabel }) => {
1247
+ return `${sideLabel ? `${sideLabel} filled` : "Filled"}${amountLabel ? ` ${amountLabel}` : ""}${priceLabel ? ` at ${priceLabel}` : ""}${venueLabel ? ` on ${venueLabel}` : ""}`.trim();
1248
+ },
1249
+ partialFilledTitle: "Order partially filled",
1250
+ partialFilledMessage: ({ venueLabel, sideLabel, amountLabel, priceLabel }) => {
1251
+ return `${sideLabel ? `${sideLabel} partially filled` : "Partially filled"}${amountLabel ? ` ${amountLabel}` : ""}${priceLabel ? ` at ${priceLabel}` : ""}${venueLabel ? ` on ${venueLabel}` : ""}`.trim();
1252
+ },
1253
+ cancelledTitle: "Order canceled",
1254
+ cancelledMessage: "Your open order was canceled.",
1255
+ cancelPendingTitle: "Cancellation submitted",
1256
+ cancelPendingMessage: "Your cancellation request is being processed.",
1257
+ cancelFailedTitle: "Cancellation failed",
1258
+ cancelFailedMessage: (errorReason) => errorReason && errorReason.length > 0 ? errorReason : "Your open order could not be canceled. Please try again.",
1259
+ failedTitle: "Order failed",
1260
+ failedMessage: (errorReason) => errorReason && errorReason.length > 0 ? errorReason : "Your order could not be completed. Please try again."
1261
+ },
1262
+ deposit: {
1263
+ completedTitle: "Deposit complete",
1264
+ completedMessage: ({ amountLabel, tokenLabel }) => {
1265
+ if (amountLabel && tokenLabel) return `${amountLabel} ${tokenLabel} added to your balance.`;
1266
+ if (tokenLabel) return `Your ${tokenLabel} has been added to your balance.`;
1267
+ return "Your funds have been added to your balance.";
1268
+ },
1269
+ failedTitle: "Deposit failed",
1270
+ failedMessage: ({ amountLabel, tokenLabel }) => {
1271
+ return `We couldn't complete your ${amountLabel && tokenLabel ? `${amountLabel} ${tokenLabel}` : "deposit"}.`;
1272
+ }
1273
+ },
1274
+ withdrawal: {
1275
+ completedTitle: "Withdrawal complete",
1276
+ completedMessage: ({ amountLabel, tokenLabel }) => {
1277
+ if (amountLabel && tokenLabel) return `${amountLabel} ${tokenLabel} sent to your wallet.`;
1278
+ if (tokenLabel) return `Your ${tokenLabel} has been sent to your wallet.`;
1279
+ return "Your withdrawal has been sent to your wallet.";
1280
+ },
1281
+ partialTitle: "Withdrawal partially completed",
1282
+ partialMessage: ({ amountLabel, tokenLabel }) => {
1283
+ if (amountLabel && tokenLabel) return `Part of your ${tokenLabel} was sent. The remainder was returned to your balance.`;
1284
+ return "Part of your withdrawal was sent. The remainder was returned to your balance.";
1285
+ },
1286
+ failedTitle: "Withdrawal failed",
1287
+ failedMessage: (errorReason) => errorReason && errorReason.length > 0 ? errorReason : "Your funds have been returned to your balance."
1288
+ },
1289
+ claim: {
1290
+ pendingTitle: "Claim started",
1291
+ pendingMessage: "Claiming your winnings.",
1292
+ submittedTitle: "Claim submitted",
1293
+ submittedMessage: "Your claim was submitted. It may take a little while to finish.",
1294
+ successTitle: "Claim complete",
1295
+ successMessage: "Your winnings have been claimed.",
1296
+ partialTitle: "Claim partially completed",
1297
+ partialMessage: (errorReason) => errorReason && errorReason.length > 0 ? errorReason : "Some winnings could not be claimed. Please try again.",
1298
+ failedTitle: "Claim failed",
1299
+ failedMessage: (errorReason) => errorReason && errorReason.length > 0 ? errorReason : "Your winnings could not be claimed. Please try again.",
1300
+ missingOutcomeMessage: "This position is missing claimable outcome data. Please refresh."
1301
+ }
1302
+ }
1303
+ };
1304
+ const defaultAggUiLabelsByLocale = {
1305
+ "en-US": enUsLabels,
1306
+ en: enUsLabels
1307
+ };
1308
+ const isObjectValue = (value) => {
1309
+ return typeof value === "object" && value !== null && !Array.isArray(value);
1310
+ };
1311
+ const mergeObjectValues = (baseValue, overrideValue) => {
1312
+ const mergedEntries = Object.entries(baseValue).map(([key, value]) => {
1313
+ const nextOverrideValue = overrideValue[key];
1314
+ if (typeof nextOverrideValue === "undefined") return [key, value];
1315
+ if (isObjectValue(value) && isObjectValue(nextOverrideValue)) return [key, mergeObjectValues(value, nextOverrideValue)];
1316
+ return [key, nextOverrideValue];
1317
+ });
1318
+ return Object.fromEntries(mergedEntries);
1319
+ };
1320
+ const resolveAggUiLabels = (locale) => {
1321
+ if (defaultAggUiLabelsByLocale[locale]) return defaultAggUiLabelsByLocale[locale];
1322
+ const baseLocale = locale.split("-")[0];
1323
+ return defaultAggUiLabelsByLocale[baseLocale] ?? enUsLabels;
1324
+ };
1325
+ const mergeAggUiLabels = (baseLabels, overrides) => {
1326
+ if (!overrides) return baseLabels;
1327
+ return mergeObjectValues(baseLabels, overrides);
1328
+ };
1329
+ //#endregion
1330
+ //#region src/core/ui-config/utils.ts
1331
+ const DEFAULT_LOCALE = "en-US";
1332
+ const createFormatters = (locale) => {
1333
+ const number = new Intl.NumberFormat(locale, { maximumFractionDigits: 2 });
1334
+ const percent = new Intl.NumberFormat(locale, {
1335
+ style: "percent",
1336
+ minimumFractionDigits: 0,
1337
+ maximumFractionDigits: 0
1338
+ });
1339
+ const currency = new Intl.NumberFormat(locale, {
1340
+ style: "currency",
1341
+ currency: "USD",
1342
+ maximumFractionDigits: 2
1343
+ });
1344
+ const compactCurrency = new Intl.NumberFormat(locale, {
1345
+ style: "currency",
1346
+ currency: "USD",
1347
+ notation: "compact",
1348
+ maximumFractionDigits: 0
1349
+ });
1350
+ const date = new Intl.DateTimeFormat(locale, {
1351
+ month: "long",
1352
+ day: "numeric",
1353
+ year: "numeric"
1354
+ });
1355
+ return {
1356
+ formatNumber: (value) => number.format(value),
1357
+ formatPercent: (value) => percent.format(value),
1358
+ formatCurrency: (value) => currency.format(value),
1359
+ formatCompactCurrency: (value) => compactCurrency.format(value),
1360
+ formatDate: (value) => date.format(value)
1361
+ };
1362
+ };
1363
+ const defaultFormatters = createFormatters(DEFAULT_LOCALE);
1364
+ const defaultAggUiSearchConfig = {
1365
+ value: "",
1366
+ result: null,
1367
+ isShowingAllResults: false
1368
+ };
1369
+ const defaultAggUiConfig = {
1370
+ enableLogs: false,
1371
+ enableWebsocketsLogs: false,
1372
+ enableDebug: false,
1373
+ general: {
1374
+ locale: DEFAULT_LOCALE,
1375
+ theme: "light",
1376
+ rootClassName: "",
1377
+ labels: resolveAggUiLabels(DEFAULT_LOCALE)
1378
+ },
1379
+ features: {
1380
+ enableAnimations: true,
1381
+ enableLiveUpdates: true,
1382
+ enablePriceGap: false,
1383
+ showFeesBreakdown: false,
1384
+ enableGradients: false,
1385
+ enableVenueEventDiscoveryFilters: false,
1386
+ enableEventDiscoveryUrlPersistence: false,
1387
+ enableNotifications: true,
1388
+ showLimitOrders: false,
1389
+ showSportsMarkets: false,
1390
+ uncrossMergedOrderbook: false
1391
+ },
1392
+ market: {
1393
+ arbitrageThreshold: 0,
1394
+ maxMidpointIdsPerRequest: 75
1395
+ },
1396
+ chart: {
1397
+ defaultChartTimeRange: "1D",
1398
+ selectedChartTimeRange: "1D",
1399
+ setSelectedChartTimeRange: () => {}
1400
+ },
1401
+ formatting: defaultFormatters,
1402
+ search: defaultAggUiSearchConfig,
1403
+ trading: { executionMode: "live" }
1404
+ };
1405
+ const mergeAggUiSearchConfig = (config) => {
1406
+ return {
1407
+ value: config?.value ?? defaultAggUiSearchConfig.value,
1408
+ onChange: config?.onChange,
1409
+ onSelect: config?.onSelect,
1410
+ openResults: config?.openResults,
1411
+ closeResults: config?.closeResults,
1412
+ result: config?.result ?? null,
1413
+ isShowingAllResults: config?.isShowingAllResults ?? defaultAggUiSearchConfig.isShowingAllResults
1414
+ };
1415
+ };
1416
+ const mergeAggUiConfig = (persisted, config) => {
1417
+ const locale = config?.general?.locale ?? persisted.general?.locale ?? "en-US";
1418
+ const theme = config?.general?.theme ?? persisted.general?.theme ?? defaultAggUiConfig.general.theme;
1419
+ const formatters = createFormatters(locale);
1420
+ const defaultLabels = resolveAggUiLabels(locale);
1421
+ return {
1422
+ enableLogs: config?.enableLogs ?? defaultAggUiConfig.enableLogs,
1423
+ enableWebsocketsLogs: config?.enableWebsocketsLogs ?? defaultAggUiConfig.enableWebsocketsLogs,
1424
+ enableDebug: config?.enableDebug ?? defaultAggUiConfig.enableDebug,
1425
+ general: {
1426
+ locale,
1427
+ theme,
1428
+ rootClassName: config?.general?.rootClassName ?? defaultAggUiConfig.general.rootClassName,
1429
+ labels: mergeAggUiLabels(defaultLabels, config?.general?.labels)
1430
+ },
1431
+ features: {
1432
+ enableAnimations: config?.features?.enableAnimations ?? defaultAggUiConfig.features.enableAnimations,
1433
+ enableLiveUpdates: config?.features?.enableLiveUpdates ?? defaultAggUiConfig.features.enableLiveUpdates,
1434
+ enablePriceGap: config?.features?.enablePriceGap ?? defaultAggUiConfig.features.enablePriceGap,
1435
+ showFeesBreakdown: config?.features?.showFeesBreakdown ?? defaultAggUiConfig.features.showFeesBreakdown,
1436
+ enableGradients: config?.features?.enableGradients ?? defaultAggUiConfig.features.enableGradients,
1437
+ enableVenueEventDiscoveryFilters: config?.features?.enableVenueEventDiscoveryFilters ?? defaultAggUiConfig.features.enableVenueEventDiscoveryFilters,
1438
+ enableEventDiscoveryUrlPersistence: config?.features?.enableEventDiscoveryUrlPersistence ?? defaultAggUiConfig.features.enableEventDiscoveryUrlPersistence,
1439
+ enableNotifications: config?.features?.enableNotifications ?? defaultAggUiConfig.features.enableNotifications,
1440
+ showLimitOrders: config?.features?.showLimitOrders ?? defaultAggUiConfig.features.showLimitOrders,
1441
+ showSportsMarkets: config?.features?.showSportsMarkets ?? defaultAggUiConfig.features.showSportsMarkets,
1442
+ uncrossMergedOrderbook: config?.features?.uncrossMergedOrderbook ?? defaultAggUiConfig.features.uncrossMergedOrderbook
1443
+ },
1444
+ market: {
1445
+ arbitrageThreshold: config?.market?.arbitrageThreshold ?? defaultAggUiConfig.market.arbitrageThreshold,
1446
+ maxMidpointIdsPerRequest: config?.market?.maxMidpointIdsPerRequest ?? defaultAggUiConfig.market.maxMidpointIdsPerRequest,
1447
+ minVolume: config?.market?.minVolume ?? defaultAggUiConfig.market.minVolume
1448
+ },
1449
+ chart: {
1450
+ defaultChartTimeRange: config?.chart?.defaultChartTimeRange ?? defaultAggUiConfig.chart.defaultChartTimeRange,
1451
+ selectedChartTimeRange: persisted.chart?.selectedChartTimeRange ?? config?.chart?.defaultChartTimeRange ?? defaultAggUiConfig.chart.defaultChartTimeRange,
1452
+ setSelectedChartTimeRange: defaultAggUiConfig.chart.setSelectedChartTimeRange
1453
+ },
1454
+ formatting: {
1455
+ formatNumber: config?.formatting?.formatNumber ?? formatters.formatNumber,
1456
+ formatPercent: config?.formatting?.formatPercent ?? formatters.formatPercent,
1457
+ formatPrice: config?.formatting?.formatPrice,
1458
+ formatCurrency: config?.formatting?.formatCurrency ?? formatters.formatCurrency,
1459
+ formatCompactCurrency: config?.formatting?.formatCompactCurrency ?? formatters.formatCompactCurrency,
1460
+ formatDate: config?.formatting?.formatDate ?? formatters.formatDate
1461
+ },
1462
+ search: mergeAggUiSearchConfig(config?.search),
1463
+ trading: { executionMode: config?.trading?.executionMode ?? defaultAggUiConfig.trading.executionMode },
1464
+ walletActions: config?.walletActions,
1465
+ solanaRpcUrl: config?.solanaRpcUrl
1466
+ };
1467
+ };
1468
+ //#endregion
1469
+ //#region src/core/providers/contexts.ts
1470
+ const AggClientContext = (0, react.createContext)(null);
1471
+ const AggUiContext = (0, react.createContext)(defaultAggUiConfig);
1472
+ /**
1473
+ * Server-resolved app-level settings that the client must not decide for
1474
+ * itself — currently paper/live mode and the paper grant (SNA-2964).
1475
+ *
1476
+ * `null` means "no AggExecutionModeProvider above me", which happens when a
1477
+ * component is rendered under a bare `AggUiProvider` (Storybook, unit tests,
1478
+ * partners composing pieces by hand). Consumers fall back to local config in
1479
+ * that case rather than throwing — mounting a component outside the full
1480
+ * provider stack must not become a hard error.
1481
+ */
1482
+ const AggExecutionModeContext = (0, react.createContext)(null);
1483
+ /**
1484
+ * Labels live on a separate context so consumers of `useLabels()` don't
1485
+ * re-render when volatile config slices (search value, selected chart range,
1486
+ * open-results flag, etc.) change. The provider keeps the two contexts in sync.
1487
+ */
1488
+ const AggLabelsContext = (0, react.createContext)(defaultAggUiConfig.general.labels);
1489
+ const AggAuthContext = (0, react.createContext)(null);
1490
+ const AggBalanceContext = (0, react.createContext)(null);
1491
+ //#endregion
1492
+ //#region src/execution/query-keys.ts
1493
+ const executionKeys = {
1494
+ all: () => ["execution"],
1495
+ balances: (mode, custody) => custody && custody !== "managed" ? [
1496
+ "execution",
1497
+ "balances",
1498
+ mode ?? "live",
1499
+ custody
1500
+ ] : mode ? [
1501
+ "execution",
1502
+ "balances",
1503
+ mode
1504
+ ] : ["execution", "balances"],
1505
+ positions: (cursor, limit, status, mode) => mode ? [
1506
+ "execution",
1507
+ "positions",
1508
+ cursor ?? null,
1509
+ limit ?? null,
1510
+ status ?? null,
1511
+ mode
1512
+ ] : [
1513
+ "execution",
1514
+ "positions",
1515
+ cursor ?? null,
1516
+ limit ?? null,
1517
+ status ?? null
1518
+ ],
1519
+ positionsPrefix: () => ["execution", "positions"],
1520
+ claimablePositionsCount: () => [
1521
+ "execution",
1522
+ "positions",
1523
+ "claimable-count"
1524
+ ],
1525
+ /**
1526
+ * @deprecated Misnomer — claimable (redeemStatus "eligible") groups live in
1527
+ * the ACTIVE bucket, not closed (won-but-unclaimed stays Active until a
1528
+ * redeem stamps redeemedAt). Same key value as `claimablePositionsCount`;
1529
+ * kept so existing invalidation call sites keep matching.
1530
+ */
1531
+ claimableClosedPositionsCount: () => [
1532
+ "execution",
1533
+ "positions",
1534
+ "claimable-count"
1535
+ ],
1536
+ orders: (status, cursor, limit) => [
1537
+ "execution",
1538
+ "orders",
1539
+ status ?? null,
1540
+ cursor ?? null,
1541
+ limit ?? null
1542
+ ],
1543
+ ordersPrefix: () => ["execution", "orders"],
1544
+ depositAddresses: () => ["execution", "deposit-addresses"],
1545
+ balanceRefillPolicies: () => ["execution", "balance-refill-policies"]
1546
+ };
1547
+ //#endregion
1548
+ //#region src/execution/balance-invalidation.ts
1549
+ const balanceQueryKeys = {
1550
+ execution: () => executionKeys.balances(),
1551
+ provider: (mode) => executionKeys.balances(mode),
1552
+ venue: (venuesKey) => ["venue-balances", venuesKey],
1553
+ venuePrefix: () => ["venue-balances"]
1554
+ };
1555
+ const BALANCE_REFRESHING_ORDER_EVENTS = /* @__PURE__ */ new Set([
1556
+ "filled",
1557
+ "partial_fill",
1558
+ "cancelled"
1559
+ ]);
1560
+ /**
1561
+ * Invalidate every balance cache surface used across hooks and provider contexts.
1562
+ * Use `refetchType: "active"` by default to avoid broad refetch storms.
1563
+ */
1564
+ const invalidateBalanceQueries = (queryClient, options) => {
1565
+ const refetchType = options?.refetchType ?? "active";
1566
+ const executionKey = balanceQueryKeys.execution();
1567
+ const providerKey = balanceQueryKeys.provider();
1568
+ queryClient.invalidateQueries({
1569
+ queryKey: executionKey,
1570
+ refetchType
1571
+ });
1572
+ if (providerKey.length !== executionKey.length || providerKey.some((segment, index) => segment !== executionKey[index])) queryClient.invalidateQueries({
1573
+ queryKey: providerKey,
1574
+ refetchType
1575
+ });
1576
+ queryClient.invalidateQueries({
1577
+ queryKey: balanceQueryKeys.venuePrefix(),
1578
+ refetchType
1579
+ });
1580
+ queryClient.invalidateQueries({
1581
+ queryKey: ["agg", "hosted-venue-account"],
1582
+ refetchType
1583
+ });
1584
+ };
1585
+ /**
1586
+ * Invalidate every cached position query so the UI re-reads share counts after
1587
+ * a fill. Filled and partially-filled orders mutate the user's outcome-token
1588
+ * holdings, so positions need to be refetched alongside balances.
1589
+ */
1590
+ const invalidatePositionQueries = (queryClient, options) => {
1591
+ queryClient.invalidateQueries({
1592
+ queryKey: executionKeys.positionsPrefix(),
1593
+ refetchType: options?.refetchType ?? "active"
1594
+ });
1595
+ };
1596
+ const shouldInvalidateBalancesForOrderEvent = (event, currentUserId) => {
1597
+ if (!BALANCE_REFRESHING_ORDER_EVENTS.has(event.event)) return false;
1598
+ if (!currentUserId) return true;
1599
+ return event.userId === currentUserId;
1600
+ };
1601
+ const userActivityQueryKeys = {
1602
+ all: () => ["user-activity"],
1603
+ feed: (type, limit) => [
1604
+ "user-activity",
1605
+ type ?? "all",
1606
+ limit ?? 50
1607
+ ]
1608
+ };
1609
+ /**
1610
+ * Refresh the `useUserActivity` infinite query family after money movement.
1611
+ * Defaults to `removeQueries` so the next render refetches page 1 cleanly
1612
+ * (cursor-based pagination can't guarantee ordering after a new head row).
1613
+ */
1614
+ const invalidateUserActivityQueries = (queryClient, options) => {
1615
+ if ((options?.strategy ?? "remove") === "remove") {
1616
+ queryClient.removeQueries({ queryKey: userActivityQueryKeys.all() });
1617
+ return;
1618
+ }
1619
+ queryClient.invalidateQueries({
1620
+ queryKey: userActivityQueryKeys.all(),
1621
+ refetchType: "all"
1622
+ });
1623
+ };
1624
+ /**
1625
+ * Invalidate every cache surface affected by a successful deposit or
1626
+ * withdrawal. Call AFTER the backend has confirmed the operation — not on
1627
+ * modal close, not on optimistic submit.
1628
+ *
1629
+ * Scope (kept narrow on purpose):
1630
+ * - balances (canonical + venue) — the balance number changed
1631
+ * - positions — derived "available to trade" / share-count UIs read this
1632
+ * alongside balances; refetch keeps them consistent
1633
+ * - user activity — the deposit/withdraw row needs to appear in the feed
1634
+ *
1635
+ * Out of scope: orders / execution-orders (trade-side, not money movement),
1636
+ * current-user (no money fields change on deposit/withdraw today).
1637
+ */
1638
+ const invalidateUserMoneyState = (queryClient, options) => {
1639
+ invalidateBalanceQueries(queryClient, { refetchType: options?.refetchType });
1640
+ invalidatePositionQueries(queryClient, { refetchType: options?.refetchType });
1641
+ invalidateUserActivityQueries(queryClient, { strategy: options?.activityStrategy });
1642
+ };
1643
+ /**
1644
+ * Refresh every user-facing cache touched by a winnings claim attempt. Claims
1645
+ * can change the visible claimable count, the active/closed position buckets,
1646
+ * balances, and activity rows. Run this from mutation `onSettled` so rejected
1647
+ * attempts also clear stale pending UI.
1648
+ */
1649
+ const invalidateUserClaimState = (queryClient, options) => {
1650
+ const refetchType = options?.refetchType ?? "active";
1651
+ invalidateBalanceQueries(queryClient, { refetchType });
1652
+ invalidatePositionQueries(queryClient, { refetchType });
1653
+ queryClient.invalidateQueries({
1654
+ queryKey: executionKeys.claimablePositionsCount(),
1655
+ refetchType
1656
+ });
1657
+ invalidateUserActivityQueries(queryClient, { strategy: options?.activityStrategy });
1658
+ };
1659
+ //#endregion
1660
+ //#region src/core/providers/hooks.ts
1661
+ const useAggClient = () => {
1662
+ const client = (0, react.useContext)(AggClientContext);
1663
+ if (!client) throw new Error("useAggClient must be used within an <AggProvider>");
1664
+ return client;
1665
+ };
1666
+ /** Like {@link useAggClient}, but returns `null` when no `<AggProvider>` is mounted. */
1667
+ const useOptionalAggClient = () => {
1668
+ return (0, react.useContext)(AggClientContext);
1669
+ };
1670
+ const useAggUiConfig = () => {
1671
+ return (0, react.useContext)(AggUiContext);
1672
+ };
1673
+ const useAggLabels = () => {
1674
+ return (0, react.useContext)(AggLabelsContext);
1675
+ };
1676
+ const useAggAuthContext = () => {
1677
+ const context = (0, react.useContext)(AggAuthContext);
1678
+ if (!context) throw new Error("useAggAuthContext must be used within an <AggProvider>");
1679
+ return context;
1680
+ };
1681
+ const useAggAuthState = useAggAuthContext;
1682
+ const useAggBalanceContext = () => {
1683
+ const context = (0, react.useContext)(AggBalanceContext);
1684
+ if (!context) throw new Error("useAggBalanceContext must be used within an <AggProvider>");
1685
+ return context;
1686
+ };
1687
+ const useAggBalanceState = useAggBalanceContext;
1688
+ const useAggBalance = useAggBalanceContext;
1689
+ const useSdkUiConfig = useAggUiConfig;
1690
+ const useSdkLabels = useAggLabels;
1691
+ const useLabels = useAggLabels;
1692
+ //#endregion
1693
+ //#region src/execution/use-deposit-addresses.ts
1694
+ /** Chain IDs that use the Solana VM — these must use svmAddress. */
1695
+ const SVM_CHAIN_IDS = /* @__PURE__ */ new Set([792703809]);
1696
+ /**
1697
+ * Returns the correct deposit address for the given chainId.
1698
+ * Solana (chainId 792703809) → svmAddress; all other chains → evmAddress.
1699
+ */
1700
+ function getDepositAddress(chainId, data) {
1701
+ return chainId !== void 0 && SVM_CHAIN_IDS.has(chainId) ? data.svmAddress : data.evmAddress;
1702
+ }
1703
+ /**
1704
+ * Query hook for fetching managed wallet deposit addresses.
1705
+ * Polls every 5 seconds while the wallet is being provisioned (ready === false).
1706
+ * Stops polling after timeoutMs (default 60s) and sets isTimedOut.
1707
+ */
1708
+ function useDepositAddresses(options) {
1709
+ const client = useAggClient();
1710
+ const { enabled = true, poll = true, refetchIntervalMs = 5e3, timeoutMs = 6e4 } = options ?? {};
1711
+ const [isTimedOut, setIsTimedOut] = (0, react.useState)(false);
1712
+ const timeoutRef = (0, react.useRef)(null);
1713
+ (0, react.useEffect)(() => {
1714
+ if (!enabled || !poll) return void 0;
1715
+ setIsTimedOut(false);
1716
+ timeoutRef.current = setTimeout(() => setIsTimedOut(true), timeoutMs);
1717
+ return () => {
1718
+ if (timeoutRef.current) clearTimeout(timeoutRef.current);
1719
+ };
1720
+ }, [
1721
+ enabled,
1722
+ poll,
1723
+ timeoutMs
1724
+ ]);
1725
+ const query = (0, _tanstack_react_query.useQuery)({
1726
+ queryKey: executionKeys.depositAddresses(),
1727
+ queryFn: () => client.getDepositAddresses(),
1728
+ enabled,
1729
+ staleTime: 6e4,
1730
+ gcTime: 3e5,
1731
+ retry: 1,
1732
+ refetchInterval: (q) => {
1733
+ if (!poll || isTimedOut) return false;
1734
+ if (q.state.data?.ready === true) return false;
1735
+ return refetchIntervalMs;
1736
+ }
1737
+ });
1738
+ const isReady = query.data?.ready === true;
1739
+ const readyData = isReady ? query.data : void 0;
1740
+ const evmAddress = (0, react.useMemo)(() => readyData?.evmAddress, [readyData]);
1741
+ const svmAddress = (0, react.useMemo)(() => readyData?.svmAddress, [readyData]);
1742
+ const supportedChains = (0, react.useMemo)(() => readyData?.supportedChains, [readyData]);
1743
+ return {
1744
+ ...query,
1745
+ isReady,
1746
+ isTimedOut,
1747
+ evmAddress,
1748
+ svmAddress,
1749
+ supportedChains,
1750
+ depositAddresses: query.data,
1751
+ /** Resolve the correct address (EVM or SVM) for a given chainId. */
1752
+ getAddress: (chainId) => readyData ? getDepositAddress(chainId, readyData) : void 0
1753
+ };
1754
+ }
1755
+ //#endregion
1756
+ //#region src/execution/use-sync-balances.ts
1757
+ /**
1758
+ * Mutation hook for triggering an on-chain balance sync. Acts as the
1759
+ * deposit-completion signal (`useDepositFlow` fires it after a wallet tx
1760
+ * settles and after a card-purchase redirect returns), so on success we
1761
+ * invalidate the full money-state cache surface — balances, positions, and
1762
+ * the activity feed — not just balances.
1763
+ */
1764
+ function useSyncBalances(options) {
1765
+ const client = useAggClient();
1766
+ const queryClient = (0, _tanstack_react_query.useQueryClient)();
1767
+ return (0, _tanstack_react_query.useMutation)({
1768
+ mutationFn: () => client.syncManagedBalances(),
1769
+ onSuccess: () => {
1770
+ invalidateUserMoneyState(queryClient);
1771
+ options?.onSuccess?.();
1772
+ },
1773
+ onError: options?.onError
1774
+ });
1775
+ }
1776
+ //#endregion
1777
+ Object.defineProperty(exports, "AggAuthContext", {
1778
+ enumerable: true,
1779
+ get: function() {
1780
+ return AggAuthContext;
1781
+ }
1782
+ });
1783
+ Object.defineProperty(exports, "AggBalanceContext", {
1784
+ enumerable: true,
1785
+ get: function() {
1786
+ return AggBalanceContext;
1787
+ }
1788
+ });
1789
+ Object.defineProperty(exports, "AggClientContext", {
1790
+ enumerable: true,
1791
+ get: function() {
1792
+ return AggClientContext;
1793
+ }
1794
+ });
1795
+ Object.defineProperty(exports, "AggExecutionModeContext", {
1796
+ enumerable: true,
1797
+ get: function() {
1798
+ return AggExecutionModeContext;
1799
+ }
1800
+ });
1801
+ Object.defineProperty(exports, "AggLabelsContext", {
1802
+ enumerable: true,
1803
+ get: function() {
1804
+ return AggLabelsContext;
1805
+ }
1806
+ });
1807
+ Object.defineProperty(exports, "AggUiContext", {
1808
+ enumerable: true,
1809
+ get: function() {
1810
+ return AggUiContext;
1811
+ }
1812
+ });
1813
+ Object.defineProperty(exports, "balanceQueryKeys", {
1814
+ enumerable: true,
1815
+ get: function() {
1816
+ return balanceQueryKeys;
1817
+ }
1818
+ });
1819
+ Object.defineProperty(exports, "defaultAggUiConfig", {
1820
+ enumerable: true,
1821
+ get: function() {
1822
+ return defaultAggUiConfig;
1823
+ }
1824
+ });
1825
+ Object.defineProperty(exports, "executionKeys", {
1826
+ enumerable: true,
1827
+ get: function() {
1828
+ return executionKeys;
1829
+ }
1830
+ });
1831
+ Object.defineProperty(exports, "getDepositAddress", {
1832
+ enumerable: true,
1833
+ get: function() {
1834
+ return getDepositAddress;
1835
+ }
1836
+ });
1837
+ Object.defineProperty(exports, "invalidateBalanceQueries", {
1838
+ enumerable: true,
1839
+ get: function() {
1840
+ return invalidateBalanceQueries;
1841
+ }
1842
+ });
1843
+ Object.defineProperty(exports, "invalidatePositionQueries", {
1844
+ enumerable: true,
1845
+ get: function() {
1846
+ return invalidatePositionQueries;
1847
+ }
1848
+ });
1849
+ Object.defineProperty(exports, "invalidateUserActivityQueries", {
1850
+ enumerable: true,
1851
+ get: function() {
1852
+ return invalidateUserActivityQueries;
1853
+ }
1854
+ });
1855
+ Object.defineProperty(exports, "invalidateUserClaimState", {
1856
+ enumerable: true,
1857
+ get: function() {
1858
+ return invalidateUserClaimState;
1859
+ }
1860
+ });
1861
+ Object.defineProperty(exports, "invalidateUserMoneyState", {
1862
+ enumerable: true,
1863
+ get: function() {
1864
+ return invalidateUserMoneyState;
1865
+ }
1866
+ });
1867
+ Object.defineProperty(exports, "mergeAggUiConfig", {
1868
+ enumerable: true,
1869
+ get: function() {
1870
+ return mergeAggUiConfig;
1871
+ }
1872
+ });
1873
+ Object.defineProperty(exports, "resolveAggUiLabels", {
1874
+ enumerable: true,
1875
+ get: function() {
1876
+ return resolveAggUiLabels;
1877
+ }
1878
+ });
1879
+ Object.defineProperty(exports, "shouldInvalidateBalancesForOrderEvent", {
1880
+ enumerable: true,
1881
+ get: function() {
1882
+ return shouldInvalidateBalancesForOrderEvent;
1883
+ }
1884
+ });
1885
+ Object.defineProperty(exports, "useAggAuthContext", {
1886
+ enumerable: true,
1887
+ get: function() {
1888
+ return useAggAuthContext;
1889
+ }
1890
+ });
1891
+ Object.defineProperty(exports, "useAggAuthState", {
1892
+ enumerable: true,
1893
+ get: function() {
1894
+ return useAggAuthState;
1895
+ }
1896
+ });
1897
+ Object.defineProperty(exports, "useAggBalance", {
1898
+ enumerable: true,
1899
+ get: function() {
1900
+ return useAggBalance;
1901
+ }
1902
+ });
1903
+ Object.defineProperty(exports, "useAggBalanceContext", {
1904
+ enumerable: true,
1905
+ get: function() {
1906
+ return useAggBalanceContext;
1907
+ }
1908
+ });
1909
+ Object.defineProperty(exports, "useAggBalanceState", {
1910
+ enumerable: true,
1911
+ get: function() {
1912
+ return useAggBalanceState;
1913
+ }
1914
+ });
1915
+ Object.defineProperty(exports, "useAggClient", {
1916
+ enumerable: true,
1917
+ get: function() {
1918
+ return useAggClient;
1919
+ }
1920
+ });
1921
+ Object.defineProperty(exports, "useAggLabels", {
1922
+ enumerable: true,
1923
+ get: function() {
1924
+ return useAggLabels;
1925
+ }
1926
+ });
1927
+ Object.defineProperty(exports, "useAggUiConfig", {
1928
+ enumerable: true,
1929
+ get: function() {
1930
+ return useAggUiConfig;
1931
+ }
1932
+ });
1933
+ Object.defineProperty(exports, "useDepositAddresses", {
1934
+ enumerable: true,
1935
+ get: function() {
1936
+ return useDepositAddresses;
1937
+ }
1938
+ });
1939
+ Object.defineProperty(exports, "useLabels", {
1940
+ enumerable: true,
1941
+ get: function() {
1942
+ return useLabels;
1943
+ }
1944
+ });
1945
+ Object.defineProperty(exports, "useOptionalAggClient", {
1946
+ enumerable: true,
1947
+ get: function() {
1948
+ return useOptionalAggClient;
1949
+ }
1950
+ });
1951
+ Object.defineProperty(exports, "useSdkLabels", {
1952
+ enumerable: true,
1953
+ get: function() {
1954
+ return useSdkLabels;
1955
+ }
1956
+ });
1957
+ Object.defineProperty(exports, "useSdkUiConfig", {
1958
+ enumerable: true,
1959
+ get: function() {
1960
+ return useSdkUiConfig;
1961
+ }
1962
+ });
1963
+ Object.defineProperty(exports, "useSyncBalances", {
1964
+ enumerable: true,
1965
+ get: function() {
1966
+ return useSyncBalances;
1967
+ }
1968
+ });
1969
+ Object.defineProperty(exports, "userActivityQueryKeys", {
1970
+ enumerable: true,
1971
+ get: function() {
1972
+ return userActivityQueryKeys;
1973
+ }
1974
+ });