@waterx/predict-sdk 0.1.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/LICENSE +22 -0
- package/README.md +67 -0
- package/dist/src/account.d.ts +64 -0
- package/dist/src/account.js +134 -0
- package/dist/src/admin.d.ts +47 -0
- package/dist/src/admin.js +104 -0
- package/dist/src/bcs.d.ts +20 -0
- package/dist/src/bcs.js +209 -0
- package/dist/src/client.d.ts +60 -0
- package/dist/src/client.js +59 -0
- package/dist/src/constants.d.ts +61 -0
- package/dist/src/constants.js +62 -0
- package/dist/src/fetch.d.ts +53 -0
- package/dist/src/fetch.js +187 -0
- package/dist/src/generated/bucket_v2_framework/account.d.ts +100 -0
- package/dist/src/generated/bucket_v2_framework/account.js +129 -0
- package/dist/src/generated/bucket_v2_framework/deps/std/type_name.d.ts +6 -0
- package/dist/src/generated/bucket_v2_framework/deps/std/type_name.js +19 -0
- package/dist/src/generated/bucket_v2_framework/deps/sui/balance.d.ts +10 -0
- package/dist/src/generated/bucket_v2_framework/deps/sui/balance.js +14 -0
- package/dist/src/generated/bucket_v2_framework/deps/sui/vec_map.d.ts +36 -0
- package/dist/src/generated/bucket_v2_framework/deps/sui/vec_map.js +27 -0
- package/dist/src/generated/bucket_v2_framework/deps/sui/vec_set.d.ts +16 -0
- package/dist/src/generated/bucket_v2_framework/deps/sui/vec_set.js +19 -0
- package/dist/src/generated/bucket_v2_framework/double.d.ts +382 -0
- package/dist/src/generated/bucket_v2_framework/double.js +466 -0
- package/dist/src/generated/bucket_v2_framework/float.d.ts +362 -0
- package/dist/src/generated/bucket_v2_framework/float.js +440 -0
- package/dist/src/generated/bucket_v2_framework/liability.d.ts +193 -0
- package/dist/src/generated/bucket_v2_framework/liability.js +205 -0
- package/dist/src/generated/bucket_v2_framework/linked_table.d.ts +384 -0
- package/dist/src/generated/bucket_v2_framework/linked_table.js +382 -0
- package/dist/src/generated/bucket_v2_framework/sheet.d.ts +344 -0
- package/dist/src/generated/bucket_v2_framework/sheet.js +344 -0
- package/dist/src/generated/utils/index.d.ts +30 -0
- package/dist/src/generated/utils/index.js +157 -0
- package/dist/src/generated/waterx_account/account.d.ts +1326 -0
- package/dist/src/generated/waterx_account/account.js +1487 -0
- package/dist/src/generated/waterx_account/deps/std/type_name.d.ts +6 -0
- package/dist/src/generated/waterx_account/deps/std/type_name.js +19 -0
- package/dist/src/generated/waterx_account/deps/sui/balance.d.ts +10 -0
- package/dist/src/generated/waterx_account/deps/sui/balance.js +14 -0
- package/dist/src/generated/waterx_account/deps/sui/table.d.ts +24 -0
- package/dist/src/generated/waterx_account/deps/sui/table.js +31 -0
- package/dist/src/generated/waterx_account/deps/sui/vec_map.d.ts +36 -0
- package/dist/src/generated/waterx_account/deps/sui/vec_map.js +27 -0
- package/dist/src/generated/waterx_account/deps/sui/vec_set.d.ts +16 -0
- package/dist/src/generated/waterx_account/deps/sui/vec_set.js +19 -0
- package/dist/src/generated/waterx_account/direct_rule.d.ts +72 -0
- package/dist/src/generated/waterx_account/direct_rule.js +75 -0
- package/dist/src/generated/waterx_account/events.d.ts +30 -0
- package/dist/src/generated/waterx_account/events.js +145 -0
- package/dist/src/generated/waterx_account/version.d.ts +10 -0
- package/dist/src/generated/waterx_account/version.js +8 -0
- package/dist/src/generated/waterx_prediction/account_data.d.ts +321 -0
- package/dist/src/generated/waterx_prediction/account_data.js +399 -0
- package/dist/src/generated/waterx_prediction/admin.d.ts +5 -0
- package/dist/src/generated/waterx_prediction/admin.js +9 -0
- package/dist/src/generated/waterx_prediction/deps/bucket_v2_framework/linked_table.d.ts +8 -0
- package/dist/src/generated/waterx_prediction/deps/bucket_v2_framework/linked_table.js +18 -0
- package/dist/src/generated/waterx_prediction/deps/sui/balance.d.ts +10 -0
- package/dist/src/generated/waterx_prediction/deps/sui/balance.js +14 -0
- package/dist/src/generated/waterx_prediction/deps/sui/table.d.ts +24 -0
- package/dist/src/generated/waterx_prediction/deps/sui/table.js +31 -0
- package/dist/src/generated/waterx_prediction/deps/sui/vec_set.d.ts +16 -0
- package/dist/src/generated/waterx_prediction/deps/sui/vec_set.js +19 -0
- package/dist/src/generated/waterx_prediction/events.d.ts +19 -0
- package/dist/src/generated/waterx_prediction/events.js +99 -0
- package/dist/src/generated/waterx_prediction/global_config.d.ts +68 -0
- package/dist/src/generated/waterx_prediction/global_config.js +83 -0
- package/dist/src/generated/waterx_prediction/order.d.ts +170 -0
- package/dist/src/generated/waterx_prediction/order.js +237 -0
- package/dist/src/generated/waterx_prediction/outcome.d.ts +58 -0
- package/dist/src/generated/waterx_prediction/outcome.js +73 -0
- package/dist/src/generated/waterx_prediction/position.d.ts +150 -0
- package/dist/src/generated/waterx_prediction/position.js +200 -0
- package/dist/src/generated/waterx_prediction/view.d.ts +353 -0
- package/dist/src/generated/waterx_prediction/view.js +426 -0
- package/dist/src/generated/waterx_prediction/waterx_prediction.d.ts +1520 -0
- package/dist/src/generated/waterx_prediction/waterx_prediction.js +1550 -0
- package/dist/src/index.d.ts +22 -0
- package/dist/src/index.js +17 -0
- package/dist/src/prediction.d.ts +81 -0
- package/dist/src/prediction.js +220 -0
- package/dist/src/types.d.ts +81 -0
- package/dist/src/types.js +1 -0
- package/dist/src/user/account.d.ts +2 -0
- package/dist/src/user/account.js +1 -0
- package/dist/src/user/admin.d.ts +4 -0
- package/dist/src/user/admin.js +2 -0
- package/dist/src/user/index.d.ts +4 -0
- package/dist/src/user/index.js +2 -0
- package/dist/src/user/keeper.d.ts +2 -0
- package/dist/src/user/keeper.js +1 -0
- package/dist/src/user/order.d.ts +2 -0
- package/dist/src/user/order.js +1 -0
- package/dist/src/user/position.d.ts +2 -0
- package/dist/src/user/position.js +1 -0
- package/dist/src/utils/bcs.d.ts +1 -0
- package/dist/src/utils/bcs.js +1 -0
- package/dist/src/utils/index.d.ts +1 -0
- package/dist/src/utils/index.js +1 -0
- package/dist/src/utils.d.ts +29 -0
- package/dist/src/utils.js +170 -0
- package/package.json +62 -0
|
@@ -0,0 +1,170 @@
|
|
|
1
|
+
import { CLOCK_OBJECT_ID } from "./constants.js";
|
|
2
|
+
const SELECTIONS = ["YES", "NO"];
|
|
3
|
+
const OUTCOMES = ["YES", "NO", "INVALID"];
|
|
4
|
+
const U64_MAX = (1n << 64n) - 1n;
|
|
5
|
+
export function assertSelection(value) {
|
|
6
|
+
if (SELECTIONS.includes(value))
|
|
7
|
+
return value;
|
|
8
|
+
throw new Error(`Invalid Selection: expected "YES" or "NO", got ${JSON.stringify(value)}`);
|
|
9
|
+
}
|
|
10
|
+
export function assertOutcome(value) {
|
|
11
|
+
if (OUTCOMES.includes(value))
|
|
12
|
+
return value;
|
|
13
|
+
throw new Error(`Invalid Outcome: expected "YES", "NO", or "INVALID", got ${JSON.stringify(value)}`);
|
|
14
|
+
}
|
|
15
|
+
export function requireConfig(value, name) {
|
|
16
|
+
if (value === undefined || value === null || value === "") {
|
|
17
|
+
throw new Error(`${name} is required. Pass it in params or PredictClient config.`);
|
|
18
|
+
}
|
|
19
|
+
return value;
|
|
20
|
+
}
|
|
21
|
+
function resolveOptionalString(override, fallback) {
|
|
22
|
+
if (override === undefined || override === "")
|
|
23
|
+
return fallback;
|
|
24
|
+
return override;
|
|
25
|
+
}
|
|
26
|
+
export function resolvePackageId(client, packageId) {
|
|
27
|
+
return resolveOptionalString(packageId, client.config.packageId);
|
|
28
|
+
}
|
|
29
|
+
export function resolveSettlementCoinType(client, coinType) {
|
|
30
|
+
return resolveOptionalString(coinType, client.config.settlementCoinType);
|
|
31
|
+
}
|
|
32
|
+
export function resolveMarketRegistry(client, marketRegistry) {
|
|
33
|
+
return requireConfig(marketRegistry ?? client.config.marketRegistry, "marketRegistry");
|
|
34
|
+
}
|
|
35
|
+
export function resolveAccountRegistry(client, accountRegistry) {
|
|
36
|
+
return requireConfig(accountRegistry ?? client.config.accountRegistry, "accountRegistry");
|
|
37
|
+
}
|
|
38
|
+
export function resolveGlobalConfig(client, globalConfig) {
|
|
39
|
+
return requireConfig(globalConfig ?? client.config.globalConfig, "globalConfig");
|
|
40
|
+
}
|
|
41
|
+
/** Ensures `value` is a valid unsigned 64-bit integer. */
|
|
42
|
+
export function assertU64(value, name = "value") {
|
|
43
|
+
if (value < 0n) {
|
|
44
|
+
throw new Error(`${name} must be non-negative, got ${value}`);
|
|
45
|
+
}
|
|
46
|
+
if (value > U64_MAX) {
|
|
47
|
+
throw new Error(`${name} exceeds u64 max (${U64_MAX}), got ${value}`);
|
|
48
|
+
}
|
|
49
|
+
return value;
|
|
50
|
+
}
|
|
51
|
+
export function toBigInt(value) {
|
|
52
|
+
if (typeof value === "bigint") {
|
|
53
|
+
return assertU64(value);
|
|
54
|
+
}
|
|
55
|
+
if (typeof value === "number") {
|
|
56
|
+
if (!Number.isInteger(value)) {
|
|
57
|
+
throw new Error(`Invalid integer: ${value}`);
|
|
58
|
+
}
|
|
59
|
+
return assertU64(BigInt(value));
|
|
60
|
+
}
|
|
61
|
+
const trimmed = value.trim();
|
|
62
|
+
if (trimmed === "") {
|
|
63
|
+
throw new Error("Invalid integer: empty string");
|
|
64
|
+
}
|
|
65
|
+
if (!/^\d+$/.test(trimmed)) {
|
|
66
|
+
throw new Error(`Invalid integer: ${JSON.stringify(value)}`);
|
|
67
|
+
}
|
|
68
|
+
return assertU64(BigInt(trimmed));
|
|
69
|
+
}
|
|
70
|
+
export function objectArg(tx, value) {
|
|
71
|
+
return typeof value === "string" ? tx.object(value) : value;
|
|
72
|
+
}
|
|
73
|
+
export function idArg(tx, value) {
|
|
74
|
+
return typeof value === "string" ? tx.pure.id(value) : value;
|
|
75
|
+
}
|
|
76
|
+
export function clockArg(tx) {
|
|
77
|
+
return tx.object.clock ? tx.object.clock() : tx.object(CLOCK_OBJECT_ID);
|
|
78
|
+
}
|
|
79
|
+
export function createAccountRequest(client, tx, params = {}) {
|
|
80
|
+
const pkg = client.config.bucketFrameworkPackageId;
|
|
81
|
+
if (params.bucketAccount === undefined) {
|
|
82
|
+
const [request] = tx.moveCall({
|
|
83
|
+
target: `${pkg}::account::request`,
|
|
84
|
+
});
|
|
85
|
+
return request;
|
|
86
|
+
}
|
|
87
|
+
const [request] = tx.moveCall({
|
|
88
|
+
target: `${pkg}::account::request_with_account`,
|
|
89
|
+
arguments: [objectArg(tx, params.bucketAccount)],
|
|
90
|
+
});
|
|
91
|
+
return request;
|
|
92
|
+
}
|
|
93
|
+
/** Coerces on-chain `vector<u8>` shapes used in view decoding. */
|
|
94
|
+
export function marketIdBytesFromUnknown(raw) {
|
|
95
|
+
if (raw instanceof Uint8Array)
|
|
96
|
+
return raw;
|
|
97
|
+
if (Array.isArray(raw))
|
|
98
|
+
return bytesFromNumberArray(raw);
|
|
99
|
+
if (typeof raw === "string") {
|
|
100
|
+
throw new Error("market_id from chain views must be Uint8Array or number[]; strings are not supported. " +
|
|
101
|
+
"Use normalizeMarketId() when building PTBs from string market ids.");
|
|
102
|
+
}
|
|
103
|
+
throw new Error(`market_id must be Uint8Array or number[], got ${typeof raw}`);
|
|
104
|
+
}
|
|
105
|
+
function bytesFromNumberArray(marketId) {
|
|
106
|
+
const bytes = new Uint8Array(marketId.length);
|
|
107
|
+
for (let i = 0; i < marketId.length; i += 1) {
|
|
108
|
+
const byte = marketId[i];
|
|
109
|
+
if (!Number.isInteger(byte) || byte < 0 || byte > 255) {
|
|
110
|
+
throw new Error(`Invalid market id byte at index ${i}: ${byte} (expected 0-255)`);
|
|
111
|
+
}
|
|
112
|
+
bytes[i] = byte;
|
|
113
|
+
}
|
|
114
|
+
return bytes;
|
|
115
|
+
}
|
|
116
|
+
function parseHexMarketId(marketId) {
|
|
117
|
+
const hex = marketId.slice(2);
|
|
118
|
+
if (hex.length === 0) {
|
|
119
|
+
throw new Error(`Invalid hex market id: empty hex (${marketId})`);
|
|
120
|
+
}
|
|
121
|
+
if (hex.length % 2 !== 0) {
|
|
122
|
+
throw new Error(`Invalid hex market id: ${marketId}`);
|
|
123
|
+
}
|
|
124
|
+
const bytes = new Uint8Array(hex.length / 2);
|
|
125
|
+
for (let i = 0; i < bytes.length; i += 1) {
|
|
126
|
+
const pair = hex.slice(i * 2, i * 2 + 2);
|
|
127
|
+
if (!/^[0-9a-fA-F]{2}$/.test(pair)) {
|
|
128
|
+
throw new Error(`Invalid hex market id: bad nibble pair ${JSON.stringify(pair)} in ${marketId}`);
|
|
129
|
+
}
|
|
130
|
+
bytes[i] = Number.parseInt(pair, 16);
|
|
131
|
+
}
|
|
132
|
+
return bytes;
|
|
133
|
+
}
|
|
134
|
+
export function normalizeMarketId(marketId) {
|
|
135
|
+
if (marketId instanceof Uint8Array)
|
|
136
|
+
return marketId;
|
|
137
|
+
if (Array.isArray(marketId))
|
|
138
|
+
return bytesFromNumberArray(marketId);
|
|
139
|
+
if (marketId.startsWith("0x") || marketId.startsWith("0X")) {
|
|
140
|
+
return parseHexMarketId(marketId);
|
|
141
|
+
}
|
|
142
|
+
return new TextEncoder().encode(marketId);
|
|
143
|
+
}
|
|
144
|
+
export function marketIdArg(tx, marketId) {
|
|
145
|
+
return tx.pure.vector("u8", Array.from(normalizeMarketId(marketId)));
|
|
146
|
+
}
|
|
147
|
+
export function bytesToHex(bytes) {
|
|
148
|
+
const normalized = bytes instanceof Uint8Array ? bytes : bytesFromNumberArray(bytes);
|
|
149
|
+
return `0x${Array.from(normalized, (b) => b.toString(16).padStart(2, "0")).join("")}`;
|
|
150
|
+
}
|
|
151
|
+
export function optionU64(value) {
|
|
152
|
+
return (tx) => tx.pure.option("u64", value == null ? null : toBigInt(value));
|
|
153
|
+
}
|
|
154
|
+
function formatObjectVersion(version) {
|
|
155
|
+
if (typeof version === "string") {
|
|
156
|
+
const trimmed = version.trim();
|
|
157
|
+
if (trimmed === "" || !/^\d+$/.test(trimmed)) {
|
|
158
|
+
throw new Error(`Invalid object version: ${JSON.stringify(version)}`);
|
|
159
|
+
}
|
|
160
|
+
return trimmed;
|
|
161
|
+
}
|
|
162
|
+
return String(toBigInt(version));
|
|
163
|
+
}
|
|
164
|
+
export function receivingCoinArg(tx, coin) {
|
|
165
|
+
return tx.receivingRef({
|
|
166
|
+
objectId: coin.objectId,
|
|
167
|
+
version: formatObjectVersion(coin.version),
|
|
168
|
+
digest: coin.digest,
|
|
169
|
+
});
|
|
170
|
+
}
|
package/package.json
ADDED
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@waterx/predict-sdk",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"description": "WaterX prediction market SDK",
|
|
5
|
+
"license": "MIT",
|
|
6
|
+
"author": "WaterX",
|
|
7
|
+
"type": "module",
|
|
8
|
+
"main": "dist/src/index.js",
|
|
9
|
+
"types": "dist/src/index.d.ts",
|
|
10
|
+
"exports": {
|
|
11
|
+
".": {
|
|
12
|
+
"types": "./dist/src/index.d.ts",
|
|
13
|
+
"import": "./dist/src/index.js"
|
|
14
|
+
},
|
|
15
|
+
"./user": {
|
|
16
|
+
"types": "./dist/src/user/index.d.ts",
|
|
17
|
+
"import": "./dist/src/user/index.js"
|
|
18
|
+
},
|
|
19
|
+
"./user/*": {
|
|
20
|
+
"types": "./dist/src/user/*.d.ts",
|
|
21
|
+
"import": "./dist/src/user/*.js"
|
|
22
|
+
},
|
|
23
|
+
"./utils": {
|
|
24
|
+
"types": "./dist/src/utils/index.d.ts",
|
|
25
|
+
"import": "./dist/src/utils/index.js"
|
|
26
|
+
},
|
|
27
|
+
"./utils/*": {
|
|
28
|
+
"types": "./dist/src/utils/*.d.ts",
|
|
29
|
+
"import": "./dist/src/utils/*.js"
|
|
30
|
+
},
|
|
31
|
+
"./generated/*": {
|
|
32
|
+
"types": "./dist/src/generated/*.d.ts",
|
|
33
|
+
"import": "./dist/src/generated/*.js"
|
|
34
|
+
}
|
|
35
|
+
},
|
|
36
|
+
"files": [
|
|
37
|
+
"dist",
|
|
38
|
+
"LICENSE",
|
|
39
|
+
"package.json",
|
|
40
|
+
"README.md"
|
|
41
|
+
],
|
|
42
|
+
"scripts": {
|
|
43
|
+
"build": "node -e \"require('node:fs').rmSync('dist',{recursive:true,force:true})\" && tsc -p tsconfig.build.json",
|
|
44
|
+
"codegen": "cd ../waterx-contract/waterx_prediction && sui move summary && cd ../waterx_account && sui move summary && cd ../bucket_framework && sui move summary && cd ../../waterx-predict-sdk && npx sui-ts-codegen generate && node scripts/fix-generated-imports.mjs",
|
|
45
|
+
"typecheck": "tsc --noEmit",
|
|
46
|
+
"test:unit": "vitest run",
|
|
47
|
+
"prepublishOnly": "pnpm run typecheck && pnpm run test:unit && pnpm run build"
|
|
48
|
+
},
|
|
49
|
+
"publishConfig": {
|
|
50
|
+
"access": "public"
|
|
51
|
+
},
|
|
52
|
+
"dependencies": {
|
|
53
|
+
"@mysten/sui": "^2.9.1"
|
|
54
|
+
},
|
|
55
|
+
"devDependencies": {
|
|
56
|
+
"@mysten/codegen": "^0.8.3",
|
|
57
|
+
"@types/node": "^24.12.0",
|
|
58
|
+
"typescript": "^5.9.3",
|
|
59
|
+
"vitest": "^4.1.6"
|
|
60
|
+
},
|
|
61
|
+
"packageManager": "pnpm@9.15.0"
|
|
62
|
+
}
|