@suigar/sdk 2.0.0-beta.13 → 2.0.0-beta.15
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/CHANGELOG.md +23 -4
- package/README.md +22 -8
- package/dist/client.d.mts +258 -0
- package/dist/client.d.mts.map +1 -0
- package/dist/client.mjs +291 -0
- package/dist/client.mjs.map +1 -0
- package/dist/configs/package.mainnet.mjs +23 -0
- package/dist/configs/package.mainnet.mjs.map +1 -0
- package/dist/configs/package.mjs +19 -0
- package/dist/configs/package.mjs.map +1 -0
- package/dist/configs/package.testnet.mjs +23 -0
- package/dist/configs/package.testnet.mjs.map +1 -0
- package/dist/configs/registry.mainnet.mjs +6 -0
- package/dist/configs/registry.mainnet.mjs.map +1 -0
- package/dist/configs/registry.mjs +11 -0
- package/dist/configs/registry.mjs.map +1 -0
- package/dist/configs/registry.testnet.mjs +6 -0
- package/dist/configs/registry.testnet.mjs.map +1 -0
- package/dist/contracts/coinflip/coinflip.mjs +46 -0
- package/dist/contracts/coinflip/coinflip.mjs.map +1 -0
- package/dist/contracts/core/core.d.mts +55 -0
- package/dist/contracts/core/core.d.mts.map +1 -0
- package/dist/contracts/core/core.mjs +22 -0
- package/dist/contracts/core/core.mjs.map +1 -0
- package/dist/contracts/core/deps/0x0000000000000000000000000000000000000000000000000000000000000001/type_name.mjs +10 -0
- package/dist/contracts/core/deps/0x0000000000000000000000000000000000000000000000000000000000000001/type_name.mjs.map +1 -0
- package/dist/contracts/core/deps/0x0000000000000000000000000000000000000000000000000000000000000002/vec_map.mjs +26 -0
- package/dist/contracts/core/deps/0x0000000000000000000000000000000000000000000000000000000000000002/vec_map.mjs.map +1 -0
- package/dist/contracts/core/float.d.mts +14 -0
- package/dist/contracts/core/float.d.mts.map +1 -0
- package/dist/contracts/core/float.mjs +15 -0
- package/dist/contracts/core/float.mjs.map +1 -0
- package/dist/contracts/core/i64.mjs +10 -0
- package/dist/contracts/core/i64.mjs.map +1 -0
- package/dist/contracts/limbo/deps/0xf391858d2a08473e8d4defcc8df89976bd7b123d3865c6b9341b237f7853dbbc/float.mjs +15 -0
- package/dist/contracts/limbo/deps/0xf391858d2a08473e8d4defcc8df89976bd7b123d3865c6b9341b237f7853dbbc/float.mjs.map +1 -0
- package/dist/contracts/limbo/deps/0xf391858d2a08473e8d4defcc8df89976bd7b123d3865c6b9341b237f7853dbbc/i64.mjs +10 -0
- package/dist/contracts/limbo/deps/0xf391858d2a08473e8d4defcc8df89976bd7b123d3865c6b9341b237f7853dbbc/i64.mjs.map +1 -0
- package/dist/contracts/limbo/limbo.mjs +53 -0
- package/dist/contracts/limbo/limbo.mjs.map +1 -0
- package/dist/contracts/plinko/deps/0x0000000000000000000000000000000000000000000000000000000000000002/vec_map.mjs +26 -0
- package/dist/contracts/plinko/deps/0x0000000000000000000000000000000000000000000000000000000000000002/vec_map.mjs.map +1 -0
- package/dist/contracts/plinko/deps/0xf391858d2a08473e8d4defcc8df89976bd7b123d3865c6b9341b237f7853dbbc/float.mjs +15 -0
- package/dist/contracts/plinko/deps/0xf391858d2a08473e8d4defcc8df89976bd7b123d3865c6b9341b237f7853dbbc/float.mjs.map +1 -0
- package/dist/contracts/plinko/deps/0xf391858d2a08473e8d4defcc8df89976bd7b123d3865c6b9341b237f7853dbbc/i64.mjs +10 -0
- package/dist/contracts/plinko/deps/0xf391858d2a08473e8d4defcc8df89976bd7b123d3865c6b9341b237f7853dbbc/i64.mjs.map +1 -0
- package/dist/contracts/plinko/plinko.mjs +59 -0
- package/dist/contracts/plinko/plinko.mjs.map +1 -0
- package/dist/contracts/pvp-coinflip/deps/0x0000000000000000000000000000000000000000000000000000000000000001/type_name.mjs +10 -0
- package/dist/contracts/pvp-coinflip/deps/0x0000000000000000000000000000000000000000000000000000000000000001/type_name.mjs.map +1 -0
- package/dist/contracts/pvp-coinflip/deps/0x0000000000000000000000000000000000000000000000000000000000000002/balance.mjs +10 -0
- package/dist/contracts/pvp-coinflip/deps/0x0000000000000000000000000000000000000000000000000000000000000002/balance.mjs.map +1 -0
- package/dist/contracts/pvp-coinflip/deps/0x0000000000000000000000000000000000000000000000000000000000000002/vec_map.mjs +26 -0
- package/dist/contracts/pvp-coinflip/deps/0x0000000000000000000000000000000000000000000000000000000000000002/vec_map.mjs.map +1 -0
- package/dist/contracts/pvp-coinflip/pvp_coinflip.d.mts +34 -0
- package/dist/contracts/pvp-coinflip/pvp_coinflip.d.mts.map +1 -0
- package/dist/contracts/pvp-coinflip/pvp_coinflip.mjs +131 -0
- package/dist/contracts/pvp-coinflip/pvp_coinflip.mjs.map +1 -0
- package/dist/contracts/range/deps/0xf391858d2a08473e8d4defcc8df89976bd7b123d3865c6b9341b237f7853dbbc/float.mjs +15 -0
- package/dist/contracts/range/deps/0xf391858d2a08473e8d4defcc8df89976bd7b123d3865c6b9341b237f7853dbbc/float.mjs.map +1 -0
- package/dist/contracts/range/deps/0xf391858d2a08473e8d4defcc8df89976bd7b123d3865c6b9341b237f7853dbbc/i64.mjs +10 -0
- package/dist/contracts/range/deps/0xf391858d2a08473e8d4defcc8df89976bd7b123d3865c6b9341b237f7853dbbc/i64.mjs.map +1 -0
- package/dist/contracts/range/range.mjs +53 -0
- package/dist/contracts/range/range.mjs.map +1 -0
- package/dist/contracts/utils/index.d.mts +33 -0
- package/dist/contracts/utils/index.d.mts.map +1 -0
- package/dist/contracts/utils/index.mjs +119 -0
- package/dist/contracts/utils/index.mjs.map +1 -0
- package/dist/contracts/wheel/deps/0x0000000000000000000000000000000000000000000000000000000000000002/vec_map.mjs +26 -0
- package/dist/contracts/wheel/deps/0x0000000000000000000000000000000000000000000000000000000000000002/vec_map.mjs.map +1 -0
- package/dist/contracts/wheel/deps/0xf391858d2a08473e8d4defcc8df89976bd7b123d3865c6b9341b237f7853dbbc/float.mjs +15 -0
- package/dist/contracts/wheel/deps/0xf391858d2a08473e8d4defcc8df89976bd7b123d3865c6b9341b237f7853dbbc/float.mjs.map +1 -0
- package/dist/contracts/wheel/deps/0xf391858d2a08473e8d4defcc8df89976bd7b123d3865c6b9341b237f7853dbbc/i64.mjs +10 -0
- package/dist/contracts/wheel/deps/0xf391858d2a08473e8d4defcc8df89976bd7b123d3865c6b9341b237f7853dbbc/i64.mjs.map +1 -0
- package/dist/contracts/wheel/wheel.mjs +59 -0
- package/dist/contracts/wheel/wheel.mjs.map +1 -0
- package/dist/games.d.mts +3 -0
- package/dist/games.mjs +1 -0
- package/dist/helpers/config.mjs +51 -0
- package/dist/helpers/config.mjs.map +1 -0
- package/dist/helpers/game-settings.mjs +19 -0
- package/dist/helpers/game-settings.mjs.map +1 -0
- package/dist/helpers/metadata.mjs +42 -0
- package/dist/helpers/metadata.mjs.map +1 -0
- package/dist/index.d.mts +2 -0
- package/dist/index.mjs +2 -0
- package/dist/transactions/coinflip.mjs +27 -0
- package/dist/transactions/coinflip.mjs.map +1 -0
- package/dist/transactions/limbo.mjs +31 -0
- package/dist/transactions/limbo.mjs.map +1 -0
- package/dist/transactions/plinko.mjs +29 -0
- package/dist/transactions/plinko.mjs.map +1 -0
- package/dist/transactions/pvp-coinflip.mjs +70 -0
- package/dist/transactions/pvp-coinflip.mjs.map +1 -0
- package/dist/transactions/range.mjs +33 -0
- package/dist/transactions/range.mjs.map +1 -0
- package/dist/transactions/shared.mjs +49 -0
- package/dist/transactions/shared.mjs.map +1 -0
- package/dist/transactions/wheel.mjs +29 -0
- package/dist/transactions/wheel.mjs.map +1 -0
- package/dist/ttl-cache.mjs +60 -0
- package/dist/ttl-cache.mjs.map +1 -0
- package/dist/types/bet-metadata.type.d.mts +7 -0
- package/dist/types/bet-metadata.type.d.mts.map +1 -0
- package/dist/types/build-game-transaction-options.type.d.mts +9 -0
- package/dist/types/build-game-transaction-options.type.d.mts.map +1 -0
- package/dist/types/game-details.type.d.mts +73 -0
- package/dist/types/game-details.type.d.mts.map +1 -0
- package/dist/types/game-details.type.mjs +59 -0
- package/dist/types/game-details.type.mjs.map +1 -0
- package/dist/types/game-settings.type.d.mts +201 -0
- package/dist/types/game-settings.type.d.mts.map +1 -0
- package/dist/types/game-settings.type.mjs +37 -0
- package/dist/types/game-settings.type.mjs.map +1 -0
- package/dist/types/game.type.d.mts +15 -0
- package/dist/types/game.type.d.mts.map +1 -0
- package/dist/types/game.type.mjs +19 -0
- package/dist/types/game.type.mjs.map +1 -0
- package/dist/types/index.d.mts +7 -0
- package/dist/types/move-float.type.d.mts +7 -0
- package/dist/types/move-float.type.d.mts.map +1 -0
- package/dist/types/network.type.d.mts +1 -0
- package/dist/types/network.type.mjs +6 -0
- package/dist/types/network.type.mjs.map +1 -0
- package/dist/types/suigar-config.type.d.mts +33 -0
- package/dist/types/suigar-config.type.d.mts.map +1 -0
- package/dist/types/transaction-options.type.d.mts +63 -0
- package/dist/types/transaction-options.type.d.mts.map +1 -0
- package/dist/utils/constants.d.mts +8 -0
- package/dist/utils/constants.d.mts.map +1 -0
- package/dist/utils/constants.mjs +10 -0
- package/dist/utils/constants.mjs.map +1 -0
- package/dist/utils/numeric.d.mts +86 -0
- package/dist/utils/numeric.d.mts.map +1 -0
- package/dist/utils/numeric.mjs +148 -0
- package/dist/utils/numeric.mjs.map +1 -0
- package/dist/utils/parser.d.mts +54 -0
- package/dist/utils/parser.d.mts.map +1 -0
- package/dist/utils/parser.mjs +94 -0
- package/dist/utils/parser.mjs.map +1 -0
- package/dist/utils.d.mts +4 -0
- package/dist/utils.mjs +4 -0
- package/package.json +16 -17
- package/dist/chunk-7N55D2TV.js +0 -343
- package/dist/games-BHYRg31e.d.cts +0 -98
- package/dist/games-BHYRg31e.d.ts +0 -98
- package/dist/games.cjs +0 -2
- package/dist/games.d.cts +0 -2
- package/dist/games.d.ts +0 -2
- package/dist/games.js +0 -1
- package/dist/index-3P_LBbDM.d.cts +0 -25
- package/dist/index-3P_LBbDM.d.ts +0 -25
- package/dist/index.cjs +0 -1692
- package/dist/index.d.cts +0 -457
- package/dist/index.d.ts +0 -457
- package/dist/index.js +0 -1470
- package/dist/utils.cjs +0 -243
- package/dist/utils.d.cts +0 -180
- package/dist/utils.d.ts +0 -180
- package/dist/utils.js +0 -1
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { toU8 } from "../utils/numeric.mjs";
|
|
2
|
+
import { buildSharedStandardGameBetTransaction } from "./shared.mjs";
|
|
3
|
+
import { play } from "../contracts/plinko/plinko.mjs";
|
|
4
|
+
//#region src/transactions/plinko.ts
|
|
5
|
+
function buildPlinkoTransaction(options) {
|
|
6
|
+
const configId = toU8(options.configId);
|
|
7
|
+
return buildSharedStandardGameBetTransaction({
|
|
8
|
+
...options,
|
|
9
|
+
game: "plinko",
|
|
10
|
+
buildRewardCoin: ({ tx, config, coinType, stake, betCount, metadata, priceInfoObjectId, betCoin }) => play({
|
|
11
|
+
package: config.packageIds.plinko,
|
|
12
|
+
typeArguments: [coinType],
|
|
13
|
+
arguments: [
|
|
14
|
+
config.packageIds.sweetHouse,
|
|
15
|
+
stake,
|
|
16
|
+
betCoin,
|
|
17
|
+
betCount,
|
|
18
|
+
configId,
|
|
19
|
+
metadata.keys,
|
|
20
|
+
metadata.values,
|
|
21
|
+
priceInfoObjectId
|
|
22
|
+
]
|
|
23
|
+
})(tx)
|
|
24
|
+
});
|
|
25
|
+
}
|
|
26
|
+
//#endregion
|
|
27
|
+
export { buildPlinkoTransaction };
|
|
28
|
+
|
|
29
|
+
//# sourceMappingURL=plinko.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"plinko.mjs","names":[],"sources":["../../src/transactions/plinko.ts"],"sourcesContent":["// Copyright (c) Suigar\n// SPDX-License-Identifier: Apache-2.0\n\nimport { Transaction } from '@mysten/sui/transactions';\nimport { play } from '../contracts/plinko/plinko.js';\nimport type { BuildPlinkoTransactionOptions, WithPartner } from '../types';\nimport { toU8 } from '../utils/index.js';\nimport { buildSharedStandardGameBetTransaction } from './shared.js';\n\nexport function buildPlinkoTransaction(\n\toptions: WithPartner<BuildPlinkoTransactionOptions>,\n): Transaction {\n\tconst configId = toU8(options.configId);\n\n\treturn buildSharedStandardGameBetTransaction({\n\t\t...options,\n\t\tgame: 'plinko',\n\t\tbuildRewardCoin: ({\n\t\t\ttx,\n\t\t\tconfig,\n\t\t\tcoinType,\n\t\t\tstake,\n\t\t\tbetCount,\n\t\t\tmetadata,\n\t\t\tpriceInfoObjectId,\n\t\t\tbetCoin,\n\t\t}) =>\n\t\t\tplay({\n\t\t\t\tpackage: config.packageIds.plinko,\n\t\t\t\ttypeArguments: [coinType],\n\t\t\t\targuments: [\n\t\t\t\t\tconfig.packageIds.sweetHouse,\n\t\t\t\t\tstake,\n\t\t\t\t\tbetCoin,\n\t\t\t\t\tbetCount,\n\t\t\t\t\tconfigId,\n\t\t\t\t\tmetadata.keys,\n\t\t\t\t\tmetadata.values,\n\t\t\t\t\tpriceInfoObjectId,\n\t\t\t\t],\n\t\t\t})(tx),\n\t});\n}\n"],"mappings":";;;;AASA,SAAgB,uBACf,SACc;CACd,MAAM,WAAW,KAAK,QAAQ,SAAS;CAEvC,OAAO,sCAAsC;EAC5C,GAAG;EACH,MAAM;EACN,kBAAkB,EACjB,IACA,QACA,UACA,OACA,UACA,UACA,mBACA,cAEA,KAAK;GACJ,SAAS,OAAO,WAAW;GAC3B,eAAe,CAAC,SAAS;GACzB,WAAW;IACV,OAAO,WAAW;IAClB;IACA;IACA;IACA;IACA,SAAS;IACT,SAAS;IACT;IACA;GACD,CAAC,CAAC,GAAG;EACP,CAAC"}
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
import { cancelGame, createGame, joinGame } from "../contracts/pvp-coinflip/pvp_coinflip.mjs";
|
|
2
|
+
import { resolvePriceInfoObjectId } from "../helpers/config.mjs";
|
|
3
|
+
import { encodeBetMetadata } from "../helpers/metadata.mjs";
|
|
4
|
+
import { toBigInt } from "../utils/numeric.mjs";
|
|
5
|
+
import { createBaseGameTransaction } from "./shared.mjs";
|
|
6
|
+
import { normalizeStructTag } from "@mysten/sui/utils";
|
|
7
|
+
//#region src/transactions/pvp-coinflip.ts
|
|
8
|
+
function buildPvPCoinflipTransaction(action, options) {
|
|
9
|
+
const tx = createBaseGameTransaction({
|
|
10
|
+
...options,
|
|
11
|
+
game: "pvp-coinflip"
|
|
12
|
+
});
|
|
13
|
+
const normalizedCoinType = normalizeStructTag(options.coinType);
|
|
14
|
+
const encodedMetadata = encodeBetMetadata(options.metadata, options.partner);
|
|
15
|
+
switch (action) {
|
|
16
|
+
case "create": {
|
|
17
|
+
const createOptions = options;
|
|
18
|
+
const stake = toBigInt(createOptions.stake);
|
|
19
|
+
const betCoin = tx.coin({
|
|
20
|
+
type: normalizedCoinType,
|
|
21
|
+
balance: stake,
|
|
22
|
+
useGasCoin: createOptions.allowGasCoinShortcut
|
|
23
|
+
});
|
|
24
|
+
tx.add(createGame({
|
|
25
|
+
package: createOptions.config.packageIds.pvpCoinflip,
|
|
26
|
+
typeArguments: [normalizedCoinType],
|
|
27
|
+
arguments: [
|
|
28
|
+
createOptions.config.packageIds.sweetHouse,
|
|
29
|
+
betCoin,
|
|
30
|
+
createOptions.side === "tails",
|
|
31
|
+
Boolean(createOptions.isPrivate),
|
|
32
|
+
encodedMetadata.keys,
|
|
33
|
+
encodedMetadata.values
|
|
34
|
+
]
|
|
35
|
+
}));
|
|
36
|
+
return tx;
|
|
37
|
+
}
|
|
38
|
+
case "join": {
|
|
39
|
+
const joinOptions = options;
|
|
40
|
+
const priceInfoObjectId = resolvePriceInfoObjectId(joinOptions.config, normalizedCoinType);
|
|
41
|
+
tx.add(joinGame({
|
|
42
|
+
package: joinOptions.config.packageIds.pvpCoinflip,
|
|
43
|
+
typeArguments: [normalizedCoinType],
|
|
44
|
+
arguments: [
|
|
45
|
+
joinOptions.gameId,
|
|
46
|
+
joinOptions.config.packageIds.sweetHouse,
|
|
47
|
+
tx.add(joinOptions.betCoin),
|
|
48
|
+
encodedMetadata.keys,
|
|
49
|
+
encodedMetadata.values,
|
|
50
|
+
priceInfoObjectId
|
|
51
|
+
]
|
|
52
|
+
}));
|
|
53
|
+
return tx;
|
|
54
|
+
}
|
|
55
|
+
case "cancel": {
|
|
56
|
+
const cancelOptions = options;
|
|
57
|
+
tx.add(cancelGame({
|
|
58
|
+
package: cancelOptions.config.packageIds.pvpCoinflip,
|
|
59
|
+
typeArguments: [normalizedCoinType],
|
|
60
|
+
arguments: [cancelOptions.gameId, cancelOptions.config.packageIds.sweetHouse]
|
|
61
|
+
}));
|
|
62
|
+
return tx;
|
|
63
|
+
}
|
|
64
|
+
default: throw new RangeError(`Unsupported PvP coinflip action: ${action}`);
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
//#endregion
|
|
68
|
+
export { buildPvPCoinflipTransaction };
|
|
69
|
+
|
|
70
|
+
//# sourceMappingURL=pvp-coinflip.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pvp-coinflip.mjs","names":[],"sources":["../../src/transactions/pvp-coinflip.ts"],"sourcesContent":["// Copyright (c) Suigar\n// SPDX-License-Identifier: Apache-2.0\n\nimport { Transaction } from '@mysten/sui/transactions';\nimport { normalizeStructTag } from '@mysten/sui/utils';\nimport {\n\tcancelGame,\n\tcreateGame,\n\tjoinGame,\n} from '../contracts/pvp-coinflip/pvp_coinflip.js';\nimport {\n\tencodeBetMetadata,\n\tresolvePriceInfoObjectId,\n} from '../helpers/index.js';\nimport type {\n\tBuildCancelPvPCoinflipTransactionOptions,\n\tBuildCreatePvPCoinflipTransactionOptions,\n\tBuildPvPCoinflipTransactionOptions,\n\tPvPCoinflipAction,\n\tResolvedJoinPvPCoinflipTransactionOptions,\n\tWithPartner,\n} from '../types/index.js';\nimport { toBigInt } from '../utils/index.js';\nimport { createBaseGameTransaction } from './shared.js';\n\ntype PvPCoinflipTransactionOptionsWithPartner<\n\tAction extends PvPCoinflipAction,\n> = Action extends 'join'\n\t? WithPartner<ResolvedJoinPvPCoinflipTransactionOptions>\n\t: WithPartner<BuildPvPCoinflipTransactionOptions<Action>>;\n\nexport function buildPvPCoinflipTransaction<Action extends PvPCoinflipAction>(\n\taction: Action,\n\toptions: PvPCoinflipTransactionOptionsWithPartner<Action>,\n): Transaction {\n\tconst tx = createBaseGameTransaction({\n\t\t...options,\n\t\tgame: 'pvp-coinflip',\n\t});\n\tconst normalizedCoinType = normalizeStructTag(options.coinType);\n\tconst encodedMetadata = encodeBetMetadata(options.metadata, options.partner);\n\n\tswitch (action) {\n\t\tcase 'create': {\n\t\t\tconst createOptions = options as BuildCreatePvPCoinflipTransactionOptions;\n\t\t\tconst stake = toBigInt(createOptions.stake);\n\t\t\tconst betCoin = tx.coin({\n\t\t\t\ttype: normalizedCoinType,\n\t\t\t\tbalance: stake,\n\t\t\t\tuseGasCoin: createOptions.allowGasCoinShortcut,\n\t\t\t});\n\n\t\t\ttx.add(\n\t\t\t\tcreateGame({\n\t\t\t\t\tpackage: createOptions.config.packageIds.pvpCoinflip,\n\t\t\t\t\ttypeArguments: [normalizedCoinType],\n\t\t\t\t\targuments: [\n\t\t\t\t\t\tcreateOptions.config.packageIds.sweetHouse,\n\t\t\t\t\t\tbetCoin,\n\t\t\t\t\t\tcreateOptions.side === 'tails',\n\t\t\t\t\t\tBoolean(createOptions.isPrivate),\n\t\t\t\t\t\tencodedMetadata.keys,\n\t\t\t\t\t\tencodedMetadata.values,\n\t\t\t\t\t],\n\t\t\t\t}),\n\t\t\t);\n\t\t\treturn tx;\n\t\t}\n\n\t\tcase 'join': {\n\t\t\tconst joinOptions = options as ResolvedJoinPvPCoinflipTransactionOptions;\n\t\t\tconst priceInfoObjectId = resolvePriceInfoObjectId(\n\t\t\t\tjoinOptions.config,\n\t\t\t\tnormalizedCoinType,\n\t\t\t);\n\n\t\t\ttx.add(\n\t\t\t\tjoinGame({\n\t\t\t\t\tpackage: joinOptions.config.packageIds.pvpCoinflip,\n\t\t\t\t\ttypeArguments: [normalizedCoinType],\n\t\t\t\t\targuments: [\n\t\t\t\t\t\tjoinOptions.gameId,\n\t\t\t\t\t\tjoinOptions.config.packageIds.sweetHouse,\n\t\t\t\t\t\ttx.add(joinOptions.betCoin),\n\t\t\t\t\t\tencodedMetadata.keys,\n\t\t\t\t\t\tencodedMetadata.values,\n\t\t\t\t\t\tpriceInfoObjectId,\n\t\t\t\t\t],\n\t\t\t\t}),\n\t\t\t);\n\t\t\treturn tx;\n\t\t}\n\n\t\tcase 'cancel': {\n\t\t\tconst cancelOptions = options as BuildCancelPvPCoinflipTransactionOptions;\n\n\t\t\ttx.add(\n\t\t\t\tcancelGame({\n\t\t\t\t\tpackage: cancelOptions.config.packageIds.pvpCoinflip,\n\t\t\t\t\ttypeArguments: [normalizedCoinType],\n\t\t\t\t\targuments: [\n\t\t\t\t\t\tcancelOptions.gameId,\n\t\t\t\t\t\tcancelOptions.config.packageIds.sweetHouse,\n\t\t\t\t\t],\n\t\t\t\t}),\n\t\t\t);\n\t\t\treturn tx;\n\t\t}\n\n\t\tdefault:\n\t\t\tthrow new RangeError(`Unsupported PvP coinflip action: ${action}`);\n\t}\n}\n"],"mappings":";;;;;;;AA+BA,SAAgB,4BACf,QACA,SACc;CACd,MAAM,KAAK,0BAA0B;EACpC,GAAG;EACH,MAAM;EACN,CAAC;CACF,MAAM,qBAAqB,mBAAmB,QAAQ,SAAS;CAC/D,MAAM,kBAAkB,kBAAkB,QAAQ,UAAU,QAAQ,QAAQ;CAE5E,QAAQ,QAAR;EACC,KAAK,UAAU;GACd,MAAM,gBAAgB;GACtB,MAAM,QAAQ,SAAS,cAAc,MAAM;GAC3C,MAAM,UAAU,GAAG,KAAK;IACvB,MAAM;IACN,SAAS;IACT,YAAY,cAAc;IAC1B,CAAC;GAEF,GAAG,IACF,WAAW;IACV,SAAS,cAAc,OAAO,WAAW;IACzC,eAAe,CAAC,mBAAmB;IACnC,WAAW;KACV,cAAc,OAAO,WAAW;KAChC;KACA,cAAc,SAAS;KACvB,QAAQ,cAAc,UAAU;KAChC,gBAAgB;KAChB,gBAAgB;KAChB;IACD,CAAC,CACF;GACD,OAAO;;EAGR,KAAK,QAAQ;GACZ,MAAM,cAAc;GACpB,MAAM,oBAAoB,yBACzB,YAAY,QACZ,mBACA;GAED,GAAG,IACF,SAAS;IACR,SAAS,YAAY,OAAO,WAAW;IACvC,eAAe,CAAC,mBAAmB;IACnC,WAAW;KACV,YAAY;KACZ,YAAY,OAAO,WAAW;KAC9B,GAAG,IAAI,YAAY,QAAQ;KAC3B,gBAAgB;KAChB,gBAAgB;KAChB;KACA;IACD,CAAC,CACF;GACD,OAAO;;EAGR,KAAK,UAAU;GACd,MAAM,gBAAgB;GAEtB,GAAG,IACF,WAAW;IACV,SAAS,cAAc,OAAO,WAAW;IACzC,eAAe,CAAC,mBAAmB;IACnC,WAAW,CACV,cAAc,QACd,cAAc,OAAO,WAAW,WAChC;IACD,CAAC,CACF;GACD,OAAO;;EAGR,SACC,MAAM,IAAI,WAAW,oCAAoC,SAAS"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import "../utils/constants.mjs";
|
|
2
|
+
import { buildSharedStandardGameBetTransaction } from "./shared.mjs";
|
|
3
|
+
import { play } from "../contracts/range/range.mjs";
|
|
4
|
+
//#region src/transactions/range.ts
|
|
5
|
+
function buildRangeTransaction(options) {
|
|
6
|
+
const scale = options.scale ?? 1e6;
|
|
7
|
+
const leftPoint = Math.round(options.leftPoint * scale);
|
|
8
|
+
const rightPoint = Math.round(options.rightPoint * scale);
|
|
9
|
+
return buildSharedStandardGameBetTransaction({
|
|
10
|
+
...options,
|
|
11
|
+
game: "range",
|
|
12
|
+
buildRewardCoin: ({ tx, config, coinType, stake, betCount, metadata, priceInfoObjectId, betCoin }) => play({
|
|
13
|
+
package: config.packageIds.range,
|
|
14
|
+
typeArguments: [coinType],
|
|
15
|
+
arguments: [
|
|
16
|
+
config.packageIds.sweetHouse,
|
|
17
|
+
stake,
|
|
18
|
+
betCoin,
|
|
19
|
+
betCount,
|
|
20
|
+
BigInt(leftPoint),
|
|
21
|
+
BigInt(rightPoint),
|
|
22
|
+
Boolean(options.outOfRange),
|
|
23
|
+
metadata.keys,
|
|
24
|
+
metadata.values,
|
|
25
|
+
priceInfoObjectId
|
|
26
|
+
]
|
|
27
|
+
})(tx)
|
|
28
|
+
});
|
|
29
|
+
}
|
|
30
|
+
//#endregion
|
|
31
|
+
export { buildRangeTransaction };
|
|
32
|
+
|
|
33
|
+
//# sourceMappingURL=range.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"range.mjs","names":[],"sources":["../../src/transactions/range.ts"],"sourcesContent":["// Copyright (c) Suigar\n// SPDX-License-Identifier: Apache-2.0\n\nimport { Transaction } from '@mysten/sui/transactions';\nimport { play } from '../contracts/range/range.js';\nimport type { BuildRangeTransactionOptions, WithPartner } from '../types';\nimport { DEFAULT_RANGE_SCALE } from '../utils/index.js';\nimport { buildSharedStandardGameBetTransaction } from './shared.js';\n\nexport function buildRangeTransaction(\n\toptions: WithPartner<BuildRangeTransactionOptions>,\n): Transaction {\n\tconst scale = options.scale ?? DEFAULT_RANGE_SCALE;\n\tconst leftPoint = Math.round(options.leftPoint * scale);\n\tconst rightPoint = Math.round(options.rightPoint * scale);\n\n\treturn buildSharedStandardGameBetTransaction({\n\t\t...options,\n\t\tgame: 'range',\n\t\tbuildRewardCoin: ({\n\t\t\ttx,\n\t\t\tconfig,\n\t\t\tcoinType,\n\t\t\tstake,\n\t\t\tbetCount,\n\t\t\tmetadata,\n\t\t\tpriceInfoObjectId,\n\t\t\tbetCoin,\n\t\t}) =>\n\t\t\tplay({\n\t\t\t\tpackage: config.packageIds.range,\n\t\t\t\ttypeArguments: [coinType],\n\t\t\t\targuments: [\n\t\t\t\t\tconfig.packageIds.sweetHouse,\n\t\t\t\t\tstake,\n\t\t\t\t\tbetCoin,\n\t\t\t\t\tbetCount,\n\t\t\t\t\tBigInt(leftPoint),\n\t\t\t\t\tBigInt(rightPoint),\n\t\t\t\t\tBoolean(options.outOfRange),\n\t\t\t\t\tmetadata.keys,\n\t\t\t\t\tmetadata.values,\n\t\t\t\t\tpriceInfoObjectId,\n\t\t\t\t],\n\t\t\t})(tx),\n\t});\n}\n"],"mappings":";;;;AASA,SAAgB,sBACf,SACc;CACd,MAAM,QAAQ,QAAQ,SAAA;CACtB,MAAM,YAAY,KAAK,MAAM,QAAQ,YAAY,MAAM;CACvD,MAAM,aAAa,KAAK,MAAM,QAAQ,aAAa,MAAM;CAEzD,OAAO,sCAAsC;EAC5C,GAAG;EACH,MAAM;EACN,kBAAkB,EACjB,IACA,QACA,UACA,OACA,UACA,UACA,mBACA,cAEA,KAAK;GACJ,SAAS,OAAO,WAAW;GAC3B,eAAe,CAAC,SAAS;GACzB,WAAW;IACV,OAAO,WAAW;IAClB;IACA;IACA;IACA,OAAO,UAAU;IACjB,OAAO,WAAW;IAClB,QAAQ,QAAQ,WAAW;IAC3B,SAAS;IACT,SAAS;IACT;IACA;GACD,CAAC,CAAC,GAAG;EACP,CAAC"}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import { assertConfiguredBetGame, resolvePriceInfoObjectId } from "../helpers/config.mjs";
|
|
2
|
+
import { encodeBetMetadata } from "../helpers/metadata.mjs";
|
|
3
|
+
import { DEFAULT_GAS_BUDGET_MIST } from "../utils/constants.mjs";
|
|
4
|
+
import { toBigInt } from "../utils/numeric.mjs";
|
|
5
|
+
import { normalizeStructTag, normalizeSuiAddress } from "@mysten/sui/utils";
|
|
6
|
+
import { Transaction } from "@mysten/sui/transactions";
|
|
7
|
+
//#region src/transactions/shared.ts
|
|
8
|
+
function createBaseGameTransaction({ config, game, playerAddress, gasBudget }) {
|
|
9
|
+
assertConfiguredBetGame(config, game);
|
|
10
|
+
const tx = new Transaction();
|
|
11
|
+
tx.setSenderIfNotSet(normalizeSuiAddress(playerAddress));
|
|
12
|
+
tx.setGasBudgetIfNotSet(gasBudget ?? DEFAULT_GAS_BUDGET_MIST);
|
|
13
|
+
return tx;
|
|
14
|
+
}
|
|
15
|
+
function buildSharedStandardGameBetCall({ config, playerAddress, coinType, stake, cashStake, betCount, metadata, partner, allowGasCoinShortcut = true, buildRewardCoin }) {
|
|
16
|
+
return (tx) => {
|
|
17
|
+
const normalizedPlayerAddress = normalizeSuiAddress(playerAddress);
|
|
18
|
+
const normalizedCoinType = normalizeStructTag(coinType);
|
|
19
|
+
const resolvedStake = toBigInt(stake);
|
|
20
|
+
const resolvedCashStake = toBigInt(cashStake ?? stake);
|
|
21
|
+
const rewardCoin = buildRewardCoin({
|
|
22
|
+
tx,
|
|
23
|
+
config,
|
|
24
|
+
playerAddress: normalizedPlayerAddress,
|
|
25
|
+
coinType: normalizedCoinType,
|
|
26
|
+
stake: resolvedStake,
|
|
27
|
+
cashStake: resolvedCashStake,
|
|
28
|
+
betCount: toBigInt(betCount ?? 1),
|
|
29
|
+
metadata: encodeBetMetadata(metadata, partner),
|
|
30
|
+
priceInfoObjectId: resolvePriceInfoObjectId(config, normalizedCoinType),
|
|
31
|
+
betCoin: tx.coin({
|
|
32
|
+
type: normalizedCoinType,
|
|
33
|
+
balance: resolvedCashStake,
|
|
34
|
+
useGasCoin: allowGasCoinShortcut
|
|
35
|
+
})
|
|
36
|
+
});
|
|
37
|
+
tx.transferObjects([rewardCoin], tx.pure.address(normalizedPlayerAddress));
|
|
38
|
+
return rewardCoin;
|
|
39
|
+
};
|
|
40
|
+
}
|
|
41
|
+
function buildSharedStandardGameBetTransaction(options) {
|
|
42
|
+
const tx = createBaseGameTransaction(options);
|
|
43
|
+
tx.add(buildSharedStandardGameBetCall(options));
|
|
44
|
+
return tx;
|
|
45
|
+
}
|
|
46
|
+
//#endregion
|
|
47
|
+
export { buildSharedStandardGameBetTransaction, createBaseGameTransaction };
|
|
48
|
+
|
|
49
|
+
//# sourceMappingURL=shared.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"shared.mjs","names":[],"sources":["../../src/transactions/shared.ts"],"sourcesContent":["// Copyright (c) Suigar\n// SPDX-License-Identifier: Apache-2.0\n\nimport {\n\tTransaction,\n\ttype TransactionArgument,\n\ttype TransactionResult,\n} from '@mysten/sui/transactions';\nimport { normalizeStructTag, normalizeSuiAddress } from '@mysten/sui/utils';\nimport {\n\tassertConfiguredBetGame,\n\tencodeBetMetadata,\n\tresolvePriceInfoObjectId,\n} from '../helpers/index.js';\nimport type {\n\tBaseTransactionOptions,\n\tCoinTransactionOptions,\n\tEncodedBetMetadata,\n\tGame,\n\tSharedBetTransactionOptions,\n\tStakeTransactionOptions,\n\tWithPartner,\n} from '../types';\nimport { DEFAULT_GAS_BUDGET_MIST, toBigInt } from '../utils/index.js';\n\ntype StrictStakeTransactionOptions = {\n\t[K in keyof StakeTransactionOptions]-?: Exclude<\n\t\tStakeTransactionOptions[K],\n\t\tnumber\n\t>;\n};\n\nexport type BuildSharedBetTransactionContext = Pick<\n\tBaseTransactionOptions,\n\t'config' | 'playerAddress'\n> &\n\tPick<CoinTransactionOptions, 'coinType'> &\n\tStrictStakeTransactionOptions & {\n\t\ttx: Transaction;\n\t\tmetadata: EncodedBetMetadata;\n\t\tpriceInfoObjectId: string;\n\t\tbetCoin: TransactionResult;\n\t};\n\nexport type CreateBaseGameTransactionOptions = BaseTransactionOptions & {\n\tgame: Game;\n};\n\nexport type BuildSharedBetTransactionOptions = WithPartner<\n\tSharedBetTransactionOptions & {\n\t\tgame: Game;\n\t\tbuildRewardCoin: (\n\t\t\tcontext: BuildSharedBetTransactionContext,\n\t\t) => TransactionResult;\n\t}\n>;\n\nexport function createBaseGameTransaction({\n\tconfig,\n\tgame,\n\tplayerAddress,\n\tgasBudget,\n}: CreateBaseGameTransactionOptions): Transaction {\n\tassertConfiguredBetGame(config, game);\n\n\tconst tx = new Transaction();\n\ttx.setSenderIfNotSet(normalizeSuiAddress(playerAddress));\n\ttx.setGasBudgetIfNotSet(gasBudget ?? DEFAULT_GAS_BUDGET_MIST);\n\n\treturn tx;\n}\n\nexport function buildSharedStandardGameBetCall({\n\tconfig,\n\tplayerAddress,\n\tcoinType,\n\tstake,\n\tcashStake,\n\tbetCount,\n\tmetadata,\n\tpartner,\n\tallowGasCoinShortcut = true,\n\tbuildRewardCoin,\n}: BuildSharedBetTransactionOptions): (tx: Transaction) => TransactionArgument {\n\treturn (tx: Transaction) => {\n\t\tconst normalizedPlayerAddress = normalizeSuiAddress(playerAddress);\n\t\tconst normalizedCoinType = normalizeStructTag(coinType);\n\t\tconst resolvedStake = toBigInt(stake);\n\t\tconst resolvedCashStake = toBigInt(cashStake ?? stake);\n\t\tconst resolvedBetCount = toBigInt(betCount ?? 1);\n\t\tconst encodedMetadata = encodeBetMetadata(metadata, partner);\n\t\tconst priceInfoObjectId = resolvePriceInfoObjectId(\n\t\t\tconfig,\n\t\t\tnormalizedCoinType,\n\t\t);\n\n\t\tconst betCoin = tx.coin({\n\t\t\ttype: normalizedCoinType,\n\t\t\tbalance: resolvedCashStake,\n\t\t\tuseGasCoin: allowGasCoinShortcut,\n\t\t});\n\n\t\tconst rewardCoin = buildRewardCoin({\n\t\t\ttx,\n\t\t\tconfig,\n\t\t\tplayerAddress: normalizedPlayerAddress,\n\t\t\tcoinType: normalizedCoinType,\n\t\t\tstake: resolvedStake,\n\t\t\tcashStake: resolvedCashStake,\n\t\t\tbetCount: resolvedBetCount,\n\t\t\tmetadata: encodedMetadata,\n\t\t\tpriceInfoObjectId,\n\t\t\tbetCoin,\n\t\t});\n\n\t\ttx.transferObjects([rewardCoin], tx.pure.address(normalizedPlayerAddress));\n\t\treturn rewardCoin;\n\t};\n}\n\nexport function buildSharedStandardGameBetTransaction(\n\toptions: BuildSharedBetTransactionOptions,\n): Transaction {\n\tconst tx = createBaseGameTransaction(options);\n\ttx.add(buildSharedStandardGameBetCall(options));\n\treturn tx;\n}\n"],"mappings":";;;;;;;AAyDA,SAAgB,0BAA0B,EACzC,QACA,MACA,eACA,aACiD;CACjD,wBAAwB,QAAQ,KAAK;CAErC,MAAM,KAAK,IAAI,aAAa;CAC5B,GAAG,kBAAkB,oBAAoB,cAAc,CAAC;CACxD,GAAG,qBAAqB,aAAa,wBAAwB;CAE7D,OAAO;;AAGR,SAAgB,+BAA+B,EAC9C,QACA,eACA,UACA,OACA,WACA,UACA,UACA,SACA,uBAAuB,MACvB,mBAC8E;CAC9E,QAAQ,OAAoB;EAC3B,MAAM,0BAA0B,oBAAoB,cAAc;EAClE,MAAM,qBAAqB,mBAAmB,SAAS;EACvD,MAAM,gBAAgB,SAAS,MAAM;EACrC,MAAM,oBAAoB,SAAS,aAAa,MAAM;EActD,MAAM,aAAa,gBAAgB;GAClC;GACA;GACA,eAAe;GACf,UAAU;GACV,OAAO;GACP,WAAW;GACX,UApBwB,SAAS,YAAY,EAoBnB;GAC1B,UApBuB,kBAAkB,UAAU,QAoB1B;GACzB,mBApByB,yBACzB,QACA,mBAkBiB;GACjB,SAhBe,GAAG,KAAK;IACvB,MAAM;IACN,SAAS;IACT,YAAY;IACZ,CAYO;GACP,CAAC;EAEF,GAAG,gBAAgB,CAAC,WAAW,EAAE,GAAG,KAAK,QAAQ,wBAAwB,CAAC;EAC1E,OAAO;;;AAIT,SAAgB,sCACf,SACc;CACd,MAAM,KAAK,0BAA0B,QAAQ;CAC7C,GAAG,IAAI,+BAA+B,QAAQ,CAAC;CAC/C,OAAO"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { toU8 } from "../utils/numeric.mjs";
|
|
2
|
+
import { buildSharedStandardGameBetTransaction } from "./shared.mjs";
|
|
3
|
+
import { play } from "../contracts/wheel/wheel.mjs";
|
|
4
|
+
//#region src/transactions/wheel.ts
|
|
5
|
+
function buildWheelTransaction(options) {
|
|
6
|
+
const configId = toU8(options.configId);
|
|
7
|
+
return buildSharedStandardGameBetTransaction({
|
|
8
|
+
...options,
|
|
9
|
+
game: "wheel",
|
|
10
|
+
buildRewardCoin: ({ tx, config, coinType, stake, betCount, metadata, priceInfoObjectId, betCoin }) => play({
|
|
11
|
+
package: config.packageIds.wheel,
|
|
12
|
+
typeArguments: [coinType],
|
|
13
|
+
arguments: [
|
|
14
|
+
config.packageIds.sweetHouse,
|
|
15
|
+
stake,
|
|
16
|
+
betCoin,
|
|
17
|
+
betCount,
|
|
18
|
+
configId,
|
|
19
|
+
metadata.keys,
|
|
20
|
+
metadata.values,
|
|
21
|
+
priceInfoObjectId
|
|
22
|
+
]
|
|
23
|
+
})(tx)
|
|
24
|
+
});
|
|
25
|
+
}
|
|
26
|
+
//#endregion
|
|
27
|
+
export { buildWheelTransaction };
|
|
28
|
+
|
|
29
|
+
//# sourceMappingURL=wheel.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"wheel.mjs","names":[],"sources":["../../src/transactions/wheel.ts"],"sourcesContent":["// Copyright (c) Suigar\n// SPDX-License-Identifier: Apache-2.0\n\nimport { Transaction } from '@mysten/sui/transactions';\nimport { play } from '../contracts/wheel/wheel.js';\nimport type { BuildWheelTransactionOptions, WithPartner } from '../types';\nimport { toU8 } from '../utils/index.js';\nimport { buildSharedStandardGameBetTransaction } from './shared.js';\n\nexport function buildWheelTransaction(\n\toptions: WithPartner<BuildWheelTransactionOptions>,\n): Transaction {\n\tconst configId = toU8(options.configId);\n\n\treturn buildSharedStandardGameBetTransaction({\n\t\t...options,\n\t\tgame: 'wheel',\n\t\tbuildRewardCoin: ({\n\t\t\ttx,\n\t\t\tconfig,\n\t\t\tcoinType,\n\t\t\tstake,\n\t\t\tbetCount,\n\t\t\tmetadata,\n\t\t\tpriceInfoObjectId,\n\t\t\tbetCoin,\n\t\t}) =>\n\t\t\tplay({\n\t\t\t\tpackage: config.packageIds.wheel,\n\t\t\t\ttypeArguments: [coinType],\n\t\t\t\targuments: [\n\t\t\t\t\tconfig.packageIds.sweetHouse,\n\t\t\t\t\tstake,\n\t\t\t\t\tbetCoin,\n\t\t\t\t\tbetCount,\n\t\t\t\t\tconfigId,\n\t\t\t\t\tmetadata.keys,\n\t\t\t\t\tmetadata.values,\n\t\t\t\t\tpriceInfoObjectId,\n\t\t\t\t],\n\t\t\t})(tx),\n\t});\n}\n"],"mappings":";;;;AASA,SAAgB,sBACf,SACc;CACd,MAAM,WAAW,KAAK,QAAQ,SAAS;CAEvC,OAAO,sCAAsC;EAC5C,GAAG;EACH,MAAM;EACN,kBAAkB,EACjB,IACA,QACA,UACA,OACA,UACA,UACA,mBACA,cAEA,KAAK;GACJ,SAAS,OAAO,WAAW;GAC3B,eAAe,CAAC,SAAS;GACzB,WAAW;IACV,OAAO,WAAW;IAClB;IACA;IACA;IACA;IACA,SAAS;IACT,SAAS;IACT;IACA;GACD,CAAC,CAAC,GAAG;EACP,CAAC"}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
import { ClientCache } from "@mysten/sui/client";
|
|
2
|
+
//#region src/ttl-cache.ts
|
|
3
|
+
var TtlClientCache = class extends ClientCache {
|
|
4
|
+
#ttlMs;
|
|
5
|
+
constructor({ ttlMs, ...options }) {
|
|
6
|
+
super({
|
|
7
|
+
...options,
|
|
8
|
+
prefix: options.prefix ?? ["ttl"]
|
|
9
|
+
});
|
|
10
|
+
this.#ttlMs = ttlMs;
|
|
11
|
+
}
|
|
12
|
+
read(key, load, options) {
|
|
13
|
+
if (options?.ignoreCache) super.clear(key);
|
|
14
|
+
if (this.#ttlMs <= 0) return load();
|
|
15
|
+
const cached = super.read(key, () => this.#loadEntry(key, load));
|
|
16
|
+
if (cached && cached.expiresAt > Date.now()) return cached.value;
|
|
17
|
+
super.clear(key);
|
|
18
|
+
return super.read(key, () => this.#loadEntry(key, load)).value;
|
|
19
|
+
}
|
|
20
|
+
readSync(key, load, options) {
|
|
21
|
+
if (options?.ignoreCache) super.clear(key);
|
|
22
|
+
if (this.#ttlMs <= 0) return load();
|
|
23
|
+
const cached = super.readSync(key, () => this.#loadSyncEntry(load));
|
|
24
|
+
if (cached.expiresAt > Date.now()) return cached.value;
|
|
25
|
+
super.clear(key);
|
|
26
|
+
return super.readSync(key, () => this.#loadSyncEntry(load)).value;
|
|
27
|
+
}
|
|
28
|
+
#loadEntry(key, load) {
|
|
29
|
+
const value = load();
|
|
30
|
+
const entry = {
|
|
31
|
+
value,
|
|
32
|
+
expiresAt: Date.now() + this.#ttlMs
|
|
33
|
+
};
|
|
34
|
+
if (isPromiseLike(value)) entry.value = Promise.resolve(value).then((resolved) => {
|
|
35
|
+
super.clear(key);
|
|
36
|
+
super.read(key, () => ({
|
|
37
|
+
value: resolved,
|
|
38
|
+
expiresAt: Date.now() + this.#ttlMs
|
|
39
|
+
}));
|
|
40
|
+
return resolved;
|
|
41
|
+
}).catch((error) => {
|
|
42
|
+
super.clear(key);
|
|
43
|
+
throw error;
|
|
44
|
+
});
|
|
45
|
+
return entry;
|
|
46
|
+
}
|
|
47
|
+
#loadSyncEntry(load) {
|
|
48
|
+
return {
|
|
49
|
+
value: load(),
|
|
50
|
+
expiresAt: Date.now() + this.#ttlMs
|
|
51
|
+
};
|
|
52
|
+
}
|
|
53
|
+
};
|
|
54
|
+
function isPromiseLike(value) {
|
|
55
|
+
return (typeof value === "object" || typeof value === "function") && value !== null && "then" in value;
|
|
56
|
+
}
|
|
57
|
+
//#endregion
|
|
58
|
+
export { TtlClientCache };
|
|
59
|
+
|
|
60
|
+
//# sourceMappingURL=ttl-cache.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ttl-cache.mjs","names":["#ttlMs","#loadEntry","#loadSyncEntry"],"sources":["../src/ttl-cache.ts"],"sourcesContent":["// Copyright (c) Suigar\n// SPDX-License-Identifier: Apache-2.0\n\nimport { ClientCache, type ClientCacheOptions } from '@mysten/sui/client';\n\ntype CacheEntry<Value> = {\n\texpiresAt: number;\n\tvalue: Value;\n};\n\ntype TtlClientCacheReadOptions = {\n\tignoreCache?: boolean;\n};\n\nexport class TtlClientCache extends ClientCache {\n\t#ttlMs: number;\n\n\tconstructor({ ttlMs, ...options }: ClientCacheOptions & { ttlMs: number }) {\n\t\tsuper({\n\t\t\t...options,\n\t\t\tprefix: options.prefix ?? ['ttl'],\n\t\t});\n\t\tthis.#ttlMs = ttlMs;\n\t}\n\n\toverride read<T>(\n\t\tkey: [string, ...string[]],\n\t\tload: () => T | Promise<T>,\n\t\toptions?: TtlClientCacheReadOptions,\n\t): T | Promise<T> {\n\t\tif (options?.ignoreCache) {\n\t\t\tsuper.clear(key);\n\t\t}\n\n\t\tif (this.#ttlMs <= 0) {\n\t\t\treturn load();\n\t\t}\n\n\t\tconst cached = super.read<CacheEntry<T | Promise<T>>>(key, () =>\n\t\t\tthis.#loadEntry(key, load),\n\t\t) as CacheEntry<T | Promise<T>>;\n\n\t\tif (cached && cached.expiresAt > Date.now()) {\n\t\t\treturn cached.value as T;\n\t\t}\n\n\t\tsuper.clear(key);\n\t\treturn (\n\t\t\tsuper.read<CacheEntry<T | Promise<T>>>(key, () =>\n\t\t\t\tthis.#loadEntry(key, load),\n\t\t\t) as CacheEntry<T | Promise<T>>\n\t\t).value as T | Promise<T>;\n\t}\n\n\toverride readSync<T>(\n\t\tkey: [string, ...string[]],\n\t\tload: () => T,\n\t\toptions?: TtlClientCacheReadOptions,\n\t): T {\n\t\tif (options?.ignoreCache) {\n\t\t\tsuper.clear(key);\n\t\t}\n\n\t\tif (this.#ttlMs <= 0) {\n\t\t\treturn load();\n\t\t}\n\n\t\tconst cached = super.readSync<CacheEntry<T>>(key, () =>\n\t\t\tthis.#loadSyncEntry(load),\n\t\t);\n\n\t\tif (cached.expiresAt > Date.now()) {\n\t\t\treturn cached.value;\n\t\t}\n\n\t\tsuper.clear(key);\n\t\treturn super.readSync<CacheEntry<T>>(key, () => this.#loadSyncEntry(load))\n\t\t\t.value;\n\t}\n\n\t#loadEntry<T>(\n\t\tkey: [string, ...string[]],\n\t\tload: () => T | Promise<T>,\n\t): CacheEntry<T | Promise<T>> {\n\t\tconst value = load();\n\t\tconst entry: CacheEntry<T | Promise<T>> = {\n\t\t\tvalue,\n\t\t\texpiresAt: Date.now() + this.#ttlMs,\n\t\t};\n\n\t\tif (isPromiseLike(value)) {\n\t\t\tentry.value = Promise.resolve(value)\n\t\t\t\t.then((resolved) => {\n\t\t\t\t\tsuper.clear(key);\n\t\t\t\t\tsuper.read<CacheEntry<T>>(key, () => ({\n\t\t\t\t\t\tvalue: resolved,\n\t\t\t\t\t\texpiresAt: Date.now() + this.#ttlMs,\n\t\t\t\t\t}));\n\t\t\t\t\treturn resolved as T;\n\t\t\t\t})\n\t\t\t\t.catch((error) => {\n\t\t\t\t\tsuper.clear(key);\n\t\t\t\t\tthrow error;\n\t\t\t\t});\n\t\t}\n\n\t\treturn entry;\n\t}\n\n\t#loadSyncEntry<T>(load: () => T): CacheEntry<T> {\n\t\treturn {\n\t\t\tvalue: load(),\n\t\t\texpiresAt: Date.now() + this.#ttlMs,\n\t\t};\n\t}\n}\n\nfunction isPromiseLike<T>(value: T | Promise<T>): value is Promise<T> {\n\treturn (\n\t\t(typeof value === 'object' || typeof value === 'function') &&\n\t\tvalue !== null &&\n\t\t'then' in value\n\t);\n}\n"],"mappings":";;AAcA,IAAa,iBAAb,cAAoC,YAAY;CAC/C;CAEA,YAAY,EAAE,OAAO,GAAG,WAAmD;EAC1E,MAAM;GACL,GAAG;GACH,QAAQ,QAAQ,UAAU,CAAC,MAAM;GACjC,CAAC;EACF,KAAKA,SAAS;;CAGf,KACC,KACA,MACA,SACiB;EACjB,IAAI,SAAS,aACZ,MAAM,MAAM,IAAI;EAGjB,IAAI,KAAKA,UAAU,GAClB,OAAO,MAAM;EAGd,MAAM,SAAS,MAAM,KAAiC,WACrD,KAAKC,WAAW,KAAK,KAAK,CAC1B;EAED,IAAI,UAAU,OAAO,YAAY,KAAK,KAAK,EAC1C,OAAO,OAAO;EAGf,MAAM,MAAM,IAAI;EAChB,OACC,MAAM,KAAiC,WACtC,KAAKA,WAAW,KAAK,KAAK,CAC1B,CACA;;CAGH,SACC,KACA,MACA,SACI;EACJ,IAAI,SAAS,aACZ,MAAM,MAAM,IAAI;EAGjB,IAAI,KAAKD,UAAU,GAClB,OAAO,MAAM;EAGd,MAAM,SAAS,MAAM,SAAwB,WAC5C,KAAKE,eAAe,KAAK,CACzB;EAED,IAAI,OAAO,YAAY,KAAK,KAAK,EAChC,OAAO,OAAO;EAGf,MAAM,MAAM,IAAI;EAChB,OAAO,MAAM,SAAwB,WAAW,KAAKA,eAAe,KAAK,CAAC,CACxE;;CAGH,WACC,KACA,MAC6B;EAC7B,MAAM,QAAQ,MAAM;EACpB,MAAM,QAAoC;GACzC;GACA,WAAW,KAAK,KAAK,GAAG,KAAKF;GAC7B;EAED,IAAI,cAAc,MAAM,EACvB,MAAM,QAAQ,QAAQ,QAAQ,MAAM,CAClC,MAAM,aAAa;GACnB,MAAM,MAAM,IAAI;GAChB,MAAM,KAAoB,YAAY;IACrC,OAAO;IACP,WAAW,KAAK,KAAK,GAAG,KAAKA;IAC7B,EAAE;GACH,OAAO;IACN,CACD,OAAO,UAAU;GACjB,MAAM,MAAM,IAAI;GAChB,MAAM;IACL;EAGJ,OAAO;;CAGR,eAAkB,MAA8B;EAC/C,OAAO;GACN,OAAO,MAAM;GACb,WAAW,KAAK,KAAK,GAAG,KAAKA;GAC7B;;;AAIH,SAAS,cAAiB,OAA4C;CACrE,QACE,OAAO,UAAU,YAAY,OAAO,UAAU,eAC/C,UAAU,QACV,UAAU"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
//#region src/types/bet-metadata.type.d.ts
|
|
2
|
+
type BetMetadataPrimitive = string | number | boolean | bigint;
|
|
3
|
+
type BetMetadataValue = BetMetadataPrimitive | Uint8Array | number[];
|
|
4
|
+
type BetMetadataInput = Record<string, BetMetadataValue | null | undefined>;
|
|
5
|
+
//#endregion
|
|
6
|
+
export { BetMetadataInput, BetMetadataPrimitive, BetMetadataValue };
|
|
7
|
+
//# sourceMappingURL=bet-metadata.type.d.mts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bet-metadata.type.d.mts","names":[],"sources":["../../src/types/bet-metadata.type.ts"],"mappings":";KAGY,oBAAA;AAAA,KACA,gBAAA,GAAmB,oBAAA,GAAuB,UAAA;AAAA,KAC1C,gBAAA,GAAmB,MAAA,SAE9B,gBAAA"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { StandardGame } from "./game.type.mjs";
|
|
2
|
+
import { BuildCoinflipTransactionOptions, BuildLimboTransactionOptions, BuildPlinkoTransactionOptions, BuildRangeTransactionOptions, BuildWheelTransactionOptions } from "./transaction-options.type.mjs";
|
|
3
|
+
|
|
4
|
+
//#region src/types/build-game-transaction-options.type.d.ts
|
|
5
|
+
type WithoutConfig<T> = Omit<T, 'config'>;
|
|
6
|
+
type BuildGameOptions<GameId extends StandardGame> = GameId extends 'coinflip' ? WithoutConfig<BuildCoinflipTransactionOptions> : GameId extends 'wheel' ? WithoutConfig<BuildWheelTransactionOptions> : GameId extends 'limbo' ? WithoutConfig<BuildLimboTransactionOptions> : GameId extends 'plinko' ? WithoutConfig<BuildPlinkoTransactionOptions> : GameId extends 'range' ? WithoutConfig<BuildRangeTransactionOptions> : never;
|
|
7
|
+
//#endregion
|
|
8
|
+
export { BuildGameOptions };
|
|
9
|
+
//# sourceMappingURL=build-game-transaction-options.type.d.mts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"build-game-transaction-options.type.d.mts","names":[],"sources":["../../src/types/build-game-transaction-options.type.ts"],"mappings":";;;;KAcK,aAAA,MAAmB,IAAA,CAAK,CAAA;AAAA,KAEjB,gBAAA,gBAAgC,YAAA,IAC3C,MAAA,sBACG,aAAA,CAAc,+BAAA,IACd,MAAA,mBACC,aAAA,CAAc,4BAAA,IACd,MAAA,mBACC,aAAA,CAAc,4BAAA,IACd,MAAA,oBACC,aAAA,CAAc,6BAAA,IACd,MAAA,mBACC,aAAA,CAAc,4BAAA"}
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
import { Game } from "./game.type.mjs";
|
|
2
|
+
import { MoveStruct } from "../contracts/utils/index.mjs";
|
|
3
|
+
import { BetResultEvent } from "../contracts/core/core.mjs";
|
|
4
|
+
import * as _$_mysten_bcs0 from "@mysten/bcs";
|
|
5
|
+
|
|
6
|
+
//#region src/types/game-details.type.d.ts
|
|
7
|
+
type BetResultGameDetails = ReturnType<(typeof BetResultEvent)['parse']>['game_details'];
|
|
8
|
+
type GameDetailValueType = 'u8' | 'u64' | 'bool' | 'float' | 'string';
|
|
9
|
+
type GameDetail<TValueType extends GameDetailValueType> = TValueType extends 'float' | 'u64' ? number : ReturnType<(typeof GAME_DETAIL_BCS)[TValueType]['parse']>;
|
|
10
|
+
type GameDetails<TGame extends Game> = { [K in keyof (typeof GAME_DETAILS_SCHEMAS)[TGame]]: GameDetail<(typeof GAME_DETAILS_SCHEMAS)[TGame][K] & GameDetailValueType> };
|
|
11
|
+
declare const GAME_DETAIL_BCS: {
|
|
12
|
+
readonly u8: _$_mysten_bcs0.BcsType<number, number, "u8">;
|
|
13
|
+
readonly u64: _$_mysten_bcs0.BcsType<string, string | number | bigint, "u64">;
|
|
14
|
+
readonly bool: _$_mysten_bcs0.BcsType<boolean, boolean, "bool">;
|
|
15
|
+
readonly float: MoveStruct<{
|
|
16
|
+
is_negative: _$_mysten_bcs0.BcsType<boolean, boolean, "bool">;
|
|
17
|
+
exp: MoveStruct<{
|
|
18
|
+
bits: _$_mysten_bcs0.BcsType<string, string | number | bigint, "u64">;
|
|
19
|
+
}, "0xf391858d2a08473e8d4defcc8df89976bd7b123d3865c6b9341b237f7853dbbc::i64::I64">;
|
|
20
|
+
mant: _$_mysten_bcs0.BcsType<string, string | number | bigint, "u64">;
|
|
21
|
+
}, "0xf391858d2a08473e8d4defcc8df89976bd7b123d3865c6b9341b237f7853dbbc::float::Float">;
|
|
22
|
+
readonly string: _$_mysten_bcs0.BcsType<string, string, "string">;
|
|
23
|
+
};
|
|
24
|
+
declare const GAME_DETAILS_SCHEMAS: {
|
|
25
|
+
coinflip: {
|
|
26
|
+
player_bet: "string";
|
|
27
|
+
coin_outcome: "string";
|
|
28
|
+
};
|
|
29
|
+
limbo: {
|
|
30
|
+
payout_amount: "u64";
|
|
31
|
+
win: "bool";
|
|
32
|
+
roll_multiplier: "float";
|
|
33
|
+
payout_multiplier: "float";
|
|
34
|
+
target_multiplier: "float";
|
|
35
|
+
actual_rtp: "float";
|
|
36
|
+
};
|
|
37
|
+
plinko: {
|
|
38
|
+
slot_index: "u8";
|
|
39
|
+
multiplier: "float";
|
|
40
|
+
payout_amount: "u64";
|
|
41
|
+
plinko_config: "u8";
|
|
42
|
+
};
|
|
43
|
+
'pvp-coinflip': {
|
|
44
|
+
pvp_result: "string";
|
|
45
|
+
};
|
|
46
|
+
range: {
|
|
47
|
+
roll_value: "u64";
|
|
48
|
+
win: "bool";
|
|
49
|
+
payout_amount: "u64";
|
|
50
|
+
payout_multiplier: "float";
|
|
51
|
+
left_point: "u64";
|
|
52
|
+
right_point: "u64";
|
|
53
|
+
zone_size: "u64";
|
|
54
|
+
winning_zone_size: "u64";
|
|
55
|
+
is_out_range: "bool";
|
|
56
|
+
bet_threshold: "u64";
|
|
57
|
+
roll_under: "bool";
|
|
58
|
+
range_mode: "u8";
|
|
59
|
+
win_probability: "float";
|
|
60
|
+
win_multiplier: "float";
|
|
61
|
+
actual_rtp: "float";
|
|
62
|
+
};
|
|
63
|
+
wheel: {
|
|
64
|
+
case_index: "u8";
|
|
65
|
+
multiplier: "float";
|
|
66
|
+
payout_amount: "u64";
|
|
67
|
+
wheel_config: "u8";
|
|
68
|
+
spin_value: "u64";
|
|
69
|
+
};
|
|
70
|
+
};
|
|
71
|
+
//#endregion
|
|
72
|
+
export { BetResultGameDetails, GAME_DETAILS_SCHEMAS, GAME_DETAIL_BCS, GameDetail, GameDetailValueType, GameDetails };
|
|
73
|
+
//# sourceMappingURL=game-details.type.d.mts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"game-details.type.d.mts","names":[],"sources":["../../src/types/game-details.type.ts"],"mappings":";;;;;;KAQY,oBAAA,GAAuB,UAAA,SAC1B,cAAA;AAAA,KAGG,mBAAA;AAAA,KAGA,UAAA,oBAA8B,mBAAA,IACzC,UAAA,oCAEG,UAAA,SAAmB,eAAA,EAAiB,UAAA;AAAA,KAE5B,WAAA,eAA0B,IAAA,0BACjB,oBAAA,EAAsB,KAAA,IAAS,UAAA,SAC1C,oBAAA,EAAsB,KAAA,EAAO,CAAA,IAAK,mBAAA;AAAA,cAI/B,eAAA;EAAA,aAMH,cAAA,CAAA,OAAA;EAAA;;;;;;;;;;;cAqDG,oBAAA"}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
import { Float } from "../contracts/core/float.mjs";
|
|
2
|
+
import { bcs } from "@mysten/sui/bcs";
|
|
3
|
+
//#region src/types/game-details.type.ts
|
|
4
|
+
const GAME_DETAIL_BCS = {
|
|
5
|
+
u8: bcs.U8,
|
|
6
|
+
u64: bcs.U64,
|
|
7
|
+
bool: bcs.Bool,
|
|
8
|
+
float: Float,
|
|
9
|
+
string: bcs.String
|
|
10
|
+
};
|
|
11
|
+
const GAME_DETAILS_SCHEMAS = {
|
|
12
|
+
coinflip: {
|
|
13
|
+
player_bet: "string",
|
|
14
|
+
coin_outcome: "string"
|
|
15
|
+
},
|
|
16
|
+
limbo: {
|
|
17
|
+
payout_amount: "u64",
|
|
18
|
+
win: "bool",
|
|
19
|
+
roll_multiplier: "float",
|
|
20
|
+
payout_multiplier: "float",
|
|
21
|
+
target_multiplier: "float",
|
|
22
|
+
actual_rtp: "float"
|
|
23
|
+
},
|
|
24
|
+
plinko: {
|
|
25
|
+
slot_index: "u8",
|
|
26
|
+
multiplier: "float",
|
|
27
|
+
payout_amount: "u64",
|
|
28
|
+
plinko_config: "u8"
|
|
29
|
+
},
|
|
30
|
+
"pvp-coinflip": { pvp_result: "string" },
|
|
31
|
+
range: {
|
|
32
|
+
roll_value: "u64",
|
|
33
|
+
win: "bool",
|
|
34
|
+
payout_amount: "u64",
|
|
35
|
+
payout_multiplier: "float",
|
|
36
|
+
left_point: "u64",
|
|
37
|
+
right_point: "u64",
|
|
38
|
+
zone_size: "u64",
|
|
39
|
+
winning_zone_size: "u64",
|
|
40
|
+
is_out_range: "bool",
|
|
41
|
+
bet_threshold: "u64",
|
|
42
|
+
roll_under: "bool",
|
|
43
|
+
range_mode: "u8",
|
|
44
|
+
win_probability: "float",
|
|
45
|
+
win_multiplier: "float",
|
|
46
|
+
actual_rtp: "float"
|
|
47
|
+
},
|
|
48
|
+
wheel: {
|
|
49
|
+
case_index: "u8",
|
|
50
|
+
multiplier: "float",
|
|
51
|
+
payout_amount: "u64",
|
|
52
|
+
wheel_config: "u8",
|
|
53
|
+
spin_value: "u64"
|
|
54
|
+
}
|
|
55
|
+
};
|
|
56
|
+
//#endregion
|
|
57
|
+
export { GAME_DETAILS_SCHEMAS, GAME_DETAIL_BCS };
|
|
58
|
+
|
|
59
|
+
//# sourceMappingURL=game-details.type.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"game-details.type.mjs","names":[],"sources":["../../src/types/game-details.type.ts"],"sourcesContent":["// Copyright (c) Suigar\n// SPDX-License-Identifier: Apache-2.0\n\nimport { bcs } from '@mysten/sui/bcs';\nimport { BetResultEvent } from '../contracts/core/core';\nimport { Float } from '../contracts/core/float';\nimport type { Game } from './game.type.js';\n\nexport type BetResultGameDetails = ReturnType<\n\t(typeof BetResultEvent)['parse']\n>['game_details'];\n\nexport type GameDetailValueType = 'u8' | 'u64' | 'bool' | 'float' | 'string';\nexport type GameDetailsSchema = Record<string, GameDetailValueType>;\n\nexport type GameDetail<TValueType extends GameDetailValueType> =\n\tTValueType extends 'float' | 'u64'\n\t\t? number\n\t\t: ReturnType<(typeof GAME_DETAIL_BCS)[TValueType]['parse']>;\n\nexport type GameDetails<TGame extends Game> = {\n\t[K in keyof (typeof GAME_DETAILS_SCHEMAS)[TGame]]: GameDetail<\n\t\t(typeof GAME_DETAILS_SCHEMAS)[TGame][K] & GameDetailValueType\n\t>;\n};\n\nexport const GAME_DETAIL_BCS = {\n\tu8: bcs.U8,\n\tu64: bcs.U64,\n\tbool: bcs.Bool,\n\tfloat: Float,\n\tstring: bcs.String,\n} as const;\n\nconst COINFLIP_GAME_DETAILS_SCHEMA = {\n\tplayer_bet: 'string',\n\tcoin_outcome: 'string',\n} satisfies GameDetailsSchema;\n\nconst PVP_COINFLIP_GAME_DETAILS_SCHEMA = {\n\tpvp_result: 'string',\n} satisfies GameDetailsSchema;\n\nconst LIMBO_GAME_DETAILS_SCHEMA = {\n\tpayout_amount: 'u64',\n\twin: 'bool',\n\troll_multiplier: 'float',\n\tpayout_multiplier: 'float',\n\ttarget_multiplier: 'float',\n\tactual_rtp: 'float',\n} satisfies GameDetailsSchema;\n\nconst RANGE_GAME_DETAILS_SCHEMA = {\n\troll_value: 'u64',\n\twin: 'bool',\n\tpayout_amount: 'u64',\n\tpayout_multiplier: 'float',\n\tleft_point: 'u64',\n\tright_point: 'u64',\n\tzone_size: 'u64',\n\twinning_zone_size: 'u64',\n\tis_out_range: 'bool',\n\tbet_threshold: 'u64',\n\troll_under: 'bool',\n\trange_mode: 'u8',\n\twin_probability: 'float',\n\twin_multiplier: 'float',\n\tactual_rtp: 'float',\n} satisfies GameDetailsSchema;\n\nconst PLINKO_GAME_DETAILS_SCHEMA = {\n\tslot_index: 'u8',\n\tmultiplier: 'float',\n\tpayout_amount: 'u64',\n\tplinko_config: 'u8',\n} satisfies GameDetailsSchema;\n\nconst WHEEL_GAME_DETAILS_SCHEMA = {\n\tcase_index: 'u8',\n\tmultiplier: 'float',\n\tpayout_amount: 'u64',\n\twheel_config: 'u8',\n\tspin_value: 'u64',\n} satisfies GameDetailsSchema;\n\nexport const GAME_DETAILS_SCHEMAS = {\n\tcoinflip: COINFLIP_GAME_DETAILS_SCHEMA,\n\tlimbo: LIMBO_GAME_DETAILS_SCHEMA,\n\tplinko: PLINKO_GAME_DETAILS_SCHEMA,\n\t'pvp-coinflip': PVP_COINFLIP_GAME_DETAILS_SCHEMA,\n\trange: RANGE_GAME_DETAILS_SCHEMA,\n\twheel: WHEEL_GAME_DETAILS_SCHEMA,\n} satisfies Record<Game, GameDetailsSchema>;\n"],"mappings":";;;AA0BA,MAAa,kBAAkB;CAC9B,IAAI,IAAI;CACR,KAAK,IAAI;CACT,MAAM,IAAI;CACV,OAAO;CACP,QAAQ,IAAI;CACZ;AAqDD,MAAa,uBAAuB;CACnC,UAAU;EAnDV,YAAY;EACZ,cAAc;EAkDJ;CACV,OAAO;EA3CP,eAAe;EACf,KAAK;EACL,iBAAiB;EACjB,mBAAmB;EACnB,mBAAmB;EACnB,YAAY;EAsCL;CACP,QAAQ;EAjBR,YAAY;EACZ,YAAY;EACZ,eAAe;EACf,eAAe;EAcP;CACR,gBAAgB,EAjDhB,YAAY,UAiDI;CAChB,OAAO;EArCP,YAAY;EACZ,KAAK;EACL,eAAe;EACf,mBAAmB;EACnB,YAAY;EACZ,aAAa;EACb,WAAW;EACX,mBAAmB;EACnB,cAAc;EACd,eAAe;EACf,YAAY;EACZ,YAAY;EACZ,iBAAiB;EACjB,gBAAgB;EAChB,YAAY;EAuBL;CACP,OAAO;EAbP,YAAY;EACZ,YAAY;EACZ,eAAe;EACf,cAAc;EACd,YAAY;EASL;CACP"}
|