@aztec/foundation 0.7.10 → 0.8.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 (135) hide show
  1. package/dest/abi/encoder.d.ts.map +1 -1
  2. package/dest/abi/encoder.js +9 -5
  3. package/dest/abi/function_selector.js +1 -1
  4. package/dest/abi/index.d.ts +1 -0
  5. package/dest/abi/index.d.ts.map +1 -1
  6. package/dest/abi/index.js +2 -1
  7. package/dest/abi/utils.d.ts +20 -0
  8. package/dest/abi/utils.d.ts.map +1 -0
  9. package/dest/abi/utils.js +25 -0
  10. package/dest/fields/coordinate.d.ts +5 -5
  11. package/dest/fields/coordinate.js +5 -5
  12. package/dest/fields/fields.d.ts +4 -0
  13. package/dest/fields/fields.d.ts.map +1 -1
  14. package/dest/fields/fields.js +9 -1
  15. package/dest/fifo/memory_fifo.js +2 -2
  16. package/dest/json-rpc/client/json_rpc_client.d.ts.map +1 -1
  17. package/dest/json-rpc/client/json_rpc_client.js +8 -7
  18. package/dest/json-rpc/convert.js +2 -2
  19. package/dest/json-rpc/server/json_proxy.d.ts.map +1 -1
  20. package/dest/json-rpc/server/json_proxy.js +5 -4
  21. package/dest/json-rpc/server/json_rpc_server.d.ts.map +1 -1
  22. package/dest/json-rpc/server/json_rpc_server.js +52 -7
  23. package/dest/log/index.d.ts +4 -4
  24. package/dest/log/index.d.ts.map +1 -1
  25. package/dest/log/index.js +1 -1
  26. package/dest/log/logger.d.ts +7 -3
  27. package/dest/log/logger.d.ts.map +1 -1
  28. package/dest/log/logger.js +36 -16
  29. package/dest/timer/elapsed.d.ts +14 -0
  30. package/dest/timer/elapsed.d.ts.map +1 -0
  31. package/dest/timer/elapsed.js +22 -0
  32. package/dest/timer/index.d.ts +1 -0
  33. package/dest/timer/index.d.ts.map +1 -1
  34. package/dest/timer/index.js +2 -1
  35. package/dest/transport/dispatch/create_dispatch_fn.d.ts.map +1 -1
  36. package/dest/transport/dispatch/create_dispatch_fn.js +3 -2
  37. package/dest/transport/transport_client.d.ts.map +1 -1
  38. package/dest/transport/transport_client.js +4 -3
  39. package/dest/wasm/wasm_module.js +4 -4
  40. package/package.json +65 -3
  41. package/src/abi/encoder.ts +8 -4
  42. package/src/abi/function_selector.ts +1 -1
  43. package/src/abi/index.ts +1 -0
  44. package/src/abi/utils.ts +28 -0
  45. package/src/fields/coordinate.ts +5 -5
  46. package/src/fields/fields.ts +10 -0
  47. package/src/fifo/memory_fifo.ts +1 -1
  48. package/src/json-rpc/client/json_rpc_client.ts +7 -6
  49. package/src/json-rpc/convert.ts +2 -2
  50. package/src/json-rpc/server/json_proxy.ts +5 -3
  51. package/src/json-rpc/server/json_rpc_server.ts +50 -6
  52. package/src/log/index.ts +5 -4
  53. package/src/log/logger.ts +45 -19
  54. package/src/timer/elapsed.ts +23 -0
  55. package/src/timer/index.ts +1 -0
  56. package/src/transport/dispatch/create_dispatch_fn.ts +3 -1
  57. package/src/transport/transport_client.ts +3 -2
  58. package/src/wasm/wasm_module.ts +3 -3
  59. package/.eslintrc.cjs +0 -134
  60. package/.prettierrc.json +0 -10
  61. package/.tsbuildinfo +0 -1
  62. package/dest/abi/decoder.test.d.ts +0 -2
  63. package/dest/abi/decoder.test.d.ts.map +0 -1
  64. package/dest/abi/decoder.test.js +0 -70
  65. package/dest/abi/encoder.test.d.ts +0 -2
  66. package/dest/abi/encoder.test.d.ts.map +0 -1
  67. package/dest/abi/encoder.test.js +0 -74
  68. package/dest/async-map/async_map.test.d.ts +0 -2
  69. package/dest/async-map/async_map.test.d.ts.map +0 -1
  70. package/dest/async-map/async_map.test.js +0 -9
  71. package/dest/bigint-buffer/bigint-buffer.test.d.ts +0 -2
  72. package/dest/bigint-buffer/bigint-buffer.test.d.ts.map +0 -1
  73. package/dest/bigint-buffer/bigint-buffer.test.js +0 -18
  74. package/dest/committable/committable.test.d.ts +0 -2
  75. package/dest/committable/committable.test.d.ts.map +0 -1
  76. package/dest/committable/committable.test.js +0 -26
  77. package/dest/crypto/random/index.test.d.ts +0 -2
  78. package/dest/crypto/random/index.test.d.ts.map +0 -1
  79. package/dest/crypto/random/index.test.js +0 -13
  80. package/dest/crypto/sha256/index.test.d.ts +0 -2
  81. package/dest/crypto/sha256/index.test.d.ts.map +0 -1
  82. package/dest/crypto/sha256/index.test.js +0 -11
  83. package/dest/eth-address/eth_address.test.d.ts +0 -2
  84. package/dest/eth-address/eth_address.test.d.ts.map +0 -1
  85. package/dest/eth-address/eth_address.test.js +0 -95
  86. package/dest/fields/coordinate.test.d.ts +0 -2
  87. package/dest/fields/coordinate.test.d.ts.map +0 -1
  88. package/dest/fields/coordinate.test.js +0 -22
  89. package/dest/fields/grumpkin_scalar.test.d.ts +0 -2
  90. package/dest/fields/grumpkin_scalar.test.d.ts.map +0 -1
  91. package/dest/fields/grumpkin_scalar.test.js +0 -45
  92. package/dest/json-rpc/client/json_rpc_client.test.d.ts +0 -2
  93. package/dest/json-rpc/client/json_rpc_client.test.d.ts.map +0 -1
  94. package/dest/json-rpc/client/json_rpc_client.test.js +0 -20
  95. package/dest/json-rpc/convert.test.d.ts +0 -2
  96. package/dest/json-rpc/convert.test.d.ts.map +0 -1
  97. package/dest/json-rpc/convert.test.js +0 -68
  98. package/dest/json-rpc/server/json_rpc_server.test.d.ts +0 -2
  99. package/dest/json-rpc/server/json_rpc_server.test.d.ts.map +0 -1
  100. package/dest/json-rpc/server/json_rpc_server.test.js +0 -22
  101. package/dest/log/log_history.test.d.ts +0 -2
  102. package/dest/log/log_history.test.d.ts.map +0 -1
  103. package/dest/log/log_history.test.js +0 -78
  104. package/dest/mutex/mutex.test.d.ts +0 -9
  105. package/dest/mutex/mutex.test.d.ts.map +0 -1
  106. package/dest/mutex/mutex.test.js +0 -58
  107. package/dest/serialize/buffer_reader.test.d.ts +0 -2
  108. package/dest/serialize/buffer_reader.test.d.ts.map +0 -1
  109. package/dest/serialize/buffer_reader.test.js +0 -156
  110. package/dest/serialize/serialize.test.d.ts +0 -2
  111. package/dest/serialize/serialize.test.d.ts.map +0 -1
  112. package/dest/serialize/serialize.test.js +0 -68
  113. package/dest/wasm/wasm_module.test.d.ts +0 -2
  114. package/dest/wasm/wasm_module.test.d.ts.map +0 -1
  115. package/dest/wasm/wasm_module.test.js +0 -24
  116. package/src/abi/decoder.test.ts +0 -77
  117. package/src/abi/encoder.test.ts +0 -80
  118. package/src/async-map/async_map.test.ts +0 -9
  119. package/src/bigint-buffer/bigint-buffer.test.ts +0 -21
  120. package/src/committable/committable.test.ts +0 -32
  121. package/src/crypto/random/index.test.ts +0 -13
  122. package/src/crypto/sha256/index.test.ts +0 -14
  123. package/src/eth-address/eth_address.test.ts +0 -114
  124. package/src/fields/coordinate.test.ts +0 -26
  125. package/src/fields/grumpkin_scalar.test.ts +0 -55
  126. package/src/json-rpc/client/json_rpc_client.test.ts +0 -21
  127. package/src/json-rpc/convert.test.ts +0 -77
  128. package/src/json-rpc/server/json_rpc_server.test.ts +0 -24
  129. package/src/log/log_history.test.ts +0 -88
  130. package/src/mutex/mutex.test.ts +0 -76
  131. package/src/serialize/buffer_reader.test.ts +0 -176
  132. package/src/serialize/serialize.test.ts +0 -89
  133. package/src/wasm/wasm_module.test.ts +0 -28
  134. package/tsconfig.dest.json +0 -5
  135. package/tsconfig.json +0 -10
