@kalamba/sdk 0.35.0 → 0.37.0

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,538 @@
1
+ /**
2
+ * BSD 3-Clause License
3
+ * Copyright (c) 2026, Kalamba Games Limited
4
+ */
5
+
6
+ //#region ../../libs/common/src/utils/coinsToMoney.tsx
7
+ function coinsToMoney(coins, coinValueInCents) {
8
+ return coins * coinValueInCents / 100;
9
+ }
10
+
11
+ //#endregion
12
+ //#region ../../libs/common/src/utils/format/number.ts
13
+ function formatNumberPure(config, number, options) {
14
+ if (!["string", "number"].includes(typeof number)) return "NaN";
15
+ const { locales } = config;
16
+ try {
17
+ return new Intl.NumberFormat(locales, {
18
+ ...options,
19
+ numberingSystem: "latn",
20
+ style: "decimal"
21
+ }).format(+number);
22
+ } catch {
23
+ return `${number}`;
24
+ }
25
+ }
26
+
27
+ //#endregion
28
+ //#region ../../libs/common/src/utils/format/currency.ts
29
+ const CUSTOM_CURRENCY_CODE = "XTS";
30
+ let CurrencyFormat = /* @__PURE__ */ function(CurrencyFormat) {
31
+ CurrencyFormat["Currency"] = "Currency";
32
+ CurrencyFormat["Number"] = "Number";
33
+ return CurrencyFormat;
34
+ }({});
35
+ let CurrencyNumber = /* @__PURE__ */ function(CurrencyNumber) {
36
+ CurrencyNumber["Coins"] = "Coins";
37
+ CurrencyNumber["Money"] = "Money";
38
+ return CurrencyNumber;
39
+ }({});
40
+ const CUSTOM_CURRENCIES = {
41
+ ARSB: {
42
+ displayAs: "ARS",
43
+ maximumFractionDigits: 2,
44
+ minimumFractionDigits: 2
45
+ },
46
+ CHIPS: {
47
+ maximumFractionDigits: 0,
48
+ minimumFractionDigits: 0
49
+ },
50
+ BNB: {
51
+ maximumFractionDigits: 6,
52
+ minimumFractionDigits: 6
53
+ },
54
+ BUSD: {
55
+ maximumFractionDigits: 4,
56
+ minimumFractionDigits: 4
57
+ },
58
+ BTC: {
59
+ maximumFractionDigits: 8,
60
+ minimumFractionDigits: 2
61
+ },
62
+ mBTC: {
63
+ maximumFractionDigits: 5,
64
+ minimumFractionDigits: 2
65
+ },
66
+ uBTC: {
67
+ maximumFractionDigits: 2,
68
+ minimumFractionDigits: 2
69
+ },
70
+ BCH: {
71
+ maximumFractionDigits: 8,
72
+ minimumFractionDigits: 2
73
+ },
74
+ mBCH: {
75
+ maximumFractionDigits: 2,
76
+ minimumFractionDigits: 2
77
+ },
78
+ ETH: {
79
+ maximumFractionDigits: 8,
80
+ minimumFractionDigits: 2
81
+ },
82
+ mETH: {
83
+ maximumFractionDigits: 5,
84
+ minimumFractionDigits: 2
85
+ },
86
+ uETH: {
87
+ maximumFractionDigits: 2,
88
+ minimumFractionDigits: 2
89
+ },
90
+ SOC: {
91
+ maximumFractionDigits: 8,
92
+ minimumFractionDigits: 2
93
+ },
94
+ LTC: {
95
+ maximumFractionDigits: 8,
96
+ minimumFractionDigits: 2
97
+ },
98
+ mLTC: {
99
+ maximumFractionDigits: 5,
100
+ minimumFractionDigits: 2
101
+ },
102
+ uLTC: {
103
+ maximumFractionDigits: 2,
104
+ minimumFractionDigits: 2
105
+ },
106
+ DOG: {
107
+ maximumFractionDigits: 4,
108
+ minimumFractionDigits: 2
109
+ },
110
+ USDC: {
111
+ maximumFractionDigits: 4,
112
+ minimumFractionDigits: 4
113
+ },
114
+ USDT: {
115
+ maximumFractionDigits: 4,
116
+ minimumFractionDigits: 2
117
+ },
118
+ TRX: {
119
+ maximumFractionDigits: 2,
120
+ minimumFractionDigits: 2
121
+ },
122
+ TUSD: {
123
+ maximumFractionDigits: 2,
124
+ minimumFractionDigits: 2
125
+ },
126
+ DAI: {
127
+ maximumFractionDigits: 2,
128
+ minimumFractionDigits: 2
129
+ },
130
+ XMR: {
131
+ maximumFractionDigits: 4,
132
+ minimumFractionDigits: 4
133
+ },
134
+ CBET: {
135
+ maximumFractionDigits: 0,
136
+ minimumFractionDigits: 0
137
+ },
138
+ kCBET: {
139
+ maximumFractionDigits: 2,
140
+ minimumFractionDigits: 2
141
+ },
142
+ SHIB: {
143
+ maximumFractionDigits: 0,
144
+ minimumFractionDigits: 0
145
+ },
146
+ kSHIB: {
147
+ maximumFractionDigits: 4,
148
+ minimumFractionDigits: 2
149
+ },
150
+ NEO: {
151
+ maximumFractionDigits: 4,
152
+ minimumFractionDigits: 4
153
+ },
154
+ BSV: {
155
+ maximumFractionDigits: 4,
156
+ minimumFractionDigits: 4
157
+ },
158
+ EOS: {
159
+ maximumFractionDigits: 4,
160
+ minimumFractionDigits: 4
161
+ },
162
+ DASH: {
163
+ maximumFractionDigits: 4,
164
+ minimumFractionDigits: 4
165
+ },
166
+ XLM: {
167
+ maximumFractionDigits: 2,
168
+ minimumFractionDigits: 2
169
+ },
170
+ KRW: {
171
+ maximumFractionDigits: 2,
172
+ minimumFractionDigits: 2
173
+ },
174
+ kVND: {
175
+ maximumFractionDigits: 4,
176
+ minimumFractionDigits: 2
177
+ },
178
+ kIDR: {
179
+ maximumFractionDigits: 4,
180
+ minimumFractionDigits: 2
181
+ },
182
+ RSD: {
183
+ maximumFractionDigits: 2,
184
+ minimumFractionDigits: 2
185
+ },
186
+ STAKEGC: {
187
+ displayAs: "GC",
188
+ maximumFractionDigits: 0,
189
+ minimumFractionDigits: 0
190
+ },
191
+ STAKESC: {
192
+ displayAs: "SC",
193
+ maximumFractionDigits: 2,
194
+ minimumFractionDigits: 2
195
+ },
196
+ "BK.": {
197
+ maximumFractionDigits: 2,
198
+ minimumFractionDigits: 2
199
+ },
200
+ "BT.": {
201
+ maximumFractionDigits: 2,
202
+ minimumFractionDigits: 2
203
+ },
204
+ "FC.": {
205
+ maximumFractionDigits: 2,
206
+ minimumFractionDigits: 2
207
+ },
208
+ "GC.": {
209
+ maximumFractionDigits: 2,
210
+ minimumFractionDigits: 2
211
+ },
212
+ "SC.": {
213
+ maximumFractionDigits: 2,
214
+ minimumFractionDigits: 2
215
+ },
216
+ GC: {
217
+ maximumFractionDigits: 2,
218
+ minimumFractionDigits: 2
219
+ },
220
+ SC: {
221
+ maximumFractionDigits: 2,
222
+ minimumFractionDigits: 2
223
+ },
224
+ GLD: {
225
+ displayAs: "GC.",
226
+ maximumFractionDigits: 2,
227
+ minimumFractionDigits: 2
228
+ },
229
+ SS1: {
230
+ displayAs: "SC.",
231
+ maximumFractionDigits: 2,
232
+ minimumFractionDigits: 2
233
+ },
234
+ SWEP: {
235
+ displayAs: "SC.",
236
+ maximumFractionDigits: 2,
237
+ minimumFractionDigits: 2
238
+ },
239
+ GCLC: {
240
+ displayAs: "GC.",
241
+ maximumFractionDigits: 2,
242
+ minimumFractionDigits: 2
243
+ },
244
+ SWPC: {
245
+ displayAs: "SC",
246
+ maximumFractionDigits: 2,
247
+ minimumFractionDigits: 2
248
+ },
249
+ LUKC: {
250
+ displayAs: "LC",
251
+ maximumFractionDigits: 2,
252
+ minimumFractionDigits: 2
253
+ },
254
+ TTSC: {
255
+ displayAs: "SC",
256
+ maximumFractionDigits: 2,
257
+ minimumFractionDigits: 2
258
+ },
259
+ TTGC: {
260
+ displayAs: "GC",
261
+ maximumFractionDigits: 2,
262
+ minimumFractionDigits: 2
263
+ },
264
+ SVC: {
265
+ maximumFractionDigits: 2,
266
+ minimumFractionDigits: 2
267
+ },
268
+ DOT: {
269
+ maximumFractionDigits: 4,
270
+ minimumFractionDigits: 4
271
+ },
272
+ SOL: {
273
+ maximumFractionDigits: 4,
274
+ minimumFractionDigits: 4
275
+ },
276
+ XRP: {
277
+ maximumFractionDigits: 2,
278
+ minimumFractionDigits: 2
279
+ },
280
+ ADA: {
281
+ maximumFractionDigits: 2,
282
+ minimumFractionDigits: 2
283
+ },
284
+ TON: {
285
+ maximumFractionDigits: 4,
286
+ minimumFractionDigits: 4
287
+ },
288
+ FTN: {
289
+ maximumFractionDigits: 4,
290
+ minimumFractionDigits: 4
291
+ },
292
+ OMR: {
293
+ maximumFractionDigits: 2,
294
+ minimumFractionDigits: 2
295
+ },
296
+ JOD: {
297
+ maximumFractionDigits: 2,
298
+ minimumFractionDigits: 2
299
+ },
300
+ BHD: {
301
+ maximumFractionDigits: 2,
302
+ minimumFractionDigits: 2
303
+ },
304
+ KWD: {
305
+ maximumFractionDigits: 2,
306
+ minimumFractionDigits: 2
307
+ },
308
+ BNS: {
309
+ maximumFractionDigits: 2,
310
+ minimumFractionDigits: 2
311
+ },
312
+ GRSC: {
313
+ displayAs: "SC",
314
+ maximumFractionDigits: 2,
315
+ minimumFractionDigits: 2
316
+ },
317
+ GRGC: {
318
+ displayAs: "GC",
319
+ maximumFractionDigits: 2,
320
+ minimumFractionDigits: 2
321
+ },
322
+ EEGP: {
323
+ displayAs: "EP",
324
+ maximumFractionDigits: 2,
325
+ minimumFractionDigits: 2
326
+ },
327
+ EPGP: {
328
+ displayAs: "PP",
329
+ maximumFractionDigits: 2,
330
+ minimumFractionDigits: 2
331
+ },
332
+ LUCK: {
333
+ displayAs: "LUCK",
334
+ maximumFractionDigits: 2,
335
+ minimumFractionDigits: 2
336
+ },
337
+ CXCO: {
338
+ displayAs: "CC",
339
+ maximumFractionDigits: 2,
340
+ minimumFractionDigits: 2
341
+ },
342
+ GZCO: {
343
+ displayAs: "GC",
344
+ maximumFractionDigits: 2,
345
+ minimumFractionDigits: 2
346
+ },
347
+ FC: {
348
+ displayAs: "",
349
+ maximumFractionDigits: 2,
350
+ minimumFractionDigits: 2
351
+ },
352
+ RC: {
353
+ maximumFractionDigits: 2,
354
+ minimumFractionDigits: 2
355
+ },
356
+ MWSC: {
357
+ displayAs: "MC",
358
+ maximumFractionDigits: 2,
359
+ minimumFractionDigits: 2
360
+ },
361
+ MWGC: {
362
+ displayAs: "GC",
363
+ maximumFractionDigits: 2,
364
+ minimumFractionDigits: 2
365
+ },
366
+ MMK: {
367
+ maximumFractionDigits: 2,
368
+ minimumFractionDigits: 2
369
+ },
370
+ XOF: {
371
+ maximumFractionDigits: 2,
372
+ minimumFractionDigits: 2
373
+ },
374
+ VND: {
375
+ maximumFractionDigits: 2,
376
+ minimumFractionDigits: 2
377
+ },
378
+ BIF: {
379
+ maximumFractionDigits: 2,
380
+ minimumFractionDigits: 2
381
+ },
382
+ CLP: {
383
+ maximumFractionDigits: 2,
384
+ minimumFractionDigits: 2
385
+ },
386
+ GNF: {
387
+ maximumFractionDigits: 2,
388
+ minimumFractionDigits: 2
389
+ },
390
+ IQD: {
391
+ maximumFractionDigits: 2,
392
+ minimumFractionDigits: 2
393
+ },
394
+ ISK: {
395
+ maximumFractionDigits: 2,
396
+ minimumFractionDigits: 2
397
+ },
398
+ PYG: {
399
+ maximumFractionDigits: 2,
400
+ minimumFractionDigits: 2
401
+ },
402
+ XAF: {
403
+ maximumFractionDigits: 2,
404
+ minimumFractionDigits: 2
405
+ },
406
+ LAK: {
407
+ maximumFractionDigits: 2,
408
+ minimumFractionDigits: 2
409
+ },
410
+ LBP: {
411
+ maximumFractionDigits: 2,
412
+ minimumFractionDigits: 2
413
+ },
414
+ MGA: {
415
+ maximumFractionDigits: 2,
416
+ minimumFractionDigits: 2
417
+ },
418
+ SOS: {
419
+ maximumFractionDigits: 2,
420
+ minimumFractionDigits: 2
421
+ },
422
+ UGX: {
423
+ maximumFractionDigits: 2,
424
+ minimumFractionDigits: 2
425
+ },
426
+ ALL: {
427
+ maximumFractionDigits: 2,
428
+ minimumFractionDigits: 2
429
+ },
430
+ IRR: {
431
+ maximumFractionDigits: 2,
432
+ minimumFractionDigits: 2
433
+ }
434
+ };
435
+ function isCustomCurrency(currency) {
436
+ return currency in CUSTOM_CURRENCIES;
437
+ }
438
+ function getCurrencyNumberFormatOptions(currency) {
439
+ if (isCustomCurrency(currency)) return {
440
+ ...CUSTOM_CURRENCIES[currency],
441
+ currency: CUSTOM_CURRENCY_CODE
442
+ };
443
+ return { currency };
444
+ }
445
+ function formatCurrencyAsCurrency(number, currencyFormatter, currency) {
446
+ const formattedNumber = currencyFormatter.format(+number);
447
+ if (isCustomCurrency(currency)) return formattedNumber.replace(CUSTOM_CURRENCY_CODE, CUSTOM_CURRENCIES[currency].displayAs ?? currency);
448
+ return formattedNumber;
449
+ }
450
+ function formatCurrencyAsNumberPure(config, number, currencyFormatter) {
451
+ const { maximumFractionDigits, minimumFractionDigits } = currencyFormatter.resolvedOptions();
452
+ return formatNumberPure(config, number, {
453
+ maximumFractionDigits,
454
+ minimumFractionDigits
455
+ });
456
+ }
457
+ function formatCurrencyAsFallbackPure(config, number, { as } = { as: CurrencyFormat.Currency }) {
458
+ const { canShowCurrency, currency } = config;
459
+ if (as === CurrencyFormat.Number || !canShowCurrency) return `${number}`;
460
+ return `${number} ${currency}`;
461
+ }
462
+ function formatCurrencyPure(config, number, { as, from } = {
463
+ as: CurrencyFormat.Currency,
464
+ from: CurrencyNumber.Money
465
+ }, formatOptions) {
466
+ if (!["string", "number"].includes(typeof number)) return "NaN";
467
+ const { canShowCurrency = true, coinValueInCents, currency, locales } = config;
468
+ if (from === CurrencyNumber.Coins) number = coinsToMoney(+number, coinValueInCents);
469
+ try {
470
+ const options = getCurrencyNumberFormatOptions(currency);
471
+ const currencyFormatter = new Intl.NumberFormat(locales, {
472
+ ...options,
473
+ ...formatOptions,
474
+ currencyDisplay: "symbol",
475
+ numberingSystem: "latn",
476
+ style: "currency"
477
+ });
478
+ if (as === CurrencyFormat.Number || !canShowCurrency) return formatCurrencyAsNumberPure(config, number, currencyFormatter);
479
+ return formatCurrencyAsCurrency(number, currencyFormatter, currency);
480
+ } catch {
481
+ return formatCurrencyAsFallbackPure(config, number, { as });
482
+ }
483
+ }
484
+
485
+ //#endregion
486
+ //#region src/common/i18n.ts
487
+ var I18n = class {
488
+ #config;
489
+ constructor({ config }) {
490
+ this.#config = config;
491
+ }
492
+ formatNumber(number, formatOptions) {
493
+ return formatNumberPure({ locales: [this.#config.ui.language] }, number, formatOptions);
494
+ }
495
+ formatCurrency(number, options = {
496
+ as: CurrencyFormat.Currency,
497
+ from: CurrencyNumber.Money
498
+ }, formatOptions) {
499
+ return formatCurrencyPure({
500
+ canShowCurrency: this.#config.ui.feature.showCurrency,
501
+ coinValueInCents: this.#config.api.coinValueInCents,
502
+ currency: this.#config.api.currency || CUSTOM_CURRENCY_CODE,
503
+ locales: [this.#config.ui.language]
504
+ }, number, options, formatOptions);
505
+ }
506
+ formatCoins(amount, formatOptions) {
507
+ return this.formatCurrency(amount, {
508
+ as: CurrencyFormat.Number,
509
+ from: CurrencyNumber.Coins
510
+ }, formatOptions);
511
+ }
512
+ formatCoinsWithCurrency(amount, formatOptions) {
513
+ return this.formatCurrency(amount, {
514
+ as: CurrencyFormat.Currency,
515
+ from: CurrencyNumber.Coins
516
+ }, formatOptions);
517
+ }
518
+ formatMoney(amount, formatOptions) {
519
+ return this.formatCurrency(amount, {
520
+ as: CurrencyFormat.Number,
521
+ from: CurrencyNumber.Money
522
+ }, formatOptions);
523
+ }
524
+ formatMoneyWithCurrency(amount, formatOptions) {
525
+ return this.formatCurrency(amount, {
526
+ as: CurrencyFormat.Currency,
527
+ from: CurrencyNumber.Money
528
+ }, formatOptions);
529
+ }
530
+ };
531
+
532
+ //#endregion
533
+ Object.defineProperty(exports, 'I18n', {
534
+ enumerable: true,
535
+ get: function () {
536
+ return I18n;
537
+ }
538
+ });