@kontor/kontor-sdk 1.0.0-alpha.1 → 1.0.0-alpha.4

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.
Files changed (113) hide show
  1. package/dist/src/kwit/error.js +59 -0
  2. package/dist/src/kwit/error.js.map +1 -0
  3. package/dist/src/kwit/kwit-parser/core/errors/kwit-parameter.js +29 -0
  4. package/dist/src/kwit/kwit-parser/core/errors/kwit-parameter.js.map +1 -0
  5. package/dist/src/kwit/kwit-parser/core/errors/signature.js +42 -0
  6. package/dist/src/kwit/kwit-parser/core/errors/signature.js.map +1 -0
  7. package/dist/src/kwit/kwit-parser/core/errors/splitParameters.js +18 -0
  8. package/dist/src/kwit/kwit-parser/core/errors/splitParameters.js.map +1 -0
  9. package/dist/src/kwit/kwit-parser/core/records.js +73 -0
  10. package/dist/src/kwit/kwit-parser/core/records.js.map +1 -0
  11. package/dist/src/kwit/kwit-parser/core/records.test.js +53 -0
  12. package/dist/src/kwit/kwit-parser/core/records.test.js.map +1 -0
  13. package/dist/src/kwit/kwit-parser/core/signatures.js +33 -0
  14. package/dist/src/kwit/kwit-parser/core/signatures.js.map +1 -0
  15. package/dist/src/kwit/kwit-parser/core/signatures.test.js +54 -0
  16. package/dist/src/kwit/kwit-parser/core/signatures.test.js.map +1 -0
  17. package/dist/src/kwit/kwit-parser/core/types/records.js +2 -0
  18. package/dist/src/kwit/kwit-parser/core/types/records.js.map +1 -0
  19. package/dist/src/kwit/kwit-parser/core/types/records.test-d.js +19 -0
  20. package/dist/src/kwit/kwit-parser/core/types/records.test-d.js.map +1 -0
  21. package/dist/src/kwit/kwit-parser/core/types/signatures.js +3 -0
  22. package/dist/src/kwit/kwit-parser/core/types/signatures.js.map +1 -0
  23. package/dist/src/kwit/kwit-parser/core/types/signatures.test-d.js +18 -0
  24. package/dist/src/kwit/kwit-parser/core/types/signatures.test-d.js.map +1 -0
  25. package/dist/src/kwit/kwit-parser/core/types/utils.js +2 -0
  26. package/dist/src/kwit/kwit-parser/core/types/utils.js.map +1 -0
  27. package/dist/src/kwit/kwit-parser/core/types/utils.test-d.js +159 -0
  28. package/dist/src/kwit/kwit-parser/core/types/utils.test-d.js.map +1 -0
  29. package/dist/src/kwit/kwit-parser/core/utils.js +212 -0
  30. package/dist/src/kwit/kwit-parser/core/utils.js.map +1 -0
  31. package/dist/src/kwit/kwit-parser/core/utils.test.js +302 -0
  32. package/dist/src/kwit/kwit-parser/core/utils.test.js.map +1 -0
  33. package/dist/src/kwit/kwit-parser/parse-kwit-parameter.js +26 -0
  34. package/dist/src/kwit/kwit-parser/parse-kwit-parameter.js.map +1 -0
  35. package/dist/src/kwit/kwit-parser/parse-kwit-parameter.test.js +83 -0
  36. package/dist/src/kwit/kwit-parser/parse-kwit-parameter.test.js.map +1 -0
  37. package/dist/src/kwit/kwit-parser/parse-kwit.js +16 -0
  38. package/dist/src/kwit/kwit-parser/parse-kwit.js.map +1 -0
  39. package/dist/src/kwit/kwit-parser/parse-kwit.test.js +78 -0
  40. package/dist/src/kwit/kwit-parser/parse-kwit.test.js.map +1 -0
  41. package/dist/src/kwit/kwit.js +2 -0
  42. package/dist/src/kwit/kwit.js.map +1 -0
  43. package/dist/src/kwit/kwit.test.js +9 -0
  44. package/dist/src/kwit/kwit.test.js.map +1 -0
  45. package/dist/src/kwit/narrow.js +14 -0
  46. package/dist/src/kwit/narrow.js.map +1 -0
  47. package/dist/src/kwit/regex.js +6 -0
  48. package/dist/src/kwit/regex.js.map +1 -0
  49. package/dist/src/kwit/register.js +2 -0
  50. package/dist/src/kwit/register.js.map +1 -0
  51. package/dist/src/kwit/type-utils.js +2 -0
  52. package/dist/src/kwit/type-utils.js.map +1 -0
  53. package/dist/src/kwit/utils.js +2 -0
  54. package/dist/src/kwit/utils.js.map +1 -0
  55. package/dist/src/kwit/utils.test-d.js +17 -0
  56. package/dist/src/kwit/utils.test-d.js.map +1 -0
  57. package/dist/src/kwit/version.js +2 -0
  58. package/dist/src/kwit/version.js.map +1 -0
  59. package/dist/src/sdk/actions/kontor/wallet/sign-reveal.js +0 -3
  60. package/dist/src/sdk/actions/kontor/wallet/sign-reveal.js.map +1 -1
  61. package/dist/src/sdk/actions/public/test-mempool-accept.js +8 -32
  62. package/dist/src/sdk/actions/public/test-mempool-accept.js.map +1 -1
  63. package/dist/src/sdk/clients/decorators/public.js +2 -0
  64. package/dist/src/sdk/clients/decorators/public.js.map +1 -1
  65. package/dist/src/sdk/errors/kwit.js +19 -0
  66. package/dist/src/sdk/errors/kwit.js.map +1 -0
  67. package/dist/src/sdk/test/e2e.test.js +27 -6
  68. package/dist/src/sdk/test/e2e.test.js.map +1 -1
  69. package/dist/src/sdk/utils/kwit/codecs/decimal.js +165 -0
  70. package/dist/src/sdk/utils/kwit/codecs/decimal.js.map +1 -0
  71. package/dist/src/sdk/utils/kwit/codecs/enum.js +104 -0
  72. package/dist/src/sdk/utils/kwit/codecs/enum.js.map +1 -0
  73. package/dist/src/sdk/utils/kwit/codecs/integer.js +167 -0
  74. package/dist/src/sdk/utils/kwit/codecs/integer.js.map +1 -0
  75. package/dist/src/sdk/utils/kwit/codecs/list.js +117 -0
  76. package/dist/src/sdk/utils/kwit/codecs/list.js.map +1 -0
  77. package/dist/src/sdk/utils/kwit/codecs/option.js +91 -0
  78. package/dist/src/sdk/utils/kwit/codecs/option.js.map +1 -0
  79. package/dist/src/sdk/utils/kwit/codecs/string.js +27 -0
  80. package/dist/src/sdk/utils/kwit/codecs/string.js.map +1 -0
  81. package/dist/src/sdk/utils/kwit/codecs/types.js +45 -0
  82. package/dist/src/sdk/utils/kwit/codecs/types.js.map +1 -0
  83. package/dist/src/sdk/utils/kwit/codecs/unit.js +22 -0
  84. package/dist/src/sdk/utils/kwit/codecs/unit.js.map +1 -0
  85. package/dist/src/sdk/utils/kwit/decode-function-result.js +36 -0
  86. package/dist/src/sdk/utils/kwit/decode-function-result.js.map +1 -0
  87. package/dist/src/sdk/utils/kwit/decode-kwit-parameter.js +286 -0
  88. package/dist/src/sdk/utils/kwit/decode-kwit-parameter.js.map +1 -0
  89. package/dist/src/sdk/utils/kwit/decode-kwit-parameter.test.js +75 -0
  90. package/dist/src/sdk/utils/kwit/decode-kwit-parameter.test.js.map +1 -0
  91. package/dist/src/sdk/utils/kwit/encode-function-data.js +17 -0
  92. package/dist/src/sdk/utils/kwit/encode-function-data.js.map +1 -0
  93. package/dist/src/sdk/utils/kwit/encode-function-data.test-d.js +21 -0
  94. package/dist/src/sdk/utils/kwit/encode-function-data.test-d.js.map +1 -0
  95. package/dist/src/sdk/utils/kwit/encode-function-data.test.js +91 -0
  96. package/dist/src/sdk/utils/kwit/encode-function-data.test.js.map +1 -0
  97. package/dist/src/sdk/utils/kwit/encode-kwit-parameters.js +250 -0
  98. package/dist/src/sdk/utils/kwit/encode-kwit-parameters.js.map +1 -0
  99. package/dist/src/sdk/utils/kwit/encode-kwit-parameters.test.js +62 -0
  100. package/dist/src/sdk/utils/kwit/encode-kwit-parameters.test.js.map +1 -0
  101. package/dist/src/sdk/utils/kwit/get-kwit-item.js +186 -0
  102. package/dist/src/sdk/utils/kwit/get-kwit-item.js.map +1 -0
  103. package/dist/src/sdk/utils/kwit/get-kwit-item.test.js +119 -0
  104. package/dist/src/sdk/utils/kwit/get-kwit-item.test.js.map +1 -0
  105. package/dist/src/sdk/utils/kwit/prepare-encode-function-data.js +24 -0
  106. package/dist/src/sdk/utils/kwit/prepare-encode-function-data.js.map +1 -0
  107. package/dist/tsconfig.tsbuildinfo +1 -1
  108. package/package.json +6 -2
  109. package/src/sdk/actions/kontor/wallet/sign-reveal.ts +0 -4
  110. package/src/sdk/actions/public/test-mempool-accept.ts +34 -31
  111. package/src/sdk/clients/decorators/public.ts +11 -0
  112. package/src/sdk/test/e2e.test.ts +31 -6
  113. package/src/sdk/types/btc-rpc.ts +12 -11
