@manifest-network/manifest-mcp-browser 0.1.7 → 0.1.8

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 (78) hide show
  1. package/README.md +5 -2
  2. package/dist/config.d.ts.map +1 -1
  3. package/dist/config.js +0 -10
  4. package/dist/config.js.map +1 -1
  5. package/dist/index.d.ts +0 -1
  6. package/dist/index.d.ts.map +1 -1
  7. package/dist/index.js +3 -7
  8. package/dist/index.js.map +1 -1
  9. package/dist/queries/index.d.ts +1 -0
  10. package/dist/queries/index.d.ts.map +1 -1
  11. package/dist/queries/index.js +1 -0
  12. package/dist/queries/index.js.map +1 -1
  13. package/dist/transactions/bank.d.ts.map +1 -1
  14. package/dist/transactions/bank.js +7 -5
  15. package/dist/transactions/bank.js.map +1 -1
  16. package/dist/transactions/gov.d.ts.map +1 -1
  17. package/dist/transactions/gov.js +7 -5
  18. package/dist/transactions/gov.js.map +1 -1
  19. package/dist/transactions/index.d.ts +1 -0
  20. package/dist/transactions/index.d.ts.map +1 -1
  21. package/dist/transactions/index.js +1 -0
  22. package/dist/transactions/index.js.map +1 -1
  23. package/dist/types.d.ts +0 -2
  24. package/dist/types.d.ts.map +1 -1
  25. package/dist/types.js.map +1 -1
  26. package/package.json +5 -2
  27. package/.github/workflows/ci.yml +0 -37
  28. package/.github/workflows/publish.yml +0 -53
  29. package/CLAUDE.md +0 -113
  30. package/dist/config.test.d.ts +0 -2
  31. package/dist/config.test.d.ts.map +0 -1
  32. package/dist/config.test.js +0 -251
  33. package/dist/config.test.js.map +0 -1
  34. package/dist/modules.test.d.ts +0 -2
  35. package/dist/modules.test.d.ts.map +0 -1
  36. package/dist/modules.test.js +0 -161
  37. package/dist/modules.test.js.map +0 -1
  38. package/dist/queries/utils.test.d.ts +0 -2
  39. package/dist/queries/utils.test.d.ts.map +0 -1
  40. package/dist/queries/utils.test.js +0 -117
  41. package/dist/queries/utils.test.js.map +0 -1
  42. package/dist/transactions/utils.test.d.ts +0 -2
  43. package/dist/transactions/utils.test.d.ts.map +0 -1
  44. package/dist/transactions/utils.test.js +0 -567
  45. package/dist/transactions/utils.test.js.map +0 -1
  46. package/src/client.ts +0 -288
  47. package/src/config.test.ts +0 -299
  48. package/src/config.ts +0 -174
  49. package/src/cosmos.ts +0 -106
  50. package/src/index.ts +0 -478
  51. package/src/modules.test.ts +0 -191
  52. package/src/modules.ts +0 -470
  53. package/src/queries/auth.ts +0 -97
  54. package/src/queries/bank.ts +0 -99
  55. package/src/queries/billing.ts +0 -124
  56. package/src/queries/distribution.ts +0 -114
  57. package/src/queries/gov.ts +0 -104
  58. package/src/queries/group.ts +0 -146
  59. package/src/queries/index.ts +0 -17
  60. package/src/queries/sku.ts +0 -85
  61. package/src/queries/staking.ts +0 -154
  62. package/src/queries/utils.test.ts +0 -156
  63. package/src/queries/utils.ts +0 -121
  64. package/src/transactions/bank.ts +0 -86
  65. package/src/transactions/billing.ts +0 -286
  66. package/src/transactions/distribution.ts +0 -76
  67. package/src/transactions/gov.ts +0 -164
  68. package/src/transactions/group.ts +0 -458
  69. package/src/transactions/index.ts +0 -8
  70. package/src/transactions/manifest.ts +0 -67
  71. package/src/transactions/sku.ts +0 -232
  72. package/src/transactions/staking.ts +0 -85
  73. package/src/transactions/utils.test.ts +0 -626
  74. package/src/transactions/utils.ts +0 -417
  75. package/src/types.ts +0 -548
  76. package/src/wallet/index.ts +0 -2
  77. package/src/wallet/mnemonic.ts +0 -146
  78. package/tsconfig.json +0 -23