@@ -1,26 +0,0 @@
1
- import { toBufferBE } from '../bigint-buffer/index.js';
2
- import { Coordinate } from './coordinate.js';
3
- import { Fr } from './fields.js';
4
-
5
- const MAX_256_VALUE = 2n ** 256n - 1n;
6
-
7
- describe('coordinate', () => {
8
- it('stores 256 bits in fields', () => {
9
- const max256Value = toBufferBE(MAX_256_VALUE, 32);
10
- const coordinate = Coordinate.fromBuffer(max256Value);
11
- // this returns a buffer containing the bit pattern split across 2 fields
12
- expect(coordinate.toFieldsBuffer()).toEqual(
13
- Buffer.concat([Buffer.alloc(1, 0), Buffer.alloc(31, 0xff), Buffer.alloc(31, 0), Buffer.alloc(1, 0xff)]),
14
- );
15
- // this returns the value in a single 32 byte buffer
16
- expect(coordinate.toBuffer()).toEqual(max256Value);
17
- // this returns the value as a big int
18
- expect(coordinate.toBigInt()).toBe(MAX_256_VALUE);
19
- });
20
-
21
- it('can be constructed from a field', () => {
22
- const field = Fr.random();
23
- const coordinate = Coordinate.fromField(field);
24
- expect(coordinate.toBuffer()).toEqual(field.toBuffer());
25
- });
26
- });
@@ -1,55 +0,0 @@
1
- import { GrumpkinScalar } from './grumpkin_scalar.js';
2
-
3
- describe('GrumpkinScalar Serialization', () => {
4
- // Test case for GrumpkinScalar.fromHighLow
5
- it('fromHighLow should serialize and deserialize correctly', () => {
6
- const original = GrumpkinScalar.random();
7
- const high = original.high;
8
- const low = original.low;
9
-
10
- const deserialized = GrumpkinScalar.fromHighLow(high, low);
11
-
12
- // Check if the deserialized instance is equal to the original
13
- expect(deserialized).toEqual(original);
14
- });
15
-
16
- // Test case for GrumpkinScalar.fromBuffer
17
- it('fromBuffer should serialize and deserialize correctly', () => {
18
- const original = GrumpkinScalar.random();
19
- const buffer = original.toBuffer();
20
- const deserialized = GrumpkinScalar.fromBuffer(buffer);
21
-
22
- // Check if the deserialized instance is equal to the original
23
- expect(deserialized).toEqual(original);
24
- });
25
-
26
- // Test case for GrumpkinScalar.fromString
27
- it('fromString should serialize and deserialize correctly', () => {
28
- const original = GrumpkinScalar.random();
29
- const hexString = original.toString();
30
- const deserialized = GrumpkinScalar.fromString(hexString);
31
-
32
- // Check if the deserialized instance is equal to the original
33
- expect(deserialized).toEqual(original);
34
- });
35
-
36
- // Test case for GrumpkinScalar.toBuffer
37
- it('toBuffer should serialize and deserialize correctly', () => {
38
- const original = GrumpkinScalar.random();
39
- const buffer = original.toBuffer();
40
- const deserialized = GrumpkinScalar.fromBuffer(buffer);
41
-
42
- // Check if the deserialized instance is equal to the original
43
- expect(deserialized).toEqual(original);
44
- });
45
-
46
- // Test case for GrumpkinScalar.toString
47
- it('toString should serialize and deserialize correctly', () => {
48
- const original = GrumpkinScalar.random();
49
- const hexString = original.toString();
50
- const deserialized = GrumpkinScalar.fromString(hexString);
51
-
52
- // Check if the deserialized instance is equal to the original
53
- expect(deserialized).toEqual(original);
54
- });
55
- });
@@ -1,21 +0,0 @@
1
- import request from 'supertest';
2
-
3
- import { TestNote, TestState } from '../fixtures/test_state.js';
4
- import { JsonRpcServer } from '../server/index.js';
5
- import { createJsonRpcClient } from './json_rpc_client.js';
6
-
7
- test('test an RPC function over client', async () => {
8
- const mockFetch = async (host: string, method: string, body: any) => {
9
- const server = new JsonRpcServer(new TestState([new TestNote('a'), new TestNote('b')]), { TestNote }, {}, true);
10
- const result = await request(server.getApp().callback()).post(`/${method}`).send(body);
11
- return JSON.parse(result.text);
12
- };
13
- const client = createJsonRpcClient<TestState>('', { TestNote }, {}, true, mockFetch);
14
- const result = await client.addNotes([new TestNote('c')]);
15
- expect(result[0]).toBeInstanceOf(TestNote);
16
- expect(result[1]).toBeInstanceOf(TestNote);
17
- expect(result[2]).toBeInstanceOf(TestNote);
18
- expect(result[0].toString()).toBe('a');
19
- expect(result[1].toString()).toBe('b');
20
- expect(result[2].toString()).toBe('c');
21
- });
@@ -1,77 +0,0 @@
1
- import { Buffer } from 'buffer';
2
-
3
- import { ClassConverter } from './class_converter.js';
4
- import { convertBigintsInObj, convertFromJsonObj, convertToJsonObj } from './convert.js';
5
- import { ToStringClass as ToStringClassA } from './fixtures/class_a.js';
6
- import { ToStringClass as ToStringClassB } from './fixtures/class_b.js';
7
- import { TestNote } from './fixtures/test_state.js';
8
-
9
- const TEST_BASE64 = 'YmFzZTY0IGRlY29kZXI=';
10
- test('test an RPC function over client', () => {
11
- const cc = new ClassConverter({ TestNote });
12
- const buffer = Buffer.from(TEST_BASE64, 'base64');
13
- expect(convertFromJsonObj(cc, convertToJsonObj(cc, buffer)).toString('base64')).toBe(TEST_BASE64);
14
- const note = new TestNote('1');
15
- expect(convertFromJsonObj(cc, convertToJsonObj(cc, note))).toBeInstanceOf(TestNote);
16
- expect(convertFromJsonObj(cc, convertToJsonObj(cc, note)).toString()).toBe('1');
17
- });
18
-
19
- test('converts a bigint', () => {
20
- expect(convertBigintsInObj(10n)).toEqual({ type: 'bigint', data: '10' });
21
- expect(convertBigintsInObj({ value: 10n })).toEqual({ value: { type: 'bigint', data: '10' } });
22
- expect(convertBigintsInObj([10n])).toEqual([{ type: 'bigint', data: '10' }]);
23
- });
24
-
25
- test('does not convert a string', () => {
26
- expect(convertBigintsInObj('hello')).toEqual('hello');
27
- expect(convertBigintsInObj({ msg: 'hello' })).toEqual({ msg: 'hello' });
28
- });
29
-
30
- test('converts a registered class', () => {
31
- const cc = new ClassConverter({ ToStringClass: ToStringClassA });
32
- const obj = { content: new ToStringClassA('a', 'b') };
33
- const serialised = convertToJsonObj(cc, obj);
34
- const deserialised = convertFromJsonObj(cc, serialised) as { content: ToStringClassA };
35
- expect(deserialised.content).toBeInstanceOf(ToStringClassA);
36
- expect(deserialised.content.x).toEqual('a');
37
- expect(deserialised.content.y).toEqual('b');
38
- });
39
-
40
- test('converts a class by name in the event of duplicate modules being loaded', () => {
41
- expect(ToStringClassA.prototype.constructor.name).toEqual('ToStringClass');
42
- expect(ToStringClassB.prototype.constructor.name).toEqual('ToStringClass');
43
- const cc = new ClassConverter({ ToStringClass: ToStringClassA });
44
- const obj = { content: new ToStringClassB('a', 'b') };
45
- const serialised = convertToJsonObj(cc, obj);
46
- const deserialised = convertFromJsonObj(cc, serialised) as { content: ToStringClassA };
47
- expect(deserialised.content).toBeInstanceOf(ToStringClassA);
48
- expect(deserialised.content.x).toEqual('a');
49
- expect(deserialised.content.y).toEqual('b');
50
- });
51
-
52
- test('converts a class by constructor instead of name in the event of minified bundle', () => {
53
- const cc = new ClassConverter({ NotMinifiedToStringClassName: ToStringClassA });
54
- const obj = { content: new ToStringClassA('a', 'b') };
55
- const serialised = convertToJsonObj(cc, obj);
56
- const deserialised = convertFromJsonObj(cc, serialised) as { content: ToStringClassA };
57
- expect(deserialised.content).toBeInstanceOf(ToStringClassA);
58
- expect(deserialised.content.x).toEqual('a');
59
- expect(deserialised.content.y).toEqual('b');
60
- });
61
-
62
- test('converts a plain object', () => {
63
- const obj = { a: 10, b: [20, 30], c: 'foo' };
64
- const cc = new ClassConverter();
65
- expect(convertFromJsonObj(cc, convertToJsonObj(cc, obj))).toEqual(obj);
66
- });
67
-
68
- test('refuses to convert to json an unknown class', () => {
69
- const cc = new ClassConverter();
70
- expect(() => convertToJsonObj(cc, { content: new ToStringClassA('a', 'b') })).toThrowError(/not registered/);
71
- });
72
-
73
- test('refuses to convert from json an unknown class', () => {
74
- const cc = new ClassConverter({ ToStringClass: ToStringClassA });
75
- const serialised = convertToJsonObj(cc, { content: new ToStringClassA('a', 'b') });
76
- expect(() => convertFromJsonObj(new ClassConverter(), serialised)).toThrowError(/not registered/);
77
- });
@@ -1,24 +0,0 @@
1
- import request from 'supertest';
2
-
3
- import { TestNote, TestState } from '../fixtures/test_state.js';
4
- import { JsonRpcServer } from './json_rpc_server.js';
5
-
6
- test('test an RPC function with a primitive parameter', async () => {
7
- const server = new JsonRpcServer(new TestState([new TestNote('a'), new TestNote('b')]), { TestNote }, {}, true);
8
- const response = await request(server.getApp().callback())
9
- .post('/getNote')
10
- .send({ params: [0] });
11
- expect(response.status).toBe(200);
12
- expect(response.text).toBe(JSON.stringify({ result: { type: 'TestNote', data: 'a' } }));
13
- });
14
-
15
- test('test an RPC function with an array of classes', async () => {
16
- const server = new JsonRpcServer(new TestState([]), { TestNote }, {}, true);
17
- const response = await request(server.getApp().callback())
18
- .post('/addNotes')
19
- .send({
20
- params: [[{ data: 'a' }, { data: 'b' }, { data: 'c' }]],
21
- });
22
- expect(response.status).toBe(200);
23
- expect(response.text).toBe(JSON.stringify({ result: [{ data: 'a' }, { data: 'b' }, { data: 'c' }] }));
24
- });
@@ -1,88 +0,0 @@
1
- import { jest } from '@jest/globals';
2
-
3
- import { createDebugOnlyLogger, enableLogs } from './debug.js';
4
- import { LogHistory } from './log_history.js';
5
-
6
- jest.useFakeTimers({ doNotFake: ['performance'] });
7
-
8
- describe('log history', () => {
9
- let debug: (...any: any) => void;
10
- let logHistory: LogHistory;
11
- const timestemp = new Date().toISOString();
12
- const name = 'test:a';
13
-
14
- beforeEach(() => {
15
- debug = createDebugOnlyLogger(name);
16
- enableLogs(name);
17
- logHistory = new LogHistory();
18
- });
19
-
20
- it('keeps debug logs', () => {
21
- logHistory.enable();
22
- expect(logHistory.getLogs()).toEqual([]);
23
- debug('0');
24
- debug('1', 2);
25
- debug('2', { key: ['value'] }, Buffer.alloc(2));
26
- expect(logHistory.getLogs()).toEqual([
27
- [timestemp, name, '0'],
28
- [timestemp, name, '1', 2],
29
- [timestemp, name, '2', { key: ['value'] }, Buffer.alloc(2)],
30
- ]);
31
- });
32
-
33
- it('does not keep logs if not enabled', () => {
34
- debug('0');
35
- debug('1', 2);
36
- expect(logHistory.getLogs()).toEqual([]);
37
- });
38
-
39
- it('returns last n logs', () => {
40
- logHistory.enable();
41
- expect(logHistory.getLogs()).toEqual([]);
42
- debug('0');
43
- debug('1');
44
- debug('2');
45
- debug('3');
46
- debug('4');
47
- expect(logHistory.getLogs(2)).toEqual([
48
- [timestemp, name, '3'],
49
- [timestemp, name, '4'],
50
- ]);
51
- });
52
-
53
- it('only keeps logs with enabled namespace', () => {
54
- logHistory.enable();
55
- const name2 = 'test:b';
56
- const debug2 = createDebugOnlyLogger(name2);
57
- debug('0');
58
- debug2('zero');
59
- expect(logHistory.getLogs()).toEqual([[timestemp, name, '0']]);
60
-
61
- enableLogs(`${name},${name2}`);
62
- debug('1', 2);
63
- debug2('one', 3);
64
- expect(logHistory.getLogs()).toEqual([
65
- [timestemp, name, '0'],
66
- [timestemp, name, '1', 2],
67
- [timestemp, name2, 'one', 3],
68
- ]);
69
- });
70
-
71
- it('clears all logs', () => {
72
- logHistory.enable();
73
- debug('0');
74
- debug('1');
75
- debug('2');
76
- logHistory.clear();
77
- expect(logHistory.getLogs()).toEqual([]);
78
- });
79
-
80
- it('clears first n logs', () => {
81
- logHistory.enable();
82
- debug('0');
83
- debug('1');
84
- debug('2');
85
- logHistory.clear(2);
86
- expect(logHistory.getLogs()).toEqual([[timestemp, name, '2']]);
87
- });
88
- });
@@ -1,76 +0,0 @@
1
- import { jest } from '@jest/globals';
2
-
3
- import { Mutex } from './index.js';
4
- import { MutexDatabase } from './mutex_database.js';
5
-
6
- /**
7
- * Sleep function for introducing a delay in the execution of code.
8
- * Returns a Promise that resolves after the specified number of milliseconds.
9
- *
10
- * @param ms - The number of milliseconds to pause the execution.
11
- * @returns A Promise that resolves after the specified delay.
12
- */
13
- export function sleep(ms: number) {
14
- return new Promise(resolve => setTimeout(resolve, ms));
15
- }
16
-
17
- /**
18
- * Type that transforms the properties of an object into jest.Mock instances,
19
- * allowing for easy mocking and testing of functions and methods.
20
- */
21
- type Mockify<T> = {
22
- [P in keyof T]: jest.Mock;
23
- };
24
-
25
- describe('mutex', () => {
26
- let db: Mockify<MutexDatabase>;
27
- let mutex: Mutex;
28
- const mutexName = 'test-mutex';
29
- const timeout = 500;
30
- const tryLockInterval = 100;
31
- const pingInterval = 200;
32
-
33
- beforeEach(() => {
34
- db = {
35
- acquireLock: jest.fn().mockImplementation(() => false),
36
- extendLock: jest.fn().mockImplementation(() => {
37
- (db.acquireLock.mockResolvedValueOnce as any)(false);
38
- }),
39
- releaseLock: jest.fn().mockImplementation(() => {
40
- (db.acquireLock.mockResolvedValueOnce as any)(true);
41
- }),
42
- } as any;
43
- (db.acquireLock.mockResolvedValueOnce as any)(true);
44
-
45
- mutex = new Mutex(db as MutexDatabase, mutexName, timeout, tryLockInterval, pingInterval);
46
- });
47
-
48
- it('cannot lock if locked', async () => {
49
- const result: string[] = [];
50
- const fn1 = async (runAfterLocked: () => Promise<void>) => {
51
- await mutex.lock();
52
- const pm = runAfterLocked();
53
- await sleep(500);
54
- result.push('fn1');
55
- await mutex.unlock();
56
- return pm;
57
- };
58
-
59
- const fn2 = async () => {
60
- await mutex.lock();
61
- result.push('fn2');
62
- await mutex.unlock();
63
- };
64
-
65
- await fn1(fn2);
66
- expect(result).toEqual(['fn1', 'fn2']);
67
- });
68
-
69
- it('automatically extend the expiry time of the lock', async () => {
70
- await mutex.lock();
71
- await sleep(1000);
72
- await mutex.unlock();
73
-
74
- expect(db.extendLock).toHaveBeenCalledWith(mutexName, timeout);
75
- });
76
- });
@@ -1,176 +0,0 @@
1
- import { jest } from '@jest/globals';
2
-
3
- import { randomBytes } from '../crypto/index.js';
4
- import { Fq, Fr } from '../fields/fields.js';
5
- import { BufferReader } from './buffer_reader.js';
6
- import { serializeBufferArrayToVector } from './free_funcs.js';
7
-
8
- const ARRAY = Array.from(Array(32)).map((_, idx) => (idx % 2 === 0 ? 0 : 1));
9
- const BUFFER = Buffer.from(ARRAY);
10
- const NUMBER = 65537;
11
- const sizes = [16, 48, 32];
12
-
13
- describe('buffer reader', () => {
14
- let bufferReader: BufferReader;
15
-
16
- beforeEach(() => {
17
- bufferReader = new BufferReader(BUFFER);
18
- });
19
-
20
- describe('readNumber', () => {
21
- it('should return number', () => {
22
- expect(bufferReader.readNumber()).toBe(NUMBER);
23
- });
24
- });
25
-
26
- describe('readBoolean', () => {
27
- it('should read true when 1 and false when 0', () => {
28
- ARRAY.forEach(element => {
29
- if (element !== 0) {
30
- expect(bufferReader.readBoolean()).toBe(true);
31
- } else {
32
- expect(bufferReader.readBoolean()).toBe(false);
33
- }
34
- });
35
- });
36
- });
37
-
38
- describe('readBytes', () => {
39
- it('should read buffer by slices', () => {
40
- expect(bufferReader.readBytes(2)).toEqual(Buffer.from(ARRAY.slice(0, 2)));
41
- expect(bufferReader.readBytes(3)).toEqual(Buffer.from(ARRAY.slice(2, 5)));
42
- });
43
- });
44
-
45
- describe('readFr', () => {
46
- it('should get Fr from buffer', () => {
47
- expect(bufferReader.readFr()).toEqual(Fr.fromBuffer(BUFFER));
48
- });
49
- });
50
-
51
- describe('readFq', () => {
52
- it('should get Fq from buffer', () => {
53
- expect(bufferReader.readFq()).toEqual(Fq.fromBuffer(BUFFER));
54
- });
55
- });
56
-
57
- describe('readNumberVector', () => {
58
- let vectorBufferReader: BufferReader;
59
-
60
- beforeEach(() => {
61
- const uintArr = [7, 13, 16];
62
- const uintBufArr = uintArr.map(num => {
63
- const uintBuf = Buffer.alloc(4);
64
- uintBuf.writeUInt32BE(num, 0);
65
- return uintBuf;
66
- });
67
- const uintArrVec = serializeBufferArrayToVector(uintBufArr);
68
- vectorBufferReader = new BufferReader(uintArrVec);
69
- });
70
-
71
- it('should read number vector', () => {
72
- expect(vectorBufferReader.readNumberVector()).toEqual([7, 13, 16]);
73
- });
74
- });
75
-
76
- describe('readVector', () => {
77
- it('should read vector and generate result array', () => {
78
- const fn = jest.fn();
79
- let i = -1;
80
- const result = bufferReader.readVector({
81
- fromBuffer: () => {
82
- fn();
83
- i++;
84
- return i;
85
- },
86
- });
87
- expect(result.length).toBe(NUMBER);
88
- expect(result).toEqual(Array.from(Array(NUMBER).keys()));
89
- expect(fn).toHaveBeenCalledTimes(NUMBER);
90
- });
91
- });
92
-
93
- describe('readArray', () => {
94
- it('should read array from buffer', () => {
95
- const fn = jest.fn();
96
- let i = -1;
97
- expect(
98
- bufferReader.readArray(10, {
99
- fromBuffer: () => {
100
- fn();
101
- i++;
102
- return i;
103
- },
104
- }),
105
- ).toEqual([0, 1, 2, 3, 4, 5, 6, 7, 8, 9]);
106
- });
107
- });
108
-
109
- describe('readBufferArray', () => {
110
- it('should read variable length array from buffer', () => {
111
- // Testing `readBufferArray` with a buffer that ONLY contains the data that will be read.
112
- // No `size` variable is passed in this case.
113
- const bufferArray: Buffer[] = [];
114
- let buf = Buffer.alloc(0);
115
- for (const size of sizes) {
116
- const sizeBuf = Buffer.alloc(4);
117
- sizeBuf.writeUInt32BE(size);
118
- const bytes = randomBytes(size);
119
- const ranBuf = Buffer.concat([sizeBuf, bytes]);
120
- bufferArray.push(bytes);
121
- buf = Buffer.concat([buf, ranBuf]);
122
- }
123
- const reader = BufferReader.asReader(buf);
124
- const res = reader.readBufferArray();
125
- expect(res).toEqual(bufferArray);
126
- });
127
-
128
- it('should read variable length array from buffer with other contents', () => {
129
- // testing `readBufferArray` with a buffer that includes some other data before and after the data that will be read.
130
- // The `size` variable needs to be passed in this case.
131
- const bufferArray: Buffer[] = [];
132
- const prefixBytes = randomBytes(32);
133
- const postfixBytes = randomBytes(16);
134
- let bufLen = 0;
135
- let buf = Buffer.alloc(32, prefixBytes);
136
- for (const size of sizes) {
137
- const sizeBuf = Buffer.alloc(4);
138
- sizeBuf.writeUInt32BE(size);
139
-
140
- const bytes = randomBytes(size);
141
- const ranBuf = Buffer.concat([sizeBuf, bytes]);
142
- buf = Buffer.concat([buf, ranBuf]);
143
-
144
- bufferArray.push(bytes);
145
- bufLen += ranBuf.length;
146
- }
147
- buf = Buffer.concat([buf, postfixBytes]);
148
- const reader = BufferReader.asReader(buf);
149
- const preRes = reader.readBytes(prefixBytes.length);
150
- expect(preRes).toEqual(prefixBytes);
151
- expect(reader.readBufferArray(bufLen)).toEqual(bufferArray);
152
- expect(reader.readBytes(postfixBytes.length)).toEqual(postfixBytes);
153
- });
154
- });
155
-
156
- describe('readObject', () => {
157
- it('should read object from buffer', () => {
158
- const fn = jest.fn();
159
- const object = bufferReader.readObject({
160
- fromBuffer: (reader: BufferReader) => {
161
- fn();
162
- return { value: 'test-string', buffer: reader };
163
- },
164
- });
165
- expect(object.value).toEqual('test-string');
166
- expect(object.buffer).toEqual(bufferReader);
167
- expect(fn).toHaveBeenCalledTimes(1);
168
- });
169
- });
170
-
171
- describe('peekBytes', () => {
172
- it('should return bytes from buffer', () => {
173
- expect(bufferReader.peekBytes(10)).toEqual(Buffer.from(ARRAY.slice(0, 10)));
174
- });
175
- });
176
- });
@@ -1,89 +0,0 @@
1
- import { randomBytes } from '../crypto/index.js';
2
- import { Fr } from '../fields/fields.js';
3
- import {
4
- deserializeArrayFromVector,
5
- deserializeBufferFromVector,
6
- deserializeField,
7
- deserializeUInt32,
8
- serializeBufferArrayToVector,
9
- serializeBufferToVector,
10
- } from './index.js';
11
-
12
- describe('serialize', () => {
13
- it('serialize buffer to vector and deserialize it back', () => {
14
- const data = randomBytes(32);
15
- const vector = serializeBufferToVector(data);
16
- expect(vector.length).toBe(36);
17
-
18
- const recovered = deserializeBufferFromVector(vector);
19
- expect(recovered.elem).toEqual(data);
20
- expect(recovered.adv).toEqual(4 + 32);
21
-
22
- const paddedVector = Buffer.concat([randomBytes(10), vector, randomBytes(20)]);
23
- const recovered2 = deserializeBufferFromVector(paddedVector, 10);
24
- expect(recovered2.elem).toEqual(data);
25
- expect(recovered2.adv).toEqual(4 + 32);
26
- });
27
-
28
- it('deserialize uint32', () => {
29
- const uintBuf = Buffer.alloc(4);
30
- uintBuf.writeUInt32BE(19, 0);
31
-
32
- const recovered = deserializeUInt32(uintBuf);
33
- expect(recovered.elem).toBe(19);
34
- expect(recovered.adv).toBe(4);
35
-
36
- const paddedBuf = Buffer.concat([randomBytes(10), uintBuf, randomBytes(20)]);
37
- const recovered2 = deserializeUInt32(paddedBuf, 10);
38
- expect(recovered2.elem).toBe(19);
39
- expect(recovered2.adv).toBe(4);
40
- });
41
-
42
- it('deserialize field', () => {
43
- const field = Fr.random();
44
-
45
- const recovered = deserializeField(field.toBuffer());
46
- expect(recovered.elem).toEqual(field);
47
- expect(recovered.adv).toBe(32);
48
-
49
- const paddedBuf = Buffer.concat([randomBytes(10), field.toBuffer(), randomBytes(20)]);
50
- const recovered2 = deserializeField(paddedBuf, 10);
51
- expect(recovered2.elem).toEqual(field);
52
- expect(recovered2.adv).toBe(32);
53
- });
54
-
55
- it('serialize buffer array to vector and deserialize it back', () => {
56
- // Array of uint32
57
- const uintArr = [7, 13, 16];
58
- const uintBufArr = uintArr.map(num => {
59
- const uintBuf = Buffer.alloc(4);
60
- uintBuf.writeUInt32BE(num, 0);
61
- return uintBuf;
62
- });
63
- const uintArrVec = serializeBufferArrayToVector(uintBufArr);
64
- expect(uintArrVec.length).toBe(4 + 4 * 3);
65
-
66
- const recoveredUintArr = deserializeArrayFromVector(deserializeUInt32, uintArrVec);
67
- expect(recoveredUintArr.elem).toEqual(uintArr);
68
- expect(recoveredUintArr.adv).toEqual(4 + 4 * 3);
69
-
70
- const paddedUintArrVec = Buffer.concat([randomBytes(10), uintArrVec, randomBytes(20)]);
71
- const recoveredUintArr2 = deserializeArrayFromVector(deserializeUInt32, paddedUintArrVec, 10);
72
- expect(recoveredUintArr2.elem).toEqual(uintArr);
73
- expect(recoveredUintArr2.adv).toEqual(4 + 4 * 3);
74
-
75
- // Array of field
76
- const fieldArr = [Fr.random(), Fr.random(), Fr.random()];
77
- const fieldArrVec = serializeBufferArrayToVector(fieldArr.map(fr => fr.toBuffer()));
78
- expect(fieldArrVec.length).toBe(4 + 32 * 3);
79
-
80
- const recoveredFieldArr = deserializeArrayFromVector(deserializeField, fieldArrVec);
81
- expect(recoveredFieldArr.elem).toEqual(fieldArr);
82
- expect(recoveredFieldArr.adv).toEqual(4 + 32 * 3);
83
-
84
- const paddedFieldVec = Buffer.concat([randomBytes(10), fieldArrVec, randomBytes(20)]);
85
- const recoveredFieldArr2 = deserializeArrayFromVector(deserializeField, paddedFieldVec, 10);
86
- expect(recoveredFieldArr2.elem).toEqual(fieldArr);
87
- expect(recoveredFieldArr2.adv).toEqual(4 + 32 * 3);
88
- });
89
- });
@@ -1,28 +0,0 @@
1
- import { readFile } from 'fs/promises';
2
- import { dirname } from 'path';
3
-
4
- import { fileURLToPath } from '../url/index.js';
5
- import { WasmModule } from './wasm_module.js';
6
-
7
- /**
8
- * Fetch a simple WASM.
9
- */
10
- async function fetchCode() {
11
- const __dirname = dirname(fileURLToPath(import.meta.url));
12
- return await readFile(`${__dirname}/fixtures/gcd.wasm`);
13
- }
14
-
15
- describe('simple wasm', () => {
16
- let wasm!: WasmModule;
17
-
18
- beforeAll(async () => {
19
- wasm = new WasmModule(await fetchCode(), () => ({
20
- /*no imports*/
21
- }));
22
- await wasm.init(1, 1, /* No init method */ null);
23
- });
24
-
25
- it('should call gcd with correct result', () => {
26
- expect(wasm.call('gcd', 12312, 12123)).toBe(27);
27
- });
28
- });
@@ -1,5 +0,0 @@
1
- {
2
- "extends": ".",
3
- "references": [],
4
- "exclude": ["src/**/*.test.ts"]
5
- }
package/tsconfig.json DELETED
@@ -1,10 +0,0 @@
1
- {
2
- "extends": "..",
3
- "compilerOptions": {
4
- "outDir": "dest",
5
- "rootDir": "src",
6
- "tsBuildInfoFile": ".tsbuildinfo"
7
- },
8
- "include": ["src"],
9
- "references": []
10
- }