@kalamba/sdk 0.30.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.
- package/dist/errors-BUjKnbx5.cjs +112 -0
- package/dist/errors-CakYyMwc.js +88 -0
- package/dist/i18n-CM87VHyx.d.ts +525 -0
- package/dist/i18n-Dff1pHdh.d.cts +525 -0
- package/dist/i18n-NIrYZyLs.cjs +538 -0
- package/dist/i18n-vzEFUHe0.js +532 -0
- package/dist/index-B_FWnjNV.d.ts +94 -0
- package/dist/index-l1uA5NOP.d.cts +94 -0
- package/dist/index.cjs +108 -2
- package/dist/index.d.cts +113 -0
- package/dist/index.d.ts +113 -616
- package/dist/index.js +101 -347
- package/dist/logger-BR4jdx4T.cjs +28 -0
- package/dist/logger-f0OQvO5X.js +22 -0
- package/dist/plugins.cjs +152 -239
- package/dist/plugins.d.cts +6 -0
- package/dist/plugins.d.ts +6 -1032
- package/dist/plugins.js +149 -6402
- package/dist/wrapper.cjs +741 -2
- package/dist/wrapper.d.cts +63 -0
- package/dist/wrapper.d.ts +63 -613
- package/dist/wrapper.js +736 -2900
- package/package.json +11 -25
- package/dist/encoders-BDr7fjKQ.js +0 -13
- package/dist/encoders-DVHzIpWT.cjs +0 -5
- package/dist/errors-BXO3dlhS.cjs +0 -5
- package/dist/errors-NnLrKjTz.js +0 -90
- package/dist/v4-85TkMtXc.js +0 -50
- package/dist/v4-Cj9BnqmU.cjs +0 -5
package/dist/index.js
CHANGED
|
@@ -1,353 +1,107 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* BSD 3-Clause License
|
|
3
|
-
* Copyright (c)
|
|
3
|
+
* Copyright (c) 2026, Kalamba Games Limited
|
|
4
4
|
*/
|
|
5
|
-
|
|
6
|
-
|
|
5
|
+
import { i as TimeoutError, r as RgsErrorCode, t as RgsError } from "./errors-CakYyMwc.js";
|
|
6
|
+
import { t as I18n } from "./i18n-vzEFUHe0.js";
|
|
7
|
+
|
|
8
|
+
//#region src/sdk/KalambaSdk.ts
|
|
9
|
+
const logIn = () => {};
|
|
10
|
+
const logOut = () => {};
|
|
11
|
+
const passThroughCodec = {
|
|
12
|
+
encode: (value) => value,
|
|
13
|
+
decode: (value) => value
|
|
7
14
|
};
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
if (!["string", "number"].includes(typeof i))
|
|
18
|
-
return "NaN";
|
|
19
|
-
const { locales: n } = t;
|
|
20
|
-
try {
|
|
21
|
-
return new Intl.NumberFormat(n, {
|
|
22
|
-
...m,
|
|
23
|
-
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
|
|
24
|
-
// @ts-ignore
|
|
25
|
-
numberingSystem: "latn",
|
|
26
|
-
style: "decimal"
|
|
27
|
-
}).format(+i);
|
|
28
|
-
} catch {
|
|
29
|
-
return `${i}`;
|
|
30
|
-
}
|
|
31
|
-
}
|
|
32
|
-
const l = "XTS";
|
|
33
|
-
var u = /* @__PURE__ */ ((t) => (t.Currency = "Currency", t.Number = "Number", t))(u || {}), c = /* @__PURE__ */ ((t) => (t.Coins = "Coins", t.Money = "Money", t))(c || {});
|
|
34
|
-
const f = {
|
|
35
|
-
/* eslint-disable sort-keys-fix/sort-keys-fix */
|
|
36
|
-
// ARSB is the internal currency relevant for invoicing purposes, players should see it as ARS
|
|
37
|
-
ARSB: { displayAs: "ARS", maximumFractionDigits: 2, minimumFractionDigits: 2 },
|
|
38
|
-
// Social Casino chips
|
|
39
|
-
CHIPS: { maximumFractionDigits: 0, minimumFractionDigits: 0 },
|
|
40
|
-
// Binance Coin
|
|
41
|
-
BNB: { maximumFractionDigits: 6, minimumFractionDigits: 6 },
|
|
42
|
-
// Binance USD
|
|
43
|
-
BUSD: { maximumFractionDigits: 4, minimumFractionDigits: 4 },
|
|
44
|
-
// Bitcoin
|
|
45
|
-
BTC: { maximumFractionDigits: 8, minimumFractionDigits: 2 },
|
|
46
|
-
mBTC: { maximumFractionDigits: 5, minimumFractionDigits: 2 },
|
|
47
|
-
uBTC: { maximumFractionDigits: 2, minimumFractionDigits: 2 },
|
|
48
|
-
// Bitcoin Cash
|
|
49
|
-
BCH: { maximumFractionDigits: 8, minimumFractionDigits: 2 },
|
|
50
|
-
mBCH: { maximumFractionDigits: 2, minimumFractionDigits: 2 },
|
|
51
|
-
// Ethereum
|
|
52
|
-
ETH: { maximumFractionDigits: 8, minimumFractionDigits: 2 },
|
|
53
|
-
mETH: { maximumFractionDigits: 5, minimumFractionDigits: 2 },
|
|
54
|
-
uETH: { maximumFractionDigits: 2, minimumFractionDigits: 2 },
|
|
55
|
-
// SocialCoin
|
|
56
|
-
SOC: { maximumFractionDigits: 8, minimumFractionDigits: 2 },
|
|
57
|
-
// Litecoins
|
|
58
|
-
LTC: { maximumFractionDigits: 8, minimumFractionDigits: 2 },
|
|
59
|
-
mLTC: { maximumFractionDigits: 5, minimumFractionDigits: 2 },
|
|
60
|
-
uLTC: { maximumFractionDigits: 2, minimumFractionDigits: 2 },
|
|
61
|
-
// Dogecoin
|
|
62
|
-
DOG: { maximumFractionDigits: 4, minimumFractionDigits: 2 },
|
|
63
|
-
// USD Coin
|
|
64
|
-
USDC: { maximumFractionDigits: 4, minimumFractionDigits: 4 },
|
|
65
|
-
// Tether
|
|
66
|
-
USDT: { maximumFractionDigits: 4, minimumFractionDigits: 2 },
|
|
67
|
-
// Tron
|
|
68
|
-
TRX: { maximumFractionDigits: 2, minimumFractionDigits: 2 },
|
|
69
|
-
// TrueUSD
|
|
70
|
-
TUSD: { maximumFractionDigits: 2, minimumFractionDigits: 2 },
|
|
71
|
-
// Dai
|
|
72
|
-
DAI: { maximumFractionDigits: 2, minimumFractionDigits: 2 },
|
|
73
|
-
// Monero
|
|
74
|
-
XMR: { maximumFractionDigits: 4, minimumFractionDigits: 4 },
|
|
75
|
-
// CBET
|
|
76
|
-
CBET: { maximumFractionDigits: 0, minimumFractionDigits: 0 },
|
|
77
|
-
kCBET: { maximumFractionDigits: 2, minimumFractionDigits: 2 },
|
|
78
|
-
// Shiba Inu
|
|
79
|
-
SHIB: { maximumFractionDigits: 0, minimumFractionDigits: 0 },
|
|
80
|
-
kSHIB: { maximumFractionDigits: 4, minimumFractionDigits: 2 },
|
|
81
|
-
// Neo
|
|
82
|
-
NEO: { maximumFractionDigits: 4, minimumFractionDigits: 4 },
|
|
83
|
-
// Bitcoin SV
|
|
84
|
-
BSV: { maximumFractionDigits: 4, minimumFractionDigits: 4 },
|
|
85
|
-
// EOS
|
|
86
|
-
EOS: { maximumFractionDigits: 4, minimumFractionDigits: 4 },
|
|
87
|
-
// Dash
|
|
88
|
-
DASH: { maximumFractionDigits: 4, minimumFractionDigits: 4 },
|
|
89
|
-
// Stellar
|
|
90
|
-
XLM: { maximumFractionDigits: 2, minimumFractionDigits: 2 },
|
|
91
|
-
// South Korean Won
|
|
92
|
-
// While the jeon (1/100th of Won) is no longer used for everyday transactions,
|
|
93
|
-
// we received complaint from operator that we should show 2 fraction digits though, so we override it here.
|
|
94
|
-
KRW: { maximumFractionDigits: 2, minimumFractionDigits: 2 },
|
|
95
|
-
// Vietnamese dong
|
|
96
|
-
kVND: { maximumFractionDigits: 4, minimumFractionDigits: 2 },
|
|
97
|
-
// Indonesian rupiah
|
|
98
|
-
kIDR: { maximumFractionDigits: 4, minimumFractionDigits: 2 },
|
|
99
|
-
// Serbian dinar
|
|
100
|
-
// There is a difference how browsers handle currency data:
|
|
101
|
-
// - Google Chrome uses CLDR, which defines 0 minor digits for RSD currency.
|
|
102
|
-
// - Firefox, Edge, Safari use ISO 4217, which defines 2 minor digits for RSD currency.
|
|
103
|
-
// We received complaint from operator that we should show 2 fraction digits though, so we override it here.
|
|
104
|
-
RSD: { maximumFractionDigits: 2, minimumFractionDigits: 2 },
|
|
105
|
-
// Social currency on Stake
|
|
106
|
-
STAKEGC: { displayAs: "GC", maximumFractionDigits: 0, minimumFractionDigits: 0 },
|
|
107
|
-
STAKESC: { displayAs: "SC", maximumFractionDigits: 2, minimumFractionDigits: 2 },
|
|
108
|
-
// Social currency on Relax
|
|
109
|
-
"BK.": { maximumFractionDigits: 2, minimumFractionDigits: 2 },
|
|
110
|
-
"BT.": { maximumFractionDigits: 2, minimumFractionDigits: 2 },
|
|
111
|
-
"FC.": { maximumFractionDigits: 2, minimumFractionDigits: 2 },
|
|
112
|
-
"GC.": { maximumFractionDigits: 2, minimumFractionDigits: 2 },
|
|
113
|
-
"SC.": { maximumFractionDigits: 2, minimumFractionDigits: 2 },
|
|
114
|
-
GC: { maximumFractionDigits: 2, minimumFractionDigits: 2 },
|
|
115
|
-
SC: { maximumFractionDigits: 2, minimumFractionDigits: 2 },
|
|
116
|
-
GLD: { displayAs: "GC.", maximumFractionDigits: 2, minimumFractionDigits: 2 },
|
|
117
|
-
SS1: { displayAs: "SC.", maximumFractionDigits: 2, minimumFractionDigits: 2 },
|
|
118
|
-
// Softswiss
|
|
119
|
-
SWEP: { displayAs: "SC.", maximumFractionDigits: 2, minimumFractionDigits: 2 },
|
|
120
|
-
GCLC: { displayAs: "GC.", maximumFractionDigits: 2, minimumFractionDigits: 2 },
|
|
121
|
-
SWPC: { displayAs: "SC", maximumFractionDigits: 2, minimumFractionDigits: 2 },
|
|
122
|
-
LUKC: { displayAs: "LC", maximumFractionDigits: 2, minimumFractionDigits: 2 },
|
|
123
|
-
TTSC: { displayAs: "SC", maximumFractionDigits: 2, minimumFractionDigits: 2 },
|
|
124
|
-
TTGC: { displayAs: "GC", maximumFractionDigits: 2, minimumFractionDigits: 2 },
|
|
125
|
-
// Silvercash
|
|
126
|
-
SVC: { maximumFractionDigits: 2, minimumFractionDigits: 2 },
|
|
127
|
-
// Polkadot
|
|
128
|
-
DOT: { maximumFractionDigits: 4, minimumFractionDigits: 4 },
|
|
129
|
-
// Solana
|
|
130
|
-
SOL: { maximumFractionDigits: 4, minimumFractionDigits: 4 },
|
|
131
|
-
// XRP
|
|
132
|
-
XRP: { maximumFractionDigits: 2, minimumFractionDigits: 2 },
|
|
133
|
-
// Cardano
|
|
134
|
-
ADA: { maximumFractionDigits: 2, minimumFractionDigits: 2 },
|
|
135
|
-
// Toncoin
|
|
136
|
-
TON: { maximumFractionDigits: 4, minimumFractionDigits: 4 },
|
|
137
|
-
// Fasttoken
|
|
138
|
-
FTN: { maximumFractionDigits: 4, minimumFractionDigits: 4 },
|
|
139
|
-
// Omani Rial
|
|
140
|
-
OMR: { maximumFractionDigits: 2, minimumFractionDigits: 2 },
|
|
141
|
-
// Jordanian Dinar
|
|
142
|
-
JOD: { maximumFractionDigits: 2, minimumFractionDigits: 2 },
|
|
143
|
-
// Bahraini Dinar
|
|
144
|
-
BHD: { maximumFractionDigits: 2, minimumFractionDigits: 2 },
|
|
145
|
-
// Kuwaiti Dinar
|
|
146
|
-
KWD: { maximumFractionDigits: 2, minimumFractionDigits: 2 },
|
|
147
|
-
// MicroGame
|
|
148
|
-
BNS: { maximumFractionDigits: 2, minimumFractionDigits: 2 },
|
|
149
|
-
// Quanta
|
|
150
|
-
GRSC: { displayAs: "SC", maximumFractionDigits: 2, minimumFractionDigits: 2 },
|
|
151
|
-
GRGC: { displayAs: "GC", maximumFractionDigits: 2, minimumFractionDigits: 2 },
|
|
152
|
-
// Softswiss
|
|
153
|
-
EEGP: { displayAs: "EP", maximumFractionDigits: 2, minimumFractionDigits: 2 },
|
|
154
|
-
EPGP: { displayAs: "PP", maximumFractionDigits: 2, minimumFractionDigits: 2 },
|
|
155
|
-
LUCK: { displayAs: "LUCK", maximumFractionDigits: 2, minimumFractionDigits: 2 },
|
|
156
|
-
CXCO: { displayAs: "CC", maximumFractionDigits: 2, minimumFractionDigits: 2 },
|
|
157
|
-
GZCO: { displayAs: "GC", maximumFractionDigits: 2, minimumFractionDigits: 2 },
|
|
158
|
-
// gametech
|
|
159
|
-
FC: { displayAs: "", maximumFractionDigits: 2, minimumFractionDigits: 2 },
|
|
160
|
-
RC: { maximumFractionDigits: 2, minimumFractionDigits: 2 },
|
|
161
|
-
MWSC: { displayAs: "MC", maximumFractionDigits: 2, minimumFractionDigits: 2 },
|
|
162
|
-
MWGC: { displayAs: "GC", maximumFractionDigits: 2, minimumFractionDigits: 2 },
|
|
163
|
-
// https://kalamba.atlassian.net/browse/FRAM-1829
|
|
164
|
-
// Myanmar Kyat
|
|
165
|
-
MMK: { maximumFractionDigits: 2, minimumFractionDigits: 2 },
|
|
166
|
-
// West African CFA franc
|
|
167
|
-
XOF: { maximumFractionDigits: 2, minimumFractionDigits: 2 },
|
|
168
|
-
// Vietnamese dong
|
|
169
|
-
VND: { maximumFractionDigits: 2, minimumFractionDigits: 2 },
|
|
170
|
-
// Burundian franc
|
|
171
|
-
BIF: { maximumFractionDigits: 2, minimumFractionDigits: 2 },
|
|
172
|
-
// Chilean peso
|
|
173
|
-
CLP: { maximumFractionDigits: 2, minimumFractionDigits: 2 },
|
|
174
|
-
// Guinean franc
|
|
175
|
-
GNF: { maximumFractionDigits: 2, minimumFractionDigits: 2 },
|
|
176
|
-
// Iraqi dinar
|
|
177
|
-
IQD: { maximumFractionDigits: 2, minimumFractionDigits: 2 },
|
|
178
|
-
// Icelandic króna
|
|
179
|
-
ISK: { maximumFractionDigits: 2, minimumFractionDigits: 2 },
|
|
180
|
-
// Paraguayan guaraní
|
|
181
|
-
PYG: { maximumFractionDigits: 2, minimumFractionDigits: 2 },
|
|
182
|
-
// Central African CFA franc
|
|
183
|
-
XAF: { maximumFractionDigits: 2, minimumFractionDigits: 2 },
|
|
184
|
-
// Lao kip
|
|
185
|
-
LAK: { maximumFractionDigits: 2, minimumFractionDigits: 2 },
|
|
186
|
-
// Lebanese pound
|
|
187
|
-
LBP: { maximumFractionDigits: 2, minimumFractionDigits: 2 },
|
|
188
|
-
// Malagasy ariary
|
|
189
|
-
MGA: { maximumFractionDigits: 2, minimumFractionDigits: 2 },
|
|
190
|
-
// Somali shilling
|
|
191
|
-
SOS: { maximumFractionDigits: 2, minimumFractionDigits: 2 },
|
|
192
|
-
// Ugandan shilling
|
|
193
|
-
UGX: { maximumFractionDigits: 2, minimumFractionDigits: 2 },
|
|
194
|
-
// Albanian lek
|
|
195
|
-
ALL: { maximumFractionDigits: 2, minimumFractionDigits: 2 },
|
|
196
|
-
// Iranian rial
|
|
197
|
-
IRR: { maximumFractionDigits: 2, minimumFractionDigits: 2 }
|
|
198
|
-
/* eslint-enable sort-keys-fix/sort-keys-fix */
|
|
15
|
+
const defaultCodecs = {
|
|
16
|
+
openGame: {
|
|
17
|
+
request: passThroughCodec,
|
|
18
|
+
response: passThroughCodec
|
|
19
|
+
},
|
|
20
|
+
play: {
|
|
21
|
+
request: passThroughCodec,
|
|
22
|
+
response: passThroughCodec
|
|
23
|
+
}
|
|
199
24
|
};
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
}
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
},
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
return this.formatCurrency(i, { as: u.Currency, from: c.Money }, m);
|
|
280
|
-
}
|
|
281
|
-
}
|
|
282
|
-
s = new WeakMap();
|
|
283
|
-
const I = () => {
|
|
284
|
-
};
|
|
285
|
-
var e, g, x;
|
|
286
|
-
class U {
|
|
287
|
-
constructor({ messagePort: i }) {
|
|
288
|
-
F(this, e);
|
|
289
|
-
F(this, g);
|
|
290
|
-
F(this, x);
|
|
291
|
-
C(this, x, i), this.on("configured", (m) => {
|
|
292
|
-
C(this, e, m), C(this, g, new O({ config: m }));
|
|
293
|
-
});
|
|
294
|
-
}
|
|
295
|
-
get config() {
|
|
296
|
-
if (!a(this, e))
|
|
297
|
-
throw new Error("config is not initialized, you must open game first");
|
|
298
|
-
return a(this, e);
|
|
299
|
-
}
|
|
300
|
-
get i18n() {
|
|
301
|
-
if (!a(this, g))
|
|
302
|
-
throw new Error("i18n is not initialized, you must open game first");
|
|
303
|
-
return a(this, g);
|
|
304
|
-
}
|
|
305
|
-
request(i, ...[m]) {
|
|
306
|
-
return new Promise((n) => {
|
|
307
|
-
this.on(`${i}Response`, (r) => n({ type: "response", response: r }), {
|
|
308
|
-
once: !0
|
|
309
|
-
}), this.on(`${i}Error`, (r) => n({ type: "error", error: r }), { once: !0 }), this.send(i, m);
|
|
310
|
-
});
|
|
311
|
-
}
|
|
312
|
-
on(i, m, n) {
|
|
313
|
-
const r = function D(o) {
|
|
314
|
-
o.data.message === `kalamba:wrapper:${i}` && (I("on", o.data.message.replace(/^kalamba:/, ""), o.data.payload), m(o.data.payload), n != null && n.once && window.removeEventListener("message", D));
|
|
315
|
-
};
|
|
316
|
-
window.addEventListener("message", r);
|
|
317
|
-
}
|
|
318
|
-
// TODO error messages
|
|
319
|
-
send(i, ...[m]) {
|
|
320
|
-
a(this, x).postMessage(
|
|
321
|
-
{
|
|
322
|
-
message: `kalamba:sdk:${i}`,
|
|
323
|
-
payload: m
|
|
324
|
-
},
|
|
325
|
-
"*"
|
|
326
|
-
);
|
|
327
|
-
}
|
|
328
|
-
configure(i) {
|
|
329
|
-
this.send("configure", i);
|
|
330
|
-
}
|
|
331
|
-
async openGame() {
|
|
332
|
-
const i = new Promise((n) => this.on("configured", n, { once: !0 })), m = await this.request("openGame");
|
|
333
|
-
if (m.type === "response")
|
|
334
|
-
return await i, m.response;
|
|
335
|
-
throw m.error.type === "timeout" ? new A() : new T(m.error.data);
|
|
336
|
-
}
|
|
337
|
-
async play(i, m) {
|
|
338
|
-
const n = { contract: i, extra: m }, r = await this.request("play", n);
|
|
339
|
-
if (r.type === "response")
|
|
340
|
-
return r.response;
|
|
341
|
-
throw r.error.type === "timeout" ? new A() : new T(r.error.data);
|
|
342
|
-
}
|
|
343
|
-
}
|
|
344
|
-
e = new WeakMap(), g = new WeakMap(), x = new WeakMap();
|
|
345
|
-
export {
|
|
346
|
-
O as I18n,
|
|
347
|
-
U as KalambaSdk,
|
|
348
|
-
T as RgsError,
|
|
349
|
-
X as RgsErrorCode,
|
|
350
|
-
A as TimeoutError,
|
|
351
|
-
$ as decoders,
|
|
352
|
-
V as encoders
|
|
25
|
+
var KalambaSdk = class {
|
|
26
|
+
#config;
|
|
27
|
+
#i18n;
|
|
28
|
+
#messagePort;
|
|
29
|
+
#codecs;
|
|
30
|
+
constructor({ messagePort, codecs }) {
|
|
31
|
+
this.#messagePort = messagePort;
|
|
32
|
+
this.#codecs = codecs ?? defaultCodecs;
|
|
33
|
+
this.on("configured", (config) => {
|
|
34
|
+
this.#config = config;
|
|
35
|
+
this.#i18n = new I18n({ config });
|
|
36
|
+
});
|
|
37
|
+
}
|
|
38
|
+
get config() {
|
|
39
|
+
if (!this.#config) throw new Error("config is not initialized, you must open game first");
|
|
40
|
+
return this.#config;
|
|
41
|
+
}
|
|
42
|
+
get i18n() {
|
|
43
|
+
if (!this.#i18n) throw new Error("i18n is not initialized, you must open game first");
|
|
44
|
+
return this.#i18n;
|
|
45
|
+
}
|
|
46
|
+
request(message, ...[payload]) {
|
|
47
|
+
return new Promise((resolve) => {
|
|
48
|
+
this.on(`${message}Response`, (response) => resolve({
|
|
49
|
+
type: "response",
|
|
50
|
+
response
|
|
51
|
+
}), { once: true });
|
|
52
|
+
this.on(`${message}Error`, (error) => resolve({
|
|
53
|
+
type: "error",
|
|
54
|
+
error
|
|
55
|
+
}), { once: true });
|
|
56
|
+
this.send(message, payload);
|
|
57
|
+
});
|
|
58
|
+
}
|
|
59
|
+
on(message, listener, options) {
|
|
60
|
+
window.addEventListener("message", function onMessage(event) {
|
|
61
|
+
if (event.data.message !== `kalamba:wrapper:${message}`) return;
|
|
62
|
+
logIn("on", event.data.message.replace(/^kalamba:/, ""), event.data.payload);
|
|
63
|
+
listener(event.data.payload);
|
|
64
|
+
if (options?.once) window.removeEventListener("message", onMessage);
|
|
65
|
+
});
|
|
66
|
+
}
|
|
67
|
+
send(message, ...[payload]) {
|
|
68
|
+
logOut("send", message, payload);
|
|
69
|
+
this.#messagePort.postMessage({
|
|
70
|
+
message: `kalamba:sdk:${message}`,
|
|
71
|
+
payload
|
|
72
|
+
}, "*");
|
|
73
|
+
}
|
|
74
|
+
configure(payload) {
|
|
75
|
+
this.send("configure", payload);
|
|
76
|
+
}
|
|
77
|
+
async openGame() {
|
|
78
|
+
const configuredPromise = new Promise((resolve) => this.on("configured", resolve, { once: true }));
|
|
79
|
+
const responseData = await this.request("openGame");
|
|
80
|
+
if (responseData.type === "response") {
|
|
81
|
+
await configuredPromise;
|
|
82
|
+
return {
|
|
83
|
+
contract: responseData.response.contract,
|
|
84
|
+
data: this.#codecs.openGame.response.decode(responseData.response.data)
|
|
85
|
+
};
|
|
86
|
+
} else if (responseData.error.type === "timeout") throw new TimeoutError();
|
|
87
|
+
else throw new RgsError(responseData.error.data);
|
|
88
|
+
}
|
|
89
|
+
async play(contract, extra) {
|
|
90
|
+
console.log("debug 1 payload", contract, extra);
|
|
91
|
+
const payload = {
|
|
92
|
+
contract,
|
|
93
|
+
extra: this.#codecs.play.request.encode(extra)
|
|
94
|
+
};
|
|
95
|
+
console.log("debug payload", payload);
|
|
96
|
+
const responseData = await this.request("play", payload);
|
|
97
|
+
if (responseData.type === "response") return {
|
|
98
|
+
contract: responseData.response.contract,
|
|
99
|
+
data: this.#codecs.play.response.decode(responseData.response.data)
|
|
100
|
+
};
|
|
101
|
+
else if (responseData.error.type === "timeout") throw new TimeoutError();
|
|
102
|
+
else throw new RgsError(responseData.error.data);
|
|
103
|
+
}
|
|
353
104
|
};
|
|
105
|
+
|
|
106
|
+
//#endregion
|
|
107
|
+
export { I18n, KalambaSdk, RgsError, RgsErrorCode, TimeoutError };
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* BSD 3-Clause License
|
|
3
|
+
* Copyright (c) 2026, Kalamba Games Limited
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
//#region src/common/logger.ts
|
|
7
|
+
function createLogger(prefix, style) {
|
|
8
|
+
return (message, ...args) => {
|
|
9
|
+
console.log(`[%c${prefix}\x1B[m] %s`, style, message, ...args);
|
|
10
|
+
};
|
|
11
|
+
}
|
|
12
|
+
var WithLogger = class {
|
|
13
|
+
static LOG_PREFIX;
|
|
14
|
+
static LOG_STYLES = "color:#000000;font-weight:bold;";
|
|
15
|
+
log;
|
|
16
|
+
constructor() {
|
|
17
|
+
const ctor = new.target;
|
|
18
|
+
this.log = createLogger(ctor.LOG_PREFIX ?? ctor.name, ctor.LOG_STYLES);
|
|
19
|
+
}
|
|
20
|
+
};
|
|
21
|
+
|
|
22
|
+
//#endregion
|
|
23
|
+
Object.defineProperty(exports, 'WithLogger', {
|
|
24
|
+
enumerable: true,
|
|
25
|
+
get: function () {
|
|
26
|
+
return WithLogger;
|
|
27
|
+
}
|
|
28
|
+
});
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* BSD 3-Clause License
|
|
3
|
+
* Copyright (c) 2026, Kalamba Games Limited
|
|
4
|
+
*/
|
|
5
|
+
//#region src/common/logger.ts
|
|
6
|
+
function createLogger(prefix, style) {
|
|
7
|
+
return (message, ...args) => {
|
|
8
|
+
console.log(`[%c${prefix}\x1B[m] %s`, style, message, ...args);
|
|
9
|
+
};
|
|
10
|
+
}
|
|
11
|
+
var WithLogger = class {
|
|
12
|
+
static LOG_PREFIX;
|
|
13
|
+
static LOG_STYLES = "color:#000000;font-weight:bold;";
|
|
14
|
+
log;
|
|
15
|
+
constructor() {
|
|
16
|
+
const ctor = new.target;
|
|
17
|
+
this.log = createLogger(ctor.LOG_PREFIX ?? ctor.name, ctor.LOG_STYLES);
|
|
18
|
+
}
|
|
19
|
+
};
|
|
20
|
+
|
|
21
|
+
//#endregion
|
|
22
|
+
export { WithLogger as t };
|