@levrbet/shared 0.2.87 → 0.2.89

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/core/contracts/abis/LevrManager.d.ts +1008 -988
  2. package/dist/core/contracts/abis/LevrManager.js +1538 -499
  3. package/dist/core/contracts/abis/LevrManager.js.map +1 -1
  4. package/dist/core/contracts/abis/index.d.ts +1008 -988
  5. package/dist/core/contracts/addresses.d.ts +21 -21
  6. package/dist/core/contracts/addresses.js +19 -19
  7. package/dist/react/hooks/contracts/useContracts.d.ts +19 -19
  8. package/dist/server/config/redis.d.ts +28 -49
  9. package/dist/server/config/redis.js +57 -127
  10. package/dist/server/config/redis.js.map +1 -1
  11. package/dist/server/liquidation-engine/redis.cache.manager/prices.set.manager.d.ts +9 -9
  12. package/dist/server/liquidation-engine/redis.cache.manager/prices.set.manager.js.map +1 -1
  13. package/dist/server/liquidation-engine/redis.cache.manager/prices.set.manager.test.js +1 -1
  14. package/dist/server/liquidation-engine/redis.cache.manager/prices.set.manager.test.js.map +1 -1
  15. package/dist/server/oracle/config/game-periods/providers/optic-odds.periods.d.ts +4 -0
  16. package/dist/server/oracle/config/game-periods/providers/optic-odds.periods.js +5 -1
  17. package/dist/server/oracle/config/game-periods/providers/optic-odds.periods.js.map +1 -1
  18. package/dist/server/oracle/config/game-periods/sports.config.d.ts +1 -1
  19. package/dist/server/oracle/config/game-periods/sports.config.js +53 -4
  20. package/dist/server/oracle/config/game-periods/sports.config.js.map +1 -1
  21. package/dist/server/oracle/config/game-periods/types.d.ts +9 -1
  22. package/dist/server/oracle/config/game-periods/types.js +5 -0
  23. package/dist/server/oracle/config/game-periods/types.js.map +1 -1
  24. package/dist/server/oracle/redis-cache-manager/channels.d.ts +2 -2
  25. package/dist/server/oracle/redis-cache-manager/channels.js.map +1 -1
  26. package/dist/server/oracle/redis-cache-manager/game.cache.service.d.ts +27 -26
  27. package/dist/server/oracle/redis-cache-manager/game.cache.service.js.map +1 -1
  28. package/dist/server/oracle/redis-cache-manager/game.progress.d.ts +4 -4
  29. package/dist/server/oracle/redis-cache-manager/game.progress.js.map +1 -1
  30. package/dist/server/oracle/redis-cache-manager/leagues.cache.service.d.ts +3 -3
  31. package/dist/server/oracle/redis-cache-manager/leagues.cache.service.js.map +1 -1
  32. package/dist/server/oracle/redis-cache-manager/market.cache.service.d.ts +10 -10
  33. package/dist/server/oracle/redis-cache-manager/market.cache.service.js.map +1 -1
  34. package/dist/server/oracle/redis-cache-manager/market.query.engine.d.ts +17 -17
  35. package/dist/server/oracle/redis-cache-manager/market.query.engine.js.map +1 -1
  36. package/dist/server/utils/game_progress/caclulate.game.progress.d.ts +132 -4
  37. package/dist/server/utils/game_progress/caclulate.game.progress.js +195 -24
  38. package/dist/server/utils/game_progress/caclulate.game.progress.js.map +1 -1
  39. package/dist/server/utils/game_progress/game.utils.d.ts +10 -1
  40. package/dist/server/utils/game_progress/game.utils.js +95 -38
  41. package/dist/server/utils/game_progress/game.utils.js.map +1 -1
  42. package/dist/server/utils/game_progress/parser.js +6 -0
  43. package/dist/server/utils/game_progress/parser.js.map +1 -1
  44. package/package.json +1 -1
  45. package/prisma/schema.prisma +39 -3