@@ -1,567 +0,0 @@
1
- import { describe, it, expect } from 'vitest';
2
- import { toBech32 } from '@cosmjs/encoding';
3
- import { parseAmount, parseBigInt, extractFlag, extractBooleanFlag, filterConsumedArgs, parseColonPair, validateAddress, validateMemo, validateArgsLength, requireArgs, parseHexBytes, bytesToHex, parseVoteOption } from './utils.js';
4
- import { ManifestMCPError, ManifestMCPErrorCode } from '../types.js';
5
- describe('parseAmount', () => {
6
- it('should parse valid amount strings', () => {
7
- expect(parseAmount('1000umfx')).toEqual({ amount: '1000', denom: 'umfx' });
8
- expect(parseAmount('1uatom')).toEqual({ amount: '1', denom: 'uatom' });
9
- expect(parseAmount('999999999token')).toEqual({ amount: '999999999', denom: 'token' });
10
- });
11
- it('should handle denominations with numbers', () => {
12
- expect(parseAmount('100ibc123')).toEqual({ amount: '100', denom: 'ibc123' });
13
- });
14
- it('should handle factory denoms with slashes', () => {
15
- expect(parseAmount('1000000factory/manifest1abc123/upwr')).toEqual({
16
- amount: '1000000',
17
- denom: 'factory/manifest1abc123/upwr',
18
- });
19
- });
20
- it('should handle IBC denoms with slashes', () => {
21
- expect(parseAmount('500ibc/ABC123DEF456')).toEqual({
22
- amount: '500',
23
- denom: 'ibc/ABC123DEF456',
24
- });
25
- });
26
- it('should handle denoms with underscores', () => {
27
- expect(parseAmount('100my_token')).toEqual({ amount: '100', denom: 'my_token' });
28
- });
29
- it('should throw ManifestMCPError for invalid format', () => {
30
- expect(() => parseAmount('')).toThrow(ManifestMCPError);
31
- expect(() => parseAmount('umfx')).toThrow(ManifestMCPError);
32
- expect(() => parseAmount('1000')).toThrow(ManifestMCPError);
33
- expect(() => parseAmount('abc123')).toThrow(ManifestMCPError);
34
- expect(() => parseAmount('1000 umfx')).toThrow(ManifestMCPError);
35
- });
36
- it('should have correct error code for invalid format', () => {
37
- try {
38
- parseAmount('invalid');
39
- }
40
- catch (error) {
41
- expect(error).toBeInstanceOf(ManifestMCPError);
42
- expect(error.code).toBe(ManifestMCPErrorCode.TX_FAILED);
43
- }
44
- });
45
- it('should provide helpful hint for empty string', () => {
46
- try {
47
- parseAmount('');
48
- }
49
- catch (error) {
50
- expect(error.message).toContain('Received empty string');
51
- }
52
- });
53
- it('should provide helpful hint for amount with space', () => {
54
- try {
55
- parseAmount('1000 umfx');
56
- }
57
- catch (error) {
58
- expect(error.message).toContain('Remove the space');
59
- }
60
- });
61
- it('should provide helpful hint for amount with comma', () => {
62
- try {
63
- parseAmount('1,000umfx');
64
- }
65
- catch (error) {
66
- expect(error.message).toContain('Do not use commas');
67
- }
68
- });
69
- it('should provide helpful hint for missing denomination', () => {
70
- try {
71
- parseAmount('1000');
72
- }
73
- catch (error) {
74
- expect(error.message).toContain('Missing denomination');
75
- }
76
- });
77
- it('should provide helpful hint for denom-first format', () => {
78
- try {
79
- parseAmount('umfx1000');
80
- }
81
- catch (error) {
82
- expect(error.message).toContain('must start with a number');
83
- }
84
- });
85
- it('should include details with received value and example', () => {
86
- try {
87
- parseAmount('bad');
88
- }
89
- catch (error) {
90
- const details = error.details;
91
- expect(details?.receivedValue).toBe('bad');
92
- expect(details?.example).toBe('1000000umfx');
93
- }
94
- });
95
- });
96
- describe('parseBigInt', () => {
97
- it('should parse valid integer strings', () => {
98
- expect(parseBigInt('0', 'test')).toBe(BigInt(0));
99
- expect(parseBigInt('123', 'test')).toBe(BigInt(123));
100
- expect(parseBigInt('9999999999999999999', 'test')).toBe(BigInt('9999999999999999999'));
101
- });
102
- it('should throw ManifestMCPError for invalid integers', () => {
103
- expect(() => parseBigInt('abc', 'field')).toThrow(ManifestMCPError);
104
- expect(() => parseBigInt('12.34', 'field')).toThrow(ManifestMCPError);
105
- expect(() => parseBigInt('1e10', 'field')).toThrow(ManifestMCPError);
106
- });
107
- it('should throw ManifestMCPError for empty string', () => {
108
- // Empty string should be rejected for security (prevents accidental 0 values)
109
- expect(() => parseBigInt('', 'field')).toThrow(ManifestMCPError);
110
- expect(() => parseBigInt(' ', 'field')).toThrow(ManifestMCPError);
111
- });
112
- it('should include field name in error message', () => {
113
- try {
114
- parseBigInt('invalid', 'proposal-id');
115
- }
116
- catch (error) {
117
- expect(error).toBeInstanceOf(ManifestMCPError);
118
- expect(error.message).toContain('proposal-id');
119
- }
120
- });
121
- });
122
- describe('extractFlag', () => {
123
- it('should extract flag value when present', () => {
124
- const result = extractFlag(['--memo', 'hello'], '--memo', 'test');
125
- expect(result.value).toBe('hello');
126
- expect(result.consumedIndices).toEqual([0, 1]);
127
- });
128
- it('should return undefined when flag not present', () => {
129
- const result = extractFlag(['arg1', 'arg2'], '--memo', 'test');
130
- expect(result.value).toBeUndefined();
131
- expect(result.consumedIndices).toEqual([]);
132
- });
133
- it('should handle flag in middle of args', () => {
134
- const result = extractFlag(['arg1', '--memo', 'hello', 'arg2'], '--memo', 'test');
135
- expect(result.value).toBe('hello');
136
- expect(result.consumedIndices).toEqual([1, 2]);
137
- });
138
- it('should throw when flag has no value', () => {
139
- expect(() => extractFlag(['--memo'], '--memo', 'test')).toThrow(ManifestMCPError);
140
- });
141
- it('should throw when flag value looks like another flag', () => {
142
- expect(() => extractFlag(['--memo', '--other'], '--memo', 'test')).toThrow(ManifestMCPError);
143
- });
144
- it('should include context in error message', () => {
145
- try {
146
- extractFlag(['--memo'], '--memo', 'bank send');
147
- }
148
- catch (error) {
149
- expect(error.message).toContain('bank send');
150
- expect(error.message).toContain('--memo');
151
- }
152
- });
153
- });
154
- describe('filterConsumedArgs', () => {
155
- it('should filter out consumed indices', () => {
156
- const result = filterConsumedArgs(['a', 'b', 'c', 'd'], [1, 2]);
157
- expect(result).toEqual(['a', 'd']);
158
- });
159
- it('should return original array when no indices consumed', () => {
160
- const result = filterConsumedArgs(['a', 'b', 'c'], []);
161
- expect(result).toEqual(['a', 'b', 'c']);
162
- });
163
- it('should handle all indices consumed', () => {
164
- const result = filterConsumedArgs(['a', 'b'], [0, 1]);
165
- expect(result).toEqual([]);
166
- });
167
- it('should handle non-contiguous indices', () => {
168
- const result = filterConsumedArgs(['a', 'b', 'c', 'd', 'e'], [0, 2, 4]);
169
- expect(result).toEqual(['b', 'd']);
170
- });
171
- });
172
- describe('parseColonPair', () => {
173
- it('should parse valid colon-separated pairs', () => {
174
- expect(parseColonPair('address:amount', 'address', 'amount', 'test')).toEqual(['address', 'amount']);
175
- expect(parseColonPair('key:value', 'key', 'value', 'test')).toEqual(['key', 'value']);
176
- });
177
- it('should handle values with colons (takes first colon as separator)', () => {
178
- const result = parseColonPair('address:100:extra', 'address', 'amount', 'test');
179
- expect(result).toEqual(['address', '100:extra']);
180
- });
181
- it('should throw for missing colon', () => {
182
- expect(() => parseColonPair('nodelimiter', 'left', 'right', 'test')).toThrow(ManifestMCPError);
183
- });
184
- it('should throw for empty left side', () => {
185
- expect(() => parseColonPair(':value', 'left', 'right', 'test')).toThrow(ManifestMCPError);
186
- });
187
- it('should throw for empty right side', () => {
188
- expect(() => parseColonPair('key:', 'left', 'right', 'test')).toThrow(ManifestMCPError);
189
- });
190
- it('should include context and field names in error messages', () => {
191
- try {
192
- parseColonPair('invalid', 'address', 'amount', 'multi-send');
193
- }
194
- catch (error) {
195
- const message = error.message;
196
- expect(message).toContain('multi-send');
197
- expect(message).toContain('address');
198
- expect(message).toContain('amount');
199
- }
200
- });
201
- it('should provide specific error for missing left value', () => {
202
- try {
203
- parseColonPair(':value', 'address', 'amount', 'test');
204
- }
205
- catch (error) {
206
- expect(error.message).toContain('Missing address');
207
- }
208
- });
209
- it('should provide specific error for missing right value', () => {
210
- try {
211
- parseColonPair('key:', 'address', 'amount', 'test');
212
- }
213
- catch (error) {
214
- expect(error.message).toContain('Missing amount');
215
- }
216
- });
217
- });
218
- describe('validateAddress', () => {
219
- // Generate valid bech32 addresses programmatically using @cosmjs/encoding
220
- // 20 bytes is the standard Cosmos address length
221
- const validManifestAddress = toBech32('manifest', new Uint8Array(20));
222
- const validCosmosAddress = toBech32('cosmos', new Uint8Array(20));
223
- it('should accept valid bech32 addresses', () => {
224
- expect(() => validateAddress(validManifestAddress, 'test')).not.toThrow();
225
- expect(() => validateAddress(validCosmosAddress, 'test')).not.toThrow();
226
- });
227
- it('should throw for empty address', () => {
228
- expect(() => validateAddress('', 'recipient')).toThrow(ManifestMCPError);
229
- expect(() => validateAddress(' ', 'recipient')).toThrow(ManifestMCPError);
230
- });
231
- it('should throw for invalid bech32 address', () => {
232
- expect(() => validateAddress('notanaddress', 'recipient')).toThrow(ManifestMCPError);
233
- expect(() => validateAddress('manifest1invalid', 'recipient')).toThrow(ManifestMCPError);
234
- });
235
- it('should use INVALID_ADDRESS error code', () => {
236
- try {
237
- validateAddress('invalid', 'recipient');
238
- }
239
- catch (error) {
240
- expect(error.code).toBe(ManifestMCPErrorCode.INVALID_ADDRESS);
241
- }
242
- });
243
- it('should include field name in error message', () => {
244
- try {
245
- validateAddress('invalid', 'validator address');
246
- }
247
- catch (error) {
248
- expect(error.message).toContain('validator address');
249
- }
250
- });
251
- it('should validate expected prefix when provided', () => {
252
- // Should pass when prefix matches
253
- expect(() => validateAddress(validManifestAddress, 'test', 'manifest')).not.toThrow();
254
- // Should fail when prefix doesn't match
255
- expect(() => validateAddress(validManifestAddress, 'test', 'cosmos')).toThrow(ManifestMCPError);
256
- });
257
- it('should include expected prefix in error message', () => {
258
- try {
259
- validateAddress(validManifestAddress, 'recipient', 'cosmos');
260
- }
261
- catch (error) {
262
- const message = error.message;
263
- expect(message).toContain('cosmos');
264
- expect(message).toContain('manifest');
265
- }
266
- });
267
- });
268
- describe('validateMemo', () => {
269
- it('should accept memo within limit', () => {
270
- expect(() => validateMemo('')).not.toThrow();
271
- expect(() => validateMemo('short memo')).not.toThrow();
272
- expect(() => validateMemo('a'.repeat(256))).not.toThrow();
273
- });
274
- it('should throw for memo exceeding 256 characters', () => {
275
- expect(() => validateMemo('a'.repeat(257))).toThrow(ManifestMCPError);
276
- expect(() => validateMemo('a'.repeat(500))).toThrow(ManifestMCPError);
277
- });
278
- it('should use TX_FAILED error code', () => {
279
- try {
280
- validateMemo('a'.repeat(300));
281
- }
282
- catch (error) {
283
- expect(error.code).toBe(ManifestMCPErrorCode.TX_FAILED);
284
- }
285
- });
286
- it('should include length info in error message', () => {
287
- try {
288
- validateMemo('a'.repeat(300));
289
- }
290
- catch (error) {
291
- const message = error.message;
292
- expect(message).toContain('300');
293
- expect(message).toContain('256');
294
- }
295
- });
296
- });
297
- describe('validateArgsLength', () => {
298
- it('should accept args within limit', () => {
299
- expect(() => validateArgsLength([], 'test')).not.toThrow();
300
- expect(() => validateArgsLength(['a', 'b', 'c'], 'test')).not.toThrow();
301
- expect(() => validateArgsLength(new Array(100).fill('arg'), 'test')).not.toThrow();
302
- });
303
- it('should throw for args exceeding 100 items', () => {
304
- expect(() => validateArgsLength(new Array(101).fill('arg'), 'test')).toThrow(ManifestMCPError);
305
- expect(() => validateArgsLength(new Array(200).fill('arg'), 'test')).toThrow(ManifestMCPError);
306
- });
307
- it('should use TX_FAILED error code', () => {
308
- try {
309
- validateArgsLength(new Array(150).fill('arg'), 'test');
310
- }
311
- catch (error) {
312
- expect(error.code).toBe(ManifestMCPErrorCode.TX_FAILED);
313
- }
314
- });
315
- it('should include context and count in error message', () => {
316
- try {
317
- validateArgsLength(new Array(150).fill('arg'), 'bank send');
318
- }
319
- catch (error) {
320
- const message = error.message;
321
- expect(message).toContain('bank send');
322
- expect(message).toContain('150');
323
- expect(message).toContain('100');
324
- }
325
- });
326
- });
327
- describe('requireArgs', () => {
328
- it('should pass when args meet minimum count', () => {
329
- expect(() => requireArgs(['a', 'b'], 2, ['arg1', 'arg2'], 'test')).not.toThrow();
330
- expect(() => requireArgs(['a', 'b', 'c'], 2, ['arg1', 'arg2'], 'test')).not.toThrow();
331
- });
332
- it('should pass when zero args required', () => {
333
- expect(() => requireArgs([], 0, [], 'test')).not.toThrow();
334
- });
335
- it('should throw when args below minimum count', () => {
336
- expect(() => requireArgs(['a'], 2, ['arg1', 'arg2'], 'test')).toThrow(ManifestMCPError);
337
- expect(() => requireArgs([], 1, ['arg1'], 'test')).toThrow(ManifestMCPError);
338
- });
339
- it('should use TX_FAILED error code by default', () => {
340
- try {
341
- requireArgs([], 1, ['arg1'], 'test');
342
- }
343
- catch (error) {
344
- expect(error.code).toBe(ManifestMCPErrorCode.TX_FAILED);
345
- }
346
- });
347
- it('should include context in error message', () => {
348
- try {
349
- requireArgs(['a'], 2, ['recipient', 'amount'], 'bank send');
350
- }
351
- catch (error) {
352
- const message = error.message;
353
- expect(message).toContain('bank send');
354
- expect(message).toContain('recipient');
355
- expect(message).toContain('amount');
356
- }
357
- });
358
- it('should include received args in error message', () => {
359
- try {
360
- requireArgs(['value1'], 2, ['arg1', 'arg2'], 'test');
361
- }
362
- catch (error) {
363
- const message = error.message;
364
- expect(message).toContain('"value1"');
365
- expect(message).toContain('Received 1');
366
- }
367
- });
368
- it('should show "none" when no args received', () => {
369
- try {
370
- requireArgs([], 1, ['arg1'], 'test');
371
- }
372
- catch (error) {
373
- const message = error.message;
374
- expect(message).toContain('none');
375
- }
376
- });
377
- it('should include details with expected and received args', () => {
378
- try {
379
- requireArgs(['a'], 2, ['arg1', 'arg2'], 'test');
380
- }
381
- catch (error) {
382
- const details = error.details;
383
- expect(details?.expectedArgs).toEqual(['arg1', 'arg2']);
384
- expect(details?.receivedArgs).toEqual(['a']);
385
- expect(details?.receivedCount).toBe(1);
386
- expect(details?.requiredCount).toBe(2);
387
- }
388
- });
389
- it('should accept custom error code', () => {
390
- try {
391
- requireArgs([], 1, ['arg1'], 'test', ManifestMCPErrorCode.QUERY_FAILED);
392
- }
393
- catch (error) {
394
- expect(error.code).toBe(ManifestMCPErrorCode.QUERY_FAILED);
395
- }
396
- });
397
- });
398
- describe('parseHexBytes', () => {
399
- it('should parse valid hex strings', () => {
400
- expect(parseHexBytes('deadbeef', 'test', 100)).toEqual(new Uint8Array([0xde, 0xad, 0xbe, 0xef]));
401
- expect(parseHexBytes('00', 'test', 100)).toEqual(new Uint8Array([0x00]));
402
- expect(parseHexBytes('ff', 'test', 100)).toEqual(new Uint8Array([0xff]));
403
- expect(parseHexBytes('0123456789abcdef', 'test', 100)).toEqual(new Uint8Array([0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef]));
404
- });
405
- it('should be case-insensitive', () => {
406
- expect(parseHexBytes('DEADBEEF', 'test', 100)).toEqual(new Uint8Array([0xde, 0xad, 0xbe, 0xef]));
407
- expect(parseHexBytes('DeAdBeEf', 'test', 100)).toEqual(new Uint8Array([0xde, 0xad, 0xbe, 0xef]));
408
- });
409
- it('should throw for empty string', () => {
410
- expect(() => parseHexBytes('', 'field', 100)).toThrow(ManifestMCPError);
411
- expect(() => parseHexBytes(' ', 'field', 100)).toThrow(ManifestMCPError);
412
- });
413
- it('should throw for odd-length hex strings', () => {
414
- expect(() => parseHexBytes('abc', 'field', 100)).toThrow(ManifestMCPError);
415
- expect(() => parseHexBytes('1', 'field', 100)).toThrow(ManifestMCPError);
416
- expect(() => parseHexBytes('12345', 'field', 100)).toThrow(ManifestMCPError);
417
- });
418
- it('should throw for exceeding max bytes', () => {
419
- expect(() => parseHexBytes('deadbeef', 'field', 2)).toThrow(ManifestMCPError);
420
- expect(() => parseHexBytes('0102030405', 'field', 2)).toThrow(ManifestMCPError);
421
- });
422
- it('should accept exactly max bytes', () => {
423
- expect(parseHexBytes('deadbeef', 'test', 4)).toEqual(new Uint8Array([0xde, 0xad, 0xbe, 0xef]));
424
- });
425
- it('should throw for invalid hex characters', () => {
426
- expect(() => parseHexBytes('ghij', 'field', 100)).toThrow(ManifestMCPError);
427
- expect(() => parseHexBytes('12gg', 'field', 100)).toThrow(ManifestMCPError);
428
- expect(() => parseHexBytes('xy00', 'field', 100)).toThrow(ManifestMCPError);
429
- });
430
- it('should use TX_FAILED error code by default', () => {
431
- try {
432
- parseHexBytes('', 'field', 100);
433
- }
434
- catch (error) {
435
- expect(error.code).toBe(ManifestMCPErrorCode.TX_FAILED);
436
- }
437
- });
438
- it('should accept custom error code', () => {
439
- try {
440
- parseHexBytes('', 'field', 100, ManifestMCPErrorCode.QUERY_FAILED);
441
- }
442
- catch (error) {
443
- expect(error.code).toBe(ManifestMCPErrorCode.QUERY_FAILED);
444
- }
445
- });
446
- it('should include field name in error message', () => {
447
- try {
448
- parseHexBytes('', 'my-custom-field', 100);
449
- }
450
- catch (error) {
451
- expect(error.message).toContain('my-custom-field');
452
- }
453
- });
454
- });
455
- describe('bytesToHex', () => {
456
- it('should convert bytes to hex string', () => {
457
- expect(bytesToHex(new Uint8Array([0xde, 0xad, 0xbe, 0xef]))).toBe('deadbeef');
458
- expect(bytesToHex(new Uint8Array([0x00]))).toBe('00');
459
- expect(bytesToHex(new Uint8Array([0xff]))).toBe('ff');
460
- expect(bytesToHex(new Uint8Array([0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef]))).toBe('0123456789abcdef');
461
- });
462
- it('should handle empty array', () => {
463
- expect(bytesToHex(new Uint8Array([]))).toBe('');
464
- });
465
- it('should round-trip with parseHexBytes', () => {
466
- const original = 'deadbeefcafe1234';
467
- const bytes = parseHexBytes(original, 'test', 100);
468
- expect(bytesToHex(bytes)).toBe(original);
469
- });
470
- });
471
- describe('extractBooleanFlag', () => {
472
- it('should return true and filtered args when flag is present', () => {
473
- const result = extractBooleanFlag(['arg1', '--active-only', 'arg2'], '--active-only');
474
- expect(result.value).toBe(true);
475
- expect(result.remainingArgs).toEqual(['arg1', 'arg2']);
476
- });
477
- it('should return false and original args when flag is absent', () => {
478
- const args = ['arg1', 'arg2'];
479
- const result = extractBooleanFlag(args, '--active-only');
480
- expect(result.value).toBe(false);
481
- expect(result.remainingArgs).toEqual(['arg1', 'arg2']);
482
- });
483
- it('should handle flag at the beginning', () => {
484
- const result = extractBooleanFlag(['--flag', 'a', 'b'], '--flag');
485
- expect(result.value).toBe(true);
486
- expect(result.remainingArgs).toEqual(['a', 'b']);
487
- });
488
- it('should handle flag at the end', () => {
489
- const result = extractBooleanFlag(['a', 'b', '--flag'], '--flag');
490
- expect(result.value).toBe(true);
491
- expect(result.remainingArgs).toEqual(['a', 'b']);
492
- });
493
- it('should handle flag as only argument', () => {
494
- const result = extractBooleanFlag(['--flag'], '--flag');
495
- expect(result.value).toBe(true);
496
- expect(result.remainingArgs).toEqual([]);
497
- });
498
- it('should handle empty args', () => {
499
- const result = extractBooleanFlag([], '--flag');
500
- expect(result.value).toBe(false);
501
- expect(result.remainingArgs).toEqual([]);
502
- });
503
- it('should only remove the first occurrence', () => {
504
- const result = extractBooleanFlag(['--flag', 'a', '--flag'], '--flag');
505
- expect(result.value).toBe(true);
506
- // indexOf finds the first occurrence at index 0, only that is removed
507
- expect(result.remainingArgs).toEqual(['a', '--flag']);
508
- });
509
- });
510
- describe('parseVoteOption', () => {
511
- // Mock VoteOption enum matching the cosmos.gov.v1 / cosmos.group.v1 shape
512
- const mockVoteOption = {
513
- VOTE_OPTION_YES: 1,
514
- VOTE_OPTION_ABSTAIN: 2,
515
- VOTE_OPTION_NO: 3,
516
- VOTE_OPTION_NO_WITH_VETO: 4,
517
- };
518
- it('should parse string vote options (case-insensitive)', () => {
519
- expect(parseVoteOption('yes', mockVoteOption)).toBe(1);
520
- expect(parseVoteOption('YES', mockVoteOption)).toBe(1);
521
- expect(parseVoteOption('Yes', mockVoteOption)).toBe(1);
522
- expect(parseVoteOption('no', mockVoteOption)).toBe(3);
523
- expect(parseVoteOption('abstain', mockVoteOption)).toBe(2);
524
- expect(parseVoteOption('no_with_veto', mockVoteOption)).toBe(4);
525
- expect(parseVoteOption('nowithveto', mockVoteOption)).toBe(4);
526
- });
527
- it('should parse numeric vote options', () => {
528
- expect(parseVoteOption('1', mockVoteOption)).toBe(1);
529
- expect(parseVoteOption('2', mockVoteOption)).toBe(2);
530
- expect(parseVoteOption('3', mockVoteOption)).toBe(3);
531
- expect(parseVoteOption('4', mockVoteOption)).toBe(4);
532
- });
533
- it('should use enum values from the provided object', () => {
534
- // Verify it actually uses the enum values, not hardcoded numbers
535
- const customEnum = {
536
- VOTE_OPTION_YES: 10,
537
- VOTE_OPTION_ABSTAIN: 20,
538
- VOTE_OPTION_NO: 30,
539
- VOTE_OPTION_NO_WITH_VETO: 40,
540
- };
541
- expect(parseVoteOption('yes', customEnum)).toBe(10);
542
- expect(parseVoteOption('no', customEnum)).toBe(30);
543
- });
544
- it('should throw ManifestMCPError for invalid option', () => {
545
- expect(() => parseVoteOption('invalid', mockVoteOption)).toThrow(ManifestMCPError);
546
- expect(() => parseVoteOption('maybe', mockVoteOption)).toThrow(ManifestMCPError);
547
- expect(() => parseVoteOption('0', mockVoteOption)).toThrow(ManifestMCPError);
548
- expect(() => parseVoteOption('5', mockVoteOption)).toThrow(ManifestMCPError);
549
- });
550
- it('should use TX_FAILED error code', () => {
551
- try {
552
- parseVoteOption('invalid', mockVoteOption);
553
- }
554
- catch (error) {
555
- expect(error.code).toBe(ManifestMCPErrorCode.TX_FAILED);
556
- }
557
- });
558
- it('should include the invalid option in error message', () => {
559
- try {
560
- parseVoteOption('badvalue', mockVoteOption);
561
- }
562
- catch (error) {
563
- expect(error.message).toContain('badvalue');
564
- }
565
- });
566
- });
567
- //# sourceMappingURL=utils.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"utils.test.js","sourceRoot":"","sources":["../../src/transactions/utils.test.ts"],"names":[],"mappings":"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"}