gambling-bot-shared 0.1.42 → 0.1.44

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);
@@ -105,7 +105,7 @@ export declare const bonusFormSchema: z.ZodObject<{
105
105
  }>;
106
106
  baseReward: z.ZodNumber;
107
107
  streakIncrement: z.ZodOptional<z.ZodNumber>;
108
- streakMultiplier: z.ZodOptional<z.ZodNumber>;
108
+ streakMultiplier: z.ZodPreprocess<z.ZodOptional<z.ZodNumber>>;
109
109
  maxReward: z.ZodNumber;
110
110
  resetOnMax: z.ZodBoolean;
111
111
  milestoneBonus: z.ZodObject<{
@@ -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,29 @@ 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.preprocess((val) => {
113
+ if (val === '' || val === undefined || val === null)
114
+ return undefined;
115
+ if (typeof val === 'string')
116
+ return Number(val);
117
+ return val;
118
+ }, zod_1.default
119
+ .number()
120
+ .min(0, 'Must be ≥ 0')
121
+ .max(bonusLimits_1.BONUS_MAX_STREAK_MULTIPLIER, `Must be ≤ ${bonusLimits_1.BONUS_MAX_STREAK_MULTIPLIER}`)
122
+ .optional()),
123
+ maxReward: bonusAmountSchema,
109
124
  resetOnMax: zod_1.default.boolean(),
110
125
  milestoneBonus: zod_1.default.object({
111
- weekly: zod_1.default.number().min(0),
112
- monthly: zod_1.default.number().min(0)
126
+ weekly: bonusAmountSchema,
127
+ monthly: bonusAmountSchema
113
128
  })
114
129
  });
@@ -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.44",
4
4
  "main": "dist/index.js",
5
5
  "types": "dist/index.d.ts",
6
6
  "license": "MIT",