@o1-labs/mina-archive-node-graphql 0.0.6
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/README.md +321 -0
- package/build/benchmark/setup.js +32 -0
- package/build/benchmark/setup.js.map +1 -0
- package/build/src/blockchain/constants.js +2 -0
- package/build/src/blockchain/constants.js.map +1 -0
- package/build/src/blockchain/types.js +7 -0
- package/build/src/blockchain/types.js.map +1 -0
- package/build/src/blockchain/utils.js +39 -0
- package/build/src/blockchain/utils.js.map +1 -0
- package/build/src/consensus/mina-consensus.js +59 -0
- package/build/src/consensus/mina-consensus.js.map +1 -0
- package/build/src/context.js +10 -0
- package/build/src/context.js.map +1 -0
- package/build/src/db/archive-node-adapter/archive-node-adapter.interface.js +2 -0
- package/build/src/db/archive-node-adapter/archive-node-adapter.interface.js.map +1 -0
- package/build/src/db/archive-node-adapter/archive-node-adapter.js +47 -0
- package/build/src/db/archive-node-adapter/archive-node-adapter.js.map +1 -0
- package/build/src/db/sql/events-actions/queries.js +438 -0
- package/build/src/db/sql/events-actions/queries.js.map +1 -0
- package/build/src/db/sql/events-actions/types.js +2 -0
- package/build/src/db/sql/events-actions/types.js.map +1 -0
- package/build/src/errors/error.js +17 -0
- package/build/src/errors/error.js.map +1 -0
- package/build/src/index.js +27 -0
- package/build/src/index.js.map +1 -0
- package/build/src/resolvers-types.js +8 -0
- package/build/src/resolvers-types.js.map +1 -0
- package/build/src/resolvers.js +67 -0
- package/build/src/resolvers.js.map +1 -0
- package/build/src/server/plugins.js +39 -0
- package/build/src/server/plugins.js.map +1 -0
- package/build/src/server/server.js +25 -0
- package/build/src/server/server.js.map +1 -0
- package/build/src/services/actions-service/actions-service.interface.js +2 -0
- package/build/src/services/actions-service/actions-service.interface.js.map +1 -0
- package/build/src/services/actions-service/actions-service.js +94 -0
- package/build/src/services/actions-service/actions-service.js.map +1 -0
- package/build/src/services/blocks-service/blocks-service.interface.js +2 -0
- package/build/src/services/blocks-service/blocks-service.interface.js.map +1 -0
- package/build/src/services/blocks-service/blocks-service.js +263 -0
- package/build/src/services/blocks-service/blocks-service.js.map +1 -0
- package/build/src/services/data-adapters/database-row-adapters.js +116 -0
- package/build/src/services/data-adapters/database-row-adapters.js.map +1 -0
- package/build/src/services/events-service/events-service.interface.js +2 -0
- package/build/src/services/events-service/events-service.interface.js.map +1 -0
- package/build/src/services/events-service/events-service.js +64 -0
- package/build/src/services/events-service/events-service.js.map +1 -0
- package/build/src/services/network-service/network-service.interface.js +2 -0
- package/build/src/services/network-service/network-service.interface.js.map +1 -0
- package/build/src/services/network-service/network-service.js +31 -0
- package/build/src/services/network-service/network-service.js.map +1 -0
- package/build/src/tracing/jaeger-setup.js +39 -0
- package/build/src/tracing/jaeger-setup.js.map +1 -0
- package/build/src/tracing/jaeger-tracing.js +29 -0
- package/build/src/tracing/jaeger-tracing.js.map +1 -0
- package/build/src/tracing/tracer.js +31 -0
- package/build/src/tracing/tracer.js.map +1 -0
- package/build/tests/__mocks__/generate_mock_data.js +13 -0
- package/build/tests/__mocks__/generate_mock_data.js.map +1 -0
- package/build/tests/consensus/run-compare.js +40 -0
- package/build/tests/consensus/run-compare.js.map +1 -0
- package/build/tests/consensus/select-consensus-precomputed.js +80 -0
- package/build/tests/consensus/select-consensus-precomputed.js.map +1 -0
- package/build/tests/consensus/types.js +15 -0
- package/build/tests/consensus/types.js.map +1 -0
- package/build/tests/devnet-dump/devnet-dump.test.js +311 -0
- package/build/tests/devnet-dump/devnet-dump.test.js.map +1 -0
- package/build/tests/devnet-dump/setup.js +58 -0
- package/build/tests/devnet-dump/setup.js.map +1 -0
- package/build/tests/integration/integration.test.js +226 -0
- package/build/tests/integration/integration.test.js.map +1 -0
- package/build/tests/integration/setup.js +82 -0
- package/build/tests/integration/setup.js.map +1 -0
- package/build/tests/live-api/actions.test.js +4 -0
- package/build/tests/live-api/actions.test.js.map +1 -0
- package/build/tests/live-api/blocks.test.js +116 -0
- package/build/tests/live-api/blocks.test.js.map +1 -0
- package/build/tests/live-api/events.test.js +97 -0
- package/build/tests/live-api/events.test.js.map +1 -0
- package/build/tests/live-api/networkState.test.js +27 -0
- package/build/tests/live-api/networkState.test.js.map +1 -0
- package/build/tests/live-network/live-network.test.js +144 -0
- package/build/tests/live-network/live-network.test.js.map +1 -0
- package/build/tests/live-network/setup.js +206 -0
- package/build/tests/live-network/setup.js.map +1 -0
- package/build/tests/resolvers.test.js +475 -0
- package/build/tests/resolvers.test.js.map +1 -0
- package/build/tests/services/actions-service/actions-service.test.js +124 -0
- package/build/tests/services/actions-service/actions-service.test.js.map +1 -0
- package/build/tests/services/blocks-service/blocks-service.test.js +348 -0
- package/build/tests/services/blocks-service/blocks-service.test.js.map +1 -0
- package/build/tests/services/events-service/events-service.test.js +185 -0
- package/build/tests/services/events-service/events-service.test.js.map +1 -0
- package/build/tests/test-helpers.js +11 -0
- package/build/tests/test-helpers.js.map +1 -0
- package/build/tests/unit/blockchain-utils.test.js +106 -0
- package/build/tests/unit/blockchain-utils.test.js.map +1 -0
- package/build/tests/unit/consensus.test.js +154 -0
- package/build/tests/unit/consensus.test.js.map +1 -0
- package/build/tests/unit/error-handling.test.js +52 -0
- package/build/tests/unit/error-handling.test.js.map +1 -0
- package/build/tests/utils.test.js +313 -0
- package/build/tests/utils.test.js.map +1 -0
- package/build/zkapp/contract.js +144 -0
- package/build/zkapp/contract.js.map +1 -0
- package/build/zkapp/utils.js +174 -0
- package/build/zkapp/utils.js.map +1 -0
- package/package.json +85 -0
- package/schema.graphql +221 -0
- package/src/blockchain/constants.ts +2 -0
- package/src/blockchain/types.ts +121 -0
- package/src/blockchain/utils.ts +54 -0
- package/src/consensus/mina-consensus.ts +137 -0
- package/src/context.ts +18 -0
- package/src/db/archive-node-adapter/archive-node-adapter.interface.ts +23 -0
- package/src/db/archive-node-adapter/archive-node-adapter.ts +101 -0
- package/src/db/sql/events-actions/queries.ts +490 -0
- package/src/db/sql/events-actions/types.ts +208 -0
- package/src/envionment.d.ts +18 -0
- package/src/errors/error.ts +20 -0
- package/src/index.ts +31 -0
- package/src/resolvers-types.ts +754 -0
- package/src/resolvers.ts +102 -0
- package/src/server/plugins.ts +56 -0
- package/src/server/server.ts +30 -0
- package/src/services/actions-service/actions-service.interface.ts +9 -0
- package/src/services/actions-service/actions-service.ts +195 -0
- package/src/services/blocks-service/blocks-service.interface.ts +11 -0
- package/src/services/blocks-service/blocks-service.ts +407 -0
- package/src/services/data-adapters/database-row-adapters.ts +261 -0
- package/src/services/events-service/events-service.interface.ts +6 -0
- package/src/services/events-service/events-service.ts +118 -0
- package/src/services/network-service/network-service.interface.ts +5 -0
- package/src/services/network-service/network-service.ts +53 -0
- package/src/tracing/jaeger-setup.ts +65 -0
- package/src/tracing/jaeger-tracing.ts +44 -0
- package/src/tracing/tracer.ts +52 -0
- package/tsconfig.json +104 -0
|
@@ -0,0 +1,348 @@
|
|
|
1
|
+
import { test, before, describe } from 'node:test';
|
|
2
|
+
import assert from 'node:assert';
|
|
3
|
+
import { BlocksService, } from '../../../src/services/blocks-service/blocks-service.js';
|
|
4
|
+
import { makeClient } from '../../test-helpers.js';
|
|
5
|
+
describe('BlocksService', () => {
|
|
6
|
+
let service;
|
|
7
|
+
before(() => {
|
|
8
|
+
service = new BlocksService(makeClient());
|
|
9
|
+
});
|
|
10
|
+
describe('rowsToBlocks', () => {
|
|
11
|
+
const baseRow = {
|
|
12
|
+
id: 1,
|
|
13
|
+
height: 100,
|
|
14
|
+
creator: 'B62qtest1',
|
|
15
|
+
state_hash: '3NKtest1',
|
|
16
|
+
parent_hash: '3NKparent1',
|
|
17
|
+
timestamp: '1700000000000',
|
|
18
|
+
coinbase_amount: '720000000000',
|
|
19
|
+
};
|
|
20
|
+
test('maps basic block fields correctly', () => {
|
|
21
|
+
const blocks = service.rowsToBlocks([baseRow]);
|
|
22
|
+
assert.strictEqual(blocks.length, 1);
|
|
23
|
+
assert.strictEqual(blocks[0].blockHeight, 100);
|
|
24
|
+
assert.strictEqual(blocks[0].creator, 'B62qtest1');
|
|
25
|
+
assert.strictEqual(blocks[0].stateHash, '3NKtest1');
|
|
26
|
+
assert.strictEqual(blocks[0].parentHash, '');
|
|
27
|
+
assert.strictEqual(blocks[0].dateTime, new Date(1700000000000).toISOString());
|
|
28
|
+
assert.strictEqual(blocks[0].transactions.coinbase, '720000000000');
|
|
29
|
+
});
|
|
30
|
+
test('returns empty arrays when no transaction maps provided', () => {
|
|
31
|
+
const blocks = service.rowsToBlocks([baseRow]);
|
|
32
|
+
assert.deepStrictEqual(blocks[0].transactions.userCommands, []);
|
|
33
|
+
assert.deepStrictEqual(blocks[0].transactions.zkappCommands, []);
|
|
34
|
+
assert.deepStrictEqual(blocks[0].transactions.feeTransfer, []);
|
|
35
|
+
});
|
|
36
|
+
test('defaults coinbase to "0" when coinbase_amount is missing', () => {
|
|
37
|
+
const row = { ...baseRow, coinbase_amount: undefined };
|
|
38
|
+
const blocks = service.rowsToBlocks([row]);
|
|
39
|
+
assert.strictEqual(blocks[0].transactions.coinbase, '0');
|
|
40
|
+
});
|
|
41
|
+
test('attaches user commands to correct block by id', () => {
|
|
42
|
+
const uc = {
|
|
43
|
+
hash: 'CkpTest1',
|
|
44
|
+
kind: 'PAYMENT',
|
|
45
|
+
from: 'B62qFrom',
|
|
46
|
+
to: 'B62qTo',
|
|
47
|
+
amount: '1000000000',
|
|
48
|
+
fee: '10000000',
|
|
49
|
+
memo: 'E4YM2',
|
|
50
|
+
nonce: 5,
|
|
51
|
+
status: 'applied',
|
|
52
|
+
failureReason: null,
|
|
53
|
+
};
|
|
54
|
+
const ucMap = new Map([[1, [uc]]]);
|
|
55
|
+
const blocks = service.rowsToBlocks([baseRow], ucMap);
|
|
56
|
+
assert.strictEqual(blocks[0].transactions.userCommands.length, 1);
|
|
57
|
+
assert.deepStrictEqual(blocks[0].transactions.userCommands[0], uc);
|
|
58
|
+
});
|
|
59
|
+
test('attaches zkapp commands to correct block by id', () => {
|
|
60
|
+
const zk = {
|
|
61
|
+
hash: 'CkpZkTest1',
|
|
62
|
+
feePayer: 'B62qFeePayer',
|
|
63
|
+
fee: '20000000',
|
|
64
|
+
memo: 'E4YM2',
|
|
65
|
+
status: 'applied',
|
|
66
|
+
failureReason: null,
|
|
67
|
+
};
|
|
68
|
+
const zkMap = new Map([[1, [zk]]]);
|
|
69
|
+
const blocks = service.rowsToBlocks([baseRow], new Map(), zkMap);
|
|
70
|
+
assert.strictEqual(blocks[0].transactions.zkappCommands.length, 1);
|
|
71
|
+
assert.deepStrictEqual(blocks[0].transactions.zkappCommands[0], zk);
|
|
72
|
+
});
|
|
73
|
+
test('attaches fee transfers to correct block by id', () => {
|
|
74
|
+
const ft = {
|
|
75
|
+
recipient: 'B62qRecipient',
|
|
76
|
+
fee: '5000000',
|
|
77
|
+
type: 'fee_transfer',
|
|
78
|
+
};
|
|
79
|
+
const ftMap = new Map([[1, [ft]]]);
|
|
80
|
+
const blocks = service.rowsToBlocks([baseRow], new Map(), new Map(), ftMap);
|
|
81
|
+
assert.strictEqual(blocks[0].transactions.feeTransfer.length, 1);
|
|
82
|
+
assert.deepStrictEqual(blocks[0].transactions.feeTransfer[0], ft);
|
|
83
|
+
});
|
|
84
|
+
test('returns empty arrays for blocks with no matching transaction data', () => {
|
|
85
|
+
const ucMap = new Map([[999, []]]);
|
|
86
|
+
const blocks = service.rowsToBlocks([baseRow], ucMap);
|
|
87
|
+
assert.deepStrictEqual(blocks[0].transactions.userCommands, []);
|
|
88
|
+
assert.deepStrictEqual(blocks[0].transactions.zkappCommands, []);
|
|
89
|
+
assert.deepStrictEqual(blocks[0].transactions.feeTransfer, []);
|
|
90
|
+
});
|
|
91
|
+
test('correctly distributes transactions across multiple blocks', () => {
|
|
92
|
+
const row1 = { ...baseRow, id: 1, height: 100 };
|
|
93
|
+
const row2 = { ...baseRow, id: 2, height: 101, state_hash: '3NKtest2' };
|
|
94
|
+
const uc1 = {
|
|
95
|
+
hash: 'CkpUc1',
|
|
96
|
+
kind: 'PAYMENT',
|
|
97
|
+
from: 'B62qA',
|
|
98
|
+
to: 'B62qB',
|
|
99
|
+
amount: '100',
|
|
100
|
+
fee: '10',
|
|
101
|
+
memo: '',
|
|
102
|
+
nonce: 1,
|
|
103
|
+
status: 'applied',
|
|
104
|
+
failureReason: null,
|
|
105
|
+
};
|
|
106
|
+
const uc2 = {
|
|
107
|
+
hash: 'CkpUc2',
|
|
108
|
+
kind: 'STAKE_DELEGATION',
|
|
109
|
+
from: 'B62qC',
|
|
110
|
+
to: 'B62qD',
|
|
111
|
+
amount: '0',
|
|
112
|
+
fee: '20',
|
|
113
|
+
memo: '',
|
|
114
|
+
nonce: 2,
|
|
115
|
+
status: 'applied',
|
|
116
|
+
failureReason: null,
|
|
117
|
+
};
|
|
118
|
+
const ucMap = new Map([
|
|
119
|
+
[1, [uc1]],
|
|
120
|
+
[2, [uc2]],
|
|
121
|
+
]);
|
|
122
|
+
const blocks = service.rowsToBlocks([row1, row2], ucMap);
|
|
123
|
+
assert.strictEqual(blocks[0].transactions.userCommands.length, 1);
|
|
124
|
+
assert.strictEqual(blocks[0].transactions.userCommands[0].hash, 'CkpUc1');
|
|
125
|
+
assert.strictEqual(blocks[1].transactions.userCommands.length, 1);
|
|
126
|
+
assert.strictEqual(blocks[1].transactions.userCommands[0].hash, 'CkpUc2');
|
|
127
|
+
});
|
|
128
|
+
test('handles empty rows array', () => {
|
|
129
|
+
const blocks = service.rowsToBlocks([]);
|
|
130
|
+
assert.strictEqual(blocks.length, 0);
|
|
131
|
+
});
|
|
132
|
+
test('handles multiple transactions per block', () => {
|
|
133
|
+
const uc1 = {
|
|
134
|
+
hash: 'CkpA',
|
|
135
|
+
kind: 'PAYMENT',
|
|
136
|
+
from: 'B62qA',
|
|
137
|
+
to: 'B62qB',
|
|
138
|
+
amount: '100',
|
|
139
|
+
fee: '10',
|
|
140
|
+
memo: '',
|
|
141
|
+
nonce: 1,
|
|
142
|
+
status: 'applied',
|
|
143
|
+
failureReason: null,
|
|
144
|
+
};
|
|
145
|
+
const uc2 = {
|
|
146
|
+
hash: 'CkpB',
|
|
147
|
+
kind: 'PAYMENT',
|
|
148
|
+
from: 'B62qC',
|
|
149
|
+
to: 'B62qD',
|
|
150
|
+
amount: '200',
|
|
151
|
+
fee: '20',
|
|
152
|
+
memo: '',
|
|
153
|
+
nonce: 2,
|
|
154
|
+
status: 'applied',
|
|
155
|
+
failureReason: null,
|
|
156
|
+
};
|
|
157
|
+
const ucMap = new Map([[1, [uc1, uc2]]]);
|
|
158
|
+
const blocks = service.rowsToBlocks([baseRow], ucMap);
|
|
159
|
+
assert.strictEqual(blocks[0].transactions.userCommands.length, 2);
|
|
160
|
+
assert.strictEqual(blocks[0].transactions.userCommands[0].hash, 'CkpA');
|
|
161
|
+
assert.strictEqual(blocks[0].transactions.userCommands[1].hash, 'CkpB');
|
|
162
|
+
});
|
|
163
|
+
});
|
|
164
|
+
describe('mapUserCommandRow', () => {
|
|
165
|
+
test('maps all fields from DB row to domain type', () => {
|
|
166
|
+
const row = {
|
|
167
|
+
block_id: 1,
|
|
168
|
+
hash: '5JvC8BFT69YF5WWb4J2r9kCJRLXTUq8rk5XDahtaTYEC817FGEZU',
|
|
169
|
+
kind: 'payment',
|
|
170
|
+
from: 'B62qrmRJosdwWKwFXjfLEA7fNaPDkAiSkGmGDLiPQkphCcnC7agyYEZ',
|
|
171
|
+
to: 'B62qrmRJosdwWKwFXjfLEA7fNaPDkAiSkGmGDLiPQkphCcnC7agyYEZ',
|
|
172
|
+
amount: '10000000',
|
|
173
|
+
fee: '10000000',
|
|
174
|
+
memo: 'E4YxxEftXeg4FRz1Y93u8Ja2Zd5mcw6CZmmVn5m3HJgkFEt2LPcf5',
|
|
175
|
+
nonce: 99693,
|
|
176
|
+
status: 'applied',
|
|
177
|
+
failure_reason: null,
|
|
178
|
+
};
|
|
179
|
+
const result = service.mapUserCommandRow(row);
|
|
180
|
+
assert.strictEqual(result.hash, row.hash);
|
|
181
|
+
assert.strictEqual(result.kind, 'payment');
|
|
182
|
+
assert.strictEqual(result.from, row.from);
|
|
183
|
+
assert.strictEqual(result.to, row.to);
|
|
184
|
+
assert.strictEqual(result.amount, '10000000');
|
|
185
|
+
assert.strictEqual(result.fee, '10000000');
|
|
186
|
+
assert.strictEqual(result.memo, row.memo);
|
|
187
|
+
assert.strictEqual(result.nonce, 99693);
|
|
188
|
+
assert.strictEqual(result.status, 'applied');
|
|
189
|
+
assert.strictEqual(result.failureReason, null);
|
|
190
|
+
});
|
|
191
|
+
test('maps failure_reason to failureReason when present', () => {
|
|
192
|
+
const row = {
|
|
193
|
+
block_id: 1,
|
|
194
|
+
hash: 'CkpTest',
|
|
195
|
+
kind: 'payment',
|
|
196
|
+
from: 'B62qA',
|
|
197
|
+
to: 'B62qB',
|
|
198
|
+
amount: '0',
|
|
199
|
+
fee: '10000000',
|
|
200
|
+
memo: '',
|
|
201
|
+
nonce: 1,
|
|
202
|
+
status: 'failed',
|
|
203
|
+
failure_reason: 'Amount_insufficient_to_create_account',
|
|
204
|
+
};
|
|
205
|
+
const result = service.mapUserCommandRow(row);
|
|
206
|
+
assert.strictEqual(result.failureReason, 'Amount_insufficient_to_create_account');
|
|
207
|
+
});
|
|
208
|
+
});
|
|
209
|
+
describe('mapZkAppCommandRow', () => {
|
|
210
|
+
test('maps all fields from DB row to domain type', () => {
|
|
211
|
+
const row = {
|
|
212
|
+
block_id: 1,
|
|
213
|
+
hash: '5Ju4L33n8e9LgYYtUfynLwpK4cL8m3gnKAS1yYctjSbcqS3KtYRe',
|
|
214
|
+
fee_payer: 'B62qnnpLG75StiXuw8qTJmsPYSzFx6eWQQFjiqe7JEP7hYCeYJphdcP',
|
|
215
|
+
fee: '26100000',
|
|
216
|
+
memo: 'E4YM2vTHhWEg66xpj52JErHUBU4pZ1yageL4TVDDpTTSsv8mK6YaH',
|
|
217
|
+
status: 'applied',
|
|
218
|
+
failure_reasons_ids: null,
|
|
219
|
+
};
|
|
220
|
+
const result = service.mapZkAppCommandRow(row);
|
|
221
|
+
assert.strictEqual(result.hash, row.hash);
|
|
222
|
+
assert.strictEqual(result.feePayer, row.fee_payer);
|
|
223
|
+
assert.strictEqual(result.fee, '26100000');
|
|
224
|
+
assert.strictEqual(result.memo, row.memo);
|
|
225
|
+
assert.strictEqual(result.status, 'applied');
|
|
226
|
+
assert.strictEqual(result.failureReason, null);
|
|
227
|
+
});
|
|
228
|
+
test('maps failure_reasons_ids to failureReason when present as string', () => {
|
|
229
|
+
const row = {
|
|
230
|
+
block_id: 1,
|
|
231
|
+
hash: 'CkpTest',
|
|
232
|
+
fee_payer: 'B62qA',
|
|
233
|
+
fee: '10000000',
|
|
234
|
+
memo: '',
|
|
235
|
+
status: 'failed',
|
|
236
|
+
failure_reasons_ids: '{1,2}',
|
|
237
|
+
};
|
|
238
|
+
const result = service.mapZkAppCommandRow(row);
|
|
239
|
+
assert.strictEqual(result.failureReason, '{1,2}');
|
|
240
|
+
});
|
|
241
|
+
test('maps failure_reasons_ids to failureReason when present as array', () => {
|
|
242
|
+
const row = {
|
|
243
|
+
block_id: 1,
|
|
244
|
+
hash: 'CkpTest',
|
|
245
|
+
fee_payer: 'B62qA',
|
|
246
|
+
fee: '10000000',
|
|
247
|
+
memo: '',
|
|
248
|
+
status: 'failed',
|
|
249
|
+
failure_reasons_ids: [6, 165],
|
|
250
|
+
};
|
|
251
|
+
const result = service.mapZkAppCommandRow(row);
|
|
252
|
+
assert.strictEqual(result.failureReason, '6,165');
|
|
253
|
+
});
|
|
254
|
+
});
|
|
255
|
+
describe('mapFeeTransferRow', () => {
|
|
256
|
+
test('maps all fields from DB row to domain type', () => {
|
|
257
|
+
const row = {
|
|
258
|
+
block_id: 1,
|
|
259
|
+
recipient: 'B62qra5hPy6K9mSRYHDUjvyAmXVKvz7ywa1cqqjpdGwB1u4wzG4Uyb1',
|
|
260
|
+
fee: '10000000',
|
|
261
|
+
type: 'fee_transfer',
|
|
262
|
+
};
|
|
263
|
+
const result = service.mapFeeTransferRow(row);
|
|
264
|
+
assert.strictEqual(result.recipient, row.recipient);
|
|
265
|
+
assert.strictEqual(result.fee, '10000000');
|
|
266
|
+
assert.strictEqual(result.type, 'fee_transfer');
|
|
267
|
+
});
|
|
268
|
+
});
|
|
269
|
+
describe('groupBy', () => {
|
|
270
|
+
test('groups rows by key and applies mapper', () => {
|
|
271
|
+
const rows = [
|
|
272
|
+
{ block_id: 1, val: 'a' },
|
|
273
|
+
{ block_id: 2, val: 'b' },
|
|
274
|
+
{ block_id: 1, val: 'c' },
|
|
275
|
+
];
|
|
276
|
+
const result = service.groupBy(rows, (r) => r.block_id, (r) => r.val);
|
|
277
|
+
assert.deepStrictEqual(result.get(1), ['a', 'c']);
|
|
278
|
+
assert.deepStrictEqual(result.get(2), ['b']);
|
|
279
|
+
assert.strictEqual(result.size, 2);
|
|
280
|
+
});
|
|
281
|
+
test('returns empty map for empty input', () => {
|
|
282
|
+
const result = service.groupBy([], () => 0, (r) => r);
|
|
283
|
+
assert.strictEqual(result.size, 0);
|
|
284
|
+
});
|
|
285
|
+
});
|
|
286
|
+
describe('groupBy + mapper pipeline (raw DB rows to block transactions)', () => {
|
|
287
|
+
test('raw user command rows are grouped and mapped correctly for rowsToBlocks', () => {
|
|
288
|
+
const rawRows = [
|
|
289
|
+
{
|
|
290
|
+
block_id: 10,
|
|
291
|
+
hash: 'CkpTx1',
|
|
292
|
+
kind: 'payment',
|
|
293
|
+
from: 'B62qA',
|
|
294
|
+
to: 'B62qB',
|
|
295
|
+
amount: '5000',
|
|
296
|
+
fee: '100',
|
|
297
|
+
memo: 'E4Ymemo1',
|
|
298
|
+
nonce: 1,
|
|
299
|
+
status: 'applied',
|
|
300
|
+
failure_reason: null,
|
|
301
|
+
},
|
|
302
|
+
{
|
|
303
|
+
block_id: 20,
|
|
304
|
+
hash: 'CkpTx2',
|
|
305
|
+
kind: 'delegation',
|
|
306
|
+
from: 'B62qC',
|
|
307
|
+
to: 'B62qD',
|
|
308
|
+
amount: '0',
|
|
309
|
+
fee: '200',
|
|
310
|
+
memo: 'E4Ymemo2',
|
|
311
|
+
nonce: 3,
|
|
312
|
+
status: 'applied',
|
|
313
|
+
failure_reason: null,
|
|
314
|
+
},
|
|
315
|
+
{
|
|
316
|
+
block_id: 10,
|
|
317
|
+
hash: 'CkpTx3',
|
|
318
|
+
kind: 'payment',
|
|
319
|
+
from: 'B62qE',
|
|
320
|
+
to: 'B62qF',
|
|
321
|
+
amount: '9000',
|
|
322
|
+
fee: '300',
|
|
323
|
+
memo: '',
|
|
324
|
+
nonce: 7,
|
|
325
|
+
status: 'failed',
|
|
326
|
+
failure_reason: 'Amount_insufficient_to_create_account',
|
|
327
|
+
},
|
|
328
|
+
];
|
|
329
|
+
const ucMap = service.groupBy(rawRows, (r) => r.block_id, (r) => service.mapUserCommandRow(r));
|
|
330
|
+
const blockRows = [
|
|
331
|
+
{ id: 10, height: 500, creator: 'B62qCreator1', state_hash: '3NK1', parent_hash: '3NKp1', timestamp: '1700000000000', coinbase_amount: '720000000000' },
|
|
332
|
+
{ id: 20, height: 501, creator: 'B62qCreator2', state_hash: '3NK2', parent_hash: '3NKp2', timestamp: '1700000060000', coinbase_amount: '720000000000' },
|
|
333
|
+
];
|
|
334
|
+
const blocks = service.rowsToBlocks(blockRows, ucMap);
|
|
335
|
+
assert.strictEqual(blocks[0].transactions.userCommands.length, 2);
|
|
336
|
+
assert.strictEqual(blocks[0].transactions.userCommands[0].hash, 'CkpTx1');
|
|
337
|
+
assert.strictEqual(blocks[0].transactions.userCommands[0].kind, 'payment');
|
|
338
|
+
assert.strictEqual(blocks[0].transactions.userCommands[1].hash, 'CkpTx3');
|
|
339
|
+
assert.strictEqual(blocks[0].transactions.userCommands[1].failureReason, 'Amount_insufficient_to_create_account');
|
|
340
|
+
assert.strictEqual(blocks[1].transactions.userCommands.length, 1);
|
|
341
|
+
assert.strictEqual(blocks[1].transactions.userCommands[0].hash, 'CkpTx2');
|
|
342
|
+
assert.strictEqual(blocks[1].transactions.userCommands[0].kind, 'delegation');
|
|
343
|
+
assert.deepStrictEqual(blocks[0].transactions.zkappCommands, []);
|
|
344
|
+
assert.deepStrictEqual(blocks[1].transactions.feeTransfer, []);
|
|
345
|
+
});
|
|
346
|
+
});
|
|
347
|
+
});
|
|
348
|
+
//# sourceMappingURL=blocks-service.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"blocks-service.test.js","sourceRoot":"","sources":["../../../../tests/services/blocks-service/blocks-service.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,185 @@
|
|
|
1
|
+
import { describe, test } from 'node:test';
|
|
2
|
+
import assert from 'node:assert';
|
|
3
|
+
import { EventsService } from '../../../src/services/events-service/events-service.js';
|
|
4
|
+
import { makeClient } from '../../test-helpers.js';
|
|
5
|
+
function makeRow(overrides = {}) {
|
|
6
|
+
return {
|
|
7
|
+
block_id: 1,
|
|
8
|
+
zkapp_id: 1,
|
|
9
|
+
state_hash: 'state_hash_1',
|
|
10
|
+
parent_hash: 'parent_hash_1',
|
|
11
|
+
height: '100',
|
|
12
|
+
global_slot_since_genesis: '200',
|
|
13
|
+
global_slot_since_hard_fork: '200',
|
|
14
|
+
authorization_kind: 'Proof',
|
|
15
|
+
timestamp: '1700000000000',
|
|
16
|
+
chain_status: 'canonical',
|
|
17
|
+
sequence_number: 0,
|
|
18
|
+
ledger_hash: 'ledger_hash_1',
|
|
19
|
+
distance_from_max_block_height: '5',
|
|
20
|
+
zkapp_account_update_id: 1,
|
|
21
|
+
zkapp_account_updates_ids: [1],
|
|
22
|
+
status: 'applied',
|
|
23
|
+
memo: '',
|
|
24
|
+
hash: 'tx_hash_1',
|
|
25
|
+
account_update_event_id: 1,
|
|
26
|
+
event_element_ids: [10],
|
|
27
|
+
event_field_elements_id: 10,
|
|
28
|
+
event_field_element_ids: [100],
|
|
29
|
+
field_id: 100,
|
|
30
|
+
field_value: 'value_a',
|
|
31
|
+
last_vrf_output: 'AABB',
|
|
32
|
+
...overrides,
|
|
33
|
+
};
|
|
34
|
+
}
|
|
35
|
+
describe('EventsService', () => {
|
|
36
|
+
describe('blocksToEvents', () => {
|
|
37
|
+
let service;
|
|
38
|
+
test('transforms single block with single event', () => {
|
|
39
|
+
service = new EventsService(makeClient());
|
|
40
|
+
const stateHash = 'block_abc';
|
|
41
|
+
const txHash = 'tx_001';
|
|
42
|
+
const fieldId = 42;
|
|
43
|
+
const expectedFieldValue = 'my_field_val';
|
|
44
|
+
const expectedHeight = '150';
|
|
45
|
+
const row = makeRow({
|
|
46
|
+
state_hash: stateHash,
|
|
47
|
+
hash: txHash,
|
|
48
|
+
height: expectedHeight,
|
|
49
|
+
field_id: fieldId,
|
|
50
|
+
field_value: expectedFieldValue,
|
|
51
|
+
event_field_element_ids: [fieldId],
|
|
52
|
+
});
|
|
53
|
+
const blocksMap = new Map();
|
|
54
|
+
const txMap = new Map();
|
|
55
|
+
txMap.set(txHash, [row]);
|
|
56
|
+
blocksMap.set(stateHash, txMap);
|
|
57
|
+
const fieldValues = new Map([[String(fieldId), expectedFieldValue]]);
|
|
58
|
+
const result = service.blocksToEvents(blocksMap, fieldValues);
|
|
59
|
+
assert.strictEqual(result.length, 1);
|
|
60
|
+
assert.strictEqual(result[0].blockInfo.height, Number(expectedHeight));
|
|
61
|
+
assert.strictEqual(result[0].blockInfo.stateHash, stateHash);
|
|
62
|
+
assert.strictEqual(result[0].eventData.length, 1);
|
|
63
|
+
assert.deepStrictEqual(result[0].eventData[0].data, [expectedFieldValue]);
|
|
64
|
+
});
|
|
65
|
+
test('transforms block with multiple transactions', () => {
|
|
66
|
+
service = new EventsService(makeClient());
|
|
67
|
+
const stateHash = 'block_xyz';
|
|
68
|
+
const txHash1 = 'tx_a';
|
|
69
|
+
const txHash2 = 'tx_b';
|
|
70
|
+
const fieldId1 = 100;
|
|
71
|
+
const fieldId2 = 200;
|
|
72
|
+
const fieldVal1 = 'val_alpha';
|
|
73
|
+
const fieldVal2 = 'val_beta';
|
|
74
|
+
const row1 = makeRow({
|
|
75
|
+
state_hash: stateHash,
|
|
76
|
+
hash: txHash1,
|
|
77
|
+
zkapp_account_update_id: 1,
|
|
78
|
+
zkapp_account_updates_ids: [1],
|
|
79
|
+
event_field_elements_id: 10,
|
|
80
|
+
event_element_ids: [10],
|
|
81
|
+
event_field_element_ids: [fieldId1],
|
|
82
|
+
field_id: fieldId1,
|
|
83
|
+
field_value: fieldVal1,
|
|
84
|
+
});
|
|
85
|
+
const row2 = makeRow({
|
|
86
|
+
state_hash: stateHash,
|
|
87
|
+
hash: txHash2,
|
|
88
|
+
zkapp_account_update_id: 2,
|
|
89
|
+
zkapp_account_updates_ids: [2],
|
|
90
|
+
event_field_elements_id: 20,
|
|
91
|
+
event_element_ids: [20],
|
|
92
|
+
event_field_element_ids: [fieldId2],
|
|
93
|
+
field_id: fieldId2,
|
|
94
|
+
field_value: fieldVal2,
|
|
95
|
+
});
|
|
96
|
+
const blocksMap = new Map();
|
|
97
|
+
const txMap = new Map();
|
|
98
|
+
txMap.set(txHash1, [row1]);
|
|
99
|
+
txMap.set(txHash2, [row2]);
|
|
100
|
+
blocksMap.set(stateHash, txMap);
|
|
101
|
+
const fieldValues = new Map([
|
|
102
|
+
[String(fieldId1), fieldVal1],
|
|
103
|
+
[String(fieldId2), fieldVal2],
|
|
104
|
+
]);
|
|
105
|
+
const result = service.blocksToEvents(blocksMap, fieldValues);
|
|
106
|
+
assert.strictEqual(result.length, 1);
|
|
107
|
+
assert.strictEqual(result[0].eventData.length, 2);
|
|
108
|
+
});
|
|
109
|
+
test('transforms multiple blocks', () => {
|
|
110
|
+
service = new EventsService(makeClient());
|
|
111
|
+
const stateHash1 = 'block_1';
|
|
112
|
+
const stateHash2 = 'block_2';
|
|
113
|
+
const txHash1 = 'tx_1';
|
|
114
|
+
const txHash2 = 'tx_2';
|
|
115
|
+
const row1 = makeRow({
|
|
116
|
+
state_hash: stateHash1,
|
|
117
|
+
hash: txHash1,
|
|
118
|
+
height: '100',
|
|
119
|
+
});
|
|
120
|
+
const row2 = makeRow({
|
|
121
|
+
state_hash: stateHash2,
|
|
122
|
+
hash: txHash2,
|
|
123
|
+
height: '101',
|
|
124
|
+
});
|
|
125
|
+
const blocksMap = new Map();
|
|
126
|
+
const txMap1 = new Map();
|
|
127
|
+
txMap1.set(txHash1, [row1]);
|
|
128
|
+
blocksMap.set(stateHash1, txMap1);
|
|
129
|
+
const txMap2 = new Map();
|
|
130
|
+
txMap2.set(txHash2, [row2]);
|
|
131
|
+
blocksMap.set(stateHash2, txMap2);
|
|
132
|
+
const fieldValues = new Map([['100', 'val']]);
|
|
133
|
+
const result = service.blocksToEvents(blocksMap, fieldValues);
|
|
134
|
+
assert.strictEqual(result.length, 2);
|
|
135
|
+
});
|
|
136
|
+
test('returns empty array for empty input', () => {
|
|
137
|
+
service = new EventsService(makeClient());
|
|
138
|
+
const result = service.blocksToEvents(new Map(), new Map());
|
|
139
|
+
assert.strictEqual(result.length, 0);
|
|
140
|
+
});
|
|
141
|
+
test('handles multi-field events correctly', () => {
|
|
142
|
+
service = new EventsService(makeClient());
|
|
143
|
+
const stateHash = 'block_multi';
|
|
144
|
+
const txHash = 'tx_multi';
|
|
145
|
+
const fieldIdA = 100;
|
|
146
|
+
const fieldIdB = 101;
|
|
147
|
+
const fieldValA = 'field_a';
|
|
148
|
+
const fieldValB = 'field_b';
|
|
149
|
+
const row1 = makeRow({
|
|
150
|
+
state_hash: stateHash,
|
|
151
|
+
hash: txHash,
|
|
152
|
+
event_field_elements_id: 10,
|
|
153
|
+
event_element_ids: [10],
|
|
154
|
+
event_field_element_ids: [fieldIdA, fieldIdB],
|
|
155
|
+
field_id: fieldIdA,
|
|
156
|
+
field_value: fieldValA,
|
|
157
|
+
});
|
|
158
|
+
const row2 = makeRow({
|
|
159
|
+
state_hash: stateHash,
|
|
160
|
+
hash: txHash,
|
|
161
|
+
event_field_elements_id: 10,
|
|
162
|
+
event_element_ids: [10],
|
|
163
|
+
event_field_element_ids: [fieldIdA, fieldIdB],
|
|
164
|
+
field_id: fieldIdB,
|
|
165
|
+
field_value: fieldValB,
|
|
166
|
+
});
|
|
167
|
+
const blocksMap = new Map();
|
|
168
|
+
const txMap = new Map();
|
|
169
|
+
txMap.set(txHash, [row1, row2]);
|
|
170
|
+
blocksMap.set(stateHash, txMap);
|
|
171
|
+
const fieldValues = new Map([
|
|
172
|
+
[String(fieldIdA), fieldValA],
|
|
173
|
+
[String(fieldIdB), fieldValB],
|
|
174
|
+
]);
|
|
175
|
+
const result = service.blocksToEvents(blocksMap, fieldValues);
|
|
176
|
+
assert.strictEqual(result.length, 1);
|
|
177
|
+
assert.strictEqual(result[0].eventData.length, 1);
|
|
178
|
+
assert.deepStrictEqual(result[0].eventData[0].data, [
|
|
179
|
+
fieldValA,
|
|
180
|
+
fieldValB,
|
|
181
|
+
]);
|
|
182
|
+
});
|
|
183
|
+
});
|
|
184
|
+
});
|
|
185
|
+
//# sourceMappingURL=events-service.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"events-service.test.js","sourceRoot":"","sources":["../../../../tests/services/events-service/events-service.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAC3C,OAAO,MAAM,MAAM,aAAa,CAAC;AACjC,OAAO,EAAE,aAAa,EAAE,MAAM,wDAAwD,CAAC;AAEvF,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AAEnD,SAAS,OAAO,CACd,YAA6C,EAAE;IAE/C,OAAO;QACL,QAAQ,EAAE,CAAC;QACX,QAAQ,EAAE,CAAC;QACX,UAAU,EAAE,cAAc;QAC1B,WAAW,EAAE,eAAe;QAC5B,MAAM,EAAE,KAAK;QACb,yBAAyB,EAAE,KAAK;QAChC,2BAA2B,EAAE,KAAK;QAClC,kBAAkB,EAAE,OAAO;QAC3B,SAAS,EAAE,eAAe;QAC1B,YAAY,EAAE,WAAW;QACzB,eAAe,EAAE,CAAC;QAClB,WAAW,EAAE,eAAe;QAC5B,8BAA8B,EAAE,GAAG;QACnC,uBAAuB,EAAE,CAAC;QAC1B,yBAAyB,EAAE,CAAC,CAAC,CAAC;QAC9B,MAAM,EAAE,SAAS;QACjB,IAAI,EAAE,EAAE;QACR,IAAI,EAAE,WAAW;QACjB,uBAAuB,EAAE,CAAC;QAC1B,iBAAiB,EAAE,CAAC,EAAE,CAAC;QACvB,uBAAuB,EAAE,EAAE;QAC3B,uBAAuB,EAAE,CAAC,GAAG,CAAC;QAC9B,QAAQ,EAAE,GAAG;QACb,WAAW,EAAE,SAAS;QACtB,eAAe,EAAE,MAAM;QACvB,GAAG,SAAS;KACb,CAAC;AACJ,CAAC;AAED,QAAQ,CAAC,eAAe,EAAE,GAAG,EAAE;IAC7B,QAAQ,CAAC,gBAAgB,EAAE,GAAG,EAAE;QAC9B,IAAI,OAAsB,CAAC;QAE3B,IAAI,CAAC,2CAA2C,EAAE,GAAG,EAAE;YACrD,OAAO,GAAG,IAAI,aAAa,CAAC,UAAU,EAAE,CAAC,CAAC;YAE1C,MAAM,SAAS,GAAG,WAAW,CAAC;YAC9B,MAAM,MAAM,GAAG,QAAQ,CAAC;YACxB,MAAM,OAAO,GAAG,EAAE,CAAC;YACnB,MAAM,kBAAkB,GAAG,cAAc,CAAC;YAC1C,MAAM,cAAc,GAAG,KAAK,CAAC;YAE7B,MAAM,GAAG,GAAG,OAAO,CAAC;gBAClB,UAAU,EAAE,SAAS;gBACrB,IAAI,EAAE,MAAM;gBACZ,MAAM,EAAE,cAAc;gBACtB,QAAQ,EAAE,OAAO;gBACjB,WAAW,EAAE,kBAAkB;gBAC/B,uBAAuB,EAAE,CAAC,OAAO,CAAC;aACnC,CAAC,CAAC;YAEH,MAAM,SAAS,GAAG,IAAI,GAAG,EAAE,CAAC;YAC5B,MAAM,KAAK,GAAG,IAAI,GAAG,EAAE,CAAC;YACxB,KAAK,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;YACzB,SAAS,CAAC,GAAG,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;YAEhC,MAAM,WAAW,GAAG,IAAI,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,kBAAkB,CAAC,CAAC,CAAC,CAAC;YAErE,MAAM,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC;YAE9D,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;YACrC,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,MAAM,EAAE,MAAM,CAAC,cAAc,CAAC,CAAC,CAAC;YACvE,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;YAC7D,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;YAClD,MAAM,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,kBAAkB,CAAC,CAAC,CAAC;QAC5E,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,6CAA6C,EAAE,GAAG,EAAE;YACvD,OAAO,GAAG,IAAI,aAAa,CAAC,UAAU,EAAE,CAAC,CAAC;YAE1C,MAAM,SAAS,GAAG,WAAW,CAAC;YAC9B,MAAM,OAAO,GAAG,MAAM,CAAC;YACvB,MAAM,OAAO,GAAG,MAAM,CAAC;YACvB,MAAM,QAAQ,GAAG,GAAG,CAAC;YACrB,MAAM,QAAQ,GAAG,GAAG,CAAC;YACrB,MAAM,SAAS,GAAG,WAAW,CAAC;YAC9B,MAAM,SAAS,GAAG,UAAU,CAAC;YAE7B,MAAM,IAAI,GAAG,OAAO,CAAC;gBACnB,UAAU,EAAE,SAAS;gBACrB,IAAI,EAAE,OAAO;gBACb,uBAAuB,EAAE,CAAC;gBAC1B,yBAAyB,EAAE,CAAC,CAAC,CAAC;gBAC9B,uBAAuB,EAAE,EAAE;gBAC3B,iBAAiB,EAAE,CAAC,EAAE,CAAC;gBACvB,uBAAuB,EAAE,CAAC,QAAQ,CAAC;gBACnC,QAAQ,EAAE,QAAQ;gBAClB,WAAW,EAAE,SAAS;aACvB,CAAC,CAAC;YACH,MAAM,IAAI,GAAG,OAAO,CAAC;gBACnB,UAAU,EAAE,SAAS;gBACrB,IAAI,EAAE,OAAO;gBACb,uBAAuB,EAAE,CAAC;gBAC1B,yBAAyB,EAAE,CAAC,CAAC,CAAC;gBAC9B,uBAAuB,EAAE,EAAE;gBAC3B,iBAAiB,EAAE,CAAC,EAAE,CAAC;gBACvB,uBAAuB,EAAE,CAAC,QAAQ,CAAC;gBACnC,QAAQ,EAAE,QAAQ;gBAClB,WAAW,EAAE,SAAS;aACvB,CAAC,CAAC;YAEH,MAAM,SAAS,GAAG,IAAI,GAAG,EAAE,CAAC;YAC5B,MAAM,KAAK,GAAG,IAAI,GAAG,EAAE,CAAC;YACxB,KAAK,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC;YAC3B,KAAK,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC;YAC3B,SAAS,CAAC,GAAG,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;YAEhC,MAAM,WAAW,GAAG,IAAI,GAAG,CAAC;gBAC1B,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,SAAS,CAAC;gBAC7B,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,SAAS,CAAC;aAC9B,CAAC,CAAC;YAEH,MAAM,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC;YAE9D,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;YACrC,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;QACpD,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,4BAA4B,EAAE,GAAG,EAAE;YACtC,OAAO,GAAG,IAAI,aAAa,CAAC,UAAU,EAAE,CAAC,CAAC;YAE1C,MAAM,UAAU,GAAG,SAAS,CAAC;YAC7B,MAAM,UAAU,GAAG,SAAS,CAAC;YAC7B,MAAM,OAAO,GAAG,MAAM,CAAC;YACvB,MAAM,OAAO,GAAG,MAAM,CAAC;YAEvB,MAAM,IAAI,GAAG,OAAO,CAAC;gBACnB,UAAU,EAAE,UAAU;gBACtB,IAAI,EAAE,OAAO;gBACb,MAAM,EAAE,KAAK;aACd,CAAC,CAAC;YACH,MAAM,IAAI,GAAG,OAAO,CAAC;gBACnB,UAAU,EAAE,UAAU;gBACtB,IAAI,EAAE,OAAO;gBACb,MAAM,EAAE,KAAK;aACd,CAAC,CAAC;YAEH,MAAM,SAAS,GAAG,IAAI,GAAG,EAAE,CAAC;YAE5B,MAAM,MAAM,GAAG,IAAI,GAAG,EAAE,CAAC;YACzB,MAAM,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC;YAC5B,SAAS,CAAC,GAAG,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;YAElC,MAAM,MAAM,GAAG,IAAI,GAAG,EAAE,CAAC;YACzB,MAAM,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC;YAC5B,SAAS,CAAC,GAAG,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;YAElC,MAAM,WAAW,GAAG,IAAI,GAAG,CAAC,CAAC,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC;YAE9C,MAAM,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC;YAE9D,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;QACvC,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,qCAAqC,EAAE,GAAG,EAAE;YAC/C,OAAO,GAAG,IAAI,aAAa,CAAC,UAAU,EAAE,CAAC,CAAC;YAC1C,MAAM,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC,IAAI,GAAG,EAAE,EAAE,IAAI,GAAG,EAAE,CAAC,CAAC;YAC5D,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;QACvC,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,sCAAsC,EAAE,GAAG,EAAE;YAChD,OAAO,GAAG,IAAI,aAAa,CAAC,UAAU,EAAE,CAAC,CAAC;YAE1C,MAAM,SAAS,GAAG,aAAa,CAAC;YAChC,MAAM,MAAM,GAAG,UAAU,CAAC;YAC1B,MAAM,QAAQ,GAAG,GAAG,CAAC;YACrB,MAAM,QAAQ,GAAG,GAAG,CAAC;YACrB,MAAM,SAAS,GAAG,SAAS,CAAC;YAC5B,MAAM,SAAS,GAAG,SAAS,CAAC;YAE5B,MAAM,IAAI,GAAG,OAAO,CAAC;gBACnB,UAAU,EAAE,SAAS;gBACrB,IAAI,EAAE,MAAM;gBACZ,uBAAuB,EAAE,EAAE;gBAC3B,iBAAiB,EAAE,CAAC,EAAE,CAAC;gBACvB,uBAAuB,EAAE,CAAC,QAAQ,EAAE,QAAQ,CAAC;gBAC7C,QAAQ,EAAE,QAAQ;gBAClB,WAAW,EAAE,SAAS;aACvB,CAAC,CAAC;YACH,MAAM,IAAI,GAAG,OAAO,CAAC;gBACnB,UAAU,EAAE,SAAS;gBACrB,IAAI,EAAE,MAAM;gBACZ,uBAAuB,EAAE,EAAE;gBAC3B,iBAAiB,EAAE,CAAC,EAAE,CAAC;gBACvB,uBAAuB,EAAE,CAAC,QAAQ,EAAE,QAAQ,CAAC;gBAC7C,QAAQ,EAAE,QAAQ;gBAClB,WAAW,EAAE,SAAS;aACvB,CAAC,CAAC;YAEH,MAAM,SAAS,GAAG,IAAI,GAAG,EAAE,CAAC;YAC5B,MAAM,KAAK,GAAG,IAAI,GAAG,EAAE,CAAC;YACxB,KAAK,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC;YAChC,SAAS,CAAC,GAAG,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;YAEhC,MAAM,WAAW,GAAG,IAAI,GAAG,CAAC;gBAC1B,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,SAAS,CAAC;gBAC7B,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,SAAS,CAAC;aAC9B,CAAC,CAAC;YAEH,MAAM,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC;YAE9D,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;YACrC,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;YAClD,MAAM,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE;gBAClD,SAAS;gBACT,SAAS;aACV,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"test-helpers.js","sourceRoot":"","sources":["../../tests/test-helpers.ts"],"names":[],"mappings":"AAEA,MAAM,UAAU,UAAU;IACxB,OAAO;QACL,KAAK,EAAE,GAAG,EAAE,GAAE,CAAC;QACf,KAAK,EAAE,GAAG,EAAE,GAAE,CAAC;QACf,GAAG,EAAE,GAAG,EAAE,GAAE,CAAC;QACb,aAAa,EAAE;SAAQ;QACvB,OAAO,EAAE,EAAE;KACU,CAAC;AAC1B,CAAC"}
|