gambling-bot-shared 0.1.42 → 0.1.43

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.
@@ -0,0 +1,4 @@
1
+ /** Max currency amount for any single bonus field (base, cap, milestones, increment). */
2
+ export declare const BONUS_MAX_AMOUNT = 10000000;
3
+ /** Max daily streak multiplier in exponential mode (prevents Math.pow overflow). */
4
+ export declare const BONUS_MAX_STREAK_MULTIPLIER = 10;
@@ -0,0 +1,7 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.BONUS_MAX_STREAK_MULTIPLIER = exports.BONUS_MAX_AMOUNT = void 0;
4
+ /** Max currency amount for any single bonus field (base, cap, milestones, increment). */
5
+ exports.BONUS_MAX_AMOUNT = 10000000;
6
+ /** Max daily streak multiplier in exponential mode (prevents Math.pow overflow). */
7
+ exports.BONUS_MAX_STREAK_MULTIPLIER = 10;
@@ -1,3 +1,4 @@
1
+ export * from './bonusLimits';
1
2
  export * from './defaultConfig';
2
3
  export * from './maxSimulations';
3
4
  export * from './lotteryConfig';
@@ -14,6 +14,7 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
14
  for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
15
  };
16
16
  Object.defineProperty(exports, "__esModule", { value: true });
17
+ __exportStar(require("./bonusLimits"), exports);
17
18
  __exportStar(require("./defaultConfig"), exports);
18
19
  __exportStar(require("./maxSimulations"), exports);
19
20
  __exportStar(require("./lotteryConfig"), exports);
@@ -5,6 +5,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
6
  exports.bonusFormSchema = exports.managerRoleFormSchema = exports.vipSettingsFormSchema = exports.casinoSettingsSchema = exports.channelsFormSchema = exports.raffleChannelsFormSchema = exports.predictionChannelsFormSchema = exports.casinoChannelsFormSchema = exports.atmChannelsFormSchema = void 0;
7
7
  const zod_1 = __importDefault(require("zod"));
8
+ const bonusLimits_1 = require("../constants/bonusLimits");
8
9
  const plinkoConfig_1 = require("../constants/plinkoConfig");
9
10
  const NO_CHANNEL = 'At least one channel must be selected.';
