be-components 7.6.2 → 7.6.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 (41) hide show
  1. package/lib/commonjs/BetRouter/layouts/DesktopAdminLayout.js +27 -2
  2. package/lib/commonjs/BetRouter/layouts/DesktopAdminLayout.js.map +1 -1
  3. package/lib/commonjs/BetRouter/layouts/MobileAdminLayout.js +24 -0
  4. package/lib/commonjs/BetRouter/layouts/MobileAdminLayout.js.map +1 -1
  5. package/lib/commonjs/BetRouter/types/credentials.js +20 -4
  6. package/lib/commonjs/BetRouter/types/credentials.js.map +1 -1
  7. package/lib/commonjs/BetRouter/types/liquidity.js +4 -0
  8. package/lib/commonjs/Wallet/components/WalletActionSelector.js +3 -1
  9. package/lib/commonjs/Wallet/components/WalletActionSelector.js.map +1 -1
  10. package/lib/module/BetRouter/layouts/DesktopAdminLayout.js +29 -4
  11. package/lib/module/BetRouter/layouts/DesktopAdminLayout.js.map +1 -1
  12. package/lib/module/BetRouter/layouts/MobileAdminLayout.js +26 -2
  13. package/lib/module/BetRouter/layouts/MobileAdminLayout.js.map +1 -1
  14. package/lib/module/BetRouter/types/credentials.js +17 -2
  15. package/lib/module/BetRouter/types/credentials.js.map +1 -1
  16. package/lib/module/BetRouter/types/liquidity.js +1 -1
  17. package/lib/module/Wallet/components/WalletActionSelector.js +3 -1
  18. package/lib/module/Wallet/components/WalletActionSelector.js.map +1 -1
  19. package/lib/typescript/lib/commonjs/BetRouter/layouts/DesktopAdminLayout.d.ts.map +1 -1
  20. package/lib/typescript/lib/commonjs/BetRouter/layouts/MobileAdminLayout.d.ts.map +1 -1
  21. package/lib/typescript/lib/commonjs/BetRouter/types/credentials.d.ts +33 -0
  22. package/lib/typescript/lib/commonjs/BetRouter/types/credentials.d.ts.map +1 -1
  23. package/lib/typescript/lib/commonjs/BetRouter/types/liquidity.d.ts +1 -1
  24. package/lib/typescript/lib/commonjs/Wallet/components/WalletActionSelector.d.ts.map +1 -1
  25. package/lib/typescript/lib/module/BetRouter/layouts/DesktopAdminLayout.d.ts.map +1 -1
  26. package/lib/typescript/lib/module/BetRouter/layouts/MobileAdminLayout.d.ts.map +1 -1
  27. package/lib/typescript/lib/module/BetRouter/types/credentials.d.ts +33 -0
  28. package/lib/typescript/lib/module/BetRouter/types/credentials.d.ts.map +1 -1
  29. package/lib/typescript/lib/module/Wallet/components/WalletActionSelector.d.ts.map +1 -1
  30. package/lib/typescript/src/BetRouter/layouts/DesktopAdminLayout.d.ts.map +1 -1
  31. package/lib/typescript/src/BetRouter/layouts/MobileAdminLayout.d.ts.map +1 -1
  32. package/lib/typescript/src/BetRouter/types/credentials.d.ts +3 -1
  33. package/lib/typescript/src/BetRouter/types/credentials.d.ts.map +1 -1
  34. package/lib/typescript/src/BetRouter/types/liquidity.d.ts +11 -0
  35. package/lib/typescript/src/BetRouter/types/liquidity.d.ts.map +1 -1
  36. package/package.json +1 -1
  37. package/src/BetRouter/layouts/DesktopAdminLayout.tsx +27 -2
  38. package/src/BetRouter/layouts/MobileAdminLayout.tsx +27 -2
  39. package/src/BetRouter/types/credentials.ts +20 -3
  40. package/src/BetRouter/types/liquidity.ts +18 -0
  41. package/src/Wallet/components/WalletActionSelector.tsx +1 -1
