diff --git a/indexer/jest.config.ts b/indexer/jest.config.ts index cfd66e6b..dc797f82 100644 --- a/indexer/jest.config.ts +++ b/indexer/jest.config.ts @@ -1,8 +1,12 @@ export default { - preset: 'ts-jest', - testEnvironment: 'node', + preset: 'ts-jest/presets/default-esm', transform: { - '^.+\\.ts$': 'ts-jest', + '^.+\\.tsx?$': [ + 'ts-jest', + { + useESM: true, + }, + ], }, extensionsToTreatAsEsm: ['.ts'], moduleNameMapper: { diff --git a/indexer/package.json b/indexer/package.json index b154aacf..3d43331a 100644 --- a/indexer/package.json +++ b/indexer/package.json @@ -26,6 +26,7 @@ "express": "^4.18.2", "graphql": "^16.10.0", "graphql-query-complexity": "^1.0.0", + "graphql-request": "5.0.0", "graphql-scalars": "^1.23.0", "graphql-subscriptions": "^2.0.0", "graphql-tag": "^2.12.6", @@ -76,6 +77,7 @@ "graphql:generate-types": "npx graphql-codegen", "migrate:up": "dotenv -e .env npx sequelize-cli db:migrate", "migrate:down": "dotenv -e .env npx sequelize-cli db:migrate:undo", - "test": "jest tests/unit/*.test.ts" + "test:unit": "jest tests/unit/*.test.ts", + "test:integration": "jest tests/integration/*.test.ts" } } diff --git a/indexer/src/kadena-server/repository/infra/repository/block-db-repository.ts b/indexer/src/kadena-server/repository/infra/repository/block-db-repository.ts index b1e20c57..1bd6cc50 100644 --- a/indexer/src/kadena-server/repository/infra/repository/block-db-repository.ts +++ b/indexer/src/kadena-server/repository/infra/repository/block-db-repository.ts @@ -103,10 +103,10 @@ export default class BlockDbRepository implements BlockRepository { if (chainIds?.length) { queryParams.push(chainIds); - conditions += `\nAND b."chainId" = $${queryParams.length}`; + conditions += `\nAND b."chainId" = ANY($${queryParams.length})`; } - if (endHeight) { + if (endHeight && endHeight - startHeight < 20) { queryParams.push(endHeight); conditions += `\nAND b."height" <= $${queryParams.length}`; } @@ -128,7 +128,7 @@ export default class BlockDbRepository implements BlockRepository { FROM "Blocks" b WHERE b.height >= $2 ${conditions} - ORDER BY b.id ${order} + ORDER BY b.height ${order} LIMIT $1; `; diff --git a/indexer/src/kadena-server/repository/infra/repository/event-db-repository.ts b/indexer/src/kadena-server/repository/infra/repository/event-db-repository.ts index 99a34f99..94005d3a 100644 --- a/indexer/src/kadena-server/repository/infra/repository/event-db-repository.ts +++ b/indexer/src/kadena-server/repository/infra/repository/event-db-repository.ts @@ -113,6 +113,9 @@ export default class EventDbRepository implements EventRepository { } async getEventsWithQualifiedName(params: GetEventsParams) { + const HEIGHT_BATCH_SIZE = 200; + const localOperator = (paramsLength: number) => (paramsLength > 2 ? `\nAND` : 'WHERE'); + const { qualifiedEventName, blockHash, @@ -138,73 +141,121 @@ export default class EventDbRepository implements EventRepository { const name = splitted.pop() ?? ''; const module = splitted.join('.'); - const queryParams: (string | number)[] = [limit]; + const queryParams: (string | number)[] = [limit, module, name]; + const blockQueryParams: (string | number)[] = []; let conditions = ''; + let eventConditions = ''; - queryParams.push(module); - conditions += `WHERE e.module = $${queryParams.length}`; - queryParams.push(name); - conditions += `\nAND e.name = $${queryParams.length}`; - - if (blockHash) { - queryParams.push(blockHash); - conditions += `\nAND b.hash = $${queryParams.length}`; + if (before) { + queryParams.push(before); + eventConditions += `\nAND e.id > $${queryParams.length}`; } - if (chainId) { - queryParams.push(chainId); - conditions += `\nAND b."chainId" = $${queryParams.length}`; + if (after) { + queryParams.push(after); + eventConditions += `\nAND e.id < $${queryParams.length}`; } - if (minHeight) { - queryParams.push(minHeight); - conditions += `\nAND b."height" >= $${queryParams.length}`; + if (requestKey) { + blockQueryParams.push(requestKey); + const op = localOperator(blockQueryParams.length); + conditions += `${op} t."requestkey" = $${blockQueryParams.length + queryParams.length}`; } - if (maxHeight) { - queryParams.push(maxHeight); - conditions += `\nAND b."height" <= $${queryParams.length}`; + if (blockHash) { + blockQueryParams.push(blockHash); + const op = localOperator(blockQueryParams.length); + conditions += `${op} b.hash = $${blockQueryParams.length + queryParams.length}`; } - if (minimumDepth) { - queryParams.push(minimumDepth); - conditions += `\nAND b."height" <= $${queryParams.length}`; + if (chainId) { + blockQueryParams.push(chainId); + const op = localOperator(blockQueryParams.length); + conditions += `${op} b."chainId" = $${blockQueryParams.length + queryParams.length}`; } - if (requestKey) { - queryParams.push(requestKey); - conditions += `\nAND t."requestkey" = $${queryParams.length}`; + let fromHeight = 0; + let toHeight = 0; + if (minHeight && maxHeight) { + fromHeight = minHeight; + toHeight = maxHeight - minHeight > 100 ? minHeight + HEIGHT_BATCH_SIZE : toHeight; + } else if (minHeight) { + fromHeight = minHeight; + toHeight = minHeight + HEIGHT_BATCH_SIZE; + } else if (maxHeight) { + fromHeight = maxHeight - HEIGHT_BATCH_SIZE; + toHeight = maxHeight; } - if (before) { - queryParams.push(before); - conditions += `\nAND e.id > $${queryParams.length}`; + if (fromHeight && toHeight) { + queryParams.push(fromHeight); + let op = localOperator(blockQueryParams.length); + conditions += `${op} b."height" >= $${blockQueryParams.length + queryParams.length}`; + queryParams.push(toHeight); + conditions += `\nAND b."height" <= $${blockQueryParams.length + queryParams.length}`; } - if (after) { - queryParams.push(after); - conditions += `\nAND e.id < $${queryParams.length}`; + if (minimumDepth) { + queryParams.push(minimumDepth); + const op = localOperator(blockQueryParams.length); + conditions += `${op} b."height" <= $${blockQueryParams.length + queryParams.length}`; } - const query = ` - select e.id as id, - t.requestkey as "requestKey", - b."chainId" as "chainId", - b.height as height, - e."orderIndex" as "orderIndex", - e.module as "moduleName", - e.name as name, - e.params as parameters, - b.hash as "blockHash" - from "Events" e - join "Transactions" t on e."transactionId" = t.id - join "Blocks" b on b.id = t."blockId" - ${conditions} - ORDER BY id ${order} - LIMIT $1 - `; + let query = ''; + if (fromHeight || toHeight || blockHash || chainId) { + query = ` + WITH block_filtered AS ( + select * + from "Blocks" b + ${conditions} + ) + SELECT + e.id as id, + e.requestkey as "requestKey", + e."chainId" as "chainId", + b.height as height, + e."orderIndex" as "orderIndex", + e.module as "moduleName", + e.name as name, + e.params as parameters, + b.hash as "blockHash" + FROM block_filtered b + join "Transactions" t ON t."blockId" = b.id + join "Events" e ON e."transactionId" = t.id + WHERE e.module = $2 + AND e.name = $3 + ${eventConditions} + LIMIT $1 + `; + } else { + query = ` + WITH event_filtered AS ( + select * + from "Events" e + WHERE e.module = $2 + AND e.name = $3 + ${eventConditions} + ORDER BY e.module, e.name ${order} + ) + SELECT + e.id as id, + e.requestkey as "requestKey", + e."chainId" as "chainId", + b.height as height, + e."orderIndex" as "orderIndex", + e.module as "moduleName", + e.name as name, + e.params as parameters, + b.hash as "blockHash" + FROM event_filtered e + join "Transactions" t ON t.id = e."transactionId" + join "Blocks" b ON b.id = t."blockId" + ${conditions} + LIMIT $1 + `; + } - const { rows } = await rootPgPool.query(query, queryParams); + const { rows } = await rootPgPool.query(query, [...queryParams, ...blockQueryParams]); const edges = rows.map(row => ({ cursor: row.id.toString(), diff --git a/indexer/tests/integration/events.query.test.ts b/indexer/tests/integration/events.query.test.ts new file mode 100644 index 00000000..64475cbe --- /dev/null +++ b/indexer/tests/integration/events.query.test.ts @@ -0,0 +1,624 @@ +import { GraphQLClient, gql } from 'graphql-request'; +const API_URL = 'http://localhost:3001/graphql'; + +const client = new GraphQLClient(API_URL); + +const resOne = { + data: { + events: { + edges: [ + { + cursor: 'MzA2', + node: { + id: 'RXZlbnQ6WyJ6NWw0S3VuaDRtNXp6allZMGxkZGp5eFppdGh6VzE0TlZXeWtMdENnNzhrIiwiMyIsIm9DNWtvY2RwWkpyRTFET1M0WWMzUVhSX0ZRcURuNVZmbElUeG9JZElqQ0UiXQ==', + chainId: 10, + height: 5360932, + moduleName: 'pact', + name: 'X_YIELD', + orderIndex: 3, + parameters: + '["0","coin.transfer-crosschain",["k:e7f7130f359fb1f8c87873bf858a0e9cbc3c1059f62ae715ec72e760b055e9f3","antpoolkda",{"keys":["9b96f423e74914c5d4126cf47be4ffba2ec5b813e76f34d110e47729b33d5602","c86cc931441dd53cc9efb83b1a8144fd2e684647b8d670da376d4d937e5998af"],"pred":"keys-all"},"0",14064]]', + qualifiedName: 'pact.X_YIELD', + requestKey: 'oC5kocdpZJrE1DOS4Yc3QXR_FQqDn5VflITxoIdIjCE', + }, + }, + { + cursor: 'Mjg2', + node: { + id: 'RXZlbnQ6WyJQNVVPNUItRXpZTUlGMi1icF81d1BoLUNZTWhYbUNOZ2JLU0JYX3lGcUl3IiwiMyIsIkhSNmI1cWsxSmMwQmhDSTRxQlVvaWU4Z1d4SEVqSkxYM0hIbkdmblhQZ0EiXQ==', + chainId: 10, + height: 5361265, + moduleName: 'pact', + name: 'X_YIELD', + orderIndex: 3, + parameters: + '["0","coin.transfer-crosschain",["99cb7008d7d70c94f138cc366a825f0d9c83a8a2f4ba82c86c666e0ab6fecf3a","99cb7008d7d70c94f138cc366a825f0d9c83a8a2f4ba82c86c666e0ab6fecf3a",{"keys":["99cb7008d7d70c94f138cc366a825f0d9c83a8a2f4ba82c86c666e0ab6fecf3a"],"pred":"keys-all"},"0",351.6923599]]', + qualifiedName: 'pact.X_YIELD', + requestKey: 'HR6b5qk1Jc0BhCI4qBUoie8gWxHEjJLX3HHnGfnXPgA', + }, + }, + { + cursor: 'MjQy', + node: { + id: 'RXZlbnQ6WyJDaG9zdVNGX2h5R25odk52bnhuNElPU2VPSVJrWDA0Z19LLXkxay1DY0VjIiwiMyIsIlIwQ3Z6RDN0dDlRaUphWWhrMHUyRS1wRWEtWnBQX3pOaVBqWVgxMXdraEEiXQ==', + chainId: 10, + height: 5362705, + moduleName: 'pact', + name: 'X_YIELD', + orderIndex: 3, + parameters: + '["0","coin.transfer-crosschain",["99cb7008d7d70c94f138cc366a825f0d9c83a8a2f4ba82c86c666e0ab6fecf3a","99cb7008d7d70c94f138cc366a825f0d9c83a8a2f4ba82c86c666e0ab6fecf3a",{"keys":["99cb7008d7d70c94f138cc366a825f0d9c83a8a2f4ba82c86c666e0ab6fecf3a"],"pred":"keys-all"},"0",346.8493799]]', + qualifiedName: 'pact.X_YIELD', + requestKey: 'R0CvzD3tt9QiJaYhk0u2E-pEa-ZpP_zNiPjYX11wkhA', + }, + }, + { + cursor: 'MjAy', + node: { + id: 'RXZlbnQ6WyI1VGRNSUd5cGdYeUhCeERxTDJFWFNOclpVRTJjZVFKNXQ5N0I1bXBJQXlzIiwiMyIsIlMyVm5FcjQtbkJ4VlZBMENXQ3kzdS1Bc3BTaTAyVUdOVy0wdEcyOEpHSU0iXQ==', + chainId: 10, + height: 5364143, + moduleName: 'pact', + name: 'X_YIELD', + orderIndex: 3, + parameters: + '["0","coin.transfer-crosschain",["99cb7008d7d70c94f138cc366a825f0d9c83a8a2f4ba82c86c666e0ab6fecf3a","99cb7008d7d70c94f138cc366a825f0d9c83a8a2f4ba82c86c666e0ab6fecf3a",{"keys":["99cb7008d7d70c94f138cc366a825f0d9c83a8a2f4ba82c86c666e0ab6fecf3a"],"pred":"keys-all"},"0",398.0497699]]', + qualifiedName: 'pact.X_YIELD', + requestKey: 'S2VnEr4-nBxVVA0CWCy3u-AspSi02UGNW-0tG28JGIM', + }, + }, + { + cursor: 'MTUz', + node: { + id: 'RXZlbnQ6WyJzQjVuNVduanAwelZSZmpESURBZExTcnlTY3Z1OC1fdlRtLS1iUWJyUnBnIiwiMyIsInhuaVBEM0RjZVc5blc0RC1Id2RfOGZGVUJIaUg2LVZ5dTgtb0F3d3BtQ0kiXQ==', + chainId: 10, + height: 5365581, + moduleName: 'pact', + name: 'X_YIELD', + orderIndex: 3, + parameters: + '["0","coin.transfer-crosschain",["99cb7008d7d70c94f138cc366a825f0d9c83a8a2f4ba82c86c666e0ab6fecf3a","99cb7008d7d70c94f138cc366a825f0d9c83a8a2f4ba82c86c666e0ab6fecf3a",{"keys":["99cb7008d7d70c94f138cc366a825f0d9c83a8a2f4ba82c86c666e0ab6fecf3a"],"pred":"keys-all"},"0",374.8684599]]', + qualifiedName: 'pact.X_YIELD', + requestKey: 'xniPD3DceW9nW4D-Hwd_8fFUBHiH6-Vyu8-oAwwpmCI', + }, + }, + { + cursor: 'MTE4', + node: { + id: 'RXZlbnQ6WyJWalF1MVV3by04XzhaT0FFRjNISmxFbkd2R3JhWTgwcWE5WnIyQnBIbmVJIiwiMyIsInZoWkx3MjllMWZoYWpZOGEzWndia2tfRGR6LVRaRThDaHJZSWNUcnFyWGciXQ==', + chainId: 10, + height: 5366862, + moduleName: 'pact', + name: 'X_YIELD', + orderIndex: 3, + parameters: + '["1","coin.transfer-crosschain",["k:4c65e9b761ae74dd68baa0cf652f61222292a08f1c505d6fd092867b6572f8f9","k:4c65e9b761ae74dd68baa0cf652f61222292a08f1c505d6fd092867b6572f8f9",{"keys":["4c65e9b761ae74dd68baa0cf652f61222292a08f1c505d6fd092867b6572f8f9"],"pred":"keys-all"},"1",0.034779]]', + qualifiedName: 'pact.X_YIELD', + requestKey: 'vhZLw29e1fhajY8a3Zwbkk_Ddz-TZE8ChrYIcTrqrXg', + }, + }, + { + cursor: 'MTA5', + node: { + id: 'RXZlbnQ6WyJwRGxzcnRzU1BWaVNrei1XOUVGb1VEdFU4RzRZTk9yek53dVN1bl90Yk5FIiwiMyIsIi13c2U5UGM4ZkVRd2NuaFpqZzZ4ZWl1eTlpLXhtLTl5YjFySFdzc0R3OTAiXQ==', + chainId: 10, + height: 5367016, + moduleName: 'pact', + name: 'X_YIELD', + orderIndex: 3, + parameters: + '["0","coin.transfer-crosschain",["99cb7008d7d70c94f138cc366a825f0d9c83a8a2f4ba82c86c666e0ab6fecf3a","99cb7008d7d70c94f138cc366a825f0d9c83a8a2f4ba82c86c666e0ab6fecf3a",{"keys":["99cb7008d7d70c94f138cc366a825f0d9c83a8a2f4ba82c86c666e0ab6fecf3a"],"pred":"keys-all"},"0",359.4035599]]', + qualifiedName: 'pact.X_YIELD', + requestKey: '-wse9Pc8fEQwcnhZjg6xeiuy9i-xm-9yb1rHWssDw90', + }, + }, + { + cursor: 'NjY=', + node: { + id: 'RXZlbnQ6WyJPSFFUN1BpVmxyV2FhTmlsWktNWF9RUnRrazZDczVheVB4YmpuNVFMRHVrIiwiMyIsIlFkN1V4RnFSMmZlamxQVDYtblB5MnFicVNRRS1uY3hUaS1Ic0NfRHIwakEiXQ==', + chainId: 10, + height: 5368317, + moduleName: 'pact', + name: 'X_YIELD', + orderIndex: 3, + parameters: + '["2","coin.transfer-crosschain",["k:e3c89f0b944b11a4491d83b1303abfa7c7c7332cc86eba38a8aabb3ab5d7fecd","k:e3c89f0b944b11a4491d83b1303abfa7c7c7332cc86eba38a8aabb3ab5d7fecd",{"keys":["e3c89f0b944b11a4491d83b1303abfa7c7c7332cc86eba38a8aabb3ab5d7fecd"],"pred":"keys-all"},"2",0.39934589]]', + qualifiedName: 'pact.X_YIELD', + requestKey: 'Qd7UxFqR2fejlPT6-nPy2qbqSQE-ncxTi-HsC_Dr0jA', + }, + }, + { + cursor: 'NTc=', + node: { + id: 'RXZlbnQ6WyIzSkg1bUJTdnB3azVhYzdjdFFrWDYwd2ExRHlvb055RHIxTnFzc01BVnMwIiwiMyIsImxwWURRN2llRDNvcmVVMlU2ZkhXUTdJYVotV3V2M2pLMHUySGZkc01wMzgiXQ==', + chainId: 10, + height: 5368456, + moduleName: 'pact', + name: 'X_YIELD', + orderIndex: 3, + parameters: + '["0","coin.transfer-crosschain",["99cb7008d7d70c94f138cc366a825f0d9c83a8a2f4ba82c86c666e0ab6fecf3a","99cb7008d7d70c94f138cc366a825f0d9c83a8a2f4ba82c86c666e0ab6fecf3a",{"keys":["99cb7008d7d70c94f138cc366a825f0d9c83a8a2f4ba82c86c666e0ab6fecf3a"],"pred":"keys-all"},"0",372.9301399]]', + qualifiedName: 'pact.X_YIELD', + requestKey: 'lpYDQ7ieD3oreU2U6fHWQ7IaZ-Wuv3jK0u2HfdsMp38', + }, + }, + { + cursor: 'MjE=', + node: { + id: 'RXZlbnQ6WyJRemk1OHZjcFc5N2R1MDFzckl3eHB3U1FVUERSTkJubDJFS3l1YlAtSVd3IiwiMyIsIkxJYkp4djJfU0xtdXlWT1dhd0hBdmFkMm9nNFFBaklnZUhRUFNyejh3Mk0iXQ==', + chainId: 10, + height: 5369899, + moduleName: 'pact', + name: 'X_YIELD', + orderIndex: 3, + parameters: + '["0","coin.transfer-crosschain",["99cb7008d7d70c94f138cc366a825f0d9c83a8a2f4ba82c86c666e0ab6fecf3a","99cb7008d7d70c94f138cc366a825f0d9c83a8a2f4ba82c86c666e0ab6fecf3a",{"keys":["99cb7008d7d70c94f138cc366a825f0d9c83a8a2f4ba82c86c666e0ab6fecf3a"],"pred":"keys-all"},"0",337.1879699]]', + qualifiedName: 'pact.X_YIELD', + requestKey: 'LIbJxv2_SLmuyVOWawHAvad2og4QAjIgeHQPSrz8w2M', + }, + }, + ], + }, + }, +}; + +const resTwo = { + data: { + events: { + edges: [ + { + cursor: 'MjE=', + node: { + id: 'RXZlbnQ6WyJRemk1OHZjcFc5N2R1MDFzckl3eHB3U1FVUERSTkJubDJFS3l1YlAtSVd3IiwiMyIsIkxJYkp4djJfU0xtdXlWT1dhd0hBdmFkMm9nNFFBaklnZUhRUFNyejh3Mk0iXQ==', + chainId: 10, + height: 5369899, + moduleName: 'pact', + name: 'X_YIELD', + orderIndex: 3, + parameters: + '["0","coin.transfer-crosschain",["99cb7008d7d70c94f138cc366a825f0d9c83a8a2f4ba82c86c666e0ab6fecf3a","99cb7008d7d70c94f138cc366a825f0d9c83a8a2f4ba82c86c666e0ab6fecf3a",{"keys":["99cb7008d7d70c94f138cc366a825f0d9c83a8a2f4ba82c86c666e0ab6fecf3a"],"pred":"keys-all"},"0",337.1879699]]', + qualifiedName: 'pact.X_YIELD', + requestKey: 'LIbJxv2_SLmuyVOWawHAvad2og4QAjIgeHQPSrz8w2M', + }, + }, + { + cursor: 'NTc=', + node: { + id: 'RXZlbnQ6WyIzSkg1bUJTdnB3azVhYzdjdFFrWDYwd2ExRHlvb055RHIxTnFzc01BVnMwIiwiMyIsImxwWURRN2llRDNvcmVVMlU2ZkhXUTdJYVotV3V2M2pLMHUySGZkc01wMzgiXQ==', + chainId: 10, + height: 5368456, + moduleName: 'pact', + name: 'X_YIELD', + orderIndex: 3, + parameters: + '["0","coin.transfer-crosschain",["99cb7008d7d70c94f138cc366a825f0d9c83a8a2f4ba82c86c666e0ab6fecf3a","99cb7008d7d70c94f138cc366a825f0d9c83a8a2f4ba82c86c666e0ab6fecf3a",{"keys":["99cb7008d7d70c94f138cc366a825f0d9c83a8a2f4ba82c86c666e0ab6fecf3a"],"pred":"keys-all"},"0",372.9301399]]', + qualifiedName: 'pact.X_YIELD', + requestKey: 'lpYDQ7ieD3oreU2U6fHWQ7IaZ-Wuv3jK0u2HfdsMp38', + }, + }, + { + cursor: 'NjY=', + node: { + id: 'RXZlbnQ6WyJPSFFUN1BpVmxyV2FhTmlsWktNWF9RUnRrazZDczVheVB4YmpuNVFMRHVrIiwiMyIsIlFkN1V4RnFSMmZlamxQVDYtblB5MnFicVNRRS1uY3hUaS1Ic0NfRHIwakEiXQ==', + chainId: 10, + height: 5368317, + moduleName: 'pact', + name: 'X_YIELD', + orderIndex: 3, + parameters: + '["2","coin.transfer-crosschain",["k:e3c89f0b944b11a4491d83b1303abfa7c7c7332cc86eba38a8aabb3ab5d7fecd","k:e3c89f0b944b11a4491d83b1303abfa7c7c7332cc86eba38a8aabb3ab5d7fecd",{"keys":["e3c89f0b944b11a4491d83b1303abfa7c7c7332cc86eba38a8aabb3ab5d7fecd"],"pred":"keys-all"},"2",0.39934589]]', + qualifiedName: 'pact.X_YIELD', + requestKey: 'Qd7UxFqR2fejlPT6-nPy2qbqSQE-ncxTi-HsC_Dr0jA', + }, + }, + { + cursor: 'MTA5', + node: { + id: 'RXZlbnQ6WyJwRGxzcnRzU1BWaVNrei1XOUVGb1VEdFU4RzRZTk9yek53dVN1bl90Yk5FIiwiMyIsIi13c2U5UGM4ZkVRd2NuaFpqZzZ4ZWl1eTlpLXhtLTl5YjFySFdzc0R3OTAiXQ==', + chainId: 10, + height: 5367016, + moduleName: 'pact', + name: 'X_YIELD', + orderIndex: 3, + parameters: + '["0","coin.transfer-crosschain",["99cb7008d7d70c94f138cc366a825f0d9c83a8a2f4ba82c86c666e0ab6fecf3a","99cb7008d7d70c94f138cc366a825f0d9c83a8a2f4ba82c86c666e0ab6fecf3a",{"keys":["99cb7008d7d70c94f138cc366a825f0d9c83a8a2f4ba82c86c666e0ab6fecf3a"],"pred":"keys-all"},"0",359.4035599]]', + qualifiedName: 'pact.X_YIELD', + requestKey: '-wse9Pc8fEQwcnhZjg6xeiuy9i-xm-9yb1rHWssDw90', + }, + }, + { + cursor: 'MTE4', + node: { + id: 'RXZlbnQ6WyJWalF1MVV3by04XzhaT0FFRjNISmxFbkd2R3JhWTgwcWE5WnIyQnBIbmVJIiwiMyIsInZoWkx3MjllMWZoYWpZOGEzWndia2tfRGR6LVRaRThDaHJZSWNUcnFyWGciXQ==', + chainId: 10, + height: 5366862, + moduleName: 'pact', + name: 'X_YIELD', + orderIndex: 3, + parameters: + '["1","coin.transfer-crosschain",["k:4c65e9b761ae74dd68baa0cf652f61222292a08f1c505d6fd092867b6572f8f9","k:4c65e9b761ae74dd68baa0cf652f61222292a08f1c505d6fd092867b6572f8f9",{"keys":["4c65e9b761ae74dd68baa0cf652f61222292a08f1c505d6fd092867b6572f8f9"],"pred":"keys-all"},"1",0.034779]]', + qualifiedName: 'pact.X_YIELD', + requestKey: 'vhZLw29e1fhajY8a3Zwbkk_Ddz-TZE8ChrYIcTrqrXg', + }, + }, + { + cursor: 'MTUz', + node: { + id: 'RXZlbnQ6WyJzQjVuNVduanAwelZSZmpESURBZExTcnlTY3Z1OC1fdlRtLS1iUWJyUnBnIiwiMyIsInhuaVBEM0RjZVc5blc0RC1Id2RfOGZGVUJIaUg2LVZ5dTgtb0F3d3BtQ0kiXQ==', + chainId: 10, + height: 5365581, + moduleName: 'pact', + name: 'X_YIELD', + orderIndex: 3, + parameters: + '["0","coin.transfer-crosschain",["99cb7008d7d70c94f138cc366a825f0d9c83a8a2f4ba82c86c666e0ab6fecf3a","99cb7008d7d70c94f138cc366a825f0d9c83a8a2f4ba82c86c666e0ab6fecf3a",{"keys":["99cb7008d7d70c94f138cc366a825f0d9c83a8a2f4ba82c86c666e0ab6fecf3a"],"pred":"keys-all"},"0",374.8684599]]', + qualifiedName: 'pact.X_YIELD', + requestKey: 'xniPD3DceW9nW4D-Hwd_8fFUBHiH6-Vyu8-oAwwpmCI', + }, + }, + ], + }, + }, +}; + +const resThree = { + data: { + events: { + edges: [ + { + cursor: 'MTY4Mzg3ODA=', + node: { + id: 'RXZlbnQ6WyJPTmQ3c3RJakpidXdNcVJtbHlRNzFYaFQteFZ2eVZ5LUEwWDJEQm9tdzFnIiwiMCIsImhIRk1TSmY1aTlrZHN6MGFFeGtpQWxROWhvMVJPbkR2aDc3dkJtVW9RR1kiXQ==', + chainId: 0, + height: 5372843, + moduleName: 'coin', + name: 'TRANSFER', + orderIndex: 0, + parameters: + '["k:46a7054882aeb28a09babc0a403b9df3df09b13f30efb8cff6da3597793c8232","c50b9acb49ca25f59193b95b4e08e52e2ec89fa1bf308e6436f39a40ac2dc4f3",0.000905]', + qualifiedName: 'coin.TRANSFER', + requestKey: 'hHFMSJf5i9kdsz0aExkiAlQ9ho1ROnDvh77vBmUoQGY', + }, + }, + { + cursor: 'MTY4Mzg3Nzk=', + node: { + id: 'RXZlbnQ6WyJPTmQ3c3RJakpidXdNcVJtbHlRNzFYaFQteFZ2eVZ5LUEwWDJEQm9tdzFnIiwiMCIsIkhzN1VHZlhzb2hocTR6XzZyRXBKUWZtR2tCcUxEYVRlNm5ubXFRaFBtdVkiXQ==', + chainId: 0, + height: 5372843, + moduleName: 'coin', + name: 'TRANSFER', + orderIndex: 0, + parameters: + '["k:3049c5a6fc434dc7a951c18ac4d09a81fb6794802e9655ca552d945fdbf41ba1","c50b9acb49ca25f59193b95b4e08e52e2ec89fa1bf308e6436f39a40ac2dc4f3",0.000256]', + qualifiedName: 'coin.TRANSFER', + requestKey: 'Hs7UGfXsohhq4z_6rEpJQfmGkBqLDaTe6nnmqQhPmuY', + }, + }, + { + cursor: 'MTY4Mzg3ODE=', + node: { + id: 'RXZlbnQ6WyJPTmQ3c3RJakpidXdNcVJtbHlRNzFYaFQteFZ2eVZ5LUEwWDJEQm9tdzFnIiwiMCIsIkZUaFpXM3FvMU95bWJfYmpsQU9zRkN2VUtScG8zN2x0OTZpMDJrUXFITkUiXQ==', + chainId: 0, + height: 5372843, + moduleName: 'coin', + name: 'TRANSFER', + orderIndex: 0, + parameters: + '["k:1a7297dd4cf2e8db12cf0ccff244dac20fb174b8a4922ce3cd992faa807a2229","c50b9acb49ca25f59193b95b4e08e52e2ec89fa1bf308e6436f39a40ac2dc4f3",0.000756]', + qualifiedName: 'coin.TRANSFER', + requestKey: 'FThZW3qo1Oymb_bjlAOsFCvUKRpo37lt96i02kQqHNE', + }, + }, + { + cursor: 'MTY4Mzg3ODI=', + node: { + id: 'RXZlbnQ6WyJPTmQ3c3RJakpidXdNcVJtbHlRNzFYaFQteFZ2eVZ5LUEwWDJEQm9tdzFnIiwiMCIsInJLXzR3SmNQVTVwbEFVbU1DcXVBSDRxcFhxUWVNX1RNN0NJNGtYSV9lelkiXQ==', + chainId: 0, + height: 5372843, + moduleName: 'coin', + name: 'TRANSFER', + orderIndex: 0, + parameters: + '["k:d5171f7ca725d5fc9a195348439dc3e0f2b22fd76eff64a84a7c886eb5e38b7c","c50b9acb49ca25f59193b95b4e08e52e2ec89fa1bf308e6436f39a40ac2dc4f3",0.000256]', + qualifiedName: 'coin.TRANSFER', + requestKey: 'rK_4wJcPU5plAUmMCquAH4qpXqQeM_TM7CI4kXI_ezY', + }, + }, + { + cursor: 'MTY4Mzg3ODM=', + node: { + id: 'RXZlbnQ6WyJPTmQ3c3RJakpidXdNcVJtbHlRNzFYaFQteFZ2eVZ5LUEwWDJEQm9tdzFnIiwiMCIsIi0xcm1xWlh6dXZVcDQ1RURERGFYMVVtRGtWa19Ha3o0MTVLVXZfZTRqUGsiXQ==', + chainId: 0, + height: 5372843, + moduleName: 'coin', + name: 'TRANSFER', + orderIndex: 0, + parameters: + '["k:87a2abaf7d0ee38d29eb8a83d2675ce48f6c19ee3f4ec717058a84f163cc8bce","c50b9acb49ca25f59193b95b4e08e52e2ec89fa1bf308e6436f39a40ac2dc4f3",0.000523]', + qualifiedName: 'coin.TRANSFER', + requestKey: '-1rmqZXzuvUp45EDDDaX1UmDkVk_Gkz415KUv_e4jPk', + }, + }, + { + cursor: 'MTY4Mzg3ODQ=', + node: { + id: 'RXZlbnQ6WyJPTmQ3c3RJakpidXdNcVJtbHlRNzFYaFQteFZ2eVZ5LUEwWDJEQm9tdzFnIiwiMCIsIngxaDRXYkRJclJPS3hnanhvRnd4Tmt5cWdFcVRqOWcxNHBWVV8yR0JVQWsiXQ==', + chainId: 0, + height: 5372843, + moduleName: 'coin', + name: 'TRANSFER', + orderIndex: 0, + parameters: + '["k:e8d0de9cd295f9be6b85be9e306523bab87fc11c9517909f19c1cf0b7641a584","c50b9acb49ca25f59193b95b4e08e52e2ec89fa1bf308e6436f39a40ac2dc4f3",0.000905]', + qualifiedName: 'coin.TRANSFER', + requestKey: 'x1h4WbDIrROKxgjxoFwxNkyqgEqTj9g14pVU_2GBUAk', + }, + }, + { + cursor: 'MTY4Mzg3ODU=', + node: { + id: 'RXZlbnQ6WyJPTmQ3c3RJakpidXdNcVJtbHlRNzFYaFQteFZ2eVZ5LUEwWDJEQm9tdzFnIiwiMCIsIjZ6cXdkYnVJVm9KR3BTcnV0a2ZybGU3aVFlNVB1UDhWM0hzVWt3OUhaVTQiXQ==', + chainId: 0, + height: 5372843, + moduleName: 'coin', + name: 'TRANSFER', + orderIndex: 0, + parameters: + '["k:473362f449bf4be6be8e79d8097b249206e233b47c3c7b4e11d7fa9fb338c11c","c50b9acb49ca25f59193b95b4e08e52e2ec89fa1bf308e6436f39a40ac2dc4f3",0.000523]', + qualifiedName: 'coin.TRANSFER', + requestKey: '6zqwdbuIVoJGpSrutkfrle7iQe5PuP8V3HsUkw9HZU4', + }, + }, + { + cursor: 'MTY4Mzg3ODY=', + node: { + id: 'RXZlbnQ6WyJPTmQ3c3RJakpidXdNcVJtbHlRNzFYaFQteFZ2eVZ5LUEwWDJEQm9tdzFnIiwiMCIsInhPTzAwX1V5TkVyVXFUYkkzd3NxRUw0c3VjNm1RNC1OLVo3RmhXWjV0ODgiXQ==', + chainId: 0, + height: 5372843, + moduleName: 'coin', + name: 'TRANSFER', + orderIndex: 0, + parameters: + '["k:12d8fdcaac1eb04a94aaf38644272541522da276d9eaec91412d21592018ba21","c50b9acb49ca25f59193b95b4e08e52e2ec89fa1bf308e6436f39a40ac2dc4f3",0.000256]', + qualifiedName: 'coin.TRANSFER', + requestKey: 'xOO00_UyNErUqTbI3wsqEL4suc6mQ4-N-Z7FhWZ5t88', + }, + }, + ], + }, + }, +}; + +const resFour = { + data: { + events: { + edges: [ + { + cursor: 'NzUzMDkzMg==', + node: { + id: 'RXZlbnQ6WyJ3M2VTQm13TVM5dGVMam5URDVqRVNDSEtwMFRmTUEwdk4ydktxQmREbUhZIiwiMCIsImZuenN6YW4yRk5HUlFqUTRCcjBKcWpackw0YjZTMEthR0huS0dsNVowU00iXQ==', + chainId: 14, + height: 2000184, + moduleName: 'coin', + name: 'TRANSFER', + orderIndex: 0, + parameters: + '["acc28032a1bb725b7ba0a3593ab86f393894fa6659281f3dfdfee0afe48559a2","99cb7008d7d70c94f138cc366a825f0d9c83a8a2f4ba82c86c666e0ab6fecf3a",0.0000216]', + qualifiedName: 'coin.TRANSFER', + requestKey: 'fnzszan2FNGRQjQ4Br0JqjZrL4b6S0KaGHnKGl5Z0SM', + }, + }, + { + cursor: 'NzUzMDkzNA==', + node: { + id: 'RXZlbnQ6WyJBa3JHTjZ6RnNCaEhfU29SMlg3NHAwMjNsQWNCc1ZEeTNlcDY3czV4ejZZIiwiMCIsIkZiLVluYnFiRmFieE9DUXRFTUlYVGs1ZFdtMFFhbWg5OXFkcU1rVlIyOUEiXQ==', + chainId: 17, + height: 2000185, + moduleName: 'coin', + name: 'TRANSFER', + orderIndex: 0, + parameters: + '["acc28032a1bb725b7ba0a3593ab86f393894fa6659281f3dfdfee0afe48559a2","99cb7008d7d70c94f138cc366a825f0d9c83a8a2f4ba82c86c666e0ab6fecf3a",0.0000216]', + qualifiedName: 'coin.TRANSFER', + requestKey: 'Fb-YnbqbFabxOCQtEMIXTk5dWm0Qamh99qdqMkVR29A', + }, + }, + { + cursor: 'NzUzMDkzMw==', + node: { + id: 'RXZlbnQ6WyJRdDdMVmF1Z29ibHFNbjdUUmFGVUoyWW5SMGVlaGNHRlU5X3B1OW5VVGI0IiwiMCIsIjJrWjlnSDY1VFN0Nll6bjVwX0NGNHZXMS0tdTctQkpibUtMYUpCeGVjOUkiXQ==', + chainId: 14, + height: 2000153, + moduleName: 'coin', + name: 'TRANSFER', + orderIndex: 0, + parameters: + '["acc28032a1bb725b7ba0a3593ab86f393894fa6659281f3dfdfee0afe48559a2","c50b9acb49ca25f59193b95b4e08e52e2ec89fa1bf308e6436f39a40ac2dc4f3",0.0000216]', + qualifiedName: 'coin.TRANSFER', + requestKey: '2kZ9gH65TSt6Yzn5p_CF4vW1--u7-BJbmKLaJBxec9I', + }, + }, + { + cursor: 'NzUzMDkzNQ==', + node: { + id: 'RXZlbnQ6WyJnTGlndUdVeVJXemI3TEZjN1puLVItSy1la2pWaFdzTS1KMHpobExHZFZVIiwiMCIsIl9YTFVTbFBZMGJ1NnpWYjMwdXlMazF5S3VUc01NVWhoUHI4Y2RlUTFfbjQiXQ==', + chainId: 17, + height: 2000153, + moduleName: 'coin', + name: 'TRANSFER', + orderIndex: 0, + parameters: + '["acc28032a1bb725b7ba0a3593ab86f393894fa6659281f3dfdfee0afe48559a2","c50b9acb49ca25f59193b95b4e08e52e2ec89fa1bf308e6436f39a40ac2dc4f3",0.0000216]', + qualifiedName: 'coin.TRANSFER', + requestKey: '_XLUSlPY0bu6zVb30uyLk1yKuTsMMUhhPr8cdeQ1_n4', + }, + }, + { + cursor: 'NzUzMDk0OA==', + node: { + id: 'RXZlbnQ6WyJhNjBhX1IwWHhFV0ZqUmp6Z19tVEFGd2lrcEU5V19sY3dKWldpc2cxMTN3IiwiMCIsIkhHVnNOM0VaTDNwT0NPUVBTa21vUjdNbDNfSDhocHo4bnp5cWlWNGFmdzAiXQ==', + chainId: 14, + height: 2000079, + moduleName: 'coin', + name: 'TRANSFER', + orderIndex: 0, + parameters: + '["acc28032a1bb725b7ba0a3593ab86f393894fa6659281f3dfdfee0afe48559a2","99cb7008d7d70c94f138cc366a825f0d9c83a8a2f4ba82c86c666e0ab6fecf3a",0.0000216]', + qualifiedName: 'coin.TRANSFER', + requestKey: 'HGVsN3EZL3pOCOQPSkmoR7Ml3_H8hpz8nzyqiV4afw0', + }, + }, + { + cursor: 'NzUzMDk0NA==', + node: { + id: 'RXZlbnQ6WyJpdGhCMlJSc1JYcXdQV0RnbmY3ajJ6Z195eC13ZFNDaFdXc0pfX3dIX2lRIiwiMCIsImVaTVBiUFJFZHEwUC1OdDdLZ3JSaVZQOUlzVklEX3V2YmNWa2lZYkZodU0iXQ==', + chainId: 17, + height: 2000075, + moduleName: 'coin', + name: 'TRANSFER', + orderIndex: 0, + parameters: + '["acc28032a1bb725b7ba0a3593ab86f393894fa6659281f3dfdfee0afe48559a2","99cb7008d7d70c94f138cc366a825f0d9c83a8a2f4ba82c86c666e0ab6fecf3a",0.0000216]', + qualifiedName: 'coin.TRANSFER', + requestKey: 'eZMPbPREdq0P-Nt7KgrRiVP9IsVID_uvbcVkiYbFhuM', + }, + }, + { + cursor: 'NzUzMDk0NQ==', + node: { + id: 'RXZlbnQ6WyJYZVVsaHlmZm1GcFFreTFiWnBzbE95bm5feDd0RDhrOE1fSlE4SFFSTzlNIiwiMCIsIlpQc2hoWmJlclBnVldnSkQtZTRkbDMzdmZ2LWVFZ2JSc1h1WnNFeHpnUFUiXQ==', + chainId: 17, + height: 2000061, + moduleName: 'coin', + name: 'TRANSFER', + orderIndex: 0, + parameters: + '["74617692759045b80c903e2d2c633344c8c1163150de27d35b63f474b9e4e1e9","99cb7008d7d70c94f138cc366a825f0d9c83a8a2f4ba82c86c666e0ab6fecf3a",0.00393]', + qualifiedName: 'coin.TRANSFER', + requestKey: 'ZPshhZberPgVWgJD-e4dl33vfv-eEgbRsXuZsExzgPU', + }, + }, + ], + }, + }, +}; + +describe('Events Query', () => { + it('qualifiedEventName: "pact.X_YIELD", last: 10', async () => { + const query = gql` + query { + events(qualifiedEventName: "pact.X_YIELD", last: 10) { + edges { + cursor + node { + id + chainId + height + moduleName + moduleName + name + orderIndex + parameters + qualifiedName + requestKey + } + } + } + } + `; + + const data = await client.request(query); + expect(resOne.data).toMatchObject(data); + }); + + it('qualifiedEventName: "pact.X_YIELD", after: "MjAy"', async () => { + const query = gql` + query { + events(qualifiedEventName: "pact.X_YIELD", after: "MjAy") { + edges { + cursor + node { + id + chainId + height + moduleName + moduleName + name + orderIndex + parameters + qualifiedName + requestKey + } + } + } + } + `; + + const data = await client.request(query); + expect(resTwo.data).toMatchObject(data); + }); + + it('qualifiedEventName: "coin.TRANSFER", blockHash: "ONd7stIjJbuwMqRmlyQ71XhT-xVvyVy-A0X2DBomw1g", first: 8', async () => { + const query = gql` + query { + events( + qualifiedEventName: "coin.TRANSFER" + blockHash: "ONd7stIjJbuwMqRmlyQ71XhT-xVvyVy-A0X2DBomw1g" + first: 8 + ) { + edges { + cursor + node { + id + chainId + height + moduleName + moduleName + name + orderIndex + parameters + qualifiedName + requestKey + } + } + } + } + `; + + const data = await client.request(query); + expect(resThree.data).toMatchObject(data); + }); + + it('qualifiedEventName: "coin.TRANSFER", minHeight: 2000000, maxHeight: 4500000, first: 7', async () => { + const query = gql` + query { + events( + qualifiedEventName: "coin.TRANSFER" + minHeight: 2000000 + maxHeight: 4500000 + first: 7 + ) { + edges { + cursor + node { + id + chainId + height + moduleName + moduleName + name + orderIndex + parameters + qualifiedName + requestKey + } + } + } + } + `; + + const data = await client.request(query); + expect(resFour.data).toMatchObject(data); + }); +}); diff --git a/indexer/tests/integration/transactions.query.test.ts b/indexer/tests/integration/transactions.query.test.ts new file mode 100644 index 00000000..f8ba782f --- /dev/null +++ b/indexer/tests/integration/transactions.query.test.ts @@ -0,0 +1,87 @@ +import { GraphQLClient, gql } from 'graphql-request'; +const API_URL = 'http://localhost:3001/graphql'; + +const client = new GraphQLClient(API_URL); + +const resOne = { + data: { + transactions: { + edges: [ + { + cursor: 'MTg=', + node: { + hash: 'LIbJxv2_SLmuyVOWawHAvad2og4QAjIgeHQPSrz8w2M', + cmd: { + networkId: 'mainnet01', + nonce: '2024-12-07 10:31:13.728821 UTC', + payload: {}, + }, + result: { + logs: 'KuauAJsfwwyh9rftv8_sfxQ064wjr_MU_eNBpSCmgHs', + continuation: + '{"step":0,"yield":{"data":{"amount":337.1879699,"receiver":"99cb7008d7d70c94f138cc366a825f0d9c83a8a2f4ba82c86c666e0ab6fecf3a","source-chain":"10","receiver-guard":{"keys":["99cb7008d7d70c94f138cc366a825f0d9c83a8a2f4ba82c86c666e0ab6fecf3a"],"pred":"keys-all"}},"source":"10","provenance":{"moduleHash":"klFkrLfpyLW-M3xjVPSdqXEMgxPPJibRt_D6qiBws6s","targetChainId":"0"}},"pactId":"LIbJxv2_SLmuyVOWawHAvad2og4QAjIgeHQPSrz8w2M","executed":null,"stepCount":2,"continuation":{"def":"coin.transfer-crosschain","args":["99cb7008d7d70c94f138cc366a825f0d9c83a8a2f4ba82c86c666e0ab6fecf3a","99cb7008d7d70c94f138cc366a825f0d9c83a8a2f4ba82c86c666e0ab6fecf3a",{"keys":["99cb7008d7d70c94f138cc366a825f0d9c83a8a2f4ba82c86c666e0ab6fecf3a"],"pred":"keys-all"},"0",337.1879699]},"stepHasRollback":false}', + goodResult: + '{"amount":337.1879699,"receiver":"99cb7008d7d70c94f138cc366a825f0d9c83a8a2f4ba82c86c666e0ab6fecf3a","source-chain":"10","receiver-guard":{"keys":["99cb7008d7d70c94f138cc366a825f0d9c83a8a2f4ba82c86c666e0ab6fecf3a"],"pred":"keys-all"}}', + }, + }, + }, + { + cursor: 'MTc=', + node: { + hash: 'GPexixjsj9u7tFpTOzTqGGnMjF-GK51ealjUDyQcqTA', + cmd: { + networkId: 'mainnet01', + nonce: '2024-12-07T10:30:54.914Z', + payload: {}, + }, + result: { + logs: 'sv0JVxMnf6Mpd3VwMFbYXgnklV8DwVc-F_Uyye1sO5g', + continuation: null, + goodResult: '"Write succeeded"', + }, + }, + }, + ], + }, + }, +}; + +describe('Transactions Query', () => { + it('blockHash: "Qzi58vcpW97du01srIwxpwSQUPDRNBnl2EKyubP-IWw"', async () => { + const query = gql` + query { + transactions(blockHash: "Qzi58vcpW97du01srIwxpwSQUPDRNBnl2EKyubP-IWw") { + edges { + cursor + node { + hash + cmd { + networkId + nonce + payload { + ... on ContinuationPayload { + data + pactId + proof + rollback + step + } + } + } + result { + ... on TransactionResult { + logs + continuation + goodResult + } + } + } + } + } + } + `; + + const data = await client.request(query); + expect(resOne.data).toMatchObject(data); + }); +}); diff --git a/indexer/tests/integration/transfers.query.test.ts b/indexer/tests/integration/transfers.query.test.ts new file mode 100644 index 00000000..ba2b5a76 --- /dev/null +++ b/indexer/tests/integration/transfers.query.test.ts @@ -0,0 +1,53 @@ +import { GraphQLClient, gql } from 'graphql-request'; +const API_URL = 'http://localhost:3001/graphql'; + +const client = new GraphQLClient(API_URL); + +const resOne = { + data: { + transfers: { + totalCount: 2, + edges: [ + { + node: { + amount: '34', + receiverAccount: 'k:7577a017eab7067e194fea639dae351406bc139425c7a170ceb4026f829b0816', + senderAccount: 'ef46137232f1cb9acebf717f94a5a9083e96db16957da79ed0d1df29b0bb4ff8', + moduleName: 'n_ebe54249b2e9d68f5060961f3c419f8288d18dc2.unitt', + }, + }, + { + node: { + amount: '0.001766', + receiverAccount: 'k:e7f7130f359fb1f8c87873bf858a0e9cbc3c1059f62ae715ec72e760b055e9f3', + senderAccount: 'k:c55bf5b9f84c33616c31806402f66576b4e59ae4b90830636e38c746a44069fc', + moduleName: 'coin', + }, + }, + ], + }, + }, +}; + +describe('Transfers Query', () => { + it('requestKey: "RNxoNCcQriEZU3p_qLSiJAo7Bi-0-Oe7NkjkPFOKr70"', async () => { + const query = gql` + query { + transfers(requestKey: "RNxoNCcQriEZU3p_qLSiJAo7Bi-0-Oe7NkjkPFOKr70") { + totalCount + edges { + node { + amount + receiverAccount + senderAccount + moduleName + } + } + } + } + `; + + const data = await client.request(query); + expect(resOne.data).toMatchObject(data); + }); +}); diff --git a/yarn.lock b/yarn.lock index 90fdf38b..4948e21a 100644 --- a/yarn.lock +++ b/yarn.lock @@ -4396,6 +4396,14 @@ bytes@3.1.2: resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.2.tgz#8b0beeb98605adf1b128fa4386403c009e0221a5" integrity sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg== +call-bind-apply-helpers@^1.0.1, call-bind-apply-helpers@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz#4b5428c222be985d79c3d82657479dbe0b59b2d6" + integrity sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ== + dependencies: + es-errors "^1.3.0" + function-bind "^1.1.2" + call-bind@^1.0.7: version "1.0.7" resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.7.tgz#06016599c40c56498c18769d2730be242b6fa3b9" @@ -5071,6 +5079,15 @@ dset@^3.1.2: resolved "https://registry.yarnpkg.com/dset/-/dset-3.1.4.tgz#f8eaf5f023f068a036d08cd07dc9ffb7d0065248" integrity sha512-2QF/g9/zTaPDc3BjNcVTGoBbXBgYfMTTceLaYcFJ/W9kggFUkhxD/hMEeuLKbugyef9SqAx8cpgwlIP/jinUTA== +dunder-proto@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/dunder-proto/-/dunder-proto-1.0.1.tgz#d7ae667e1dc83482f8b70fd0f6eefc50da30f58a" + integrity sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A== + dependencies: + call-bind-apply-helpers "^1.0.1" + es-errors "^1.3.0" + gopd "^1.2.0" + duplexify@^4.1.2: version "4.1.3" resolved "https://registry.yarnpkg.com/duplexify/-/duplexify-4.1.3.tgz#a07e1c0d0a2c001158563d32592ba58bddb0236f" @@ -5169,11 +5186,33 @@ es-define-property@^1.0.0: dependencies: get-intrinsic "^1.2.4" +es-define-property@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/es-define-property/-/es-define-property-1.0.1.tgz#983eb2f9a6724e9303f61addf011c72e09e0b0fa" + integrity sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g== + es-errors@^1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/es-errors/-/es-errors-1.3.0.tgz#05f75a25dab98e4fb1dcd5e1472c0546d5057c8f" integrity sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw== +es-object-atoms@^1.0.0, es-object-atoms@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/es-object-atoms/-/es-object-atoms-1.1.1.tgz#1c4f2c4837327597ce69d2ca190a7fdd172338c1" + integrity sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA== + dependencies: + es-errors "^1.3.0" + +es-set-tostringtag@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz#f31dbbe0c183b00a6d26eb6325c810c0fd18bd4d" + integrity sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA== + dependencies: + es-errors "^1.3.0" + get-intrinsic "^1.2.6" + has-tostringtag "^1.0.2" + hasown "^2.0.2" + escalade@^3.1.1, escalade@^3.1.2: version "3.1.2" resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.2.tgz#54076e9ab29ea5bf3d8f1ed62acffbb88272df27" @@ -5458,6 +5497,11 @@ extract-files@^11.0.0: resolved "https://registry.yarnpkg.com/extract-files/-/extract-files-11.0.0.tgz#b72d428712f787eef1f5193aff8ab5351ca8469a" integrity sha512-FuoE1qtbJ4bBVvv94CC7s0oTnKUGvQs+Rjf1L2SJFfS+HTVVjhPFtehPdQ0JiGPqVNfSSZvL5yzHHQq2Z4WNhQ== +extract-files@^9.0.0: + version "9.0.0" + resolved "https://registry.yarnpkg.com/extract-files/-/extract-files-9.0.0.tgz#8a7744f2437f81f5ed3250ed9f1550de902fe54a" + integrity sha512-CvdFfHkC95B4bBBk36hcEmvdR2awOdhhVUYH6S/zrVj3477zven/fJMYg7121h4T1xHZC+tetUpubpAhxwI7hQ== + fast-decode-uri-component@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/fast-decode-uri-component/-/fast-decode-uri-component-1.0.1.tgz#46f8b6c22b30ff7a81357d4f59abfae938202543" @@ -5634,6 +5678,16 @@ foreground-child@^3.1.0: cross-spawn "^7.0.0" signal-exit "^4.0.1" +form-data@^3.0.0: + version "3.0.3" + resolved "https://registry.yarnpkg.com/form-data/-/form-data-3.0.3.tgz#349c8f2c9d8f8f0c879ee0eb7cc0d300018d6b09" + integrity sha512-q5YBMeWy6E2Un0nMGWMgI65MAKtaylxfNJGJxpGh45YDciZB4epbWpaAfImil6CPAPTYB4sh0URQNDRIZG5F2w== + dependencies: + asynckit "^0.4.0" + combined-stream "^1.0.8" + es-set-tostringtag "^2.1.0" + mime-types "^2.1.35" + form-data@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/form-data/-/form-data-4.0.0.tgz#93919daeaf361ee529584b9b31664dc12c9fa452" @@ -5699,6 +5753,22 @@ get-intrinsic@^1.1.3, get-intrinsic@^1.2.4: has-symbols "^1.0.3" hasown "^2.0.0" +get-intrinsic@^1.2.6: + version "1.3.0" + resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.3.0.tgz#743f0e3b6964a93a5491ed1bffaae054d7f98d01" + integrity sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ== + dependencies: + call-bind-apply-helpers "^1.0.2" + es-define-property "^1.0.1" + es-errors "^1.3.0" + es-object-atoms "^1.1.1" + function-bind "^1.1.2" + get-proto "^1.0.1" + gopd "^1.2.0" + has-symbols "^1.1.0" + hasown "^2.0.2" + math-intrinsics "^1.1.0" + get-package-type@^0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/get-package-type/-/get-package-type-0.1.0.tgz#8de2d803cff44df3bc6c456e6668b36c3926e11a" @@ -5709,6 +5779,14 @@ get-port-please@^3.1.2: resolved "https://registry.yarnpkg.com/get-port-please/-/get-port-please-3.1.2.tgz#502795e56217128e4183025c89a48c71652f4e49" integrity sha512-Gxc29eLs1fbn6LQ4jSU4vXjlwyZhF5HsGuMAa7gqBP4Rw4yxxltyDUuF5MBclFzDTXO+ACchGQoeela4DSfzdQ== +get-proto@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/get-proto/-/get-proto-1.0.1.tgz#150b3f2743869ef3e851ec0c49d15b1d14d00ee1" + integrity sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g== + dependencies: + dunder-proto "^1.0.1" + es-object-atoms "^1.0.0" + get-stream@^6.0.0: version "6.0.1" resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-6.0.1.tgz#a262d8eef67aced57c2852ad6167526a43cbf7b7" @@ -5799,6 +5877,11 @@ gopd@^1.0.1: dependencies: get-intrinsic "^1.1.3" +gopd@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/gopd/-/gopd-1.2.0.tgz#89f56b8217bdbc8802bd299df6d7f1081d7e51a1" + integrity sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg== + graceful-fs@^4.2.9: version "4.2.11" resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.11.tgz#4183e4e8bf08bb6e05bbb2f7d2e0c8f712ca40e3" @@ -5879,6 +5962,16 @@ graphql-query-complexity@^1.0.0: dependencies: lodash.get "^4.4.2" +graphql-request@5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/graphql-request/-/graphql-request-5.0.0.tgz#7504a807d0e11be11a3c448e900f0cc316aa18ef" + integrity sha512-SpVEnIo2J5k2+Zf76cUkdvIRaq5FMZvGQYnA4lUWYbc99m+fHh4CZYRRO/Ff4tCLQ613fzCm3SiDT64ubW5Gyw== + dependencies: + "@graphql-typed-document-node/core" "^3.1.1" + cross-fetch "^3.1.5" + extract-files "^9.0.0" + form-data "^3.0.0" + graphql-request@^6.0.0: version "6.1.0" resolved "https://registry.yarnpkg.com/graphql-request/-/graphql-request-6.1.0.tgz#f4eb2107967af3c7a5907eb3131c671eac89be4f" @@ -5966,7 +6059,19 @@ has-symbols@^1.0.3: resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.3.tgz#bb7b2c4349251dce87b125f7bdf874aa7c8b39f8" integrity sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A== -hasown@^2.0.0: +has-symbols@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.1.0.tgz#fc9c6a783a084951d0b971fe1018de813707a338" + integrity sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ== + +has-tostringtag@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/has-tostringtag/-/has-tostringtag-1.0.2.tgz#2cdc42d40bef2e5b4eeab7c01a73c54ce7ab5abc" + integrity sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw== + dependencies: + has-symbols "^1.0.3" + +hasown@^2.0.0, hasown@^2.0.2: version "2.0.2" resolved "https://registry.yarnpkg.com/hasown/-/hasown-2.0.2.tgz#003eaf91be7adc372e84ec59dc37252cedb80003" integrity sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ== @@ -7170,6 +7275,11 @@ map-cache@^0.2.0: resolved "https://registry.yarnpkg.com/map-cache/-/map-cache-0.2.2.tgz#c32abd0bd6525d9b051645bb4f26ac5dc98a0dbf" integrity sha512-8y/eV9QQZCiyn1SprXSrCmqJN0yNRATe+PO8ztwqrvrbdRLA3eYJF0yaR0YayLWkMbsQSKWS9N2gPcGEc4UsZg== +math-intrinsics@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/math-intrinsics/-/math-intrinsics-1.1.0.tgz#a0dd74be81e2aa5c2f27e65ce283605ee4e2b7f9" + integrity sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g== + media-typer@0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748" @@ -7233,7 +7343,7 @@ mime-db@1.52.0: resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.52.0.tgz#bbabcdc02859f4987301c856e3387ce5ec43bf70" integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg== -mime-types@^2.1.12, mime-types@~2.1.24, mime-types@~2.1.34: +mime-types@^2.1.12, mime-types@^2.1.35, mime-types@~2.1.24, mime-types@~2.1.34: version "2.1.35" resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.35.tgz#381a871b62a734450660ae3deee44813f70d959a" integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==