10
11
  exports.atmChannelsFormSchema = zod_1.default.object({
@@ -100,15 +101,23 @@ exports.vipSettingsFormSchema = zod_1.default.object({
100
101
  exports.managerRoleFormSchema = zod_1.default.object({
101
102
  managerRoleId: zod_1.default.string().min(1, 'Select a manager role')
102
103
  });
104
+ const bonusAmountSchema = zod_1.default
105
+ .number()
106
+ .min(0, 'Must be ≥ 0')
107
+ .max(bonusLimits_1.BONUS_MAX_AMOUNT, `Must be ≤ ${bonusLimits_1.BONUS_MAX_AMOUNT.toLocaleString()}`);
103
108
  exports.bonusFormSchema = zod_1.default.object({
104
109
  rewardMode: zod_1.default.enum(['linear', 'exponential']),
105
- baseReward: zod_1.default.number().min(0),
106
- streakIncrement: zod_1.default.number().min(0).optional(),
107
- streakMultiplier: zod_1.default.number().min(0).optional(),
108
- maxReward: zod_1.default.number().min(0),
110
+ baseReward: bonusAmountSchema,
111
+ streakIncrement: bonusAmountSchema.optional(),
112
+ streakMultiplier: zod_1.default
113
+ .number()
114
+ .min(0, 'Must be ≥ 0')
115
+ .max(bonusLimits_1.BONUS_MAX_STREAK_MULTIPLIER, `Must be ≤ ${bonusLimits_1.BONUS_MAX_STREAK_MULTIPLIER}`)
116
+ .optional(),
117
+ maxReward: bonusAmountSchema,
109
118
  resetOnMax: zod_1.default.boolean(),
110
119
  milestoneBonus: zod_1.default.object({
111
- weekly: zod_1.default.number().min(0),
112
- monthly: zod_1.default.number().min(0)
120
+ weekly: bonusAmountSchema,
121
+ monthly: bonusAmountSchema
113
122
  })
114
123
  });
@@ -1,5 +1,6 @@
1
1
  export * from './calculateRTP';
2
2
  export * from './calculateBonusReward';
3
+ export * from './normalizeBonusSettings';
3
4
  export * from './generateBonusPreview';
4
5
  export * from './formatters';
5
6
  export * from './generateId';
@@ -16,6 +16,7 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
16
16
  Object.defineProperty(exports, "__esModule", { value: true });
17
17
  __exportStar(require("./calculateRTP"), exports);
18
18
  __exportStar(require("./calculateBonusReward"), exports);
19
+ __exportStar(require("./normalizeBonusSettings"), exports);
19
20
  __exportStar(require("./generateBonusPreview"), exports);
20
21
  __exportStar(require("./formatters"), exports);
21
22
  __exportStar(require("./generateId"), exports);
@@ -0,0 +1,6 @@
1
+ import type { BonusSettings } from '../types';
2
+ export declare const normalizeBonusSettings: (settings: BonusSettings) => BonusSettings;
3
+ /** Parse admin integer inputs (digits only) and clamp to the bonus amount cap. */
4
+ export declare const parseBonusAmountInput: (raw: string) => number;
5
+ /** Parse streak multiplier text and clamp to the allowed range. */
6
+ export declare const parseBonusMultiplierInput: (raw: string) => number | undefined;
@@ -0,0 +1,38 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.parseBonusMultiplierInput = exports.parseBonusAmountInput = exports.normalizeBonusSettings = void 0;
4
+ const bonusLimits_1 = require("../constants/bonusLimits");
5
+ const clampAmount = (value) => Math.min(Math.max(0, value), bonusLimits_1.BONUS_MAX_AMOUNT);
6
+ const clampMultiplier = (value) => Math.min(Math.max(0, value), bonusLimits_1.BONUS_MAX_STREAK_MULTIPLIER);
7
+ const normalizeBonusSettings = (settings) => ({
8
+ ...settings,
9
+ baseReward: clampAmount(settings.baseReward),
10
+ streakIncrement: settings.streakIncrement != null
11
+ ? clampAmount(settings.streakIncrement)
12
+ : undefined,
13
+ streakMultiplier: settings.streakMultiplier != null
14
+ ? clampMultiplier(settings.streakMultiplier)
15
+ : undefined,
16
+ maxReward: clampAmount(settings.maxReward),
17
+ milestoneBonus: {
18
+ weekly: clampAmount(settings.milestoneBonus.weekly),
19
+ monthly: clampAmount(settings.milestoneBonus.monthly)
20
+ }
21
+ });
22
+ exports.normalizeBonusSettings = normalizeBonusSettings;
23
+ /** Parse admin integer inputs (digits only) and clamp to the bonus amount cap. */
24
+ const parseBonusAmountInput = (raw) => {
25
+ const digits = raw.replace(/\D/g, '');
26
+ if (!digits)
27
+ return 0;
28
+ return clampAmount(Number(digits));
29
+ };
30
+ exports.parseBonusAmountInput = parseBonusAmountInput;
31
+ /** Parse streak multiplier text and clamp to the allowed range. */
32
+ const parseBonusMultiplierInput = (raw) => {
33
+ const parsed = Number(raw);
34
+ if (Number.isNaN(parsed))
35
+ return undefined;
36
+ return clampMultiplier(parsed);
37
+ };
38
+ exports.parseBonusMultiplierInput = parseBonusMultiplierInput;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "gambling-bot-shared",
3
- "version": "0.1.42",
3
+ "version": "0.1.43",
4
4
  "main": "dist/index.js",
5
5
  "types": "dist/index.d.ts",
6
6
  "license": "MIT",