@@ -1 +1 @@
1
- {"version":3,"file":"caclulate.game.progress.js","sourceRoot":"","sources":["../../../../src/server/utils/game_progress/caclulate.game.progress.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"caclulate.game.progress.js","sourceRoot":"","sources":["../../../../src/server/utils/game_progress/caclulate.game.progress.ts"],"names":[],"mappings":"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"}
@@ -1,2 +1,11 @@
1
1
  import { SportGroup } from "@prisma/client";
2
- export declare const getGameProgressBPS: (gameClockInSeconds: number, totalPeriodDurationInSeconds: number, period: number, totalPeriods: number, sportGroup: SportGroup, clockCountUp: boolean) => number | null;
2
+ /**
3
+ * For sports like Baseball where we only track period (inning) progress, not time.
4
+ * Baseball: 9 innings, each with top (0) and bottom (1) = 18 half-innings total.
5
+ * Progress is calculated as being IN that half-inning (not completed).
6
+ * @param period - Current inning (1-9)
7
+ * @param totalPeriods - Total innings (typically 9)
8
+ * @param isTopOfInning - true = top of inning (first half), false = bottom (second half)
9
+ */
10
+ export declare const calculateBaseballProgressBPS: (period: number, totalPeriods: number, isTopOfInning: boolean) => number;
11
+ export declare const getGameProgressBPS: (gameClockInSeconds: number, totalPeriodDurationInSeconds: number, period: number, totalPeriods: number, sportGroup: SportGroup, clockCountUp: boolean, isTopOfInning?: boolean) => number | null;
@@ -1,63 +1,120 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.getGameProgressBPS = void 0;
3
+ exports.getGameProgressBPS = exports.calculateBaseballProgressBPS = void 0;
4
4
  const client_1 = require("@prisma/client");
5
- const calculateGameProgressBPSWithPeriodsOnly = (period, totalPeriods) => {
5
+ const MAX_BASIS_POINTS = 1e4;
6
+ /**
7
+ * For sports like Baseball where we only track period (inning) progress, not time.
8
+ * Baseball: 9 innings, each with top (0) and bottom (1) = 18 half-innings total.
9
+ * Progress is calculated as being IN that half-inning (not completed).
10
+ * @param period - Current inning (1-9)
11
+ * @param totalPeriods - Total innings (typically 9)
12
+ * @param isTopOfInning - true = top of inning (first half), false = bottom (second half)
13
+ */
14
+ const calculateBaseballProgressBPS = (period, totalPeriods, isTopOfInning) => {
6
15
  if (period > totalPeriods)
7
- return 1e4;
8
- const progress = period / totalPeriods;
9
- return Math.round(progress * 1e4);
16
+ return MAX_BASIS_POINTS;
17
+ if (period < 1)
18
+ return 0;
19
+ // Each inning has 2 half-innings (top and bottom)
20
+ const totalHalfInnings = totalPeriods * 2;
21
+ // Current half-inning number (1-indexed): (period - 1) * 2 + 1 for top, + 2 for bottom
22
+ const currentHalfInning = (period - 1) * 2 + (isTopOfInning ? 1 : 2);
23
+ // Progress represents being IN this half-inning (so 9th bottom = 18/18 = 100%)
24
+ const progress = currentHalfInning / totalHalfInnings;
25
+ const value = Math.round(progress * MAX_BASIS_POINTS);
26
+ if (value > MAX_BASIS_POINTS)
27
+ return MAX_BASIS_POINTS;
28
+ if (value < 0)
29
+ return 0;
30
+ return value;
10
31
  };
11
- //{ totalPeriods: 2, totalPeriodDurationInSeconds: 45 * 60 },
12
- // gameClock: '57:20',
13
- //levr-v1-dev-oracle-core | gamePeriod: 20,
14
- const calculateGameProgressBPS = (elapsedSeconds, totalPeriodDurationInSeconds, totalPeriods, period) => {
32
+ exports.calculateBaseballProgressBPS = calculateBaseballProgressBPS;
33
+ /**
34
+ * Calculate game progress in BPS (basis points, max 10000).
35
+ * For most sports: elapsedSeconds is time elapsed in current period.
36
+ * For soccer: elapsedSeconds is cumulative time across all periods (clock doesn't reset).
37
+ */
38
+ const calculateProgressBPSFromElapsedTime = (elapsedSeconds, totalPeriodDurationInSeconds, totalPeriods, period, sportGroup) => {
15
39
  if (totalPeriodDurationInSeconds === 0)
16
40
  return 0;
17
- if (elapsedSeconds > totalPeriodDurationInSeconds)
18
- elapsedSeconds = totalPeriodDurationInSeconds;
19
- const progress = elapsedSeconds / totalPeriodDurationInSeconds;
41
+ const totalGameDurationInSeconds = totalPeriods * totalPeriodDurationInSeconds;
42
+ if (sportGroup === client_1.SportGroup.Soccer) {
43
+ // Soccer: elapsedSeconds is cumulative time across all periods (clock doesn't reset)
44
+ const cumulativeElapsed = Math.max(0, Math.min(elapsedSeconds, totalGameDurationInSeconds));
45
+ const overallProgress = cumulativeElapsed / totalGameDurationInSeconds;
46
+ const value = Math.round(overallProgress * MAX_BASIS_POINTS);
47
+ if (value > MAX_BASIS_POINTS)
48
+ return MAX_BASIS_POINTS;
49
+ if (value < 0)
50
+ return 0;
51
+ return value;
52
+ }
53
+ // Other sports: elapsedSeconds is time elapsed in current period (clock resets each period)
54
+ const clampedElapsedSeconds = Math.max(0, Math.min(elapsedSeconds, totalPeriodDurationInSeconds));
55
+ const periodProgress = clampedElapsedSeconds / totalPeriodDurationInSeconds;
20
56
  const periodsPassed = period - 1;
21
- const pastProgress = calculateGameProgressBPSWithPeriodsOnly(periodsPassed, totalPeriods);
22
- const currentPeriodProgress = (progress * 1e4) / totalPeriods;
23
- const value = Math.round(pastProgress + currentPeriodProgress);
24
- //TODO: revise time tracking
25
- if (value > 1e4)
26
- return 1e4;
57
+ // Progress from completed periods + progress in current period
58
+ const pastProgressBPS = (periodsPassed / totalPeriods) * MAX_BASIS_POINTS;
59
+ const currentPeriodProgressBPS = (periodProgress * MAX_BASIS_POINTS) / totalPeriods;
60
+ const value = Math.round(pastProgressBPS + currentPeriodProgressBPS);
61
+ if (value > MAX_BASIS_POINTS)
62
+ return MAX_BASIS_POINTS;
27
63
  if (value < 0)
28
64
  return 0;
29
65
  return value;
30
66
  };
31
- // Example: { totalPeriods: 2, totalPeriodDurationInSeconds: 45 * 60 }, gameClock: '57:20', period: 2
32
- // gameClock is cumulative (57:20 = 57 mins into game, which is 12:20 into period 2)
33
- // Expected: elapsedInPeriod = 3440 - 2700 = 740 seconds ~63.7% game progress
34
- const calculateGameProgressBPSWithGameClockCountUp = (gameClockInSeconds, totalPeriodDurationInSeconds, totalPeriods, period) => {
35
- const cumulativeElapsedSeconds = gameClockInSeconds;
36
- if (cumulativeElapsedSeconds === null)
67
+ /**
68
+ * For count-up clocks (stopwatch style).
69
+ * Soccer: clock is cumulative across periods (0:00 90:00+), doesn't reset at halftime.
70
+ * Other sports: clock typically resets each period (0:00 → period end).
71
+ *
72
+ * Example (Soccer): { totalPeriods: 2, totalPeriodDurationInSeconds: 45 * 60 }, gameClock: '57:20'
73
+ * → 57:20 = 3440 seconds cumulative → 3440/5400 = ~63.7% game progress
74
+ */
75
+ const calculateGameProgressBPSWithGameClockCountUp = (gameClockInSeconds, totalPeriodDurationInSeconds, totalPeriods, period, sportGroup) => {
76
+ if (gameClockInSeconds === null)
37
77
  return null;
38
- // Subtract time from previous periods since gameClock is cumulative
39
- const previousPeriodsSeconds = (period - 1) * totalPeriodDurationInSeconds;
40
- //TODO: account for time that doesn't reset in periods
41
- const elapsedSecondsInCurrentPeriod = cumulativeElapsedSeconds - previousPeriodsSeconds;
42
- return calculateGameProgressBPS(elapsedSecondsInCurrentPeriod, totalPeriodDurationInSeconds, totalPeriods, period);
78
+ // For soccer the game clock is cumulative across all periods
79
+ if (sportGroup === client_1.SportGroup.Soccer) {
80
+ return calculateProgressBPSFromElapsedTime(gameClockInSeconds, totalPeriodDurationInSeconds, totalPeriods, period, sportGroup);
81
+ }
82
+ // For other sports with count-up clocks, the clock resets each period
83
+ // So gameClockInSeconds is already the elapsed time in the current period
84
+ return calculateProgressBPSFromElapsedTime(gameClockInSeconds, totalPeriodDurationInSeconds, totalPeriods, period, sportGroup);
43
85
  };
44
- const calculateGameProgressBPSWithGameClockCountDown = (gameClockInSeconds, totalPeriodDurationInSeconds, totalPeriods, period) => {
45
- const remainingSeconds = gameClockInSeconds;
46
- if (remainingSeconds === null)
86
+ /**
87
+ * For countdown clocks (showing remaining time).
88
+ * gameClockInSeconds = remaining time in current period.
89
+ * Soccer (rare): Need to compute cumulative elapsed from previous periods.
90
+ * Other sports: Clock shows remaining time in current period, compute elapsed.
91
+ */
92
+ const calculateGameProgressBPSWithGameClockCountDown = (gameClockInSeconds, totalPeriodDurationInSeconds, totalPeriods, period, sportGroup) => {
93
+ if (gameClockInSeconds === null)
47
94
  return null;
48
- const elapsedSeconds = totalPeriodDurationInSeconds - remainingSeconds;
49
- return calculateGameProgressBPS(elapsedSeconds, totalPeriodDurationInSeconds, totalPeriods, period);
95
+ // Elapsed in current period = total period duration - remaining time
96
+ const elapsedSecondsInCurrentPeriod = totalPeriodDurationInSeconds - gameClockInSeconds;
97
+ if (sportGroup === client_1.SportGroup.Soccer) {
98
+ // Soccer needs cumulative elapsed seconds (clock doesn't reset)
99
+ const previousPeriodsSeconds = (period - 1) * totalPeriodDurationInSeconds;
100
+ const cumulativeElapsedSeconds = previousPeriodsSeconds + elapsedSecondsInCurrentPeriod;
101
+ return calculateProgressBPSFromElapsedTime(cumulativeElapsedSeconds, totalPeriodDurationInSeconds, totalPeriods, period, sportGroup);
102
+ }
103
+ // Other sports: pass elapsed time in current period
104
+ return calculateProgressBPSFromElapsedTime(elapsedSecondsInCurrentPeriod, totalPeriodDurationInSeconds, totalPeriods, period, sportGroup);
50
105
  };
51
- const getGameProgressBPS = (gameClockInSeconds, totalPeriodDurationInSeconds, period, totalPeriods, sportGroup, clockCountUp) => {
106
+ const getGameProgressBPS = (gameClockInSeconds, totalPeriodDurationInSeconds, period, totalPeriods, sportGroup, clockCountUp, isTopOfInning // Only used for Baseball
107
+ ) => {
52
108
  switch (sportGroup) {
53
109
  case client_1.SportGroup.Baseball:
54
- return calculateGameProgressBPSWithPeriodsOnly(period, totalPeriods);
110
+ // Default to top of inning if not specified
111
+ return (0, exports.calculateBaseballProgressBPS)(period, totalPeriods, isTopOfInning ?? true);
55
112
  default:
56
113
  if (clockCountUp) {
57
- return calculateGameProgressBPSWithGameClockCountUp(gameClockInSeconds, totalPeriodDurationInSeconds, totalPeriods, period);
114
+ return calculateGameProgressBPSWithGameClockCountUp(gameClockInSeconds, totalPeriodDurationInSeconds, totalPeriods, period, sportGroup);
58
115
  }
59
116
  else {
60
- return calculateGameProgressBPSWithGameClockCountDown(gameClockInSeconds, totalPeriodDurationInSeconds, totalPeriods, period);
117
+ return calculateGameProgressBPSWithGameClockCountDown(gameClockInSeconds, totalPeriodDurationInSeconds, totalPeriods, period, sportGroup);
61
118
  }
62
119
  }
63
120
  };
@@ -1 +1 @@
1
- {"version":3,"file":"game.utils.js","sourceRoot":"","sources":["../../../../src/server/utils/game_progress/game.utils.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"game.utils.js","sourceRoot":"","sources":["../../../../src/server/utils/game_progress/game.utils.ts"],"names":[],"mappings":"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"}
@@ -61,6 +61,8 @@ const parseGameClockToSeconds = (gameClock) => {
61
61
  if (match?.[1] && match?.[2]) {
62
62
  const minutes = parseInt(match[1], 10);
63
63
  const seconds = parseInt(match[2], 10);
64
+ if (seconds >= 60)
65
+ return null; // Invalid seconds
64
66
  return minutes * 60 + seconds;
65
67
  }
66
68
  break;
@@ -70,6 +72,8 @@ const parseGameClockToSeconds = (gameClock) => {
70
72
  if (match?.[1] && match?.[2]) {
71
73
  const minutes = parseInt(match[1], 10);
72
74
  const seconds = parseInt(match[2], 10);
75
+ if (seconds >= 60)
76
+ return null; // Invalid seconds
73
77
  return minutes * 60 + seconds;
74
78
  }
75
79
  break;
@@ -79,6 +83,8 @@ const parseGameClockToSeconds = (gameClock) => {
79
83
  if (match?.[1] && match?.[2]) {
80
84
  const minutes = parseInt(match[1], 10);
81
85
  const seconds = parseInt(match[2], 10);
86
+ if (seconds >= 60)
87
+ return null; // Invalid seconds
82
88
  return minutes * 60 + seconds;
83
89
  }
84
90
  break;
@@ -1 +1 @@
1
- {"version":3,"file":"parser.js","sourceRoot":"","sources":["../../../../src/server/utils/game_progress/parser.ts"],"names":[],"mappings":";;;AAAA,yEAAgF;AAEhF;;GAEG;AACH,MAAM,cAAc,GAAG;IACnB,OAAO,EAAE,UAAU;IACnB,UAAU,EAAE,OAAO;IACnB,aAAa,EAAE,qBAAqB;IACpC,WAAW,EAAE,4BAA4B;IACzC,gBAAgB,EAAE,2BAA2B;CACvC,CAAA;AAEV;;;;GAIG;AACI,MAAM,sBAAsB,GAAG,CAAC,SAAiB,EAAoB,EAAE;IAC1E,IAAI,cAAc,CAAC,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC;QACzC,OAAO,wBAAgB,CAAC,cAAc,CAAA;IAC1C,CAAC;IACD,IAAI,cAAc,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC;QAC5C,OAAO,wBAAgB,CAAC,UAAU,CAAA;IACtC,CAAC;IACD,IAAI,cAAc,CAAC,aAAa,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC;QAC/C,OAAO,wBAAgB,CAAC,mBAAmB,CAAA;IAC/C,CAAC;IACD,IAAI,cAAc,CAAC,WAAW,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC;QAC7C,OAAO,wBAAgB,CAAC,qBAAqB,CAAA;IACjD,CAAC;IACD,IAAI,cAAc,CAAC,gBAAgB,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC;QAClD,OAAO,wBAAgB,CAAC,0BAA0B,CAAA;IACtD,CAAC;IACD,OAAO,wBAAgB,CAAC,OAAO,CAAA;AACnC,CAAC,CAAA;AAjBY,QAAA,sBAAsB,0BAiBlC;AAED;;;;;GAKG;AACI,MAAM,uBAAuB,GAAG,CAAC,SAAiB,EAAiB,EAAE;IACxE,MAAM,OAAO,GAAG,IAAA,8BAAsB,EAAC,SAAS,CAAC,CAAA;IAEjD,QAAQ,OAAO,EAAE,CAAC;QACd,KAAK,wBAAgB,CAAC,cAAc,CAAC,CAAC,CAAC;YACnC,MAAM,KAAK,GAAG,SAAS,CAAC,KAAK,CAAC,cAAc,CAAC,OAAO,CAAC,CAAA;YACrD,IAAI,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBACb,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAA;gBACpC,OAAO,KAAK,GAAG,IAAI,CAAA;YACvB,CAAC;YACD,MAAK;QACT,CAAC;QACD,KAAK,wBAAgB,CAAC,UAAU,CAAC,CAAC,CAAC;YAC/B,OAAO,QAAQ,CAAC,SAAS,EAAE,EAAE,CAAC,CAAA;QAClC,CAAC;QACD,KAAK,wBAAgB,CAAC,mBAAmB,CAAC,CAAC,CAAC;YACxC,MAAM,KAAK,GAAG,SAAS,CAAC,KAAK,CAAC,cAAc,CAAC,aAAa,CAAC,CAAA;YAC3D,IAAI,KAAK,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBAC3B,MAAM,OAAO,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAA;gBACtC,MAAM,OAAO,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAA;gBACtC,OAAO,OAAO,GAAG,EAAE,GAAG,OAAO,CAAA;YACjC,CAAC;YACD,MAAK;QACT,CAAC;QACD,KAAK,wBAAgB,CAAC,qBAAqB,CAAC,CAAC,CAAC;YAC1C,MAAM,KAAK,GAAG,SAAS,CAAC,KAAK,CAAC,cAAc,CAAC,WAAW,CAAC,CAAA;YACzD,IAAI,KAAK,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBAC3B,MAAM,OAAO,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAA;gBACtC,MAAM,OAAO,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAA;gBACtC,OAAO,OAAO,GAAG,EAAE,GAAG,OAAO,CAAA;YACjC,CAAC;YACD,MAAK;QACT,CAAC;QACD,KAAK,wBAAgB,CAAC,0BAA0B,CAAC,CAAC,CAAC;YAC/C,MAAM,KAAK,GAAG,SAAS,CAAC,KAAK,CAAC,cAAc,CAAC,gBAAgB,CAAC,CAAA;YAC9D,IAAI,KAAK,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBAC3B,MAAM,OAAO,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAA;gBACtC,MAAM,OAAO,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAA;gBACtC,OAAO,OAAO,GAAG,EAAE,GAAG,OAAO,CAAA;YACjC,CAAC;YACD,MAAK;QACT,CAAC;QACD,KAAK,wBAAgB,CAAC,OAAO,CAAC;QAC9B;YACI,OAAO,IAAI,CAAA;IACnB,CAAC;IACD,OAAO,IAAI,CAAA;AACf,CAAC,CAAA;AA/CY,QAAA,uBAAuB,2BA+CnC"}
1
+ {"version":3,"file":"parser.js","sourceRoot":"","sources":["../../../../src/server/utils/game_progress/parser.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@levrbet/shared",
3
- "version": "0.2.87",
3
+ "version": "0.2.89",
4
4
  "main": "dist/index.js",
5
5
  "types": "dist/index.d.ts",
6
6
  "exports": {
@@ -321,9 +321,10 @@ model User {
321
321
  requireWithdrawalConfirmation Boolean @default(true)
322
322
 
323
323
  // Inverse relations (these fix your P1012 errors)
324
- referralsMade Referral[] @relation("ReferrerRelations") // users they referred
325
- referredBy Referral[] @relation("ReferredRelations") // who referred them
326
- referralRewards ReferralReward[] @relation("UserRewards") // their reward entries
324
+ referralsMade Referral[] @relation("ReferrerRelations") // users they referred
325
+ referredBy Referral[] @relation("ReferredRelations") // who referred them
326
+ referralRewards ReferralReward[] @relation("UserRewards") // their reward entries
327
+ transactionHistory TransactionHistory[] @relation("TransactionHistory") // transaction history
327
328
 
328
329
  createdAt DateTime @default(now())
329
330
  updatedAt DateTime @updatedAt
@@ -466,3 +467,38 @@ model AuditLog {
466
467
  @@index([timestamp])
467
468
  @@index([userId])
468
469
  }
470
+
471
+ enum TransactionHistoryType {
472
+ Deposit
473
+ Withdrawal
474
+ Wager
475
+ }
476
+
477
+ enum TransactionHistoryStatus {
478
+ Completed
479
+ Pending
480
+ Failed
481
+ }
482
+
483
+ enum TransactionHistoryDescription {
484
+ BetPlaced
485
+ Deposited
486
+ Withdrawn
487
+ }
488
+
489
+ model TransactionHistory {
490
+ objectId String @id @default(cuid()) @map("_id")
491
+ id String
492
+ type TransactionHistoryType
493
+ status TransactionHistoryStatus
494
+ timestamp DateTime @default(now())
495
+ balance Float
496
+ description TransactionHistoryDescription
497
+ amount Float
498
+ // Relations
499
+ walletAddress String
500
+ user User @relation("TransactionHistory", fields: [walletAddress], references: [walletAddress])
501
+
502
+ @@index([timestamp])
503
+ @@index([walletAddress])
504
+ }