@@ -0,0 +1,250 @@
1
+ import { InvalidKwitEncodingTypeError, KwitEncodingLengthMismatchError, } from "../../errors/kwit.js";
2
+ import { DecimalCodec } from "./codecs/decimal.js";
3
+ import { IntegerCodec } from "./codecs/integer.js";
4
+ import { ListCodecFactory } from "./codecs/list.js";
5
+ import { OptionCodecFactory } from "./codecs/option.js";
6
+ import { StringCodec } from "./codecs/string.js";
7
+ export function encodeKwitParameters(params, values) {
8
+ if (params.length !== values.length)
9
+ throw new KwitEncodingLengthMismatchError({
10
+ expectedLength: params.length,
11
+ givenLength: values.length,
12
+ });
13
+ const preparedParams = prepareParams({
14
+ params: params,
15
+ values: values,
16
+ });
17
+ const encoded = encodeParams(preparedParams);
18
+ return encoded;
19
+ }
20
+ function prepareParams({ params, values, }) {
21
+ const preparedParams = [];
22
+ for (let i = 0; i < params.length; i++) {
23
+ preparedParams.push(prepareParam({ param: params[i], value: values[i] }));
24
+ }
25
+ return preparedParams;
26
+ }
27
+ function prepareParam({ param, value, }) {
28
+ // TODO: this is a little smelly
29
+ const isOption = getOptionComponent(param.type);
30
+ if (isOption) {
31
+ const type = param.type;
32
+ switch (type) {
33
+ case "option<bool>":
34
+ // No BoolCodec yet – fail loudly for now.
35
+ // TODO: change to list speci,fic error
36
+ throw new InvalidKwitEncodingTypeError(param.type, {
37
+ docsPath: "tk",
38
+ });
39
+ case "option<string>": {
40
+ return {
41
+ encoded: OptionCodecFactory.create(StringCodec)
42
+ .fromJs(value)
43
+ .toWave(),
44
+ };
45
+ }
46
+ case "option<integer>": {
47
+ return {
48
+ encoded: OptionCodecFactory.create(IntegerCodec)
49
+ .fromJs(value)
50
+ .toWave(),
51
+ };
52
+ }
53
+ case "option<decimal>": {
54
+ return {
55
+ encoded: OptionCodecFactory.create(DecimalCodec)
56
+ .fromJs(value)
57
+ .toWave(),
58
+ };
59
+ }
60
+ // signed ints
61
+ case "option<s8>":
62
+ case "option<s16>":
63
+ case "option<s32>":
64
+ case "option<s64>":
65
+ // TODO: wire up once you have a signed-int codec
66
+ throw new InvalidKwitEncodingTypeError(param.type, {
67
+ docsPath: "tk",
68
+ });
69
+ // unsigned ints
70
+ case "option<u8>":
71
+ case "option<u16>":
72
+ case "option<u32>":
73
+ case "option<u64>":
74
+ // TODO: wire up once you have an unsigned-int codec
75
+ throw new InvalidKwitEncodingTypeError(param.type, {
76
+ docsPath: "tk",
77
+ });
78
+ // tuples
79
+ case "option<tuple>":
80
+ // TODO: OptionCodecFactory.create(TupleCodec) once it exists
81
+ throw new InvalidKwitEncodingTypeError(param.type, {
82
+ docsPath: "tk",
83
+ });
84
+ default: {
85
+ // exhaustiveness guard – if KwitOption ever gains a new member,
86
+ // this will start failing at compile time until you add a case.
87
+ // @ts-ignore
88
+ const _exhaustive = type;
89
+ throw new InvalidKwitEncodingTypeError(param.type, {
90
+ docsPath: "tk",
91
+ });
92
+ }
93
+ }
94
+ }
95
+ const isList = getListComponents(param.type);
96
+ if (isList) {
97
+ const type = param.type;
98
+ switch (type) {
99
+ case "list<bool>":
100
+ // No BoolCodec yet – fail loudly for now.
101
+ // TODO: change to list speci,fic error
102
+ throw new InvalidKwitEncodingTypeError(param.type, {
103
+ docsPath: "tk",
104
+ });
105
+ case "list<string>": {
106
+ return {
107
+ encoded: ListCodecFactory.create(StringCodec)
108
+ .fromJs(value)
109
+ .toWave(),
110
+ };
111
+ }
112
+ case "list<integer>": {
113
+ return {
114
+ encoded: ListCodecFactory.create(IntegerCodec)
115
+ .fromJs(value)
116
+ .toWave(),
117
+ };
118
+ }
119
+ case "list<decimal>": {
120
+ return {
121
+ encoded: ListCodecFactory.create(DecimalCodec)
122
+ .fromJs(value)
123
+ .toWave(),
124
+ };
125
+ }
126
+ // signed ints
127
+ case "list<s8>":
128
+ case "list<s16>":
129
+ case "list<s32>":
130
+ case "list<s64>":
131
+ // TODO: wire up once you have a signed-int codec
132
+ throw new InvalidKwitEncodingTypeError(param.type, {
133
+ docsPath: "tk",
134
+ });
135
+ // unsigned ints
136
+ case "list<u8>":
137
+ case "list<u16>":
138
+ case "list<u32>":
139
+ case "list<u64>":
140
+ // TODO: wire up once you have an unsigned-int codec
141
+ throw new InvalidKwitEncodingTypeError(param.type, {
142
+ docsPath: "tk",
143
+ });
144
+ // tuples
145
+ case "list<tuple>":
146
+ // TODO: ListCodecFactory.create(TupleCodec) once it exists
147
+ throw new InvalidKwitEncodingTypeError(param.type, {
148
+ docsPath: "tk",
149
+ });
150
+ default: {
151
+ // exhaustiveness guard – if KwitList ever gains a new member,
152
+ // this will start failing at compile time until you add a case.
153
+ // @ts-ignore
154
+ const _exhaustive = type;
155
+ throw new InvalidKwitEncodingTypeError(param.type, {
156
+ docsPath: "tk",
157
+ });
158
+ }
159
+ }
160
+ }
161
+ // if (arrayComponents) {
162
+ // const [length, type] = arrayComponents;
163
+ // return encodeArray(value, { length, param: { ...param, type } });
164
+ // }
165
+ // if (param.type === "tuple") {
166
+ // return encodeTuple(value as unknown as Tuple, {
167
+ // param: param as TupleAbiParameter,
168
+ // });
169
+ // }
170
+ // if (param.type === "address") {
171
+ // return encodeAddress(value as unknown as Hex);
172
+ // }
173
+ // if (param.type === "bool") {
174
+ // return encodeBool(value as unknown as boolean);
175
+ // }
176
+ // if (param.type.startsWith("uint") || param.type.startsWith("int")) {
177
+ // const signed = param.type.startsWith("int");
178
+ // const [, , size = "256"] = integerRegex.exec(param.type) ?? [];
179
+ // return encodeNumber(value as unknown as number, {
180
+ // signed,
181
+ // size: Number(size),
182
+ // });
183
+ // }
184
+ // if (param.type.startsWith("bytes")) {
185
+ // return encodeBytes(value as unknown as Hex, { param });
186
+ // }
187
+ if (param.type === "integer") {
188
+ return encodeInteger(value);
189
+ }
190
+ if (param.type === "decimal") {
191
+ return encodeDecimal(value);
192
+ }
193
+ if (param.type === "string") {
194
+ return encodeString(value);
195
+ }
196
+ throw new InvalidKwitEncodingTypeError(param.type, {
197
+ docsPath: "tk",
198
+ });
199
+ }
200
+ export function getListComponents(type) {
201
+ // TODO: add error when nothing inside
202
+ // Matches things like:
203
+ // - "list<integer>"
204
+ // - "list<result<string, integer>>"
205
+ // - "list< list<decimal> >"
206
+ const matches = type.match(/^list<(.*)>$/);
207
+ return matches ? matches[1]?.trim() : undefined;
208
+ }
209
+ export function getOptionComponent(type) {
210
+ // Matches:
211
+ // - "option<integer>"
212
+ // - "option<list<decimal>>"
213
+ // - "option< result<string, error> >"
214
+ const matches = type.match(/^option<(.*)>$/);
215
+ return matches ? matches[1]?.trim() : undefined;
216
+ }
217
+ export class InvalidResultTypeError extends Error {
218
+ constructor(type) {
219
+ super(`Invalid result type "${type}". The error channel must be "error".`);
220
+ }
221
+ }
222
+ export function getResultComponentsStrict(type) {
223
+ const matches = type.match(/^result<(.*?),(.*?)>$/);
224
+ if (!matches)
225
+ return undefined;
226
+ const okType = matches[1].trim();
227
+ const errType = matches[2].trim();
228
+ if (errType !== "error")
229
+ throw new InvalidResultTypeError(errType);
230
+ return [okType, "error"];
231
+ }
232
+ function encodeInteger(value) {
233
+ return {
234
+ encoded: IntegerCodec.fromJs(value).toWave(),
235
+ };
236
+ }
237
+ function encodeDecimal(value) {
238
+ return {
239
+ encoded: DecimalCodec.fromJs(value).toWave(),
240
+ };
241
+ }
242
+ function encodeString(value) {
243
+ return {
244
+ encoded: StringCodec.fromJs(value).toWave(),
245
+ };
246
+ }
247
+ function encodeParams(preparedParams) {
248
+ return preparedParams.map((p) => p.encoded).join(", ");
249
+ }
250
+ //# sourceMappingURL=encode-kwit-parameters.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"encode-kwit-parameters.js","sourceRoot":"","sources":["../../../../../src/sdk/utils/kwit/encode-kwit-parameters.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,62 @@
1
+ import { expect, test } from "vitest";
2
+ import { encodeKwitParameters } from "./encode-kwit-parameters.js";
3
+ test("blank", () => {
4
+ expect(encodeKwitParameters([], [])).toBe("");
5
+ });
6
+ test("string", () => {
7
+ expect(encodeKwitParameters([{ type: "string" }], ["bc1deadbeef"])).toBe(`"bc1deadbeef"`);
8
+ });
9
+ test("integer", () => {
10
+ expect(encodeKwitParameters([{ type: "integer" }], [7n])).toBe(`{r0: 7, r1: 0, r2: 0, r3: 0, sign: plus}`);
11
+ });
12
+ test("integer negative", () => {
13
+ expect(encodeKwitParameters([{ type: "integer" }], [-7n])).toBe(`{r0: 7, r1: 0, r2: 0, r3: 0, sign: minus}`);
14
+ });
15
+ test("decimal", () => {
16
+ expect(encodeKwitParameters([{ type: "decimal" }], [[7n, 18]])).toBe(`{r0: 7, r1: 0, r2: 0, r3: 0, sign: plus}`);
17
+ });
18
+ test("list<string>", () => {
19
+ expect(encodeKwitParameters([{ type: "list<string>" }], [["foo", "bar"]])).toBe(`["foo", "bar"]`);
20
+ });
21
+ test("list<integer>", () => {
22
+ expect(encodeKwitParameters([{ type: "list<integer>" }], [[7n, 8n]])).toBe(`[{r0: 7, r1: 0, r2: 0, r3: 0, sign: plus}, {r0: 8, r1: 0, r2: 0, r3: 0, sign: plus}]`);
23
+ });
24
+ test("list<decimal>", () => {
25
+ expect(encodeKwitParameters([{ type: "list<decimal>" }], [
26
+ [
27
+ [7n, 18],
28
+ [8n, 10],
29
+ ],
30
+ ])).toBe(`[{r0: 7, r1: 0, r2: 0, r3: 0, sign: plus}, {r0: 800000000, r1: 0, r2: 0, r3: 0, sign: plus}]`);
31
+ });
32
+ test("invalid list<list<integer>>", () => {
33
+ expect(() => encodeKwitParameters([{ type: "list<list<<integer>>" }], [[[7n, 8n]]])).toThrowError(`Type "list<list<<integer>>" is not a valid encoding type.
34
+ Please provide a valid KWIT type.
35
+
36
+ Docs: https://docs.kontor.networktk
37
+ Version: kontor-sdk@1.0.0`);
38
+ });
39
+ test("option<string>", () => {
40
+ expect(encodeKwitParameters([{ type: "option<string>" }], [{ kind: "some", value: "foo" }])).toBe(`some("foo")`);
41
+ });
42
+ test("option<string> ( none ) ", () => {
43
+ expect(encodeKwitParameters([{ type: "option<string>" }], [{ kind: "none" }])).toBe(`none`);
44
+ });
45
+ test("option<integer>", () => {
46
+ expect(encodeKwitParameters([{ type: "option<integer>" }], [{ kind: "some", value: 7n }])).toBe(`some({r0: 7, r1: 0, r2: 0, r3: 0, sign: plus})`);
47
+ });
48
+ test("option<decimal>", () => {
49
+ expect(encodeKwitParameters([{ type: "option<decimal>" }], [{ kind: "some", value: [7n, 18] }])).toBe(`some({r0: 7, r1: 0, r2: 0, r3: 0, sign: plus})`);
50
+ });
51
+ test.skip("tuple", () => {
52
+ expect(encodeKwitParameters([
53
+ {
54
+ type: "tuple",
55
+ components: [
56
+ { name: "a", type: "integer" },
57
+ { name: "b", type: "decimal" },
58
+ ],
59
+ },
60
+ ], [{ a: 7n, b: [7n, 18] }])).toBe(`{a: {r0: 7, r1: 0, r2: 0, r3: 0, sign: plus}, b: {r0: 7, r1: 0, r2: 0, r3: 0, sign: plus}}`);
61
+ });
62
+ //# sourceMappingURL=encode-kwit-parameters.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"encode-kwit-parameters.test.js","sourceRoot":"","sources":["../../../../../src/sdk/utils/kwit/encode-kwit-parameters.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,186 @@
1
+ export function getKwitItem(parameters) {
2
+ const { kwit, name } = parameters;
3
+ const kwitItems = kwit.filter((kwitItem) => "name" in kwitItem && kwitItem.name === name);
4
+ if (kwitItems.length === 0)
5
+ return undefined;
6
+ if (kwitItems.length === 1)
7
+ return kwitItems[0];
8
+ // If Kwit truly has no overloading, hitting this is a spec/parse error.
9
+ // You can either:
10
+ // - throw, or
11
+ // - just pick the first and log a warning.
12
+ throw new Error(`Duplicate Kwit items for name "${name}". Kwit does not support overloading.`);
13
+ }
14
+ // export function getKwitItem<
15
+ // const kwit extends Kwit | readonly unknown[],
16
+ // name extends KwitItemName<kwit>,
17
+ // const args extends KwitItemArgs<kwit, name> | undefined = undefined,
18
+ // >(
19
+ // parameters: GetKwitItemParameters<kwit, name, args>,
20
+ // ): GetKwitItemReturnType<kwit, name, args> {
21
+ // const {
22
+ // kwit,
23
+ // args = [],
24
+ // name,
25
+ // } = parameters as unknown as GetKwitItemParameters;
26
+ //
27
+ // const kwitItems = (kwit as Kwit).filter((kwitItem) => {
28
+ // return "name" in kwitItem && kwitItem.name === name;
29
+ // });
30
+ //
31
+ // if (kwitItems.length === 0)
32
+ // return undefined as GetKwitItemReturnType<kwit, name, args>;
33
+ // if (kwitItems.length === 1)
34
+ // return kwitItems[0] as GetKwitItemReturnType<kwit, name, args>;
35
+ //
36
+ // let matchedKwitItem: KwitItem | undefined;
37
+ // for (const kwitItem of kwitItems) {
38
+ // if (!("inputs" in kwitItem)) continue;
39
+ // if (!args || args.length === 0) {
40
+ // if (!kwitItem.inputs || kwitItem.inputs.length === 0)
41
+ // return kwitItem as GetKwitItemReturnType<kwit, name, args>;
42
+ // continue;
43
+ // }
44
+ // if (!kwitItem.inputs) continue;
45
+ // if (kwitItem.inputs.length === 0) continue;
46
+ // if (kwitItem.inputs.length !== args.length) continue;
47
+ // const matched = args.every((arg, index) => {
48
+ // const kwitParameter = "inputs" in kwitItem && kwitItem.inputs![index];
49
+ // if (!kwitParameter) return false;
50
+ // return isArgOfType(arg, kwitParameter);
51
+ // });
52
+ // if (matched) {
53
+ // // Check for ambiguity against already matched parameters (e.g. `address` vs `bytes20`).
54
+ // if (
55
+ // matchedKwitItem &&
56
+ // "inputs" in matchedKwitItem &&
57
+ // matchedKwitItem.inputs
58
+ // ) {
59
+ // const ambiguousTypes = getAmbiguousTypes(
60
+ // kwitItem.inputs,
61
+ // matchedKwitItem.inputs,
62
+ // args as readonly unknown[],
63
+ // );
64
+ // if (ambiguousTypes)
65
+ // throw new KwitItemAmbiguityError(
66
+ // {
67
+ // kwitItem,
68
+ // type: ambiguousTypes[0],
69
+ // },
70
+ // {
71
+ // kwitItem: matchedKwitItem,
72
+ // type: ambiguousTypes[1],
73
+ // },
74
+ // );
75
+ // }
76
+ //
77
+ // matchedKwitItem = kwitItem;
78
+ // }
79
+ // }
80
+ //
81
+ // if (matchedKwitItem)
82
+ // return matchedKwitItem as GetKwitItemReturnType<kwit, name, args>;
83
+ // return kwitItems[0] as GetKwitItemReturnType<kwit, name, args>;
84
+ // }
85
+ // type IsArgOfTypeErrorType = IsAddressErrorType | ErrorType;
86
+ //
87
+ // /** @internal */
88
+ // export function isArgOfType(
89
+ // arg: unknown,
90
+ // kwitParameter: KwitParameter,
91
+ // ): boolean {
92
+ // const argType = typeof arg;
93
+ // const kwitParameterType = kwitParameter.type;
94
+ // switch (kwitParameterType) {
95
+ // case "address":
96
+ // return isAddress(arg as Address, { strict: false });
97
+ // case "bool":
98
+ // return argType === "boolean";
99
+ // case "function":
100
+ // return argType === "string";
101
+ // case "string":
102
+ // return argType === "string";
103
+ // default: {
104
+ // if (kwitParameterType === "tuple" && "components" in kwitParameter)
105
+ // return Object.values(kwitParameter.components).every(
106
+ // (component, index) => {
107
+ // return isArgOfType(
108
+ // Object.values(arg as unknown[] | Record<string, unknown>)[index],
109
+ // component as KwitParameter,
110
+ // );
111
+ // },
112
+ // );
113
+ //
114
+ // // `(u)int<M>`: (un)signed integer type of `M` bits, `0 < M <= 256`, `M % 8 == 0`
115
+ // // https://regexr.com/6v8hp
116
+ // if (
117
+ // /^u?int(8|16|24|32|40|48|56|64|72|80|88|96|104|112|120|128|136|144|152|160|168|176|184|192|200|208|216|224|232|240|248|256)?$/.test(
118
+ // kwitParameterType,
119
+ // )
120
+ // )
121
+ // return argType === "number" || argType === "bigint";
122
+ //
123
+ // // `bytes<M>`: binary type of `M` bytes, `0 < M <= 32`
124
+ // // https://regexr.com/6va55
125
+ // if (/^bytes([1-9]|1[0-9]|2[0-9]|3[0-2])?$/.test(kwitParameterType))
126
+ // return argType === "string" || arg instanceof Uint8Array;
127
+ //
128
+ // // fixed-length (`<type>[M]`) and dynamic (`<type>[]`) arrays
129
+ // // https://regexr.com/6va6i
130
+ // if (/[a-z]+[1-9]{0,3}(\[[0-9]{0,}\])+$/.test(kwitParameterType)) {
131
+ // return (
132
+ // Array.isArray(arg) &&
133
+ // arg.every((x: unknown) =>
134
+ // isArgOfType(x, {
135
+ // ...kwitParameter,
136
+ // // Pop off `[]` or `[M]` from end of type
137
+ // type: kwitParameterType.replace(/(\[[0-9]{0,}\])$/, ""),
138
+ // } as KwitParameter),
139
+ // )
140
+ // );
141
+ // }
142
+ //
143
+ // return false;
144
+ // }
145
+ // }
146
+ // }
147
+ //
148
+ // /** @internal */
149
+ // export function getAmbiguousTypes(
150
+ // sourceParameters: readonly KwitParameter[],
151
+ // targetParameters: readonly KwitParameter[],
152
+ // args: KwitItemArgs,
153
+ // ): KwitParameter["type"][] | undefined {
154
+ // for (const parameterIndex in sourceParameters) {
155
+ // const sourceParameter = sourceParameters[parameterIndex];
156
+ // const targetParameter = targetParameters[parameterIndex];
157
+ //
158
+ // if (
159
+ // sourceParameter.type === "tuple" &&
160
+ // targetParameter.type === "tuple" &&
161
+ // "components" in sourceParameter &&
162
+ // "components" in targetParameter
163
+ // )
164
+ // return getAmbiguousTypes(
165
+ // sourceParameter.components,
166
+ // targetParameter.components,
167
+ // (args as any)[parameterIndex],
168
+ // );
169
+ //
170
+ // const types = [sourceParameter.type, targetParameter.type];
171
+ //
172
+ // const ambiguous = (() => {
173
+ // if (types.includes("address") && types.includes("bytes20")) return true;
174
+ // if (types.includes("address") && types.includes("string"))
175
+ // return isAddress(args[parameterIndex] as Address, { strict: false });
176
+ // if (types.includes("address") && types.includes("bytes"))
177
+ // return isAddress(args[parameterIndex] as Address, { strict: false });
178
+ // return false;
179
+ // })();
180
+ //
181
+ // if (ambiguous) return types;
182
+ // }
183
+ //
184
+ // return;
185
+ // }
186
+ //# sourceMappingURL=get-kwit-item.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get-kwit-item.js","sourceRoot":"","sources":["../../../../../src/sdk/utils/kwit/get-kwit-item.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,119 @@
1
+ // test/kwit/getKwitItem.test.ts
2
+ import { describe, expect, test } from "vitest";
3
+ import { getKwitItem } from "./get-kwit-item.js";
4
+ import { parseKwit } from "../../../kwit/kwit-parser/parse-kwit.js";
5
+ export const nativeToken = parseKwit([
6
+ "record balance { key: string, value: decimal }",
7
+ "export mint: func(ctx: borrow<proc-context>, n: decimal) -> result<_, error>;",
8
+ "export burn: func(ctx: borrow<proc-context>, n: decimal) -> result<_, error>;",
9
+ "export transfer: func(ctx: borrow<proc-context>, to: string, n: decimal) -> result<_, error>;",
10
+ "export balance: func(ctx: borrow<view-context>, acc: string) -> option<decimal>;",
11
+ "export balances: func(ctx: borrow<view-context>) -> list<balance>;",
12
+ "export total-supply: func(ctx: borrow<view-context>) -> decimal;",
13
+ ]);
14
+ describe("getKwitItem", () => {
15
+ test("returns undefined for missing item", () => {
16
+ const item = getKwitItem({
17
+ kwit: nativeToken,
18
+ // @ts-expect-error - "does-not-exist" is not a valid KwitItemName
19
+ name: "does-not-exist",
20
+ });
21
+ expect(item).toBeUndefined();
22
+ });
23
+ test("selects mint function by name", () => {
24
+ const item = getKwitItem({
25
+ kwit: nativeToken,
26
+ name: "mint",
27
+ });
28
+ expect(item).toStrictEqual({
29
+ name: "mint",
30
+ type: "function",
31
+ context: "proc",
32
+ inputs: [{ type: "decimal", name: "n" }],
33
+ outputs: [{ type: "result<_, error>" }],
34
+ });
35
+ });
36
+ test("selects burn function by name", () => {
37
+ const item = getKwitItem({
38
+ kwit: nativeToken,
39
+ name: "burn",
40
+ });
41
+ expect(item).toStrictEqual({
42
+ name: "burn",
43
+ type: "function",
44
+ context: "proc",
45
+ inputs: [{ type: "decimal", name: "n" }],
46
+ outputs: [{ type: "result<_, error>" }],
47
+ });
48
+ });
49
+ test("selects transfer function by name", () => {
50
+ const item = getKwitItem({
51
+ kwit: nativeToken,
52
+ name: "transfer",
53
+ });
54
+ expect(item).toStrictEqual({
55
+ name: "transfer",
56
+ type: "function",
57
+ context: "proc",
58
+ inputs: [
59
+ { type: "string", name: "to" },
60
+ { type: "decimal", name: "n" },
61
+ ],
62
+ outputs: [{ type: "result<_, error>" }],
63
+ });
64
+ });
65
+ test("selects balance function by name", () => {
66
+ const item = getKwitItem({
67
+ kwit: nativeToken,
68
+ name: "balance",
69
+ });
70
+ expect(item).toStrictEqual({
71
+ name: "balance",
72
+ type: "function",
73
+ context: "view",
74
+ inputs: [{ type: "string", name: "acc" }],
75
+ outputs: [{ type: "option<decimal>" }],
76
+ });
77
+ });
78
+ test("selects balances function by name", () => {
79
+ const item = getKwitItem({
80
+ kwit: nativeToken,
81
+ name: "balances",
82
+ });
83
+ expect(item).toStrictEqual({
84
+ name: "balances",
85
+ type: "function",
86
+ context: "view",
87
+ inputs: [],
88
+ outputs: [
89
+ {
90
+ type: "list<tuple>",
91
+ components: [
92
+ {
93
+ name: "key",
94
+ type: "string",
95
+ },
96
+ {
97
+ name: "value",
98
+ type: "decimal",
99
+ },
100
+ ],
101
+ },
102
+ ],
103
+ });
104
+ });
105
+ test("selects total-supply function by name (kebab case)", () => {
106
+ const item = getKwitItem({
107
+ kwit: nativeToken,
108
+ name: "total-supply",
109
+ });
110
+ expect(item).toBeDefined();
111
+ expect(item.name).toBe("total-supply");
112
+ const inputs = item.inputs ?? [];
113
+ expect(inputs.map((p) => p.name)).toEqual([]);
114
+ expect(inputs.map((p) => p.type)).toEqual([]);
115
+ // Optional: assert output type
116
+ // expect((item as any).outputs?.[0]?.type).toBe("decimal");
117
+ });
118
+ });
119
+ //# sourceMappingURL=get-kwit-item.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get-kwit-item.test.js","sourceRoot":"","sources":["../../../../../src/sdk/utils/kwit/get-kwit-item.test.ts"],"names":[],"mappings":"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"}