@kalamba/sdk 0.13.1 → 0.13.2

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 CHANGED
@@ -2,4 +2,4 @@
2
2
  * BSD 3-Clause License
3
3
  * Copyright (c) 2025, Kalamba Games Limited
4
4
  */
5
- "use strict";var b=(r,i,t)=>{if(!i.has(r))throw TypeError("Cannot "+t)};var m=(r,i,t)=>(b(r,i,"read from private field"),t?t.call(r):i.get(r)),e=(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)},u=(r,i,t,n)=>(b(r,i,"write to private field"),n?n.call(r,t):i.set(r,t),t);Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const D=require("./errors-db453887.cjs");function A(r){const i=Object.prototype.toString.call(r);return r instanceof Date||typeof r=="object"&&i==="[object Date]"?new r.constructor(+r):typeof r=="number"||i==="[object Number]"||typeof r=="string"||i==="[object String]"?new Date(r):new Date(NaN)}function U(r){const i=A(r);return i.setHours(23,59,59,999),i}function L(){return U(Date.now())}function P(r){const i=A(r);return i.setHours(0,0,0,0),i}function k(){return P(Date.now())}const G=3e4;var F,S;class ${constructor(i){e(this,F,void 0);e(this,S,G);u(this,F,i)}buildHeaders(){const i={};return m(this,F).token&&(i.Authorization=`Bearer ${m(this,F).token}`),i}async request(i,t){const n=new URL(i,m(this,F).apiUrl??window.location.origin);return n.search=new URLSearchParams({...t}).toString(),await(await fetch(n,{signal:AbortSignal.timeout(m(this,S)),headers:this.buildHeaders()})).json()}async getRounds(i){return this.request("/rounds",i)}async getRound(i,t){return this.request(`/rounds/${i}`,t)}}F=new WeakMap,S=new WeakMap;const N={limit:100,page:0};var s,l;class I{constructor({config:i}){e(this,s,void 0);e(this,l,void 0);u(this,s,i),u(this,l,new $({apiUrl:i.api.gameHistoryUrl}))}async getRound(i,{pagination:t=N}={}){return m(this,l).getRound(i,{gameCode:m(this,s).api.game,operatorCode:m(this,s).api.brand,username:m(this,s).api.user,...t})}async getLastRound(){return m(this,s).api.lastRoundId?this.getRound(m(this,s).api.lastRoundId):null}async getRounds({searchPeriod:i={fromDateTime:k(),toDateTime:L()},pagination:t=N}={}){const n=m(this,s).api.user.replace(/^user_/,"").replace(new RegExp(`_${m(this,s).api.integration}$`),"");return m(this,l).getRounds({gameCode:m(this,s).api.game,operatorCode:m(this,s).api.integration,username:n,fromDataTime:i.fromDateTime.toISOString(),toDateTime:i.toDateTime.toISOString(),...t})}}s=new WeakMap,l=new WeakMap;function _(r,i){return r*i/100}function O(r,i,t){if(!["string","number"].includes(typeof i))return"NaN";const{locales:n}=r;try{return new Intl.NumberFormat(n,{...t,numberingSystem:"latn",style:"decimal"}).format(+i)}catch{return`${i}`}}const w="XTS";var y=(r=>(r.Currency="Currency",r.Number="Number",r))(y||{}),f=(r=>(r.Coins="Coins",r.Money="Money",r))(f||{});const T={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},"BK.":{maximumFractionDigits:2,minimumFractionDigits:2},"BT.":{maximumFractionDigits:2,minimumFractionDigits:2},"FC.":{maximumFractionDigits:2,minimumFractionDigits:2},"GC.":{maximumFractionDigits:2,minimumFractionDigits:2},"SC.":{maximumFractionDigits:2,minimumFractionDigits:2},GC:{maximumFractionDigits:2,minimumFractionDigits:2},SC:{maximumFractionDigits:2,minimumFractionDigits:2},GLD:{displayAs:"GC.",maximumFractionDigits:2,minimumFractionDigits:2},SS1:{displayAs:"SC.",maximumFractionDigits:2,minimumFractionDigits:2},SWEP:{displayAs:"SC.",maximumFractionDigits:2,minimumFractionDigits:2},GCLC:{displayAs:"GC.",maximumFractionDigits:2,minimumFractionDigits:2},SWPC:{displayAs:"SC",maximumFractionDigits:2,minimumFractionDigits:2},LUKC:{displayAs:"LC",maximumFractionDigits:2,minimumFractionDigits:2},SVC:{maximumFractionDigits:2,minimumFractionDigits:2},DOT:{maximumFractionDigits:4,minimumFractionDigits:4},SOL:{maximumFractionDigits:4,minimumFractionDigits:4},XRP:{maximumFractionDigits:2,minimumFractionDigits:2},ADA:{maximumFractionDigits:2,minimumFractionDigits:2},TON:{maximumFractionDigits:4,minimumFractionDigits:4},FTN:{maximumFractionDigits:4,minimumFractionDigits:4},OMR:{maximumFractionDigits:2,minimumFractionDigits:2},JOD:{maximumFractionDigits:2,minimumFractionDigits:2},BHD:{maximumFractionDigits:2,minimumFractionDigits:2},KWD:{maximumFractionDigits:2,minimumFractionDigits:2},BNS:{maximumFractionDigits:2,minimumFractionDigits:2}};function B(r){return r in T}function K(r){return B(r)?{...T[r],currency:w}:{currency:r}}function j(r,i,t){const n=i.format(+r);return B(t)?n.replace(w,T[t].displayAs??t):n}function q(r,i,t){const{maximumFractionDigits:n,minimumFractionDigits:o}=t.resolvedOptions();return O(r,i,{maximumFractionDigits:n,minimumFractionDigits:o})}function V(r,i,{as:t}={as:"Currency"}){const{canShowCurrency:n,currency:o}=r;return t==="Number"||!n?`${i}`:`${i} ${o}`}function W(r,i,{as:t,from:n}={as:"Currency",from:"Money"},o){if(!["string","number"].includes(typeof i))return"NaN";const{canShowCurrency:a=!0,coinValueInCents:g,currency:x,locales:R}=r;n==="Coins"&&(i=_(+i,g));try{const H=K(x),E=new Intl.NumberFormat(R,{...H,...o,currencyDisplay:"symbol",numberingSystem:"latn",style:"currency"});return t==="Number"||!a?q(r,i,E):j(i,E,x)}catch{return V(r,i,{as:t})}}var c;class M{constructor({config:i}){e(this,c,void 0);u(this,c,i)}formatNumber(i,t){const n={locales:[m(this,c).ui.language]};return O(n,i,t)}formatCurrency(i,t={as:y.Currency,from:f.Money},n){const o=m(this,c).ui.feature.showCurrency,a=m(this,c).api.coinValueInCents,g=m(this,c).api.currency||w,x=[m(this,c).ui.language];return W({canShowCurrency:o,coinValueInCents:a,currency:g,locales:x},i,t,n)}formatCoins(i,t){return this.formatCurrency(i,{as:y.Number,from:f.Coins},t)}formatCoinsWithCurrency(i,t){return this.formatCurrency(i,{as:y.Currency,from:f.Coins},t)}formatMoney(i,t){return this.formatCurrency(i,{as:y.Number,from:f.Money},t)}formatMoneyWithCurrency(i,t){return this.formatCurrency(i,{as:y.Currency,from:f.Money},t)}}c=new WeakMap;const v=()=>{};var C,d,h,p;class X{constructor({messagePort:i}){e(this,C,void 0);e(this,d,void 0);e(this,h,void 0);e(this,p,void 0);u(this,p,i),this.on("configured",t=>{u(this,C,t),u(this,h,new M({config:t})),u(this,d,new I({config:t}))}),this.on("playResponse",t=>{this.config.api.lastRoundId=t.contract.roundId})}get config(){if(!m(this,C))throw new Error("config is not initialized, you must open game first");return m(this,C)}get history(){if(!m(this,d))throw new Error("config is not initialized, you must open game first");return m(this,d)}get i18n(){if(!m(this,h))throw new Error("i18n is not initialized, you must open game first");return m(this,h)}request(i,...[t]){return new Promise(n=>{this.on(`${i}Response`,o=>n({type:"response",response:o}),{once:!0}),this.on(`${i}Error`,o=>n({type:"error",error:o}),{once:!0}),this.send(i,t)})}on(i,t,n){const o=function a(g){g.data.message===`kalamba:wrapper:${i}`&&(v("on",g.data.message.replace(/^kalamba:/,""),g.data.payload),t(g.data.payload),n!=null&&n.once&&window.removeEventListener("message",a))};window.addEventListener("message",o)}send(i,...[t]){m(this,p).postMessage({message:`kalamba:sdk:${i}`,payload:t},"*")}configure(i){this.send("configure",i)}async openGame(){const i=new Promise(n=>this.on("configured",n,{once:!0})),t=await this.request("openGame");if(t.type==="response")return await i,t.response;throw t.error.type==="timeout"?new D.TimeoutError:new D.RgsError(t.error.data)}async play(i,t,n="SPIN"){const o={contract:i,extra:t,actionType:n},a=await this.request("play",o);if(a.type==="response")return a.response;throw a.error.type==="timeout"?new D.TimeoutError:new D.RgsError(a.error.data)}}C=new WeakMap,d=new WeakMap,h=new WeakMap,p=new WeakMap;exports.RgsError=D.RgsError;exports.RgsErrorCode=D.RgsErrorCode;exports.TimeoutError=D.TimeoutError;exports.History=I;exports.I18n=M;exports.KalambaSdk=X;
5
+ "use strict";var N=(m,i,t)=>{if(!i.has(m))throw TypeError("Cannot "+t)};var r=(m,i,t)=>(N(m,i,"read from private field"),t?t.call(m):i.get(m)),e=(m,i,t)=>{if(i.has(m))throw TypeError("Cannot add the same private member more than once");i instanceof WeakSet?i.add(m):i.set(m,t)},u=(m,i,t,n)=>(N(m,i,"write to private field"),n?n.call(m,t):i.set(m,t),t);Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const D=require("./errors-db453887.cjs");function b(m){const i=Object.prototype.toString.call(m);return m instanceof Date||typeof m=="object"&&i==="[object Date]"?new m.constructor(+m):typeof m=="number"||i==="[object Number]"||typeof m=="string"||i==="[object String]"?new Date(m):new Date(NaN)}function H(m){const i=b(m);return i.setHours(23,59,59,999),i}function P(){return H(Date.now())}function U(m){const i=b(m);return i.setHours(0,0,0,0),i}function G(){return U(Date.now())}const k=3e4;var F,S;class ${constructor(i){e(this,F,void 0);e(this,S,k);u(this,F,i)}buildHeaders(){const i={};return r(this,F).token&&(i.Authorization=`Bearer ${r(this,F).token}`),i}async request(i,t){const n=new URL(i,r(this,F).apiUrl??window.location.origin);return n.search=new URLSearchParams({...t}).toString(),await(await fetch(n,{signal:AbortSignal.timeout(r(this,S)),headers:this.buildHeaders()})).json()}async getRounds(i){return this.request("/rounds",i)}async getRound(i,t){return this.request(`/rounds/${i}`,t)}}F=new WeakMap,S=new WeakMap;const A={limit:100,page:0};var o,l;class I{constructor({config:i}){e(this,o,void 0);e(this,l,void 0);u(this,o,i),u(this,l,new $({apiUrl:i.api.gameHistoryUrl}))}async getRound(i,{pagination:t=A}={}){return r(this,l).getRound(i,{gameCode:r(this,o).api.game,operatorCode:r(this,o).api.brand,username:r(this,o).api.user,...t})}async getLastRound(){return r(this,o).api.lastRoundId?this.getRound(r(this,o).api.lastRoundId):null}async getRounds({searchPeriod:i={fromDateTime:G(),toDateTime:P()},pagination:t=A}={}){const n=r(this,o).api.user.replace(/^user_/,"").replace(new RegExp(`_${r(this,o).api.integration}$`),"");return r(this,l).getRounds({gameCode:r(this,o).api.game,operatorCode:r(this,o).api.integration,username:n,fromDataTime:i.fromDateTime.toISOString(),toDateTime:i.toDateTime.toISOString(),...t})}}o=new WeakMap,l=new WeakMap;function K(m,i){return m*i/100}function O(m,i,t){if(!["string","number"].includes(typeof i))return"NaN";const{locales:n}=m;try{return new Intl.NumberFormat(n,{...t,numberingSystem:"latn",style:"decimal"}).format(+i)}catch{return`${i}`}}const w="XTS";var y=(m=>(m.Currency="Currency",m.Number="Number",m))(y||{}),f=(m=>(m.Coins="Coins",m.Money="Money",m))(f||{});const T={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},"BK.":{maximumFractionDigits:2,minimumFractionDigits:2},"BT.":{maximumFractionDigits:2,minimumFractionDigits:2},"FC.":{maximumFractionDigits:2,minimumFractionDigits:2},"GC.":{maximumFractionDigits:2,minimumFractionDigits:2},"SC.":{maximumFractionDigits:2,minimumFractionDigits:2},GC:{maximumFractionDigits:2,minimumFractionDigits:2},SC:{maximumFractionDigits:2,minimumFractionDigits:2},GLD:{displayAs:"GC.",maximumFractionDigits:2,minimumFractionDigits:2},SS1:{displayAs:"SC.",maximumFractionDigits:2,minimumFractionDigits:2},SWEP:{displayAs:"SC.",maximumFractionDigits:2,minimumFractionDigits:2},GCLC:{displayAs:"GC.",maximumFractionDigits:2,minimumFractionDigits:2},SWPC:{displayAs:"SC",maximumFractionDigits:2,minimumFractionDigits:2},LUKC:{displayAs:"LC",maximumFractionDigits:2,minimumFractionDigits:2},SVC:{maximumFractionDigits:2,minimumFractionDigits:2},DOT:{maximumFractionDigits:4,minimumFractionDigits:4},SOL:{maximumFractionDigits:4,minimumFractionDigits:4},XRP:{maximumFractionDigits:2,minimumFractionDigits:2},ADA:{maximumFractionDigits:2,minimumFractionDigits:2},TON:{maximumFractionDigits:4,minimumFractionDigits:4},FTN:{maximumFractionDigits:4,minimumFractionDigits:4},OMR:{maximumFractionDigits:2,minimumFractionDigits:2},JOD:{maximumFractionDigits:2,minimumFractionDigits:2},BHD:{maximumFractionDigits:2,minimumFractionDigits:2},KWD:{maximumFractionDigits:2,minimumFractionDigits:2},BNS:{maximumFractionDigits:2,minimumFractionDigits:2},MMK:{maximumFractionDigits:2,minimumFractionDigits:2},XOF:{maximumFractionDigits:2,minimumFractionDigits:2},VND:{maximumFractionDigits:2,minimumFractionDigits:2},BIF:{maximumFractionDigits:2,minimumFractionDigits:2},CLP:{maximumFractionDigits:2,minimumFractionDigits:2},GNF:{maximumFractionDigits:2,minimumFractionDigits:2},IQD:{maximumFractionDigits:2,minimumFractionDigits:2},ISK:{maximumFractionDigits:2,minimumFractionDigits:2},PYG:{maximumFractionDigits:2,minimumFractionDigits:2},XAF:{maximumFractionDigits:2,minimumFractionDigits:2},LAK:{maximumFractionDigits:2,minimumFractionDigits:2},LBP:{maximumFractionDigits:2,minimumFractionDigits:2},MGA:{maximumFractionDigits:2,minimumFractionDigits:2},SOS:{maximumFractionDigits:2,minimumFractionDigits:2},UGX:{maximumFractionDigits:2,minimumFractionDigits:2},ALL:{maximumFractionDigits:2,minimumFractionDigits:2},IRR:{maximumFractionDigits:2,minimumFractionDigits:2}};function M(m){return m in T}function _(m){return M(m)?{...T[m],currency:w}:{currency:m}}function X(m,i,t){const n=i.format(+m);return M(t)?n.replace(w,T[t].displayAs??t):n}function j(m,i,t){const{maximumFractionDigits:n,minimumFractionDigits:a}=t.resolvedOptions();return O(m,i,{maximumFractionDigits:n,minimumFractionDigits:a})}function q(m,i,{as:t}={as:"Currency"}){const{canShowCurrency:n,currency:a}=m;return t==="Number"||!n?`${i}`:`${i} ${a}`}function V(m,i,{as:t,from:n}={as:"Currency",from:"Money"},a){if(!["string","number"].includes(typeof i))return"NaN";const{canShowCurrency:s=!0,coinValueInCents:g,currency:p,locales:R}=m;n==="Coins"&&(i=K(+i,g));try{const L=_(p),E=new Intl.NumberFormat(R,{...L,...a,currencyDisplay:"symbol",numberingSystem:"latn",style:"currency"});return t==="Number"||!s?j(m,i,E):X(i,E,p)}catch{return q(m,i,{as:t})}}var c;class B{constructor({config:i}){e(this,c,void 0);u(this,c,i)}formatNumber(i,t){const n={locales:[r(this,c).ui.language]};return O(n,i,t)}formatCurrency(i,t={as:y.Currency,from:f.Money},n){const a=r(this,c).ui.feature.showCurrency,s=r(this,c).api.coinValueInCents,g=r(this,c).api.currency||w,p=[r(this,c).ui.language];return V({canShowCurrency:a,coinValueInCents:s,currency:g,locales:p},i,t,n)}formatCoins(i,t){return this.formatCurrency(i,{as:y.Number,from:f.Coins},t)}formatCoinsWithCurrency(i,t){return this.formatCurrency(i,{as:y.Currency,from:f.Coins},t)}formatMoney(i,t){return this.formatCurrency(i,{as:y.Number,from:f.Money},t)}formatMoneyWithCurrency(i,t){return this.formatCurrency(i,{as:y.Currency,from:f.Money},t)}}c=new WeakMap;const W=()=>{};var x,C,d,h;class v{constructor({messagePort:i}){e(this,x,void 0);e(this,C,void 0);e(this,d,void 0);e(this,h,void 0);u(this,h,i),this.on("configured",t=>{u(this,x,t),u(this,d,new B({config:t})),u(this,C,new I({config:t}))}),this.on("playResponse",t=>{this.config.api.lastRoundId=t.contract.roundId})}get config(){if(!r(this,x))throw new Error("config is not initialized, you must open game first");return r(this,x)}get history(){if(!r(this,C))throw new Error("config is not initialized, you must open game first");return r(this,C)}get i18n(){if(!r(this,d))throw new Error("i18n is not initialized, you must open game first");return r(this,d)}request(i,...[t]){return new Promise(n=>{this.on(`${i}Response`,a=>n({type:"response",response:a}),{once:!0}),this.on(`${i}Error`,a=>n({type:"error",error:a}),{once:!0}),this.send(i,t)})}on(i,t,n){const a=function s(g){g.data.message===`kalamba:wrapper:${i}`&&(W("on",g.data.message.replace(/^kalamba:/,""),g.data.payload),t(g.data.payload),n!=null&&n.once&&window.removeEventListener("message",s))};window.addEventListener("message",a)}send(i,...[t]){r(this,h).postMessage({message:`kalamba:sdk:${i}`,payload:t},"*")}configure(i){this.send("configure",i)}async openGame(){const i=new Promise(n=>this.on("configured",n,{once:!0})),t=await this.request("openGame");if(t.type==="response")return await i,t.response;throw t.error.type==="timeout"?new D.TimeoutError:new D.RgsError(t.error.data)}async play(i,t,n="SPIN"){const a={contract:i,extra:t,actionType:n},s=await this.request("play",a);if(s.type==="response")return s.response;throw s.error.type==="timeout"?new D.TimeoutError:new D.RgsError(s.error.data)}}x=new WeakMap,C=new WeakMap,d=new WeakMap,h=new WeakMap;exports.RgsError=D.RgsError;exports.RgsErrorCode=D.RgsErrorCode;exports.TimeoutError=D.TimeoutError;exports.History=I;exports.I18n=B;exports.KalambaSdk=v;
package/dist/index.d.ts CHANGED
@@ -415,6 +415,7 @@ export declare interface SdkConfig {
415
415
  feature: {
416
416
  allowTelemetry: boolean;
417
417
  allowFullscreen: boolean;
418
+ allowGamble: boolean;
418
419
  allowQuickStop: boolean;
419
420
  showCashier: boolean;
420
421
  showClock: boolean;
package/dist/index.js CHANGED
@@ -2,53 +2,53 @@
2
2
  * BSD 3-Clause License
3
3
  * Copyright (c) 2025, Kalamba Games Limited
4
4
  */
5
- var N = (n, i, t) => {
6
- if (!i.has(n))
5
+ var N = (m, i, t) => {
6
+ if (!i.has(m))
7
7
  throw TypeError("Cannot " + t);
8
8
  };
9
- var m = (n, i, t) => (N(n, i, "read from private field"), t ? t.call(n) : i.get(n)), e = (n, i, t) => {
10
- if (i.has(n))
9
+ var r = (m, i, t) => (N(m, i, "read from private field"), t ? t.call(m) : i.get(m)), e = (m, i, t) => {
10
+ if (i.has(m))
11
11
  throw TypeError("Cannot add the same private member more than once");
12
- i instanceof WeakSet ? i.add(n) : i.set(n, t);
13
- }, u = (n, i, t, r) => (N(n, i, "write to private field"), r ? r.call(n, t) : i.set(n, t), t);
14
- import { T as b, R as A } from "./errors-7cbbda8a.js";
12
+ i instanceof WeakSet ? i.add(m) : i.set(m, t);
13
+ }, u = (m, i, t, n) => (N(m, i, "write to private field"), n ? n.call(m, t) : i.set(m, t), t);
14
+ import { T as A, R as b } from "./errors-7cbbda8a.js";
15
15
  import { a as ii } from "./errors-7cbbda8a.js";
16
- function I(n) {
17
- const i = Object.prototype.toString.call(n);
18
- return n instanceof Date || typeof n == "object" && i === "[object Date]" ? new n.constructor(+n) : typeof n == "number" || i === "[object Number]" || typeof n == "string" || i === "[object String]" ? new Date(n) : /* @__PURE__ */ new Date(NaN);
16
+ function I(m) {
17
+ const i = Object.prototype.toString.call(m);
18
+ return m instanceof Date || typeof m == "object" && i === "[object Date]" ? new m.constructor(+m) : typeof m == "number" || i === "[object Number]" || typeof m == "string" || i === "[object String]" ? new Date(m) : /* @__PURE__ */ new Date(NaN);
19
19
  }
20
- function H(n) {
21
- const i = I(n);
20
+ function M(m) {
21
+ const i = I(m);
22
22
  return i.setHours(23, 59, 59, 999), i;
23
23
  }
24
24
  function U() {
25
- return H(Date.now());
25
+ return M(Date.now());
26
26
  }
27
- function L(n) {
28
- const i = I(n);
27
+ function G(m) {
28
+ const i = I(m);
29
29
  return i.setHours(0, 0, 0, 0), i;
30
30
  }
31
- function P() {
32
- return L(Date.now());
31
+ function H() {
32
+ return G(Date.now());
33
33
  }
34
- const G = 3e4;
35
- var D, x;
34
+ const P = 3e4;
35
+ var D, h;
36
36
  class k {
37
37
  constructor(i) {
38
38
  e(this, D, void 0);
39
- e(this, x, G);
39
+ e(this, h, P);
40
40
  u(this, D, i);
41
41
  }
42
42
  buildHeaders() {
43
43
  const i = {};
44
- return m(this, D).token && (i.Authorization = `Bearer ${m(this, D).token}`), i;
44
+ return r(this, D).token && (i.Authorization = `Bearer ${r(this, D).token}`), i;
45
45
  }
46
46
  async request(i, t) {
47
- const r = new URL(i, m(this, D).apiUrl ?? window.location.origin);
48
- return r.search = new URLSearchParams({
47
+ const n = new URL(i, r(this, D).apiUrl ?? window.location.origin);
48
+ return n.search = new URLSearchParams({
49
49
  ...t
50
- }).toString(), await (await fetch(r, {
51
- signal: AbortSignal.timeout(m(this, x)),
50
+ }).toString(), await (await fetch(n, {
51
+ signal: AbortSignal.timeout(r(this, h)),
52
52
  headers: this.buildHeaders()
53
53
  })).json();
54
54
  }
@@ -59,7 +59,7 @@ class k {
59
59
  return this.request(`/rounds/${i}`, t);
60
60
  }
61
61
  }
62
- D = new WeakMap(), x = new WeakMap();
62
+ D = new WeakMap(), h = new WeakMap();
63
63
  const E = {
64
64
  limit: 100,
65
65
  page: 0
@@ -78,28 +78,28 @@ class $ {
78
78
  async getRound(i, {
79
79
  pagination: t = E
80
80
  } = {}) {
81
- return m(this, f).getRound(i, {
82
- gameCode: m(this, s).api.game,
83
- operatorCode: m(this, s).api.brand,
84
- username: m(this, s).api.user,
81
+ return r(this, f).getRound(i, {
82
+ gameCode: r(this, s).api.game,
83
+ operatorCode: r(this, s).api.brand,
84
+ username: r(this, s).api.user,
85
85
  ...t
86
86
  });
87
87
  }
88
88
  async getLastRound() {
89
- return m(this, s).api.lastRoundId ? this.getRound(m(this, s).api.lastRoundId) : null;
89
+ return r(this, s).api.lastRoundId ? this.getRound(r(this, s).api.lastRoundId) : null;
90
90
  }
91
91
  async getRounds({
92
92
  searchPeriod: i = {
93
- fromDateTime: P(),
93
+ fromDateTime: H(),
94
94
  toDateTime: U()
95
95
  },
96
96
  pagination: t = E
97
97
  } = {}) {
98
- const r = m(this, s).api.user.replace(/^user_/, "").replace(new RegExp(`_${m(this, s).api.integration}$`), "");
99
- return m(this, f).getRounds({
100
- gameCode: m(this, s).api.game,
101
- operatorCode: m(this, s).api.integration,
102
- username: r,
98
+ const n = r(this, s).api.user.replace(/^user_/, "").replace(new RegExp(`_${r(this, s).api.integration}$`), "");
99
+ return r(this, f).getRounds({
100
+ gameCode: r(this, s).api.game,
101
+ operatorCode: r(this, s).api.integration,
102
+ username: n,
103
103
  fromDataTime: i.fromDateTime.toISOString(),
104
104
  toDateTime: i.toDateTime.toISOString(),
105
105
  ...t
@@ -107,15 +107,15 @@ class $ {
107
107
  }
108
108
  }
109
109
  s = new WeakMap(), f = new WeakMap();
110
- function _(n, i) {
111
- return n * i / 100;
110
+ function K(m, i) {
111
+ return m * i / 100;
112
112
  }
113
- function O(n, i, t) {
113
+ function O(m, i, t) {
114
114
  if (!["string", "number"].includes(typeof i))
115
115
  return "NaN";
116
- const { locales: r } = n;
116
+ const { locales: n } = m;
117
117
  try {
118
- return new Intl.NumberFormat(r, {
118
+ return new Intl.NumberFormat(n, {
119
119
  ...t,
120
120
  // eslint-disable-next-line @typescript-eslint/ban-ts-comment
121
121
  // @ts-ignore
@@ -127,7 +127,7 @@ function O(n, i, t) {
127
127
  }
128
128
  }
129
129
  const S = "XTS";
130
- var F = /* @__PURE__ */ ((n) => (n.Currency = "Currency", n.Number = "Number", n))(F || {}), y = /* @__PURE__ */ ((n) => (n.Coins = "Coins", n.Money = "Money", n))(y || {});
130
+ var F = /* @__PURE__ */ ((m) => (m.Currency = "Currency", m.Number = "Number", m))(F || {}), y = /* @__PURE__ */ ((m) => (m.Coins = "Coins", m.Money = "Money", m))(y || {});
131
131
  const w = {
132
132
  /* eslint-disable sort-keys-fix/sort-keys-fix */
133
133
  // ARSB is the internal currency relevant for invoicing purposes, players should see it as ARS
@@ -240,47 +240,82 @@ const w = {
240
240
  // Kuwaiti Dinar
241
241
  KWD: { maximumFractionDigits: 2, minimumFractionDigits: 2 },
242
242
  // MicroGame
243
- BNS: { maximumFractionDigits: 2, minimumFractionDigits: 2 }
243
+ BNS: { maximumFractionDigits: 2, minimumFractionDigits: 2 },
244
+ // https://kalamba.atlassian.net/browse/FRAM-1829
245
+ // Myanmar Kyat
246
+ MMK: { maximumFractionDigits: 2, minimumFractionDigits: 2 },
247
+ // West African CFA franc
248
+ XOF: { maximumFractionDigits: 2, minimumFractionDigits: 2 },
249
+ // Vietnamese dong
250
+ VND: { maximumFractionDigits: 2, minimumFractionDigits: 2 },
251
+ // Burundian franc
252
+ BIF: { maximumFractionDigits: 2, minimumFractionDigits: 2 },
253
+ // Chilean peso
254
+ CLP: { maximumFractionDigits: 2, minimumFractionDigits: 2 },
255
+ // Guinean franc
256
+ GNF: { maximumFractionDigits: 2, minimumFractionDigits: 2 },
257
+ // Iraqi dinar
258
+ IQD: { maximumFractionDigits: 2, minimumFractionDigits: 2 },
259
+ // Icelandic króna
260
+ ISK: { maximumFractionDigits: 2, minimumFractionDigits: 2 },
261
+ // Paraguayan guaraní
262
+ PYG: { maximumFractionDigits: 2, minimumFractionDigits: 2 },
263
+ // Central African CFA franc
264
+ XAF: { maximumFractionDigits: 2, minimumFractionDigits: 2 },
265
+ // Lao kip
266
+ LAK: { maximumFractionDigits: 2, minimumFractionDigits: 2 },
267
+ // Lebanese pound
268
+ LBP: { maximumFractionDigits: 2, minimumFractionDigits: 2 },
269
+ // Malagasy ariary
270
+ MGA: { maximumFractionDigits: 2, minimumFractionDigits: 2 },
271
+ // Somali shilling
272
+ SOS: { maximumFractionDigits: 2, minimumFractionDigits: 2 },
273
+ // Ugandan shilling
274
+ UGX: { maximumFractionDigits: 2, minimumFractionDigits: 2 },
275
+ // Albanian lek
276
+ ALL: { maximumFractionDigits: 2, minimumFractionDigits: 2 },
277
+ // Iranian rial
278
+ IRR: { maximumFractionDigits: 2, minimumFractionDigits: 2 }
244
279
  /* eslint-enable sort-keys-fix/sort-keys-fix */
245
280
  };
246
- function B(n) {
247
- return n in w;
281
+ function B(m) {
282
+ return m in w;
248
283
  }
249
- function K(n) {
250
- return B(n) ? {
251
- ...w[n],
284
+ function _(m) {
285
+ return B(m) ? {
286
+ ...w[m],
252
287
  currency: S
253
288
  } : {
254
- currency: n
289
+ currency: m
255
290
  };
256
291
  }
257
- function j(n, i, t) {
258
- const r = i.format(+n);
259
- return B(t) ? r.replace(S, w[t].displayAs ?? t) : r;
292
+ function X(m, i, t) {
293
+ const n = i.format(+m);
294
+ return B(t) ? n.replace(S, w[t].displayAs ?? t) : n;
260
295
  }
261
- function q(n, i, t) {
262
- const { maximumFractionDigits: r, minimumFractionDigits: a } = t.resolvedOptions();
263
- return O(n, i, { maximumFractionDigits: r, minimumFractionDigits: a });
296
+ function V(m, i, t) {
297
+ const { maximumFractionDigits: n, minimumFractionDigits: a } = t.resolvedOptions();
298
+ return O(m, i, { maximumFractionDigits: n, minimumFractionDigits: a });
264
299
  }
265
- function V(n, i, { as: t } = {
300
+ function j(m, i, { as: t } = {
266
301
  as: "Currency"
267
302
  /* Currency */
268
303
  }) {
269
- const { canShowCurrency: r, currency: a } = n;
270
- return t === "Number" || !r ? `${i}` : `${i} ${a}`;
304
+ const { canShowCurrency: n, currency: a } = m;
305
+ return t === "Number" || !n ? `${i}` : `${i} ${a}`;
271
306
  }
272
- function W(n, i, { as: t, from: r } = {
307
+ function q(m, i, { as: t, from: n } = {
273
308
  as: "Currency",
274
309
  from: "Money"
275
310
  /* Money */
276
311
  }, a) {
277
312
  if (!["string", "number"].includes(typeof i))
278
313
  return "NaN";
279
- const { canShowCurrency: o = !0, coinValueInCents: g, currency: h, locales: T } = n;
280
- r === "Coins" && (i = _(+i, g));
314
+ const { canShowCurrency: o = !0, coinValueInCents: g, currency: d, locales: T } = m;
315
+ n === "Coins" && (i = K(+i, g));
281
316
  try {
282
- const M = K(h), R = new Intl.NumberFormat(T, {
283
- ...M,
317
+ const L = _(d), R = new Intl.NumberFormat(T, {
318
+ ...L,
284
319
  ...a,
285
320
  currencyDisplay: "symbol",
286
321
  // eslint-disable-next-line @typescript-eslint/ban-ts-comment
@@ -288,29 +323,29 @@ function W(n, i, { as: t, from: r } = {
288
323
  numberingSystem: "latn",
289
324
  style: "currency"
290
325
  });
291
- return t === "Number" || !o ? q(n, i, R) : j(i, R, h);
326
+ return t === "Number" || !o ? V(m, i, R) : X(i, R, d);
292
327
  } catch {
293
- return V(n, i, { as: t });
328
+ return j(m, i, { as: t });
294
329
  }
295
330
  }
296
331
  var c;
297
- class X {
332
+ class W {
298
333
  constructor({ config: i }) {
299
334
  e(this, c, void 0);
300
335
  u(this, c, i);
301
336
  }
302
337
  formatNumber(i, t) {
303
- const r = { locales: [m(this, c).ui.language] };
304
- return O(r, i, t);
338
+ const n = { locales: [r(this, c).ui.language] };
339
+ return O(n, i, t);
305
340
  }
306
- formatCurrency(i, t = { as: F.Currency, from: y.Money }, r) {
307
- const a = m(this, c).ui.feature.showCurrency, o = m(this, c).api.coinValueInCents, g = m(this, c).api.currency || S, h = [m(this, c).ui.language];
308
- return W({
341
+ formatCurrency(i, t = { as: F.Currency, from: y.Money }, n) {
342
+ const a = r(this, c).ui.feature.showCurrency, o = r(this, c).api.coinValueInCents, g = r(this, c).api.currency || S, d = [r(this, c).ui.language];
343
+ return q({
309
344
  canShowCurrency: a,
310
345
  coinValueInCents: o,
311
346
  currency: g,
312
- locales: h
313
- }, i, t, r);
347
+ locales: d
348
+ }, i, t, n);
314
349
  }
315
350
  formatCoins(i, t) {
316
351
  return this.formatCurrency(i, { as: F.Number, from: y.Coins }, t);
@@ -328,50 +363,50 @@ class X {
328
363
  c = new WeakMap();
329
364
  const v = () => {
330
365
  };
331
- var l, C, p, d;
366
+ var x, l, C, p;
332
367
  class Y {
333
368
  constructor({ messagePort: i }) {
369
+ e(this, x, void 0);
334
370
  e(this, l, void 0);
335
371
  e(this, C, void 0);
336
372
  e(this, p, void 0);
337
- e(this, d, void 0);
338
- u(this, d, i), this.on("configured", (t) => {
339
- u(this, l, t), u(this, p, new X({ config: t })), u(this, C, new $({ config: t }));
373
+ u(this, p, i), this.on("configured", (t) => {
374
+ u(this, x, t), u(this, C, new W({ config: t })), u(this, l, new $({ config: t }));
340
375
  }), this.on("playResponse", (t) => {
341
376
  this.config.api.lastRoundId = t.contract.roundId;
342
377
  });
343
378
  }
344
379
  get config() {
345
- if (!m(this, l))
380
+ if (!r(this, x))
346
381
  throw new Error("config is not initialized, you must open game first");
347
- return m(this, l);
382
+ return r(this, x);
348
383
  }
349
384
  get history() {
350
- if (!m(this, C))
385
+ if (!r(this, l))
351
386
  throw new Error("config is not initialized, you must open game first");
352
- return m(this, C);
387
+ return r(this, l);
353
388
  }
354
389
  get i18n() {
355
- if (!m(this, p))
390
+ if (!r(this, C))
356
391
  throw new Error("i18n is not initialized, you must open game first");
357
- return m(this, p);
392
+ return r(this, C);
358
393
  }
359
394
  request(i, ...[t]) {
360
- return new Promise((r) => {
361
- this.on(`${i}Response`, (a) => r({ type: "response", response: a }), {
395
+ return new Promise((n) => {
396
+ this.on(`${i}Response`, (a) => n({ type: "response", response: a }), {
362
397
  once: !0
363
- }), this.on(`${i}Error`, (a) => r({ type: "error", error: a }), { once: !0 }), this.send(i, t);
398
+ }), this.on(`${i}Error`, (a) => n({ type: "error", error: a }), { once: !0 }), this.send(i, t);
364
399
  });
365
400
  }
366
- on(i, t, r) {
401
+ on(i, t, n) {
367
402
  const a = function o(g) {
368
- g.data.message === `kalamba:wrapper:${i}` && (v("on", g.data.message.replace(/^kalamba:/, ""), g.data.payload), t(g.data.payload), r != null && r.once && window.removeEventListener("message", o));
403
+ g.data.message === `kalamba:wrapper:${i}` && (v("on", g.data.message.replace(/^kalamba:/, ""), g.data.payload), t(g.data.payload), n != null && n.once && window.removeEventListener("message", o));
369
404
  };
370
405
  window.addEventListener("message", a);
371
406
  }
372
407
  // TODO error messages
373
408
  send(i, ...[t]) {
374
- m(this, d).postMessage(
409
+ r(this, p).postMessage(
375
410
  {
376
411
  message: `kalamba:sdk:${i}`,
377
412
  payload: t
@@ -383,24 +418,24 @@ class Y {
383
418
  this.send("configure", i);
384
419
  }
385
420
  async openGame() {
386
- const i = new Promise((r) => this.on("configured", r, { once: !0 })), t = await this.request("openGame");
421
+ const i = new Promise((n) => this.on("configured", n, { once: !0 })), t = await this.request("openGame");
387
422
  if (t.type === "response")
388
423
  return await i, t.response;
389
- throw t.error.type === "timeout" ? new b() : new A(t.error.data);
424
+ throw t.error.type === "timeout" ? new A() : new b(t.error.data);
390
425
  }
391
- async play(i, t, r = "SPIN") {
392
- const a = { contract: i, extra: t, actionType: r }, o = await this.request("play", a);
426
+ async play(i, t, n = "SPIN") {
427
+ const a = { contract: i, extra: t, actionType: n }, o = await this.request("play", a);
393
428
  if (o.type === "response")
394
429
  return o.response;
395
- throw o.error.type === "timeout" ? new b() : new A(o.error.data);
430
+ throw o.error.type === "timeout" ? new A() : new b(o.error.data);
396
431
  }
397
432
  }
398
- l = new WeakMap(), C = new WeakMap(), p = new WeakMap(), d = new WeakMap();
433
+ x = new WeakMap(), l = new WeakMap(), C = new WeakMap(), p = new WeakMap();
399
434
  export {
400
435
  $ as History,
401
- X as I18n,
436
+ W as I18n,
402
437
  Y as KalambaSdk,
403
- A as RgsError,
438
+ b as RgsError,
404
439
  ii as RgsErrorCode,
405
- b as TimeoutError
440
+ A as TimeoutError
406
441
  };