@kalamba/sdk 0.2.1 → 0.4.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.
- package/dist/index.cjs +1 -1
- package/dist/index.d.ts +82 -7
- package/dist/index.js +266 -60
- package/dist/plugins.cjs +1 -1
- package/dist/plugins.d.ts +159 -33
- package/dist/plugins.js +1039 -879
- package/dist/wrapper.cjs +1 -1
- package/dist/wrapper.d.ts +65 -6
- package/dist/wrapper.js +4 -2
- package/package.json +9 -2
package/dist/index.cjs
CHANGED
|
@@ -2,4 +2,4 @@
|
|
|
2
2
|
* BSD 3-Clause License
|
|
3
3
|
* Copyright (c) 2024, Kalamba Games Limited
|
|
4
4
|
*/
|
|
5
|
-
"use strict";var
|
|
5
|
+
"use strict";var P=Object.defineProperty;var A=(r,i,t)=>i in r?P(r,i,{enumerable:!0,configurable:!0,writable:!0,value:t}):r[i]=t;var f=(r,i,t)=>(A(r,typeof i!="symbol"?i+"":i,t),t),E=(r,i,t)=>{if(!i.has(r))throw TypeError("Cannot "+t)};var o=(r,i,t)=>(E(r,i,"read from private field"),t?t.call(r):i.get(r)),F=(r,i,t)=>{if(i.has(r))throw TypeError("Cannot add the same private member more than once");i instanceof WeakSet?i.add(r):i.set(r,t)},y=(r,i,t,m)=>(E(r,i,"write to private field"),m?m.call(r,t):i.set(r,t),t);Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});function B(r,i){return r*i/100}function w(r,i,t){if(!["string","number"].includes(typeof i))return"NaN";const{locales:m}=r;try{return new Intl.NumberFormat(m,{...t,numberingSystem:"latn",style:"decimal"}).format(+i)}catch{return`${i}`}}const h="XTS";var u=(r=>(r.Currency="Currency",r.Number="Number",r))(u||{}),c=(r=>(r.Coins="Coins",r.Money="Money",r))(c||{});const p={ARSB:{displayAs:"ARS",maximumFractionDigits:2,minimumFractionDigits:2},CHIPS:{maximumFractionDigits:0,minimumFractionDigits:0},BNB:{maximumFractionDigits:6,minimumFractionDigits:6},BUSD:{maximumFractionDigits:4,minimumFractionDigits:4},BTC:{maximumFractionDigits:8,minimumFractionDigits:2},mBTC:{maximumFractionDigits:5,minimumFractionDigits:2},uBTC:{maximumFractionDigits:2,minimumFractionDigits:2},BCH:{maximumFractionDigits:8,minimumFractionDigits:2},mBCH:{maximumFractionDigits:2,minimumFractionDigits:2},ETH:{maximumFractionDigits:8,minimumFractionDigits:2},mETH:{maximumFractionDigits:5,minimumFractionDigits:2},uETH:{maximumFractionDigits:2,minimumFractionDigits:2},SOC:{maximumFractionDigits:8,minimumFractionDigits:2},LTC:{maximumFractionDigits:8,minimumFractionDigits:2},mLTC:{maximumFractionDigits:5,minimumFractionDigits:2},uLTC:{maximumFractionDigits:2,minimumFractionDigits:2},DOG:{maximumFractionDigits:4,minimumFractionDigits:2},USDC:{maximumFractionDigits:4,minimumFractionDigits:4},USDT:{maximumFractionDigits:4,minimumFractionDigits:2},TRX:{maximumFractionDigits:2,minimumFractionDigits:2},TUSD:{maximumFractionDigits:2,minimumFractionDigits:2},DAI:{maximumFractionDigits:2,minimumFractionDigits:2},XMR:{maximumFractionDigits:4,minimumFractionDigits:4},CBET:{maximumFractionDigits:0,minimumFractionDigits:0},kCBET:{maximumFractionDigits:2,minimumFractionDigits:2},SHIB:{maximumFractionDigits:0,minimumFractionDigits:0},kSHIB:{maximumFractionDigits:4,minimumFractionDigits:2},NEO:{maximumFractionDigits:4,minimumFractionDigits:4},BSV:{maximumFractionDigits:4,minimumFractionDigits:4},EOS:{maximumFractionDigits:4,minimumFractionDigits:4},DASH:{maximumFractionDigits:4,minimumFractionDigits:4},XLM:{maximumFractionDigits:2,minimumFractionDigits:2},KRW:{maximumFractionDigits:2,minimumFractionDigits:2},kVND:{maximumFractionDigits:4,minimumFractionDigits:2},kIDR:{maximumFractionDigits:4,minimumFractionDigits:2},RSD:{maximumFractionDigits:2,minimumFractionDigits:2},STAKEGC:{displayAs:"GC",maximumFractionDigits:0,minimumFractionDigits:0},STAKESC:{displayAs:"SC",maximumFractionDigits:2,minimumFractionDigits:2},"FC.":{maximumFractionDigits:2,minimumFractionDigits:2},"GC.":{maximumFractionDigits:2,minimumFractionDigits:2},"SC.":{maximumFractionDigits:2,minimumFractionDigits:2},SVC:{maximumFractionDigits:2,minimumFractionDigits:2},DOT:{maximumFractionDigits:4,minimumFractionDigits:4},SOL:{maximumFractionDigits:4,minimumFractionDigits:4},XRP:{maximumFractionDigits:4,minimumFractionDigits:4},ADA:{maximumFractionDigits:4,minimumFractionDigits:4},TON:{maximumFractionDigits:4,minimumFractionDigits:4},FTN:{maximumFractionDigits:4,minimumFractionDigits:4}};function T(r){return r in p}function I(r){return T(r)?{...p[r],currency:h}:{currency:r}}function R(r,i,t){const m=i.format(+r);return T(t)?m.replace(h,p[t].displayAs??t):m}function k(r,i,t){const{maximumFractionDigits:m,minimumFractionDigits:n}=t.resolvedOptions();return w(r,i,{maximumFractionDigits:m,minimumFractionDigits:n})}function G(r,i,{as:t}={as:"Currency"}){const{canShowCurrency:m,currency:n}=r;return t==="Number"||!m?`${i}`:`${i} ${n}`}function H(r,i,{as:t,from:m}={as:"Currency",from:"Money"},n){if(!["string","number"].includes(typeof i))return"NaN";const{canShowCurrency:s=!0,coinValueInCents:a,currency:C,locales:S}=r;m==="Coins"&&(i=B(+i,a));try{const O=I(C),d=new Intl.NumberFormat(S,{...O,...n,currencyDisplay:"symbol",numberingSystem:"latn",style:"currency"});return t==="Number"||!s?k(r,i,d):R(i,d,C)}catch{return G(r,i,{as:t})}}var e;class N{constructor({config:i}){F(this,e,void 0);y(this,e,i)}formatNumber(i,t){const m={locales:[o(this,e).ui.language]};return w(m,i,t)}formatCurrency(i,t={as:u.Currency,from:c.Money},m){const n=o(this,e).ui.feature.showCurrency,s=o(this,e).api.coinValueInCents,a=o(this,e).api.currency||h,C=[o(this,e).ui.language];return H({canShowCurrency:n,coinValueInCents:s,currency:a,locales:C},i,t,m)}formatCoins(i,t){return this.formatCurrency(i,{as:u.Number,from:c.Coins},t)}formatCoinsWithCurrency(i,t){return this.formatCurrency(i,{as:u.Currency,from:c.Coins},t)}formatMoney(i,t){return this.formatCurrency(i,{as:u.Number,from:c.Money},t)}formatMoneyWithCurrency(i,t){return this.formatCurrency(i,{as:u.Currency,from:c.Money},t)}}e=new WeakMap;const U=()=>{};class b extends Error{constructor(t){super("OpenGameError");f(this,"error");this.name="OpenGameError",this.error=t}}class M extends Error{constructor(t){super("PlayError");f(this,"error");this.name="PlayError",this.error=t}}class x extends Error{constructor(){super("TimeoutError"),this.name="TimeoutError"}}var g,D,l;class ${constructor({messagePort:i}){F(this,g,void 0);F(this,D,void 0);F(this,l,void 0);y(this,l,i),this.on("configured",t=>{y(this,g,t),y(this,D,new N({config:t}))})}get config(){if(!o(this,g))throw new Error("config is not initialized, you must open game first");return o(this,g)}get i18n(){if(!o(this,D))throw new Error("i18n is not initialized, you must open game first");return o(this,D)}request(i,...[t]){return new Promise(m=>{this.on(`${i}Response`,n=>m({type:"response",response:n}),{once:!0}),this.on(`${i}Error`,n=>m({type:"error",error:n}),{once:!0}),this.send(i,t)})}on(i,t,m){const n=function s(a){a.data.message===`kalamba:wrapper:${i}`&&(U("on",a.data.message.replace(/^kalamba:/,""),a.data.payload),t(a.data.payload),m!=null&&m.once&&window.removeEventListener("message",s))};window.addEventListener("message",n)}send(i,...[t]){o(this,l).postMessage({message:`kalamba:sdk:${i}`,payload:t},"*")}async openGame(i){var m;const[,t]=await Promise.all([new Promise(n=>this.on("configured",n,{once:!0})),this.request("openGame",i)]);if(t.type==="response")return t.response;throw((m=t.error)==null?void 0:m.type)==="timeout"?new x:new b(t.error)}async play(i,t={},m="SPIN"){var a;const n={contract:i,extra:t,actionType:m},s=await this.request("play",n);if(s.type==="response")return s.response;throw((a=s.error)==null?void 0:a.type)==="timeout"?new x:new M(s.error)}}g=new WeakMap,D=new WeakMap,l=new WeakMap;exports.KalambaSdk=$;exports.OpenGameError=b;exports.PlayError=M;exports.TimeoutError=x;exports.i18n=N;
|
package/dist/index.d.ts
CHANGED
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
import { FormatCurrencyOptions } from '@kalamba/common/src/utils/format/currency';
|
|
2
|
+
|
|
1
3
|
declare interface AddEventListenerOptions_2 {
|
|
2
4
|
once: boolean;
|
|
3
5
|
}
|
|
@@ -83,8 +85,6 @@ export { Error_2 as Error }
|
|
|
83
85
|
|
|
84
86
|
export declare type ExtraPlayPayload = {
|
|
85
87
|
[key: string]: any;
|
|
86
|
-
} & {
|
|
87
|
-
bet?: never;
|
|
88
88
|
};
|
|
89
89
|
|
|
90
90
|
export declare type ForwardToPluginsMessage<P extends PluginDomain> = keyof ForwardToPluginsMessageMap<'sdk'>[P] | keyof ForwardToPluginsMessageMap<'rgs'>[P] | keyof ForwardToPluginsMessageMap<'casino'>[P] | keyof ForwardToPluginsMessageMap<'telemetry'>[P];
|
|
@@ -106,12 +106,26 @@ declare type History_2 = {
|
|
|
106
106
|
};
|
|
107
107
|
export { History_2 as History }
|
|
108
108
|
|
|
109
|
+
export declare class i18n {
|
|
110
|
+
#private;
|
|
111
|
+
constructor({ config }: {
|
|
112
|
+
config: SdkConfig;
|
|
113
|
+
});
|
|
114
|
+
formatNumber(number: string | number, formatOptions?: Intl.NumberFormatOptions): string;
|
|
115
|
+
formatCurrency(number: string | number, options?: FormatCurrencyOptions, formatOptions?: Intl.NumberFormatOptions): string;
|
|
116
|
+
formatCoins(amount: number | string, formatOptions?: Intl.NumberFormatOptions): string;
|
|
117
|
+
formatCoinsWithCurrency(amount: number | string, formatOptions?: Intl.NumberFormatOptions): string;
|
|
118
|
+
formatMoney(amount: number | string, formatOptions?: Intl.NumberFormatOptions): string;
|
|
119
|
+
formatMoneyWithCurrency(amount: number | string, formatOptions?: Intl.NumberFormatOptions): string;
|
|
120
|
+
}
|
|
121
|
+
|
|
109
122
|
export declare class KalambaSdk {
|
|
110
123
|
#private;
|
|
111
|
-
config: SdkConfig;
|
|
112
124
|
constructor({ messagePort }: {
|
|
113
125
|
messagePort: Window;
|
|
114
126
|
});
|
|
127
|
+
get config(): SdkConfig;
|
|
128
|
+
get i18n(): i18n;
|
|
115
129
|
protected request<M extends DomainMessage<'sdk'>>(message: M, ...[payload]: DomainMessagePayload<'sdk', M> extends never ? [] : [payload: DomainMessagePayload<'sdk', M>]): Promise<RgsResponse<M>>;
|
|
116
130
|
on<M extends DomainMessage<'wrapper'> | ForwardToSdkMessage>(message: M, listener: (payload: M extends DomainMessage<'wrapper'> ? DomainMessagePayload<'wrapper', M> : M extends ForwardToSdkMessage ? ForwardToSdkMessagePayload<M> : never) => void, options?: AddEventListenerOptions_2): void;
|
|
117
131
|
send<M extends DomainMessage<'sdk'>>(message: M, ...[payload]: DomainMessagePayload<'sdk', M> extends never ? [] : [DomainMessagePayload<'sdk', M>]): void;
|
|
@@ -147,8 +161,47 @@ export declare type OpenGameRequest = {
|
|
|
147
161
|
};
|
|
148
162
|
|
|
149
163
|
export declare type OpenGameResponse = {
|
|
150
|
-
|
|
151
|
-
|
|
164
|
+
contract: {
|
|
165
|
+
bet: {
|
|
166
|
+
available: Record<number, number[]>;
|
|
167
|
+
default: {
|
|
168
|
+
base: number;
|
|
169
|
+
multiplier: number;
|
|
170
|
+
};
|
|
171
|
+
max: number;
|
|
172
|
+
last: Bet | null;
|
|
173
|
+
lastPaid: Bet | null;
|
|
174
|
+
};
|
|
175
|
+
balance: {
|
|
176
|
+
coins: number;
|
|
177
|
+
version: number;
|
|
178
|
+
};
|
|
179
|
+
gameModel: string;
|
|
180
|
+
metaData: {
|
|
181
|
+
rtpValues: {
|
|
182
|
+
key: string;
|
|
183
|
+
rtpValue: string;
|
|
184
|
+
}[];
|
|
185
|
+
maxWin: {
|
|
186
|
+
key: string;
|
|
187
|
+
maxWinValueXBet: number;
|
|
188
|
+
maxWinOdds: number;
|
|
189
|
+
}[];
|
|
190
|
+
version: string;
|
|
191
|
+
};
|
|
192
|
+
serverTime: number;
|
|
193
|
+
sessionId: string;
|
|
194
|
+
stateType: {
|
|
195
|
+
thisRound: string;
|
|
196
|
+
nextRound: string;
|
|
197
|
+
};
|
|
198
|
+
uiMessages: unknown[];
|
|
199
|
+
win: {
|
|
200
|
+
round: number;
|
|
201
|
+
total: number;
|
|
202
|
+
};
|
|
203
|
+
};
|
|
204
|
+
data: unknown;
|
|
152
205
|
};
|
|
153
206
|
|
|
154
207
|
export declare class PlayError extends Error {
|
|
@@ -168,8 +221,28 @@ export declare type PlayRequest = {
|
|
|
168
221
|
};
|
|
169
222
|
|
|
170
223
|
export declare type PlayResponse = {
|
|
171
|
-
|
|
172
|
-
|
|
224
|
+
contract: {
|
|
225
|
+
bet: {
|
|
226
|
+
last: Bet | null;
|
|
227
|
+
lastPaid: Bet;
|
|
228
|
+
};
|
|
229
|
+
balance: {
|
|
230
|
+
coins: number;
|
|
231
|
+
version: number;
|
|
232
|
+
};
|
|
233
|
+
serverTime: number;
|
|
234
|
+
roundId: string;
|
|
235
|
+
stateType: {
|
|
236
|
+
thisRound: string;
|
|
237
|
+
nextRound: string;
|
|
238
|
+
};
|
|
239
|
+
uiMessages: unknown[];
|
|
240
|
+
win: {
|
|
241
|
+
round: number;
|
|
242
|
+
total: number;
|
|
243
|
+
};
|
|
244
|
+
};
|
|
245
|
+
data: unknown;
|
|
173
246
|
};
|
|
174
247
|
|
|
175
248
|
export declare type PluginDomain = keyof ForwardToPluginsMessageMap<any>;
|
|
@@ -240,6 +313,8 @@ export declare interface SdkConfig {
|
|
|
240
313
|
jurisdiction: string;
|
|
241
314
|
playMode: 'FUN' | 'REAL';
|
|
242
315
|
user: string;
|
|
316
|
+
sessionId: string;
|
|
317
|
+
lastRoundId?: string;
|
|
243
318
|
};
|
|
244
319
|
ui: {
|
|
245
320
|
autoplay: {
|
package/dist/index.js
CHANGED
|
@@ -2,97 +2,303 @@
|
|
|
2
2
|
* BSD 3-Clause License
|
|
3
3
|
* Copyright (c) 2024, Kalamba Games Limited
|
|
4
4
|
*/
|
|
5
|
-
var
|
|
6
|
-
var
|
|
7
|
-
var
|
|
8
|
-
if (!
|
|
9
|
-
throw TypeError("Cannot " +
|
|
5
|
+
var b = Object.defineProperty;
|
|
6
|
+
var M = (r, i, t) => i in r ? b(r, i, { enumerable: !0, configurable: !0, writable: !0, value: t }) : r[i] = t;
|
|
7
|
+
var l = (r, i, t) => (M(r, typeof i != "symbol" ? i + "" : i, t), t), d = (r, i, t) => {
|
|
8
|
+
if (!i.has(r))
|
|
9
|
+
throw TypeError("Cannot " + t);
|
|
10
10
|
};
|
|
11
|
-
var
|
|
12
|
-
if (
|
|
11
|
+
var o = (r, i, t) => (d(r, i, "read from private field"), t ? t.call(r) : i.get(r)), F = (r, i, t) => {
|
|
12
|
+
if (i.has(r))
|
|
13
13
|
throw TypeError("Cannot add the same private member more than once");
|
|
14
|
-
|
|
15
|
-
},
|
|
16
|
-
|
|
14
|
+
i instanceof WeakSet ? i.add(r) : i.set(r, t);
|
|
15
|
+
}, y = (r, i, t, m) => (d(r, i, "write to private field"), m ? m.call(r, t) : i.set(r, t), t);
|
|
16
|
+
function A(r, i) {
|
|
17
|
+
return r * i / 100;
|
|
18
|
+
}
|
|
19
|
+
function w(r, i, t) {
|
|
20
|
+
if (!["string", "number"].includes(typeof i))
|
|
21
|
+
return "NaN";
|
|
22
|
+
const { locales: m } = r;
|
|
23
|
+
try {
|
|
24
|
+
return new Intl.NumberFormat(m, {
|
|
25
|
+
...t,
|
|
26
|
+
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
|
|
27
|
+
// @ts-ignore
|
|
28
|
+
numberingSystem: "latn",
|
|
29
|
+
style: "decimal"
|
|
30
|
+
}).format(+i);
|
|
31
|
+
} catch {
|
|
32
|
+
return `${i}`;
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
const x = "XTS";
|
|
36
|
+
var u = /* @__PURE__ */ ((r) => (r.Currency = "Currency", r.Number = "Number", r))(u || {}), c = /* @__PURE__ */ ((r) => (r.Coins = "Coins", r.Money = "Money", r))(c || {});
|
|
37
|
+
const h = {
|
|
38
|
+
/* eslint-disable sort-keys-fix/sort-keys-fix */
|
|
39
|
+
// ARSB is the internal currency relevant for invoicing purposes, players should see it as ARS
|
|
40
|
+
ARSB: { displayAs: "ARS", maximumFractionDigits: 2, minimumFractionDigits: 2 },
|
|
41
|
+
// Social Casino chips
|
|
42
|
+
CHIPS: { maximumFractionDigits: 0, minimumFractionDigits: 0 },
|
|
43
|
+
// Binance Coin
|
|
44
|
+
BNB: { maximumFractionDigits: 6, minimumFractionDigits: 6 },
|
|
45
|
+
// Binance USD
|
|
46
|
+
BUSD: { maximumFractionDigits: 4, minimumFractionDigits: 4 },
|
|
47
|
+
// Bitcoin
|
|
48
|
+
BTC: { maximumFractionDigits: 8, minimumFractionDigits: 2 },
|
|
49
|
+
mBTC: { maximumFractionDigits: 5, minimumFractionDigits: 2 },
|
|
50
|
+
uBTC: { maximumFractionDigits: 2, minimumFractionDigits: 2 },
|
|
51
|
+
// Bitcoin Cash
|
|
52
|
+
BCH: { maximumFractionDigits: 8, minimumFractionDigits: 2 },
|
|
53
|
+
mBCH: { maximumFractionDigits: 2, minimumFractionDigits: 2 },
|
|
54
|
+
// Ethereum
|
|
55
|
+
ETH: { maximumFractionDigits: 8, minimumFractionDigits: 2 },
|
|
56
|
+
mETH: { maximumFractionDigits: 5, minimumFractionDigits: 2 },
|
|
57
|
+
uETH: { maximumFractionDigits: 2, minimumFractionDigits: 2 },
|
|
58
|
+
// SocialCoin
|
|
59
|
+
SOC: { maximumFractionDigits: 8, minimumFractionDigits: 2 },
|
|
60
|
+
// Litecoins
|
|
61
|
+
LTC: { maximumFractionDigits: 8, minimumFractionDigits: 2 },
|
|
62
|
+
mLTC: { maximumFractionDigits: 5, minimumFractionDigits: 2 },
|
|
63
|
+
uLTC: { maximumFractionDigits: 2, minimumFractionDigits: 2 },
|
|
64
|
+
// Dogecoin
|
|
65
|
+
DOG: { maximumFractionDigits: 4, minimumFractionDigits: 2 },
|
|
66
|
+
// USD Coin
|
|
67
|
+
USDC: { maximumFractionDigits: 4, minimumFractionDigits: 4 },
|
|
68
|
+
// Tether
|
|
69
|
+
USDT: { maximumFractionDigits: 4, minimumFractionDigits: 2 },
|
|
70
|
+
// Tron
|
|
71
|
+
TRX: { maximumFractionDigits: 2, minimumFractionDigits: 2 },
|
|
72
|
+
// TrueUSD
|
|
73
|
+
TUSD: { maximumFractionDigits: 2, minimumFractionDigits: 2 },
|
|
74
|
+
// Dai
|
|
75
|
+
DAI: { maximumFractionDigits: 2, minimumFractionDigits: 2 },
|
|
76
|
+
// Monero
|
|
77
|
+
XMR: { maximumFractionDigits: 4, minimumFractionDigits: 4 },
|
|
78
|
+
// CBET
|
|
79
|
+
CBET: { maximumFractionDigits: 0, minimumFractionDigits: 0 },
|
|
80
|
+
kCBET: { maximumFractionDigits: 2, minimumFractionDigits: 2 },
|
|
81
|
+
// Shiba Inu
|
|
82
|
+
SHIB: { maximumFractionDigits: 0, minimumFractionDigits: 0 },
|
|
83
|
+
kSHIB: { maximumFractionDigits: 4, minimumFractionDigits: 2 },
|
|
84
|
+
// Neo
|
|
85
|
+
NEO: { maximumFractionDigits: 4, minimumFractionDigits: 4 },
|
|
86
|
+
// Bitcoin SV
|
|
87
|
+
BSV: { maximumFractionDigits: 4, minimumFractionDigits: 4 },
|
|
88
|
+
// EOS
|
|
89
|
+
EOS: { maximumFractionDigits: 4, minimumFractionDigits: 4 },
|
|
90
|
+
// Dash
|
|
91
|
+
DASH: { maximumFractionDigits: 4, minimumFractionDigits: 4 },
|
|
92
|
+
// Stellar
|
|
93
|
+
XLM: { maximumFractionDigits: 2, minimumFractionDigits: 2 },
|
|
94
|
+
// South Korean Won
|
|
95
|
+
// While the jeon (1/100th of Won) is no longer used for everyday transactions,
|
|
96
|
+
// we received complaint from operator that we should show 2 fraction digits though, so we override it here.
|
|
97
|
+
KRW: { maximumFractionDigits: 2, minimumFractionDigits: 2 },
|
|
98
|
+
// Vietnamese dong
|
|
99
|
+
kVND: { maximumFractionDigits: 4, minimumFractionDigits: 2 },
|
|
100
|
+
// Indonesian rupiah
|
|
101
|
+
kIDR: { maximumFractionDigits: 4, minimumFractionDigits: 2 },
|
|
102
|
+
// Serbian dinar
|
|
103
|
+
// There is a difference how browsers handle currency data:
|
|
104
|
+
// - Google Chrome uses CLDR, which defines 0 minor digits for RSD currency.
|
|
105
|
+
// - Firefox, Edge, Safari use ISO 4217, which defines 2 minor digits for RSD currency.
|
|
106
|
+
// We received complaint from operator that we should show 2 fraction digits though, so we override it here.
|
|
107
|
+
RSD: { maximumFractionDigits: 2, minimumFractionDigits: 2 },
|
|
108
|
+
// Social currency on Stake
|
|
109
|
+
STAKEGC: { displayAs: "GC", maximumFractionDigits: 0, minimumFractionDigits: 0 },
|
|
110
|
+
STAKESC: { displayAs: "SC", maximumFractionDigits: 2, minimumFractionDigits: 2 },
|
|
111
|
+
// Social currency on Relax
|
|
112
|
+
"FC.": { maximumFractionDigits: 2, minimumFractionDigits: 2 },
|
|
113
|
+
"GC.": { maximumFractionDigits: 2, minimumFractionDigits: 2 },
|
|
114
|
+
"SC.": { maximumFractionDigits: 2, minimumFractionDigits: 2 },
|
|
115
|
+
// Silvercash
|
|
116
|
+
SVC: { maximumFractionDigits: 2, minimumFractionDigits: 2 },
|
|
117
|
+
// Polkadot
|
|
118
|
+
DOT: { maximumFractionDigits: 4, minimumFractionDigits: 4 },
|
|
119
|
+
// Solana
|
|
120
|
+
SOL: { maximumFractionDigits: 4, minimumFractionDigits: 4 },
|
|
121
|
+
// XRP
|
|
122
|
+
XRP: { maximumFractionDigits: 4, minimumFractionDigits: 4 },
|
|
123
|
+
// Cardano
|
|
124
|
+
ADA: { maximumFractionDigits: 4, minimumFractionDigits: 4 },
|
|
125
|
+
// Toncoin
|
|
126
|
+
TON: { maximumFractionDigits: 4, minimumFractionDigits: 4 },
|
|
127
|
+
// Fasttoken
|
|
128
|
+
FTN: { maximumFractionDigits: 4, minimumFractionDigits: 4 }
|
|
129
|
+
/* eslint-enable sort-keys-fix/sort-keys-fix */
|
|
17
130
|
};
|
|
18
|
-
|
|
19
|
-
|
|
131
|
+
function T(r) {
|
|
132
|
+
return r in h;
|
|
133
|
+
}
|
|
134
|
+
function O(r) {
|
|
135
|
+
return T(r) ? {
|
|
136
|
+
...h[r],
|
|
137
|
+
currency: x
|
|
138
|
+
} : {
|
|
139
|
+
currency: r
|
|
140
|
+
};
|
|
141
|
+
}
|
|
142
|
+
function B(r, i, t) {
|
|
143
|
+
const m = i.format(+r);
|
|
144
|
+
return T(t) ? m.replace(x, h[t].displayAs ?? t) : m;
|
|
145
|
+
}
|
|
146
|
+
function P(r, i, t) {
|
|
147
|
+
const { maximumFractionDigits: m, minimumFractionDigits: n } = t.resolvedOptions();
|
|
148
|
+
return w(r, i, { maximumFractionDigits: m, minimumFractionDigits: n });
|
|
149
|
+
}
|
|
150
|
+
function I(r, i, { as: t } = {
|
|
151
|
+
as: "Currency"
|
|
152
|
+
/* Currency */
|
|
153
|
+
}) {
|
|
154
|
+
const { canShowCurrency: m, currency: n } = r;
|
|
155
|
+
return t === "Number" || !m ? `${i}` : `${i} ${n}`;
|
|
156
|
+
}
|
|
157
|
+
function R(r, i, { as: t, from: m } = {
|
|
158
|
+
as: "Currency",
|
|
159
|
+
from: "Money"
|
|
160
|
+
/* Money */
|
|
161
|
+
}, n) {
|
|
162
|
+
if (!["string", "number"].includes(typeof i))
|
|
163
|
+
return "NaN";
|
|
164
|
+
const { canShowCurrency: s = !0, coinValueInCents: a, currency: f, locales: p } = r;
|
|
165
|
+
m === "Coins" && (i = A(+i, a));
|
|
166
|
+
try {
|
|
167
|
+
const N = O(f), S = new Intl.NumberFormat(p, {
|
|
168
|
+
...N,
|
|
169
|
+
...n,
|
|
170
|
+
currencyDisplay: "symbol",
|
|
171
|
+
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
|
|
172
|
+
// @ts-ignore
|
|
173
|
+
numberingSystem: "latn",
|
|
174
|
+
style: "currency"
|
|
175
|
+
});
|
|
176
|
+
return t === "Number" || !s ? P(r, i, S) : B(i, S, f);
|
|
177
|
+
} catch {
|
|
178
|
+
return I(r, i, { as: t });
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
var e;
|
|
182
|
+
class k {
|
|
183
|
+
constructor({ config: i }) {
|
|
184
|
+
F(this, e, void 0);
|
|
185
|
+
y(this, e, i);
|
|
186
|
+
}
|
|
187
|
+
formatNumber(i, t) {
|
|
188
|
+
const m = { locales: [o(this, e).ui.language] };
|
|
189
|
+
return w(m, i, t);
|
|
190
|
+
}
|
|
191
|
+
formatCurrency(i, t = { as: u.Currency, from: c.Money }, m) {
|
|
192
|
+
const n = o(this, e).ui.feature.showCurrency, s = o(this, e).api.coinValueInCents, a = o(this, e).api.currency || x, f = [o(this, e).ui.language];
|
|
193
|
+
return R({
|
|
194
|
+
canShowCurrency: n,
|
|
195
|
+
coinValueInCents: s,
|
|
196
|
+
currency: a,
|
|
197
|
+
locales: f
|
|
198
|
+
}, i, t, m);
|
|
199
|
+
}
|
|
200
|
+
formatCoins(i, t) {
|
|
201
|
+
return this.formatCurrency(i, { as: u.Number, from: c.Coins }, t);
|
|
202
|
+
}
|
|
203
|
+
formatCoinsWithCurrency(i, t) {
|
|
204
|
+
return this.formatCurrency(i, { as: u.Currency, from: c.Coins }, t);
|
|
205
|
+
}
|
|
206
|
+
formatMoney(i, t) {
|
|
207
|
+
return this.formatCurrency(i, { as: u.Number, from: c.Money }, t);
|
|
208
|
+
}
|
|
209
|
+
formatMoneyWithCurrency(i, t) {
|
|
210
|
+
return this.formatCurrency(i, { as: u.Currency, from: c.Money }, t);
|
|
211
|
+
}
|
|
212
|
+
}
|
|
213
|
+
e = new WeakMap();
|
|
214
|
+
const G = () => {
|
|
215
|
+
};
|
|
216
|
+
class H extends Error {
|
|
217
|
+
constructor(t) {
|
|
20
218
|
super("OpenGameError");
|
|
21
|
-
|
|
22
|
-
this.name = "OpenGameError", this.error =
|
|
219
|
+
l(this, "error");
|
|
220
|
+
this.name = "OpenGameError", this.error = t;
|
|
23
221
|
}
|
|
24
222
|
}
|
|
25
|
-
class
|
|
26
|
-
constructor(
|
|
223
|
+
class U extends Error {
|
|
224
|
+
constructor(t) {
|
|
27
225
|
super("PlayError");
|
|
28
|
-
|
|
29
|
-
this.name = "PlayError", this.error =
|
|
226
|
+
l(this, "error");
|
|
227
|
+
this.name = "PlayError", this.error = t;
|
|
30
228
|
}
|
|
31
229
|
}
|
|
32
|
-
class
|
|
230
|
+
class E extends Error {
|
|
33
231
|
constructor() {
|
|
34
232
|
super("TimeoutError"), this.name = "TimeoutError";
|
|
35
233
|
}
|
|
36
234
|
}
|
|
37
|
-
var
|
|
38
|
-
class
|
|
39
|
-
constructor({ messagePort:
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
u(this, i, void 0);
|
|
46
|
-
l(this, i, e), this.on("configured", (r) => {
|
|
47
|
-
this.config = r;
|
|
235
|
+
var g, D, C;
|
|
236
|
+
class L {
|
|
237
|
+
constructor({ messagePort: i }) {
|
|
238
|
+
F(this, g, void 0);
|
|
239
|
+
F(this, D, void 0);
|
|
240
|
+
F(this, C, void 0);
|
|
241
|
+
y(this, C, i), this.on("configured", (t) => {
|
|
242
|
+
y(this, g, t), y(this, D, new k({ config: t }));
|
|
48
243
|
});
|
|
49
244
|
}
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
245
|
+
get config() {
|
|
246
|
+
if (!o(this, g))
|
|
247
|
+
throw new Error("config is not initialized, you must open game first");
|
|
248
|
+
return o(this, g);
|
|
249
|
+
}
|
|
250
|
+
get i18n() {
|
|
251
|
+
if (!o(this, D))
|
|
252
|
+
throw new Error("i18n is not initialized, you must open game first");
|
|
253
|
+
return o(this, D);
|
|
254
|
+
}
|
|
255
|
+
request(i, ...[t]) {
|
|
256
|
+
return new Promise((m) => {
|
|
257
|
+
this.on(`${i}Response`, (n) => m({ type: "response", response: n }), {
|
|
53
258
|
once: !0
|
|
54
|
-
}), this.on(`${
|
|
259
|
+
}), this.on(`${i}Error`, (n) => m({ type: "error", error: n }), { once: !0 }), this.send(i, t);
|
|
55
260
|
});
|
|
56
261
|
}
|
|
57
|
-
on(
|
|
58
|
-
const
|
|
59
|
-
a.data.message === `kalamba:wrapper:${
|
|
262
|
+
on(i, t, m) {
|
|
263
|
+
const n = function s(a) {
|
|
264
|
+
a.data.message === `kalamba:wrapper:${i}` && (G("on", a.data.message.replace(/^kalamba:/, ""), a.data.payload), t(a.data.payload), m != null && m.once && window.removeEventListener("message", s));
|
|
60
265
|
};
|
|
61
|
-
window.addEventListener("message",
|
|
266
|
+
window.addEventListener("message", n);
|
|
62
267
|
}
|
|
63
268
|
// TODO error messages
|
|
64
|
-
send(
|
|
65
|
-
|
|
269
|
+
send(i, ...[t]) {
|
|
270
|
+
o(this, C).postMessage(
|
|
66
271
|
{
|
|
67
|
-
message: `kalamba:sdk:${
|
|
68
|
-
payload:
|
|
272
|
+
message: `kalamba:sdk:${i}`,
|
|
273
|
+
payload: t
|
|
69
274
|
},
|
|
70
275
|
"*"
|
|
71
276
|
);
|
|
72
277
|
}
|
|
73
|
-
async openGame(
|
|
74
|
-
var
|
|
75
|
-
const [,
|
|
278
|
+
async openGame(i) {
|
|
279
|
+
var m;
|
|
280
|
+
const [, t] = await Promise.all([
|
|
76
281
|
// TODO: return promise from call to this.on if listener is not provided
|
|
77
|
-
new Promise((
|
|
78
|
-
this.request("openGame",
|
|
282
|
+
new Promise((n) => this.on("configured", n, { once: !0 })),
|
|
283
|
+
this.request("openGame", i)
|
|
79
284
|
]);
|
|
80
|
-
if (
|
|
81
|
-
return
|
|
82
|
-
throw ((
|
|
285
|
+
if (t.type === "response")
|
|
286
|
+
return t.response;
|
|
287
|
+
throw ((m = t.error) == null ? void 0 : m.type) === "timeout" ? new E() : new H(t.error);
|
|
83
288
|
}
|
|
84
|
-
async play(
|
|
289
|
+
async play(i, t = {}, m = "SPIN") {
|
|
85
290
|
var a;
|
|
86
|
-
const
|
|
87
|
-
if (
|
|
88
|
-
return
|
|
89
|
-
throw ((a =
|
|
291
|
+
const n = { contract: i, extra: t, actionType: m }, s = await this.request("play", n);
|
|
292
|
+
if (s.type === "response")
|
|
293
|
+
return s.response;
|
|
294
|
+
throw ((a = s.error) == null ? void 0 : a.type) === "timeout" ? new E() : new U(s.error);
|
|
90
295
|
}
|
|
91
296
|
}
|
|
92
|
-
|
|
297
|
+
g = new WeakMap(), D = new WeakMap(), C = new WeakMap();
|
|
93
298
|
export {
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
299
|
+
L as KalambaSdk,
|
|
300
|
+
H as OpenGameError,
|
|
301
|
+
U as PlayError,
|
|
302
|
+
E as TimeoutError,
|
|
303
|
+
k as i18n
|
|
98
304
|
};
|