@kontor/kontor-sdk 1.0.0-alpha.3 → 1.0.0-alpha.5
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/src/kwit/error.js +59 -0
- package/dist/src/kwit/error.js.map +1 -0
- package/dist/src/kwit/kwit-parser/core/errors/kwit-parameter.js +29 -0
- package/dist/src/kwit/kwit-parser/core/errors/kwit-parameter.js.map +1 -0
- package/dist/src/kwit/kwit-parser/core/errors/signature.js +42 -0
- package/dist/src/kwit/kwit-parser/core/errors/signature.js.map +1 -0
- package/dist/src/kwit/kwit-parser/core/errors/splitParameters.js +18 -0
- package/dist/src/kwit/kwit-parser/core/errors/splitParameters.js.map +1 -0
- package/dist/src/kwit/kwit-parser/core/records.js +73 -0
- package/dist/src/kwit/kwit-parser/core/records.js.map +1 -0
- package/dist/src/kwit/kwit-parser/core/records.test.js +53 -0
- package/dist/src/kwit/kwit-parser/core/records.test.js.map +1 -0
- package/dist/src/kwit/kwit-parser/core/signatures.js +33 -0
- package/dist/src/kwit/kwit-parser/core/signatures.js.map +1 -0
- package/dist/src/kwit/kwit-parser/core/signatures.test.js +54 -0
- package/dist/src/kwit/kwit-parser/core/signatures.test.js.map +1 -0
- package/dist/src/kwit/kwit-parser/core/types/records.js +2 -0
- package/dist/src/kwit/kwit-parser/core/types/records.js.map +1 -0
- package/dist/src/kwit/kwit-parser/core/types/records.test-d.js +19 -0
- package/dist/src/kwit/kwit-parser/core/types/records.test-d.js.map +1 -0
- package/dist/src/kwit/kwit-parser/core/types/signatures.js +3 -0
- package/dist/src/kwit/kwit-parser/core/types/signatures.js.map +1 -0
- package/dist/src/kwit/kwit-parser/core/types/signatures.test-d.js +18 -0
- package/dist/src/kwit/kwit-parser/core/types/signatures.test-d.js.map +1 -0
- package/dist/src/kwit/kwit-parser/core/types/utils.js +2 -0
- package/dist/src/kwit/kwit-parser/core/types/utils.js.map +1 -0
- package/dist/src/kwit/kwit-parser/core/types/utils.test-d.js +159 -0
- package/dist/src/kwit/kwit-parser/core/types/utils.test-d.js.map +1 -0
- package/dist/src/kwit/kwit-parser/core/utils.js +212 -0
- package/dist/src/kwit/kwit-parser/core/utils.js.map +1 -0
- package/dist/src/kwit/kwit-parser/core/utils.test.js +302 -0
- package/dist/src/kwit/kwit-parser/core/utils.test.js.map +1 -0
- package/dist/src/kwit/kwit-parser/parse-kwit-parameter.js +26 -0
- package/dist/src/kwit/kwit-parser/parse-kwit-parameter.js.map +1 -0
- package/dist/src/kwit/kwit-parser/parse-kwit-parameter.test.js +83 -0
- package/dist/src/kwit/kwit-parser/parse-kwit-parameter.test.js.map +1 -0
- package/dist/src/kwit/kwit-parser/parse-kwit.js +16 -0
- package/dist/src/kwit/kwit-parser/parse-kwit.js.map +1 -0
- package/dist/src/kwit/kwit-parser/parse-kwit.test.js +78 -0
- package/dist/src/kwit/kwit-parser/parse-kwit.test.js.map +1 -0
- package/dist/src/kwit/kwit.js +2 -0
- package/dist/src/kwit/kwit.js.map +1 -0
- package/dist/src/kwit/kwit.test.js +9 -0
- package/dist/src/kwit/kwit.test.js.map +1 -0
- package/dist/src/kwit/narrow.js +14 -0
- package/dist/src/kwit/narrow.js.map +1 -0
- package/dist/src/kwit/regex.js +6 -0
- package/dist/src/kwit/regex.js.map +1 -0
- package/dist/src/kwit/register.js +2 -0
- package/dist/src/kwit/register.js.map +1 -0
- package/dist/src/kwit/type-utils.js +2 -0
- package/dist/src/kwit/type-utils.js.map +1 -0
- package/dist/src/kwit/utils.js +2 -0
- package/dist/src/kwit/utils.js.map +1 -0
- package/dist/src/kwit/utils.test-d.js +17 -0
- package/dist/src/kwit/utils.test-d.js.map +1 -0
- package/dist/src/kwit/version.js +2 -0
- package/dist/src/kwit/version.js.map +1 -0
- package/dist/src/sdk/actions/kontor/wallet/sign-reveal.js +19 -30
- package/dist/src/sdk/actions/kontor/wallet/sign-reveal.js.map +1 -1
- package/dist/src/sdk/actions/public/test-mempool-accept.js +1 -1
- package/dist/src/sdk/actions/public/test-mempool-accept.js.map +1 -1
- package/dist/src/sdk/clients/decorators/public.js +2 -0
- package/dist/src/sdk/clients/decorators/public.js.map +1 -1
- package/dist/src/sdk/errors/kwit.js +19 -0
- package/dist/src/sdk/errors/kwit.js.map +1 -0
- package/dist/src/sdk/test/e2e.test.js +174 -14
- package/dist/src/sdk/test/e2e.test.js.map +1 -1
- package/dist/src/sdk/utils/kwit/codecs/decimal.js +165 -0
- package/dist/src/sdk/utils/kwit/codecs/decimal.js.map +1 -0
- package/dist/src/sdk/utils/kwit/codecs/enum.js +104 -0
- package/dist/src/sdk/utils/kwit/codecs/enum.js.map +1 -0
- package/dist/src/sdk/utils/kwit/codecs/integer.js +167 -0
- package/dist/src/sdk/utils/kwit/codecs/integer.js.map +1 -0
- package/dist/src/sdk/utils/kwit/codecs/list.js +117 -0
- package/dist/src/sdk/utils/kwit/codecs/list.js.map +1 -0
- package/dist/src/sdk/utils/kwit/codecs/option.js +91 -0
- package/dist/src/sdk/utils/kwit/codecs/option.js.map +1 -0
- package/dist/src/sdk/utils/kwit/codecs/string.js +27 -0
- package/dist/src/sdk/utils/kwit/codecs/string.js.map +1 -0
- package/dist/src/sdk/utils/kwit/codecs/types.js +45 -0
- package/dist/src/sdk/utils/kwit/codecs/types.js.map +1 -0
- package/dist/src/sdk/utils/kwit/codecs/unit.js +22 -0
- package/dist/src/sdk/utils/kwit/codecs/unit.js.map +1 -0
- package/dist/src/sdk/utils/kwit/decode-function-result.js +36 -0
- package/dist/src/sdk/utils/kwit/decode-function-result.js.map +1 -0
- package/dist/src/sdk/utils/kwit/decode-kwit-parameter.js +286 -0
- package/dist/src/sdk/utils/kwit/decode-kwit-parameter.js.map +1 -0
- package/dist/src/sdk/utils/kwit/decode-kwit-parameter.test.js +75 -0
- package/dist/src/sdk/utils/kwit/decode-kwit-parameter.test.js.map +1 -0
- package/dist/src/sdk/utils/kwit/encode-function-data.js +17 -0
- package/dist/src/sdk/utils/kwit/encode-function-data.js.map +1 -0
- package/dist/src/sdk/utils/kwit/encode-function-data.test-d.js +21 -0
- package/dist/src/sdk/utils/kwit/encode-function-data.test-d.js.map +1 -0
- package/dist/src/sdk/utils/kwit/encode-function-data.test.js +91 -0
- package/dist/src/sdk/utils/kwit/encode-function-data.test.js.map +1 -0
- package/dist/src/sdk/utils/kwit/encode-kwit-parameters.js +250 -0
- package/dist/src/sdk/utils/kwit/encode-kwit-parameters.js.map +1 -0
- package/dist/src/sdk/utils/kwit/encode-kwit-parameters.test.js +62 -0
- package/dist/src/sdk/utils/kwit/encode-kwit-parameters.test.js.map +1 -0
- package/dist/src/sdk/utils/kwit/get-kwit-item.js +186 -0
- package/dist/src/sdk/utils/kwit/get-kwit-item.js.map +1 -0
- package/dist/src/sdk/utils/kwit/get-kwit-item.test.js +119 -0
- package/dist/src/sdk/utils/kwit/get-kwit-item.test.js.map +1 -0
- package/dist/src/sdk/utils/kwit/prepare-encode-function-data.js +24 -0
- package/dist/src/sdk/utils/kwit/prepare-encode-function-data.js.map +1 -0
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +1 -1
- package/src/sdk/actions/kontor/wallet/sign-reveal.ts +27 -34
- package/src/sdk/actions/public/test-mempool-accept.ts +2 -3
- package/src/sdk/clients/decorators/public.ts +11 -0
- package/src/sdk/test/e2e.test.ts +193 -15
- package/src/sdk/types/btc-rpc.ts +1 -1
|
@@ -0,0 +1,165 @@
|
|
|
1
|
+
import * as z from "zod";
|
|
2
|
+
const TARGET_SCALE = 18;
|
|
3
|
+
const U64_MAX = (1n << 64n) - 1n;
|
|
4
|
+
export const U64 = z
|
|
5
|
+
.bigint()
|
|
6
|
+
.min(0n, { message: "must be ≥ 0" })
|
|
7
|
+
.max(U64_MAX, { message: "must be ≤ 2^64-1" });
|
|
8
|
+
function pow10n(n) {
|
|
9
|
+
if (n < 0)
|
|
10
|
+
throw new Error("pow10n expects n ≥ 0");
|
|
11
|
+
let p = 1n;
|
|
12
|
+
for (let i = 0; i < n; i++)
|
|
13
|
+
p *= 10n;
|
|
14
|
+
return p;
|
|
15
|
+
}
|
|
16
|
+
// const fromLimbs = ({ r0, r1, r2, r3 }: _Decimal.T) =>
|
|
17
|
+
// (r3 << 192n) | (r2 << 128n) | (r1 << 64n) | r0;
|
|
18
|
+
function splitToU64Limbs(x) {
|
|
19
|
+
const r0 = x & U64_MAX;
|
|
20
|
+
const r1 = (x >> 64n) & U64_MAX;
|
|
21
|
+
const r2 = (x >> 128n) & U64_MAX;
|
|
22
|
+
const r3 = (x >> 192n) & U64_MAX;
|
|
23
|
+
// overflow if any higher bits remain
|
|
24
|
+
if (x >> 256n !== 0n) {
|
|
25
|
+
throw new Error("decimal magnitude does not fit in 256 bits");
|
|
26
|
+
}
|
|
27
|
+
return { r0, r1, r2, r3 };
|
|
28
|
+
}
|
|
29
|
+
export var _Decimal;
|
|
30
|
+
(function (_Decimal) {
|
|
31
|
+
let Sign;
|
|
32
|
+
(function (Sign) {
|
|
33
|
+
Sign.schema = z.enum(["plus", "minus"]);
|
|
34
|
+
})(Sign = _Decimal.Sign || (_Decimal.Sign = {}));
|
|
35
|
+
// Raw limbs + sign; limbs are real u64 (bigint), not JS numbers
|
|
36
|
+
_Decimal.schema = z.object({
|
|
37
|
+
r0: U64,
|
|
38
|
+
r1: U64,
|
|
39
|
+
r2: U64,
|
|
40
|
+
r3: U64,
|
|
41
|
+
sign: Sign.schema,
|
|
42
|
+
});
|
|
43
|
+
})(_Decimal || (_Decimal = {}));
|
|
44
|
+
/**
|
|
45
|
+
* Parses a wave-ish struct like:
|
|
46
|
+
* "{ r0: 1337, r1: 0, r2: 0, r3: 0, sign: plus }"
|
|
47
|
+
* Returns a validated _Decimal.T with bigint limbs.
|
|
48
|
+
*/
|
|
49
|
+
export function parseDecimalWaveExpr(expr) {
|
|
50
|
+
const trimmed = expr.trim();
|
|
51
|
+
// Optional braces; tolerate with or without
|
|
52
|
+
const inner = trimmed.replace(/^\{\s*/, "").replace(/\s*\}$/, "");
|
|
53
|
+
if (inner.length === 0) {
|
|
54
|
+
throw new Error("empty decimal expression");
|
|
55
|
+
}
|
|
56
|
+
// Split by commas that separate top-level pairs (no nesting expected here)
|
|
57
|
+
const parts = inner
|
|
58
|
+
.split(",")
|
|
59
|
+
.map((p) => p.trim())
|
|
60
|
+
.filter(Boolean);
|
|
61
|
+
const seen = new Set();
|
|
62
|
+
// Default r1..r3 to 0 for ergonomics; require r0 + sign at minimum.
|
|
63
|
+
let out = {
|
|
64
|
+
r1: 0n,
|
|
65
|
+
r2: 0n,
|
|
66
|
+
r3: 0n,
|
|
67
|
+
};
|
|
68
|
+
for (const part of parts) {
|
|
69
|
+
const idx = part.indexOf(":");
|
|
70
|
+
if (idx === -1) {
|
|
71
|
+
throw new Error(`expected "key: value" pair, got "${part}"`);
|
|
72
|
+
}
|
|
73
|
+
const keyRaw = part.slice(0, idx).trim();
|
|
74
|
+
const valRaw = part.slice(idx + 1).trim();
|
|
75
|
+
if (seen.has(keyRaw)) {
|
|
76
|
+
throw new Error(`duplicate key "${keyRaw}"`);
|
|
77
|
+
}
|
|
78
|
+
seen.add(keyRaw);
|
|
79
|
+
switch (keyRaw) {
|
|
80
|
+
case "r0":
|
|
81
|
+
case "r1":
|
|
82
|
+
case "r2":
|
|
83
|
+
case "r3": {
|
|
84
|
+
// allow underscores for readability, like Rust literals
|
|
85
|
+
const normalized = valRaw.replace(/_/g, "");
|
|
86
|
+
// BigInt constructor handles decimal strings; reject non-integers explicitly
|
|
87
|
+
if (!/^[+-]?\d+$/.test(normalized)) {
|
|
88
|
+
throw new Error(`invalid integer for ${keyRaw}: "${valRaw}"`);
|
|
89
|
+
}
|
|
90
|
+
const limb = BigInt(normalized);
|
|
91
|
+
// zod will re-validate bounds, but fail fast here for nicer messages
|
|
92
|
+
if (limb < 0n || limb > U64_MAX) {
|
|
93
|
+
throw new Error(`value for ${keyRaw} out of u64 range: ${valRaw}`);
|
|
94
|
+
}
|
|
95
|
+
out[keyRaw] = limb;
|
|
96
|
+
break;
|
|
97
|
+
}
|
|
98
|
+
case "sign": {
|
|
99
|
+
if (valRaw !== "plus" && valRaw !== "minus") {
|
|
100
|
+
throw new Error(`invalid sign "${valRaw}" (expected plus|minus)`);
|
|
101
|
+
}
|
|
102
|
+
out.sign = valRaw;
|
|
103
|
+
break;
|
|
104
|
+
}
|
|
105
|
+
default:
|
|
106
|
+
throw new Error(`unexpected key "${keyRaw}"`);
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
// Require at least r0 and sign (r1..r3 default to 0 if not given)
|
|
110
|
+
if (out.r0 === undefined) {
|
|
111
|
+
throw new Error(`missing required key "r0"`);
|
|
112
|
+
}
|
|
113
|
+
if (!out.sign) {
|
|
114
|
+
throw new Error(`missing required key "sign"`);
|
|
115
|
+
}
|
|
116
|
+
// Final validation & typing
|
|
117
|
+
return _Decimal.schema.parse(out);
|
|
118
|
+
}
|
|
119
|
+
class _DecimalCodec {
|
|
120
|
+
constructor(data) {
|
|
121
|
+
Object.defineProperty(this, "data", {
|
|
122
|
+
enumerable: true,
|
|
123
|
+
configurable: true,
|
|
124
|
+
writable: true,
|
|
125
|
+
value: void 0
|
|
126
|
+
});
|
|
127
|
+
this.data = data;
|
|
128
|
+
}
|
|
129
|
+
static fromJs(value, targetScale = TARGET_SCALE) {
|
|
130
|
+
// dn.Dnum is effectively [coef, decimals]
|
|
131
|
+
const [coefRaw, decs] = value;
|
|
132
|
+
const sign = coefRaw < 0n ? "minus" : "plus";
|
|
133
|
+
const coefAbs = coefRaw < 0n ? -coefRaw : coefRaw;
|
|
134
|
+
if (decs > decs) {
|
|
135
|
+
// would require rounding; be strict
|
|
136
|
+
throw new Error(`cannot downscale from ${decs} to ${targetScale} decimals without rounding`);
|
|
137
|
+
}
|
|
138
|
+
// upscale to target scale exactly
|
|
139
|
+
const scaleDelta = targetScale - decs;
|
|
140
|
+
const scaled = coefAbs * pow10n(scaleDelta);
|
|
141
|
+
const { r0, r1, r2, r3 } = splitToU64Limbs(scaled);
|
|
142
|
+
const out = _Decimal.schema.parse({ r0, r1, r2, r3, sign });
|
|
143
|
+
return new _DecimalCodec(out);
|
|
144
|
+
}
|
|
145
|
+
static fromKontor(data) {
|
|
146
|
+
return new _DecimalCodec(data);
|
|
147
|
+
}
|
|
148
|
+
static parseWave(expr) {
|
|
149
|
+
return _Decimal.schema.parse(parseDecimalWaveExpr(expr));
|
|
150
|
+
}
|
|
151
|
+
toJs() {
|
|
152
|
+
const mag = (BigInt(this.data.r3) << 192n) |
|
|
153
|
+
(BigInt(this.data.r2) << 128n) |
|
|
154
|
+
(BigInt(this.data.r1) << 64n) |
|
|
155
|
+
BigInt(this.data.r0);
|
|
156
|
+
const signed = this.data.sign === "minus" ? -mag : mag;
|
|
157
|
+
return [signed, 18];
|
|
158
|
+
}
|
|
159
|
+
toWave() {
|
|
160
|
+
// NOTE: adjust quoting on sign if your Wave syntax needs `"plus"` etc.
|
|
161
|
+
return `{r0: ${this.data.r0}, r1: ${this.data.r1}, r2: ${this.data.r2}, r3: ${this.data.r3}, sign: ${this.data.sign}}`;
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
export const DecimalCodec = _DecimalCodec;
|
|
165
|
+
//# sourceMappingURL=decimal.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"decimal.js","sourceRoot":"","sources":["../../../../../../src/sdk/utils/kwit/codecs/decimal.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
import * as z from "zod";
|
|
2
|
+
export var Enum;
|
|
3
|
+
(function (Enum) {
|
|
4
|
+
let Parens;
|
|
5
|
+
(function (Parens) {
|
|
6
|
+
Parens.schema = z.templateLiteral([
|
|
7
|
+
z.literal("("),
|
|
8
|
+
z.string(),
|
|
9
|
+
z.literal(")"),
|
|
10
|
+
]);
|
|
11
|
+
})(Parens = Enum.Parens || (Enum.Parens = {}));
|
|
12
|
+
let Option;
|
|
13
|
+
(function (Option) {
|
|
14
|
+
// some(foo) or some( foo bar ) or even some()
|
|
15
|
+
// also allow just "some" ??? we'll decide below.
|
|
16
|
+
Option.waveRegex = /^(?<kind>some)(?:\((?<value>[\s\S]*?)\))$|^(?<none>none)$/;
|
|
17
|
+
// We'll keep these tiny sub-schemas because they're readable elsewhere.
|
|
18
|
+
let None;
|
|
19
|
+
(function (None) {
|
|
20
|
+
None.schema = z.literal("none");
|
|
21
|
+
})(None = Option.None || (Option.None = {}));
|
|
22
|
+
let Some;
|
|
23
|
+
(function (Some) {
|
|
24
|
+
// NOTE: we REQUIRE parens for "some(...)"
|
|
25
|
+
// If you want plain "some" to be valid, we could relax later.
|
|
26
|
+
Some.schema = z.templateLiteral([
|
|
27
|
+
z.literal("some"),
|
|
28
|
+
Parens.schema,
|
|
29
|
+
]);
|
|
30
|
+
})(Some = Option.Some || (Option.Some = {}));
|
|
31
|
+
// Raw union of the spellings we accept as input
|
|
32
|
+
// e.g. "none" or "some(<stuff>)"
|
|
33
|
+
const rawSchema = z.union([None.schema, Some.schema]);
|
|
34
|
+
// Transform raw string -> { kind: "none" | "some"; value: string | null }
|
|
35
|
+
// Then pipe into a discriminated union so .infer<> is nice & strict.
|
|
36
|
+
Option.schema = rawSchema
|
|
37
|
+
.transform((expr) => {
|
|
38
|
+
const trimmed = expr.trim();
|
|
39
|
+
// Fast path for "none"
|
|
40
|
+
if (trimmed === "none") {
|
|
41
|
+
return {
|
|
42
|
+
kind: "none",
|
|
43
|
+
};
|
|
44
|
+
}
|
|
45
|
+
// else parse "some(...)"
|
|
46
|
+
const match = /^some\((?<value>[\s\S]*?)\)$/.exec(trimmed);
|
|
47
|
+
if (!match?.groups) {
|
|
48
|
+
throw new Error(`invariant: invalid wave option expression: ${expr}`);
|
|
49
|
+
}
|
|
50
|
+
const value = match.groups.value?.trim() ?? "";
|
|
51
|
+
return {
|
|
52
|
+
kind: "some",
|
|
53
|
+
value: value === "" ? null : value,
|
|
54
|
+
};
|
|
55
|
+
})
|
|
56
|
+
.pipe(z.discriminatedUnion("kind", [
|
|
57
|
+
z.object({
|
|
58
|
+
kind: z.literal("none"),
|
|
59
|
+
}),
|
|
60
|
+
z.object({
|
|
61
|
+
kind: z.literal("some"),
|
|
62
|
+
value: z.string().nullable(), // raw value contents or null (for `some()`)
|
|
63
|
+
}),
|
|
64
|
+
]));
|
|
65
|
+
})(Option = Enum.Option || (Enum.Option = {}));
|
|
66
|
+
let Result;
|
|
67
|
+
(function (Result) {
|
|
68
|
+
Result.waveRegex = /^(?<_tag>ok|err)(?:\((?<value>[\s\S]*?)\))?$/;
|
|
69
|
+
let Ok;
|
|
70
|
+
(function (Ok) {
|
|
71
|
+
Ok.schema = z.literal("ok");
|
|
72
|
+
})(Ok = Result.Ok || (Result.Ok = {}));
|
|
73
|
+
let Err;
|
|
74
|
+
(function (Err) {
|
|
75
|
+
Err.schema = z.literal("err");
|
|
76
|
+
})(Err = Result.Err || (Result.Err = {}));
|
|
77
|
+
Result.schema = z
|
|
78
|
+
.templateLiteral([
|
|
79
|
+
z.union([Ok.schema, Err.schema]),
|
|
80
|
+
Parens.schema.optional(),
|
|
81
|
+
])
|
|
82
|
+
.transform((expr) => {
|
|
83
|
+
const match = Result.waveRegex.exec(expr.trim());
|
|
84
|
+
if (!match?.groups) {
|
|
85
|
+
throw new Error(`invariant: invalid wave expression: ${expr}`);
|
|
86
|
+
}
|
|
87
|
+
const { _tag, value } = match.groups;
|
|
88
|
+
return { _tag, value: value?.trim() || null };
|
|
89
|
+
})
|
|
90
|
+
.pipe(
|
|
91
|
+
// lock the output into a discriminated union so z.infer<> is nice
|
|
92
|
+
z.discriminatedUnion("_tag", [
|
|
93
|
+
z.object({
|
|
94
|
+
_tag: Ok.schema, // "ok"
|
|
95
|
+
value: z.string().nullable(), // raw value text (we haven't parsed r0..sign here)
|
|
96
|
+
}),
|
|
97
|
+
z.object({
|
|
98
|
+
_tag: Err.schema, // "err"
|
|
99
|
+
value: z.string().nullable(), // err(message("...")) -> 'message("...")' or null
|
|
100
|
+
}),
|
|
101
|
+
]));
|
|
102
|
+
})(Result = Enum.Result || (Enum.Result = {}));
|
|
103
|
+
})(Enum || (Enum = {}));
|
|
104
|
+
//# sourceMappingURL=enum.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"enum.js","sourceRoot":"","sources":["../../../../../../src/sdk/utils/kwit/codecs/enum.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,167 @@
|
|
|
1
|
+
// integer.ts
|
|
2
|
+
// TODO: i may want to simplify this later
|
|
3
|
+
//
|
|
4
|
+
import * as z from "zod";
|
|
5
|
+
const U64_MAX = (1n << 64n) - 1n;
|
|
6
|
+
export const U64 = z
|
|
7
|
+
.bigint()
|
|
8
|
+
.min(0n, { message: "must be ≥ 0" })
|
|
9
|
+
.max(U64_MAX, { message: "must be ≤ 2^64-1" });
|
|
10
|
+
export function parseIntegerWaveExpr(expr) {
|
|
11
|
+
const inner = expr
|
|
12
|
+
.trim()
|
|
13
|
+
.replace(/^\{\s*/, "")
|
|
14
|
+
.replace(/\s*\}$/, "");
|
|
15
|
+
if (!inner)
|
|
16
|
+
throw new Error("empty integer expression");
|
|
17
|
+
const parts = inner
|
|
18
|
+
.split(",")
|
|
19
|
+
.map((p) => p.trim())
|
|
20
|
+
.filter(Boolean);
|
|
21
|
+
const seen = new Set();
|
|
22
|
+
// Default middle limbs to 0 for ergonomics; require r0 + sign.
|
|
23
|
+
let out = {
|
|
24
|
+
r1: 0n,
|
|
25
|
+
r2: 0n,
|
|
26
|
+
r3: 0n,
|
|
27
|
+
};
|
|
28
|
+
for (const part of parts) {
|
|
29
|
+
const idx = part.indexOf(":");
|
|
30
|
+
if (idx === -1) {
|
|
31
|
+
throw new Error(`expected "key: value", got "${part}"`);
|
|
32
|
+
}
|
|
33
|
+
const keyRaw = part.slice(0, idx).trim();
|
|
34
|
+
const valRaw = part.slice(idx + 1).trim();
|
|
35
|
+
if (seen.has(keyRaw))
|
|
36
|
+
throw new Error(`duplicate key "${keyRaw}"`);
|
|
37
|
+
seen.add(keyRaw);
|
|
38
|
+
switch (keyRaw) {
|
|
39
|
+
case "r0":
|
|
40
|
+
case "r1":
|
|
41
|
+
case "r2":
|
|
42
|
+
case "r3": {
|
|
43
|
+
const normalized = valRaw.replace(/_/g, "");
|
|
44
|
+
if (!/^[+-]?\d+$/.test(normalized)) {
|
|
45
|
+
throw new Error(`invalid integer for ${keyRaw}: "${valRaw}"`);
|
|
46
|
+
}
|
|
47
|
+
const limb = BigInt(normalized);
|
|
48
|
+
if (limb < 0n || limb > U64_MAX) {
|
|
49
|
+
throw new Error(`value for ${keyRaw} out of u64 range: ${valRaw}`);
|
|
50
|
+
}
|
|
51
|
+
out[keyRaw] = limb;
|
|
52
|
+
break;
|
|
53
|
+
}
|
|
54
|
+
case "sign": {
|
|
55
|
+
if (valRaw !== "plus" && valRaw !== "minus") {
|
|
56
|
+
throw new Error(`invalid sign "${valRaw}" (expected plus|minus)`);
|
|
57
|
+
}
|
|
58
|
+
out.sign = valRaw;
|
|
59
|
+
break;
|
|
60
|
+
}
|
|
61
|
+
default:
|
|
62
|
+
throw new Error(`unexpected key "${keyRaw}"`);
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
if (out.r0 === undefined)
|
|
66
|
+
throw new Error(`missing required key "r0"`);
|
|
67
|
+
if (!out.sign)
|
|
68
|
+
throw new Error(`missing required key "sign"`);
|
|
69
|
+
return _Integer.schema.parse(out);
|
|
70
|
+
}
|
|
71
|
+
// function parseIntegerWaveExpr(expr: string): _IntegerRaw.T {
|
|
72
|
+
// // strip { ... }
|
|
73
|
+
// const inner = expr.trim().replace(/^\{|\}$/g, "");
|
|
74
|
+
//
|
|
75
|
+
// // split at commas at top level
|
|
76
|
+
// // e.g. ["r0: 1337", "r1: 0", "r2: 0", "r3: 0", "sign: Plus"]
|
|
77
|
+
// const parts = inner.split(",").map((p) => p.trim());
|
|
78
|
+
//
|
|
79
|
+
// const out: any = {};
|
|
80
|
+
// for (const part of parts) {
|
|
81
|
+
// const [keyRaw, valRaw] = part.split(":").map((s) => s.trim());
|
|
82
|
+
//
|
|
83
|
+
// if (
|
|
84
|
+
// keyRaw === "r0" ||
|
|
85
|
+
// keyRaw === "r1" ||
|
|
86
|
+
// keyRaw === "r2" ||
|
|
87
|
+
// keyRaw === "r3"
|
|
88
|
+
// ) {
|
|
89
|
+
// out[keyRaw] = Number(valRaw);
|
|
90
|
+
// continue;
|
|
91
|
+
// }
|
|
92
|
+
//
|
|
93
|
+
// if (keyRaw === "sign") {
|
|
94
|
+
// if (valRaw !== "Plus" && valRaw !== "Minus") {
|
|
95
|
+
// throw new Error(`invalid sign '${valRaw}' in ${expr}`);
|
|
96
|
+
// }
|
|
97
|
+
// out.sign = valRaw;
|
|
98
|
+
// continue;
|
|
99
|
+
// }
|
|
100
|
+
//
|
|
101
|
+
// throw new Error(`unexpected key '${keyRaw}' in ${expr}`);
|
|
102
|
+
// }
|
|
103
|
+
//
|
|
104
|
+
// // validate with zod, return typed
|
|
105
|
+
// return _IntegerRaw.schema.parse(out);
|
|
106
|
+
// }
|
|
107
|
+
export var _Integer;
|
|
108
|
+
(function (_Integer) {
|
|
109
|
+
let Sign;
|
|
110
|
+
(function (Sign) {
|
|
111
|
+
Sign.schema = z.enum(["plus", "minus"]);
|
|
112
|
+
})(Sign = _Integer.Sign || (_Integer.Sign = {}));
|
|
113
|
+
_Integer.schema = z.object({
|
|
114
|
+
r0: U64,
|
|
115
|
+
r1: U64,
|
|
116
|
+
r2: U64,
|
|
117
|
+
r3: U64,
|
|
118
|
+
sign: Sign.schema,
|
|
119
|
+
});
|
|
120
|
+
})(_Integer || (_Integer = {}));
|
|
121
|
+
// --- IntegerCodec ------------------------------------------------
|
|
122
|
+
// Instance class: represents one integer value in limb/sign form,
|
|
123
|
+
// and can render toWave() / toJs().
|
|
124
|
+
class _IntegerCodec {
|
|
125
|
+
constructor(data) {
|
|
126
|
+
Object.defineProperty(this, "data", {
|
|
127
|
+
enumerable: true,
|
|
128
|
+
configurable: true,
|
|
129
|
+
writable: true,
|
|
130
|
+
value: void 0
|
|
131
|
+
});
|
|
132
|
+
this.data = data;
|
|
133
|
+
}
|
|
134
|
+
static fromJs(value) {
|
|
135
|
+
let v = BigInt(value);
|
|
136
|
+
const sign = v < 0n ? "minus" : "plus";
|
|
137
|
+
if (v < 0n)
|
|
138
|
+
v = -v;
|
|
139
|
+
// break absolute value into four 32-bit limbs (little-endian style)
|
|
140
|
+
const mask32 = (1n << 32n) - 1n;
|
|
141
|
+
const r0 = v & mask32;
|
|
142
|
+
const r1 = (v >> 32n) & mask32;
|
|
143
|
+
const r2 = (v >> 64n) & mask32;
|
|
144
|
+
const r3 = (v >> 96n) & mask32;
|
|
145
|
+
return new _IntegerCodec({ r0, r1, r2, r3, sign });
|
|
146
|
+
}
|
|
147
|
+
static fromKontor(data) {
|
|
148
|
+
return new _IntegerCodec(data);
|
|
149
|
+
}
|
|
150
|
+
static parseWave(expr) {
|
|
151
|
+
return _Integer.schema.parse(parseIntegerWaveExpr(expr));
|
|
152
|
+
}
|
|
153
|
+
// instance -> WaveExpr
|
|
154
|
+
toWave() {
|
|
155
|
+
return `{r0: ${this.data.r0}, r1: ${this.data.r1}, r2: ${this.data.r2}, r3: ${this.data.r3}, sign: ${this.data.sign}}`;
|
|
156
|
+
}
|
|
157
|
+
// instance -> JS bigint
|
|
158
|
+
toJs() {
|
|
159
|
+
const value = (BigInt(this.data.r3) << 96n) |
|
|
160
|
+
(BigInt(this.data.r2) << 64n) |
|
|
161
|
+
(BigInt(this.data.r1) << 32n) |
|
|
162
|
+
BigInt(this.data.r0);
|
|
163
|
+
return this.data.sign === "minus" ? -value : value;
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
export const IntegerCodec = _IntegerCodec;
|
|
167
|
+
//# sourceMappingURL=integer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"integer.js","sourceRoot":"","sources":["../../../../../../src/sdk/utils/kwit/codecs/integer.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Instance that represents a decoded list<Inner> value.
|
|
3
|
+
*
|
|
4
|
+
* Generic parameterization is on the *inner codec constructor* so that
|
|
5
|
+
* the JS type of this list instance is always ListJs<CodecJs<InnerC>>.
|
|
6
|
+
*/
|
|
7
|
+
export class ListCodecFactory {
|
|
8
|
+
constructor(innerCodec, data) {
|
|
9
|
+
Object.defineProperty(this, "innerCodec", {
|
|
10
|
+
enumerable: true,
|
|
11
|
+
configurable: true,
|
|
12
|
+
writable: true,
|
|
13
|
+
value: innerCodec
|
|
14
|
+
});
|
|
15
|
+
Object.defineProperty(this, "data", {
|
|
16
|
+
enumerable: true,
|
|
17
|
+
configurable: true,
|
|
18
|
+
writable: true,
|
|
19
|
+
value: data
|
|
20
|
+
});
|
|
21
|
+
}
|
|
22
|
+
toWave() {
|
|
23
|
+
// Convert array of inner wave expressions back to array syntax
|
|
24
|
+
const innerWaves = this.data.join(", ");
|
|
25
|
+
return `[${innerWaves}]`;
|
|
26
|
+
}
|
|
27
|
+
toJs() {
|
|
28
|
+
// Decode each element using the inner codec
|
|
29
|
+
return this.data.map((innerWave) => {
|
|
30
|
+
// 1) parse inner WaveExpr → inner WaveData
|
|
31
|
+
const innerWaveData = this.innerCodec.parseWave(innerWave);
|
|
32
|
+
// 2) WaveData → inner instance
|
|
33
|
+
const innerInst = this.innerCodec.fromKontor(innerWaveData);
|
|
34
|
+
// 3) instance → JS
|
|
35
|
+
return innerInst.toJs();
|
|
36
|
+
});
|
|
37
|
+
}
|
|
38
|
+
// ----- Static factory to build a typed list<T> codec constructor -----
|
|
39
|
+
static create(innerCodec) {
|
|
40
|
+
// Class expression implements the static methods required by CodecConstructor
|
|
41
|
+
class ListCodecClass {
|
|
42
|
+
constructor(data) {
|
|
43
|
+
// Internally forward all instance behavior to ListCodecFactory
|
|
44
|
+
Object.defineProperty(this, "_impl", {
|
|
45
|
+
enumerable: true,
|
|
46
|
+
configurable: true,
|
|
47
|
+
writable: true,
|
|
48
|
+
value: void 0
|
|
49
|
+
});
|
|
50
|
+
this._impl = new ListCodecFactory(innerCodec, data);
|
|
51
|
+
}
|
|
52
|
+
toWave() {
|
|
53
|
+
return this._impl.toWave();
|
|
54
|
+
}
|
|
55
|
+
toJs() {
|
|
56
|
+
return this._impl.toJs();
|
|
57
|
+
}
|
|
58
|
+
// ----- Static methods required by CodecConstructor -----
|
|
59
|
+
static fromJs(value) {
|
|
60
|
+
// Convert JS array to array of wave expressions
|
|
61
|
+
const waveArray = value.map((item) => {
|
|
62
|
+
const innerInst = innerCodec.fromJs(item);
|
|
63
|
+
return innerInst.toWave();
|
|
64
|
+
});
|
|
65
|
+
return new ListCodecClass(waveArray);
|
|
66
|
+
}
|
|
67
|
+
static fromKontor(data) {
|
|
68
|
+
return new ListCodecClass(data);
|
|
69
|
+
}
|
|
70
|
+
static parseWave(expr) {
|
|
71
|
+
// Parse array syntax: "[item1, item2, ...]"
|
|
72
|
+
const trimmed = expr.trim();
|
|
73
|
+
// Empty array
|
|
74
|
+
if (trimmed === "[]") {
|
|
75
|
+
return [];
|
|
76
|
+
}
|
|
77
|
+
// Remove brackets
|
|
78
|
+
if (!trimmed.startsWith("[") || !trimmed.endsWith("]")) {
|
|
79
|
+
throw new Error(`Expected array syntax [...], got: ${expr}`);
|
|
80
|
+
}
|
|
81
|
+
const inner = trimmed.slice(1, -1).trim();
|
|
82
|
+
if (inner === "") {
|
|
83
|
+
return [];
|
|
84
|
+
}
|
|
85
|
+
// Split by commas at the top level (respecting nested structures)
|
|
86
|
+
const items = [];
|
|
87
|
+
let depth = 0;
|
|
88
|
+
let current = "";
|
|
89
|
+
for (let i = 0; i < inner.length; i++) {
|
|
90
|
+
const char = inner[i];
|
|
91
|
+
if (char === "{" || char === "[" || char === "(") {
|
|
92
|
+
depth++;
|
|
93
|
+
current += char;
|
|
94
|
+
}
|
|
95
|
+
else if (char === "}" || char === "]" || char === ")") {
|
|
96
|
+
depth--;
|
|
97
|
+
current += char;
|
|
98
|
+
}
|
|
99
|
+
else if (char === "," && depth === 0) {
|
|
100
|
+
items.push(current.trim());
|
|
101
|
+
current = "";
|
|
102
|
+
}
|
|
103
|
+
else {
|
|
104
|
+
current += char;
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
// Add last item
|
|
108
|
+
if (current.trim()) {
|
|
109
|
+
items.push(current.trim());
|
|
110
|
+
}
|
|
111
|
+
return items;
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
return ListCodecClass;
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
//# sourceMappingURL=list.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"list.js","sourceRoot":"","sources":["../../../../../../src/sdk/utils/kwit/codecs/list.ts"],"names":[],"mappings":"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"}
|