@@ -2,8 +2,8 @@ import React, { useEffect, useState } from 'react';
2
2
  import { View, Text } from "../../Components/Themed";
3
3
  import { ScrollView, TouchableOpacity } from 'react-native';
4
4
  import { useColors } from '../../constants/useColors';
5
- import { Icons, SearchBox } from '../../Components';
6
- import { getLeagues } from '../api';
5
+ import { Icons, SearchBox, Button } from '../../Components';
6
+ import { getLeagues, BetRouterApi } from '../api';
7
7
  import type { RouterLeagueProps } from '../types';
8
8
  import LeagueInfo from '../components/admin/LeagueInfo';
9
9
  import LeagueContests from '../components/admin/LeagueContests';
@@ -33,9 +33,11 @@ const DesktopAdminLayout = ({ insets, onClose, initialContestId, initialLeagueId
33
33
  const [selectedSection, setSelectedSection] = useState<NavigationSection>('info');
34
34
  const [selectedTool, setSelectedTool] = useState<GlobalTool | null>(null);
35
35
  const [searchText, setSearchText] = useState('');
36
+ const [reconcilingOpportunities, setReconcilingOpportunities] = useState(false);
36
37
 
37
38
  // Load leagues on mount
38
39
  useEffect(() => {
40
+ BetRouterApi.setEnvironment();
39
41
  loadLeagues();
40
42
  }, []);
41
43
 
@@ -91,6 +93,19 @@ const DesktopAdminLayout = ({ insets, onClose, initialContestId, initialLeagueId
91
93
  setSelectedSection('info'); // Reset section when selecting a tool
92
94
  };
93
95
 
96
+ const handleReconcileOpportunities = async () => {
97
+ setReconcilingOpportunities(true);
98
+ try {
99
+ await BetRouterApi.BetRouter.OpportunityApi.reconcileOpportunities();
100
+ alert('Opportunities reconciled successfully!');
101
+ } catch (error) {
102
+ console.error('Failed to reconcile opportunities:', error);
103
+ alert('Failed to reconcile opportunities. Check console for details.');
104
+ } finally {
105
+ setReconcilingOpportunities(false);
106
+ }
107
+ };
108
+
94
109
  const filteredLeagues = leagues.filter(league =>
95
110
  league.name.toLowerCase().includes(searchText.toLowerCase())
96
111
  );
@@ -298,6 +313,7 @@ const DesktopAdminLayout = ({ insets, onClose, initialContestId, initialLeagueId
298
313
  paddingLeft: 16,
299
314
  backgroundColor: selectedTool === 'router-markets' ? Colors.views.header : 'transparent',
300
315
  borderRadius: 4,
316
+ marginBottom: 16,
301
317
  }}
302
318
  >
303
319
  <Text
@@ -307,6 +323,15 @@ const DesktopAdminLayout = ({ insets, onClose, initialContestId, initialLeagueId
307
323
  Router Markets
308
324
  </Text>
309
325
  </TouchableOpacity>
326
+
327
+ {/* Reconcile Opportunities Button */}
328
+ <View transparent style={{ paddingLeft: 16, paddingRight: 16 }}>
329
+ <Button
330
+ title={reconcilingOpportunities ? "Reconciling..." : "Reconcile Opportunities"}
331
+ onPress={handleReconcileOpportunities}
332
+ disabled={reconcilingOpportunities}
333
+ />
334
+ </View>
310
335
  </View>
311
336
  </ScrollView>
312
337
  </View>
@@ -2,8 +2,8 @@ import React, { useEffect, useState } from 'react';
2
2
  import { View, Text } from "../../Components/Themed";
3
3
  import { ScrollView, TouchableOpacity } from 'react-native';
4
4
  import { useColors } from '../../constants/useColors';
5
- import { Icons, SearchBox } from '../../Components';
6
- import { getLeagues } from '../api';
5
+ import { Icons, SearchBox, Button } from '../../Components';
6
+ import { getLeagues, BetRouterApi } from '../api';
7
7
  import type { RouterLeagueProps } from '../types';
8
8
  import LeagueInfo from '../components/admin/LeagueInfo';
9
9
  import LeagueContests from '../components/admin/LeagueContests';
@@ -34,8 +34,10 @@ const MobileAdminLayout = ({ insets, onClose, initialContestId, initialLeagueId
34
34
  const [selectedTool, setSelectedTool] = useState<GlobalTool | null>(null);
35
35
  const [currentScreen, setCurrentScreen] = useState<Screen>('menu');
36
36
  const [searchText, setSearchText] = useState('');
37
+ const [reconcilingOpportunities, setReconcilingOpportunities] = useState(false);
37
38
 
38
39
  useEffect(() => {
40
+ BetRouterApi.setEnvironment();
39
41
  loadLeagues();
40
42
  }, []);
41
43
 
@@ -77,6 +79,19 @@ const MobileAdminLayout = ({ insets, onClose, initialContestId, initialLeagueId
77
79
  }
78
80
  };
79
81
 
82
+ const handleReconcileOpportunities = async () => {
83
+ setReconcilingOpportunities(true);
84
+ try {
85
+ await BetRouterApi.BetRouter.OpportunityApi.reconcileOpportunities();
86
+ alert('Opportunities reconciled successfully!');
87
+ } catch (error) {
88
+ console.error('Failed to reconcile opportunities:', error);
89
+ alert('Failed to reconcile opportunities. Check console for details.');
90
+ } finally {
91
+ setReconcilingOpportunities(false);
92
+ }
93
+ };
94
+
80
95
  const filteredLeagues = leagues.filter(league =>
81
96
  league.name.toLowerCase().includes(searchText.toLowerCase())
82
97
  );
@@ -188,6 +203,7 @@ const MobileAdminLayout = ({ insets, onClose, initialContestId, initialLeagueId
188
203
  borderRadius: 8,
189
204
  borderWidth: 1,
190
205
  borderColor: Colors.borders.light,
206
+ marginBottom: 8,
191
207
  flexDirection: 'row',
192
208
  alignItems: 'center',
193
209
  justifyContent: 'space-between'
@@ -201,6 +217,15 @@ const MobileAdminLayout = ({ insets, onClose, initialContestId, initialLeagueId
201
217
  </View>
202
218
  <Icons.ChevronIcon size={20} color={Colors.text.descriptionLight} direction="right" />
203
219
  </TouchableOpacity>
220
+
221
+ {/* Reconcile Opportunities Button */}
222
+ <View transparent style={{ marginTop: 4 }}>
223
+ <Button
224
+ title={reconcilingOpportunities ? "Reconciling..." : "Reconcile Opportunities"}
225
+ onPress={handleReconcileOpportunities}
226
+ disabled={reconcilingOpportunities}
227
+ />
228
+ </View>
204
229
  </View>
205
230
 
206
231
  {/* Leagues Section */}
@@ -1,11 +1,12 @@
1
1
  // Partner Credential Types
2
2
  // These define what inputs are needed for each partner
3
3
 
4
- //import { BetOpenlyCredentialProps as BetOpenlyCredentialPropsImport } from "../partners/betopenly/cred.types"
5
-
6
4
  // Re-export BetOpenly credentials
7
5
  export type BetOpenlyCredentialProps = any
8
6
 
7
+ // Re-export Polymarket credentials
8
+ export type PolymarketCredentialProps = any
9
+
9
10
  export interface KalshiCredentialProps {
10
11
  api_key: string
11
12
  private_key_pem: string
@@ -20,7 +21,7 @@ export interface BettorEdgeCredentialProps {
20
21
  }
21
22
 
22
23
  // Union type of all possible credentials
23
- export type PartnerCredentialProps = KalshiCredentialProps | BettorEdgeCredentialProps | BetOpenlyCredentialProps
24
+ export type PartnerCredentialProps = KalshiCredentialProps | BettorEdgeCredentialProps | BetOpenlyCredentialProps | PolymarketCredentialProps
24
25
 
25
26
  // Type guard helpers for client to determine which credential type is needed
26
27
  export const isKalshiCredentials = (creds: any): creds is KalshiCredentialProps => {
@@ -35,6 +36,10 @@ export const isBetOpenlyCredentials = (creds: any): creds is BetOpenlyCredential
35
36
  return 'username' in creds && 'password' in creds && !('device_id' in creds)
36
37
  }
37
38
 
39
+ export const isPolymarketCredentials = (creds: any): creds is PolymarketCredentialProps => {
40
+ return 'private_key' in creds
41
+ }
42
+
38
43
  // Helper to get required fields for a partner by name
39
44
  export const getRequiredCredentialFields = (partnerName: string): string[] => {
40
45
  switch (partnerName) {
@@ -44,6 +49,8 @@ export const getRequiredCredentialFields = (partnerName: string): string[] => {
44
49
  return ['username', 'password']
45
50
  case 'BetOpenly':
46
51
  return ['user_id','username', 'password']
52
+ case 'Polymarket':
53
+ return ['private_key', 'funder']
47
54
  default:
48
55
  return []
49
56
  }
@@ -68,6 +75,11 @@ export const getCredentialFieldLabels = (partnerName: string): Record<string, st
68
75
  password: 'Password',
69
76
  user_id: 'User Id'
70
77
  }
78
+ case 'Polymarket':
79
+ return {
80
+ private_key: 'Private Key (Ethereum Wallet)',
81
+ funder: 'Funder Address (shown under profile pic on Polymarket)'
82
+ }
71
83
  default:
72
84
  return {}
73
85
  }
@@ -92,6 +104,11 @@ export const getCredentialFieldTypes = (partnerName: string): Record<string, 'te
92
104
  username: 'text',
93
105
  password: 'password'
94
106
  }
107
+ case 'Polymarket':
108
+ return {
109
+ private_key: 'password',
110
+ funder: 'text'
111
+ }
95
112
  default:
96
113
  return {}
97
114
  }
@@ -1,5 +1,13 @@
1
1
  // Liquidity Types
2
2
 
3
+ import type {
4
+ RouterMarketSideProps,
5
+ RouterMarketVariableProps,
6
+ RouterMarketProps
7
+ } from './markets';
8
+ import type { RouterParticipantProps } from './participants';
9
+ import type { PartnerParticipantProps } from './participants';
10
+
3
11
  export interface RouterLiquidityProps {
4
12
  router_liquidity_id: string // PK
5
13
  liquidity_hash: string // Hash identifier: partner_id:router_contest_id:router_market_id:market_side_id:market_variable_id:participant_id:timeframe_id
@@ -13,3 +21,13 @@ export interface RouterLiquidityProps {
13
21
  buy_id?: string
14
22
  last_update_datetime: any // MOMENT
15
23
  }
24
+
25
+ // Reference data shared across all getBatchLiquidity calls
26
+ export interface LiquidityReferenceData {
27
+ allRouterMarketSides: RouterMarketSideProps[];
28
+ allRouterMarketVariables: RouterMarketVariableProps[];
29
+ allRouterMarkets: RouterMarketProps[];
30
+ allTimeframes: any[];
31
+ allRouterParticipants: RouterParticipantProps[];
32
+ allPartnerParticipants: PartnerParticipantProps[];
33
+ }
@@ -70,7 +70,7 @@ const WalletActionSelector = ({ player, walkthrough_steps, player_balance, accou
70
70
  if(instant_withdraw_account){ return onActionSelect(action, instant_withdraw_account) }
71
71
  //Ok lets get the ibt_placeholder one!
72
72
  let ibt_placeholder = accounts.find(a => a.ibt_placeholder);
73
- if(ibt_placeholder){ return onActionSelect(action, ibt_placeholder) }
73
+ if(ibt_placeholder){ return onActionSelect({ action:'add_ibt' }, ibt_placeholder) }
74
74
  return //Dont do anything if we dont have an ibt acccount possible
75
75
  default: onActionSelect(action)
76
76
  }