diff --git a/.circleci/config.yml b/.circleci/config.yml index 07f492e404..947c405c44 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -46,6 +46,8 @@ jobs: - ./packages/core-forger/node_modules - ./packages/core-graphql/node_modules - ./packages/core-http-utils/node_modules + - ./packages/core-interfaces/node_modules + - ./packages/core-jest-matchers/node_modules - ./packages/core-json-rpc/node_modules - ./packages/core-logger/node_modules - ./packages/core-logger-winston/node_modules @@ -59,23 +61,22 @@ jobs: - ./packages/core-vote-report/node_modules - ./packages/core-webhooks/node_modules - ./packages/crypto/node_modules - - ./packages/core-interfaces/node_modules - ./node_modules - run: name: Create .ark/database directory command: mkdir -p $HOME/.ark/database - run: - name: core-vote-report - command: 'cd ~/ark-core/packages/core-vote-report && yarn test:coverage' + name: core-webhooks + command: 'cd ~/ark-core/packages/core-webhooks && yarn test:coverage' - run: - name: core-tester-cli - command: 'cd ~/ark-core/packages/core-tester-cli && yarn test:coverage' + name: core-transaction-pool + command: 'cd ~/ark-core/packages/core-transaction-pool && yarn test:coverage' - run: - name: core-snapshots - command: 'cd ~/ark-core/packages/core-snapshots && yarn test:coverage' + name: core-logger-winston + command: 'cd ~/ark-core/packages/core-logger-winston && yarn test:coverage' - run: - name: core-logger - command: 'cd ~/ark-core/packages/core-logger && yarn test:coverage' + name: core-jest-matchers + command: 'cd ~/ark-core/packages/core-jest-matchers && yarn test:coverage' - run: name: core-graphql command: 'cd ~/ark-core/packages/core-graphql && yarn test:coverage' @@ -141,6 +142,8 @@ jobs: - ./packages/core-forger/node_modules - ./packages/core-graphql/node_modules - ./packages/core-http-utils/node_modules + - ./packages/core-interfaces/node_modules + - ./packages/core-jest-matchers/node_modules - ./packages/core-json-rpc/node_modules - ./packages/core-logger/node_modules - ./packages/core-logger-winston/node_modules @@ -154,23 +157,22 @@ jobs: - ./packages/core-vote-report/node_modules - ./packages/core-webhooks/node_modules - ./packages/crypto/node_modules - - ./packages/core-interfaces/node_modules - ./node_modules - run: name: Create .ark/database directory command: mkdir -p $HOME/.ark/database - run: - name: core-vote-report - command: 'cd ~/ark-core/packages/core-vote-report && yarn test:coverage' + name: core-webhooks + command: 'cd ~/ark-core/packages/core-webhooks && yarn test:coverage' - run: - name: core-tester-cli - command: 'cd ~/ark-core/packages/core-tester-cli && yarn test:coverage' + name: core-transaction-pool + command: 'cd ~/ark-core/packages/core-transaction-pool && yarn test:coverage' - run: - name: core-snapshots - command: 'cd ~/ark-core/packages/core-snapshots && yarn test:coverage' + name: core-logger-winston + command: 'cd ~/ark-core/packages/core-logger-winston && yarn test:coverage' - run: - name: core-logger - command: 'cd ~/ark-core/packages/core-logger && yarn test:coverage' + name: core-jest-matchers + command: 'cd ~/ark-core/packages/core-jest-matchers && yarn test:coverage' - run: name: core-graphql command: 'cd ~/ark-core/packages/core-graphql && yarn test:coverage' @@ -236,6 +238,8 @@ jobs: - ./packages/core-forger/node_modules - ./packages/core-graphql/node_modules - ./packages/core-http-utils/node_modules + - ./packages/core-interfaces/node_modules + - ./packages/core-jest-matchers/node_modules - ./packages/core-json-rpc/node_modules - ./packages/core-logger/node_modules - ./packages/core-logger-winston/node_modules @@ -249,7 +253,6 @@ jobs: - ./packages/core-vote-report/node_modules - ./packages/core-webhooks/node_modules - ./packages/crypto/node_modules - - ./packages/core-interfaces/node_modules - ./node_modules - run: name: Create .ark/database directory @@ -316,6 +319,8 @@ jobs: - ./packages/core-forger/node_modules - ./packages/core-graphql/node_modules - ./packages/core-http-utils/node_modules + - ./packages/core-interfaces/node_modules + - ./packages/core-jest-matchers/node_modules - ./packages/core-json-rpc/node_modules - ./packages/core-logger/node_modules - ./packages/core-logger-winston/node_modules @@ -329,20 +334,25 @@ jobs: - ./packages/core-vote-report/node_modules - ./packages/core-webhooks/node_modules - ./packages/crypto/node_modules - - ./packages/core-interfaces/node_modules - ./node_modules - run: name: Create .ark/database directory command: mkdir -p $HOME/.ark/database - run: - name: core-webhooks - command: 'cd ~/ark-core/packages/core-webhooks && yarn test:coverage' + name: crypto + command: 'cd ~/ark-core/packages/crypto && yarn test:coverage' - run: - name: core-transaction-pool - command: 'cd ~/ark-core/packages/core-transaction-pool && yarn test:coverage' + name: core-utils + command: 'cd ~/ark-core/packages/core-utils && yarn test:coverage' - run: - name: core-logger-winston - command: 'cd ~/ark-core/packages/core-logger-winston && yarn test:coverage' + name: core-test-utils + command: 'cd ~/ark-core/packages/core-test-utils && yarn test:coverage' + - run: + name: core-p2p + command: 'cd ~/ark-core/packages/core-p2p && yarn test:coverage' + - run: + name: core-json-rpc + command: 'cd ~/ark-core/packages/core-json-rpc && yarn test:coverage' - run: name: core-http-utils command: 'cd ~/ark-core/packages/core-http-utils && yarn test:coverage' @@ -408,6 +418,8 @@ jobs: - ./packages/core-forger/node_modules - ./packages/core-graphql/node_modules - ./packages/core-http-utils/node_modules + - ./packages/core-interfaces/node_modules + - ./packages/core-jest-matchers/node_modules - ./packages/core-json-rpc/node_modules - ./packages/core-logger/node_modules - ./packages/core-logger-winston/node_modules @@ -421,26 +433,22 @@ jobs: - ./packages/core-vote-report/node_modules - ./packages/core-webhooks/node_modules - ./packages/crypto/node_modules - - ./packages/core-interfaces/node_modules - ./node_modules - run: name: Create .ark/database directory command: mkdir -p $HOME/.ark/database - run: - name: crypto - command: 'cd ~/ark-core/packages/crypto && yarn test:coverage' - - run: - name: core-utils - command: 'cd ~/ark-core/packages/core-utils && yarn test:coverage' + name: core-vote-report + command: 'cd ~/ark-core/packages/core-vote-report && yarn test:coverage' - run: - name: core-test-utils - command: 'cd ~/ark-core/packages/core-test-utils && yarn test:coverage' + name: core-tester-cli + command: 'cd ~/ark-core/packages/core-tester-cli && yarn test:coverage' - run: - name: core-p2p - command: 'cd ~/ark-core/packages/core-p2p && yarn test:coverage' + name: core-snapshots + command: 'cd ~/ark-core/packages/core-snapshots && yarn test:coverage' - run: - name: core-json-rpc - command: 'cd ~/ark-core/packages/core-json-rpc && yarn test:coverage' + name: core-logger + command: 'cd ~/ark-core/packages/core-logger && yarn test:coverage' - run: name: core-forger command: 'cd ~/ark-core/packages/core-forger && yarn test:coverage' @@ -500,6 +508,8 @@ jobs: - ./packages/core-forger/node_modules - ./packages/core-graphql/node_modules - ./packages/core-http-utils/node_modules + - ./packages/core-interfaces/node_modules + - ./packages/core-jest-matchers/node_modules - ./packages/core-json-rpc/node_modules - ./packages/core-logger/node_modules - ./packages/core-logger-winston/node_modules @@ -513,7 +523,6 @@ jobs: - ./packages/core-vote-report/node_modules - ./packages/core-webhooks/node_modules - ./packages/crypto/node_modules - - ./packages/core-interfaces/node_modules - ./node_modules - run: name: Create .ark/database directory @@ -580,6 +589,8 @@ jobs: - ./packages/core-forger/node_modules - ./packages/core-graphql/node_modules - ./packages/core-http-utils/node_modules + - ./packages/core-interfaces/node_modules + - ./packages/core-jest-matchers/node_modules - ./packages/core-json-rpc/node_modules - ./packages/core-logger/node_modules - ./packages/core-logger-winston/node_modules @@ -593,20 +604,25 @@ jobs: - ./packages/core-vote-report/node_modules - ./packages/core-webhooks/node_modules - ./packages/crypto/node_modules - - ./packages/core-interfaces/node_modules - ./node_modules - run: name: Create .ark/database directory command: mkdir -p $HOME/.ark/database - run: - name: core-webhooks - command: 'cd ~/ark-core/packages/core-webhooks && yarn test:coverage' + name: crypto + command: 'cd ~/ark-core/packages/crypto && yarn test:coverage' - run: - name: core-transaction-pool - command: 'cd ~/ark-core/packages/core-transaction-pool && yarn test:coverage' + name: core-utils + command: 'cd ~/ark-core/packages/core-utils && yarn test:coverage' - run: - name: core-logger-winston - command: 'cd ~/ark-core/packages/core-logger-winston && yarn test:coverage' + name: core-test-utils + command: 'cd ~/ark-core/packages/core-test-utils && yarn test:coverage' + - run: + name: core-p2p + command: 'cd ~/ark-core/packages/core-p2p && yarn test:coverage' + - run: + name: core-json-rpc + command: 'cd ~/ark-core/packages/core-json-rpc && yarn test:coverage' - run: name: core-http-utils command: 'cd ~/ark-core/packages/core-http-utils && yarn test:coverage' @@ -672,6 +688,8 @@ jobs: - ./packages/core-forger/node_modules - ./packages/core-graphql/node_modules - ./packages/core-http-utils/node_modules + - ./packages/core-interfaces/node_modules + - ./packages/core-jest-matchers/node_modules - ./packages/core-json-rpc/node_modules - ./packages/core-logger/node_modules - ./packages/core-logger-winston/node_modules @@ -685,26 +703,22 @@ jobs: - ./packages/core-vote-report/node_modules - ./packages/core-webhooks/node_modules - ./packages/crypto/node_modules - - ./packages/core-interfaces/node_modules - ./node_modules - run: name: Create .ark/database directory command: mkdir -p $HOME/.ark/database - run: - name: crypto - command: 'cd ~/ark-core/packages/crypto && yarn test:coverage' - - run: - name: core-utils - command: 'cd ~/ark-core/packages/core-utils && yarn test:coverage' + name: core-vote-report + command: 'cd ~/ark-core/packages/core-vote-report && yarn test:coverage' - run: - name: core-test-utils - command: 'cd ~/ark-core/packages/core-test-utils && yarn test:coverage' + name: core-tester-cli + command: 'cd ~/ark-core/packages/core-tester-cli && yarn test:coverage' - run: - name: core-p2p - command: 'cd ~/ark-core/packages/core-p2p && yarn test:coverage' + name: core-snapshots + command: 'cd ~/ark-core/packages/core-snapshots && yarn test:coverage' - run: - name: core-json-rpc - command: 'cd ~/ark-core/packages/core-json-rpc && yarn test:coverage' + name: core-logger + command: 'cd ~/ark-core/packages/core-logger && yarn test:coverage' - run: name: core-forger command: 'cd ~/ark-core/packages/core-forger && yarn test:coverage' diff --git a/packages/core-api/src/index.ts b/packages/core-api/src/index.ts index 3590f2f7ad..562ea209da 100644 --- a/packages/core-api/src/index.ts +++ b/packages/core-api/src/index.ts @@ -2,7 +2,7 @@ import { Container, Logger } from "@arkecosystem/core-interfaces"; import { defaults } from "./defaults"; import { Server } from "./server"; -export const plugin : Container.PluginDescriptor = { +export const plugin: Container.PluginDescriptor = { pkg: require("../package.json"), defaults, alias: "api", diff --git a/packages/core-api/src/services/cache.ts b/packages/core-api/src/services/cache.ts new file mode 100644 index 0000000000..72921c31d1 --- /dev/null +++ b/packages/core-api/src/services/cache.ts @@ -0,0 +1,42 @@ +import { app } from "@arkecosystem/core-container"; +import { createHash } from "crypto"; +import Hapi from "hapi"; + +export class ServerCache { + public static make(server: Hapi.Server): ServerCache { + return new ServerCache(server); + } + + private constructor(readonly server: Hapi.Server) {} + + public method(name: string, method: any, expiresIn: number, argsCallback?: any): this { + let options = {}; + + if (this.server.app.config.cache.enabled) { + options = { + cache: { + expiresIn: expiresIn * 1000, + generateTimeout: this.getCacheTimeout(), + getDecoratedValue: true, + }, + generateKey: request => this.generateCacheKey(argsCallback(request)), + }; + } + + this.server.method(name, method, options); + + return this; + } + + private generateCacheKey(value: object): string { + return createHash("sha256") + .update(JSON.stringify(value)) + .digest("hex"); + } + + private getCacheTimeout(): number | boolean { + const { generateTimeout } = app.resolveOptions("api").cache; + + return JSON.parse(generateTimeout); + } +} diff --git a/packages/core-api/src/services/index.ts b/packages/core-api/src/services/index.ts new file mode 100644 index 0000000000..e60aa06216 --- /dev/null +++ b/packages/core-api/src/services/index.ts @@ -0,0 +1,4 @@ +import { ServerCache } from "./cache"; +import { transformerService } from "./transformer"; + +export { ServerCache, transformerService }; diff --git a/packages/core-api/src/services/transformer.ts b/packages/core-api/src/services/transformer.ts index b370f029b1..832778a47f 100644 --- a/packages/core-api/src/services/transformer.ts +++ b/packages/core-api/src/services/transformer.ts @@ -1,5 +1,3 @@ -import { resolve } from "path"; - import { transformAccountLegacy } from "../versions/1/accounts/transformer"; import { transformBlockLegacy } from "../versions/1/blocks/transformer"; import { transformDelegateLegacy } from "../versions/1/delegates/transformer"; diff --git a/packages/core-api/src/versions/1/accounts/methods.ts b/packages/core-api/src/versions/1/accounts/methods.ts index 752f384653..04b1794c35 100644 --- a/packages/core-api/src/versions/1/accounts/methods.ts +++ b/packages/core-api/src/versions/1/accounts/methods.ts @@ -1,6 +1,6 @@ import { app } from "@arkecosystem/core-container"; import { PostgresConnection } from "@arkecosystem/core-database-postgres"; -import { generateCacheKey, getCacheTimeout } from "../../utils"; +import { ServerCache } from "../../../services"; import { paginate, respondWith, toCollection, toResource } from "../utils"; const database = app.resolvePlugin("database"); @@ -52,69 +52,12 @@ const publicKey = async request => { }; export function registerMethods(server) { - const cacheDisabled = !server.app.config.cache.enabled; - - server.method( - "v1.accounts.index", - index, - cacheDisabled - ? {} - : { - cache: { - expiresIn: 8 * 1000, - generateTimeout: getCacheTimeout(), - getDecoratedValue: true, - }, - generateKey: request => - generateCacheKey({ - ...request.query, - ...paginate(request), - }), - }, - ); - - server.method( - "v1.accounts.show", - show, - cacheDisabled - ? {} - : { - cache: { - expiresIn: 8 * 1000, - generateTimeout: getCacheTimeout(), - getDecoratedValue: true, - }, - generateKey: request => generateCacheKey({ address: request.query.address }), - }, - ); - - server.method( - "v1.accounts.balance", - balance, - cacheDisabled - ? {} - : { - cache: { - expiresIn: 8 * 1000, - generateTimeout: getCacheTimeout(), - getDecoratedValue: true, - }, - generateKey: request => generateCacheKey({ address: request.query.address }), - }, - ); - - server.method( - "v1.accounts.publicKey", - publicKey, - cacheDisabled - ? {} - : { - cache: { - expiresIn: 600 * 1000, - generateTimeout: getCacheTimeout(), - getDecoratedValue: true, - }, - generateKey: request => generateCacheKey({ address: request.query.address }), - }, - ); + ServerCache.make(server) + .method("v1.accounts.index", index, 8, request => ({ + ...request.query, + ...paginate(request), + })) + .method("v1.accounts.show", show, 8, request => ({ address: request.query.address })) + .method("v1.accounts.balance", balance, 8, request => ({ address: request.query.address })) + .method("v1.accounts.publicKey", publicKey, 600, request => ({ address: request.query.address })); } diff --git a/packages/core-api/src/versions/1/blocks/methods.ts b/packages/core-api/src/versions/1/blocks/methods.ts index d8fa4220fc..3a61ae2fe3 100644 --- a/packages/core-api/src/versions/1/blocks/methods.ts +++ b/packages/core-api/src/versions/1/blocks/methods.ts @@ -1,5 +1,5 @@ import { blocksRepository } from "../../../repositories"; -import { generateCacheKey, getCacheTimeout } from "../../utils"; +import { ServerCache } from "../../../services"; import { paginate, respondWith, toCollection, toResource } from "../utils"; const index = async request => { @@ -31,39 +31,10 @@ const show = async request => { }; export function registerMethods(server) { - const cacheDisabled = !server.app.config.cache.enabled; - - server.method( - "v1.blocks.index", - index, - cacheDisabled - ? {} - : { - cache: { - expiresIn: 8 * 1000, - generateTimeout: getCacheTimeout(), - getDecoratedValue: true, - }, - generateKey: request => - generateCacheKey({ - ...request.query, - ...paginate(request), - }), - }, - ); - - server.method( - "v1.blocks.show", - show, - cacheDisabled - ? {} - : { - cache: { - expiresIn: 600 * 1000, - generateTimeout: getCacheTimeout(), - getDecoratedValue: true, - }, - generateKey: request => generateCacheKey({ id: request.query.id }), - }, - ); + ServerCache.make(server) + .method("v1.blocks.index", index, 8, request => ({ + ...request.query, + ...paginate(request), + })) + .method("v1.blocks.show", show, 600, request => ({ id: request.query.id })); } diff --git a/packages/core-api/src/versions/1/delegates/methods.ts b/packages/core-api/src/versions/1/delegates/methods.ts index 0342640ef5..c5b7ed2a2d 100644 --- a/packages/core-api/src/versions/1/delegates/methods.ts +++ b/packages/core-api/src/versions/1/delegates/methods.ts @@ -1,6 +1,6 @@ import { app } from "@arkecosystem/core-container"; import { PostgresConnection } from "@arkecosystem/core-database-postgres"; -import { generateCacheKey, getCacheTimeout } from "../../utils"; +import { ServerCache } from "../../../services"; import { paginate, respondWith, toCollection, toResource } from "../utils"; const database = app.resolvePlugin("database"); @@ -70,94 +70,21 @@ const voters = async request => { }; export function registerMethods(server) { - const cacheDisabled = !server.app.config.cache.enabled; - - server.method( - "v1.delegates.index", - index, - cacheDisabled - ? {} - : { - cache: { - expiresIn: 8 * 1000, - generateTimeout: getCacheTimeout(), - getDecoratedValue: true, - }, - generateKey: request => - generateCacheKey({ - ...request.query, - ...{ - offset: request.query.offset || 0, - limit: request.query.limit || 51, - }, - }), - }, - ); - - server.method( - "v1.delegates.show", - show, - cacheDisabled - ? {} - : { - cache: { - expiresIn: 8 * 1000, - generateTimeout: getCacheTimeout(), - getDecoratedValue: true, - }, - generateKey: request => - generateCacheKey({ - id: request.query.publicKey || request.query.username, - }), - }, - ); - - server.method( - "v1.delegates.count", - countDelegates, - cacheDisabled - ? {} - : { - cache: { - expiresIn: 8 * 1000, - generateTimeout: getCacheTimeout(), - getDecoratedValue: true, - }, - generateKey: request => generateCacheKey({ time: +new Date() }), - }, - ); - - server.method( - "v1.delegates.search", - search, - cacheDisabled - ? {} - : { - cache: { - expiresIn: 8 * 1000, - generateTimeout: getCacheTimeout(), - getDecoratedValue: true, - }, - generateKey: request => - generateCacheKey({ - ...{ username: request.query.q }, - ...paginate(request), - }), - }, - ); - - server.method( - "v1.delegates.voters", - voters, - cacheDisabled - ? {} - : { - cache: { - expiresIn: 8 * 1000, - generateTimeout: getCacheTimeout(), - getDecoratedValue: true, - }, - generateKey: request => generateCacheKey({ id: request.query.publicKey }), - }, - ); + ServerCache.make(server) + .method("v1.delegates.index", index, 8, request => ({ + ...request.query, + ...{ + offset: request.query.offset || 0, + limit: request.query.limit || 51, + }, + })) + .method("v1.delegates.show", show, 8, request => ({ + id: request.query.publicKey || request.query.username, + })) + .method("v1.delegates.count", countDelegates, 8, request => ({ time: +new Date() })) + .method("v1.delegates.search", search, 8, request => ({ + ...{ username: request.query.q }, + ...paginate(request), + })) + .method("v1.delegates.voters", voters, 8, request => ({ id: request.query.publicKey })); } diff --git a/packages/core-api/src/versions/1/transactions/methods.ts b/packages/core-api/src/versions/1/transactions/methods.ts index 5dbbc06a83..9e4dac3261 100644 --- a/packages/core-api/src/versions/1/transactions/methods.ts +++ b/packages/core-api/src/versions/1/transactions/methods.ts @@ -1,5 +1,5 @@ import { transactionsRepository } from "../../../repositories"; -import { generateCacheKey, getCacheTimeout } from "../../utils"; +import { ServerCache } from "../../../services"; import { paginate, respondWith, toCollection, toResource } from "../utils"; const index = async request => { @@ -31,39 +31,10 @@ const show = async request => { }; export function registerMethods(server) { - const cacheDisabled = !server.app.config.cache.enabled; - - server.method( - "v1.transactions.index", - index, - cacheDisabled - ? {} - : { - cache: { - expiresIn: 8 * 1000, - generateTimeout: getCacheTimeout(), - getDecoratedValue: true, - }, - generateKey: request => - generateCacheKey({ - ...request.query, - ...paginate(request), - }), - }, - ); - - server.method( - "v1.transactions.show", - show, - cacheDisabled - ? {} - : { - cache: { - expiresIn: 8 * 1000, - generateTimeout: getCacheTimeout(), - getDecoratedValue: true, - }, - generateKey: request => generateCacheKey({ id: request.query.id }), - }, - ); + ServerCache.make(server) + .method("v1.transactions.index", index, 8, request => ({ + ...request.query, + ...paginate(request), + })) + .method("v1.transactions.show", show, 8, request => ({ id: request.query.id })); } diff --git a/packages/core-api/src/versions/2/blocks/methods.ts b/packages/core-api/src/versions/2/blocks/methods.ts index d684a6a8ce..a12628c4d8 100644 --- a/packages/core-api/src/versions/2/blocks/methods.ts +++ b/packages/core-api/src/versions/2/blocks/methods.ts @@ -1,6 +1,6 @@ import Boom from "boom"; import { blocksRepository, transactionsRepository } from "../../../repositories"; -import { generateCacheKey, getCacheTimeout } from "../../utils"; +import { ServerCache } from "../../../services"; import { paginate, respondWithResource, toPagination } from "../utils"; const index = async request => { @@ -48,79 +48,20 @@ const search = async request => { }; export function registerMethods(server) { - const cacheDisabled = !server.app.config.cache.enabled; - - server.method( - "v2.blocks.index", - index, - cacheDisabled - ? {} - : { - cache: { - expiresIn: 6 * 1000, - generateTimeout: getCacheTimeout(), - getDecoratedValue: true, - }, - generateKey: request => - generateCacheKey({ - ...request.query, - ...paginate(request), - }), - }, - ); - - server.method( - "v2.blocks.show", - show, - cacheDisabled - ? {} - : { - cache: { - expiresIn: 600 * 1000, - generateTimeout: getCacheTimeout(), - getDecoratedValue: true, - }, - generateKey: request => generateCacheKey({ id: request.params.id }), - }, - ); - - server.method( - "v2.blocks.transactions", - transactions, - cacheDisabled - ? {} - : { - cache: { - expiresIn: 600 * 1000, - generateTimeout: getCacheTimeout(), - getDecoratedValue: true, - }, - generateKey: request => - generateCacheKey({ - ...{ id: request.params.id }, - ...request.query, - ...paginate(request), - }), - }, - ); - - server.method( - "v2.blocks.search", - search, - cacheDisabled - ? {} - : { - cache: { - expiresIn: 30 * 1000, - generateTimeout: getCacheTimeout(), - getDecoratedValue: true, - }, - generateKey: request => - generateCacheKey({ - ...request.payload, - ...request.query, - ...paginate(request), - }), - }, - ); + ServerCache.make(server) + .method("v2.blocks.index", index, 6, request => ({ + ...request.query, + ...paginate(request), + })) + .method("v2.blocks.show", show, 600, request => ({ id: request.params.id })) + .method("v2.blocks.transactions", transactions, 600, request => ({ + ...{ id: request.params.id }, + ...request.query, + ...paginate(request), + })) + .method("v2.blocks.search", search, 30, request => ({ + ...request.payload, + ...request.query, + ...paginate(request), + })); } diff --git a/packages/core-api/src/versions/2/delegates/methods.ts b/packages/core-api/src/versions/2/delegates/methods.ts index 689ce6f74a..fcf2691f20 100644 --- a/packages/core-api/src/versions/2/delegates/methods.ts +++ b/packages/core-api/src/versions/2/delegates/methods.ts @@ -3,7 +3,7 @@ import { PostgresConnection } from "@arkecosystem/core-database-postgres"; import Boom from "boom"; import orderBy from "lodash/orderBy"; import { blocksRepository } from "../../../repositories"; -import { generateCacheKey, getCacheTimeout } from "../../utils"; +import { ServerCache } from "../../../services"; import { paginate, respondWithResource, toPagination } from "../utils"; const database = app.resolvePlugin("database"); @@ -79,112 +79,24 @@ const voterBalances = async request => { }; export function registerMethods(server) { - const cacheDisabled = !server.app.config.cache.enabled; - - server.method( - "v2.delegates.index", - index, - cacheDisabled - ? {} - : { - cache: { - expiresIn: 8 * 1000, - generateTimeout: getCacheTimeout(), - getDecoratedValue: true, - }, - generateKey: request => - generateCacheKey({ - ...request.query, - ...paginate(request), - }), - }, - ); - - server.method( - "v2.delegates.show", - show, - cacheDisabled - ? {} - : { - cache: { - expiresIn: 8 * 1000, - generateTimeout: getCacheTimeout(), - getDecoratedValue: true, - }, - generateKey: request => generateCacheKey({ id: request.params.id }), - }, - ); - - server.method( - "v2.delegates.search", - search, - cacheDisabled - ? {} - : { - cache: { - expiresIn: 30 * 1000, - generateTimeout: getCacheTimeout(), - getDecoratedValue: true, - }, - generateKey: request => - generateCacheKey({ - ...request.payload, - ...request.query, - ...paginate(request), - }), - }, - ); - - server.method( - "v2.delegates.blocks", - blocks, - cacheDisabled - ? {} - : { - cache: { - expiresIn: 8 * 1000, - generateTimeout: getCacheTimeout(), - getDecoratedValue: true, - }, - generateKey: request => - generateCacheKey({ - ...{ id: request.params.id }, - ...paginate(request), - }), - }, - ); - - server.method( - "v2.delegates.voters", - voters, - cacheDisabled - ? {} - : { - cache: { - expiresIn: 8 * 1000, - generateTimeout: getCacheTimeout(), - getDecoratedValue: true, - }, - generateKey: request => - generateCacheKey({ - ...{ id: request.params.id }, - ...paginate(request), - }), - }, - ); - - server.method( - "v2.delegates.voterBalances", - voterBalances, - cacheDisabled - ? {} - : { - cache: { - expiresIn: 8 * 1000, - generateTimeout: getCacheTimeout(), - getDecoratedValue: true, - }, - generateKey: request => generateCacheKey({ id: request.params.id }), - }, - ); + ServerCache.make(server) + .method("v2.delegates.index", index, 8, request => ({ + ...request.query, + ...paginate(request), + })) + .method("v2.delegates.show", show, 8, request => ({ id: request.params.id })) + .method("v2.delegates.search", search, 30, request => ({ + ...request.payload, + ...request.query, + ...paginate(request), + })) + .method("v2.delegates.blocks", blocks, 8, request => ({ + ...{ id: request.params.id }, + ...paginate(request), + })) + .method("v2.delegates.voters", voters, 8, request => ({ + ...{ id: request.params.id }, + ...paginate(request), + })) + .method("v2.delegates.voterBalances", voterBalances, 8, request => ({ id: request.params.id })); } diff --git a/packages/core-api/src/versions/2/shared/controller.ts b/packages/core-api/src/versions/2/shared/controller.ts index 3b21e33db4..a6df0c0dc6 100644 --- a/packages/core-api/src/versions/2/shared/controller.ts +++ b/packages/core-api/src/versions/2/shared/controller.ts @@ -1,7 +1,6 @@ import { app } from "@arkecosystem/core-container"; -import { Blockchain } from "@arkecosystem/core-interfaces"; import { PostgresConnection } from "@arkecosystem/core-database-postgres"; - +import { Blockchain } from "@arkecosystem/core-interfaces"; import Hapi from "hapi"; import { paginate, diff --git a/packages/core-api/src/versions/2/transactions/methods.ts b/packages/core-api/src/versions/2/transactions/methods.ts index 6276896603..04707c22d6 100644 --- a/packages/core-api/src/versions/2/transactions/methods.ts +++ b/packages/core-api/src/versions/2/transactions/methods.ts @@ -1,6 +1,6 @@ import Boom from "boom"; import { transactionsRepository } from "../../../repositories"; -import { generateCacheKey, getCacheTimeout } from "../../utils"; +import { ServerCache } from "../../../services"; import { paginate, respondWithResource, toPagination } from "../utils"; const index = async request => { @@ -33,59 +33,15 @@ const search = async request => { }; export function registerMethods(server) { - const cacheDisabled = !server.app.config.cache.enabled; - - server.method( - "v2.transactions.index", - index, - cacheDisabled - ? {} - : { - cache: { - expiresIn: 8 * 1000, - generateTimeout: getCacheTimeout(), - getDecoratedValue: true, - }, - generateKey: request => - generateCacheKey({ - ...request.query, - ...paginate(request), - }), - }, - ); - - server.method( - "v2.transactions.show", - show, - cacheDisabled - ? {} - : { - cache: { - expiresIn: 8 * 1000, - generateTimeout: getCacheTimeout(), - getDecoratedValue: true, - }, - generateKey: request => generateCacheKey({ id: request.params.id }), - }, - ); - - server.method( - "v2.transactions.search", - search, - cacheDisabled - ? {} - : { - cache: { - expiresIn: 30 * 1000, - generateTimeout: getCacheTimeout(), - getDecoratedValue: true, - }, - generateKey: request => - generateCacheKey({ - ...request.payload, - ...request.query, - ...paginate(request), - }), - }, - ); + ServerCache.make(server) + .method("v2.transactions.index", index, 8, request => ({ + ...request.query, + ...paginate(request), + })) + .method("v2.transactions.show", show, 8, request => ({ id: request.params.id })) + .method("v2.transactions.search", search, 30, request => ({ + ...request.payload, + ...request.query, + ...paginate(request), + })); } diff --git a/packages/core-api/src/versions/2/votes/methods.ts b/packages/core-api/src/versions/2/votes/methods.ts index 1dd1a1628d..59863752a5 100644 --- a/packages/core-api/src/versions/2/votes/methods.ts +++ b/packages/core-api/src/versions/2/votes/methods.ts @@ -1,7 +1,7 @@ import { constants } from "@arkecosystem/crypto"; import Boom from "boom"; import { transactionsRepository } from "../../../repositories"; -import { generateCacheKey, getCacheTimeout } from "../../utils"; +import { ServerCache } from "../../../services"; import { paginate, respondWithResource, toPagination } from "../utils"; const { TransactionTypes } = constants; @@ -26,39 +26,10 @@ const show = async request => { }; export function registerMethods(server) { - const cacheDisabled = !server.app.config.cache.enabled; - - server.method( - "v2.votes.index", - index, - cacheDisabled - ? {} - : { - cache: { - expiresIn: 8 * 1000, - generateTimeout: getCacheTimeout(), - getDecoratedValue: true, - }, - generateKey: request => - generateCacheKey({ - ...request.query, - ...paginate(request), - }), - }, - ); - - server.method( - "v2.votes.show", - show, - cacheDisabled - ? {} - : { - cache: { - expiresIn: 8 * 1000, - generateTimeout: getCacheTimeout(), - getDecoratedValue: true, - }, - generateKey: request => generateCacheKey({ id: request.params.id }), - }, - ); + ServerCache.make(server) + .method("v2.votes.index", index, 8, request => ({ + ...request.query, + ...paginate(request), + })) + .method("v2.votes.show", show, 8, request => ({ id: request.params.id })); } diff --git a/packages/core-api/src/versions/2/wallets/methods.ts b/packages/core-api/src/versions/2/wallets/methods.ts index f978fb4b3e..49929bf8f5 100644 --- a/packages/core-api/src/versions/2/wallets/methods.ts +++ b/packages/core-api/src/versions/2/wallets/methods.ts @@ -2,7 +2,7 @@ import { app } from "@arkecosystem/core-container"; import { PostgresConnection } from "@arkecosystem/core-database-postgres"; import Boom from "boom"; import { transactionsRepository } from "../../../repositories"; -import { generateCacheKey, getCacheTimeout } from "../../utils"; +import { ServerCache } from "../../../services"; import { paginate, respondWithResource, toPagination } from "../utils"; const database = app.resolvePlugin("database"); @@ -115,158 +115,40 @@ const search = async request => { }; export function registerMethods(server) { - const cacheDisabled = !server.app.config.cache.enabled; - - server.method( - "v2.wallets.index", - index, - cacheDisabled - ? {} - : { - cache: { - expiresIn: 30 * 1000, - generateTimeout: getCacheTimeout(), - getDecoratedValue: true, - }, - generateKey: request => - generateCacheKey({ - ...request.payload, - ...request.query, - ...paginate(request), - }), - }, - ); - - server.method( - "v2.wallets.top", - top, - cacheDisabled - ? {} - : { - cache: { - expiresIn: 30 * 1000, - generateTimeout: getCacheTimeout(), - getDecoratedValue: true, - }, - generateKey: request => generateCacheKey(paginate(request)), - }, - ); - - server.method( - "v2.wallets.show", - show, - cacheDisabled - ? {} - : { - cache: { - expiresIn: 30 * 1000, - generateTimeout: getCacheTimeout(), - getDecoratedValue: true, - }, - generateKey: request => generateCacheKey({ id: request.params.id }), - }, - ); - - server.method( - "v2.wallets.transactions", - transactions, - cacheDisabled - ? {} - : { - cache: { - expiresIn: 30 * 1000, - generateTimeout: getCacheTimeout(), - getDecoratedValue: true, - }, - generateKey: request => - generateCacheKey({ - ...{ id: request.params.id }, - ...request.query, - ...request.params, - ...paginate(request), - }), - }, - ); - - server.method( - "v2.wallets.transactionsSent", - transactionsSent, - cacheDisabled - ? {} - : { - cache: { - expiresIn: 30 * 1000, - generateTimeout: getCacheTimeout(), - getDecoratedValue: true, - }, - generateKey: request => - generateCacheKey({ - ...{ id: request.params.id }, - ...request.query, - ...request.params, - ...paginate(request), - }), - }, - ); - - server.method( - "v2.wallets.transactionsReceived", - transactionsReceived, - cacheDisabled - ? {} - : { - cache: { - expiresIn: 30 * 1000, - generateTimeout: getCacheTimeout(), - getDecoratedValue: true, - }, - generateKey: request => - generateCacheKey({ - ...{ id: request.params.id }, - ...request.query, - ...request.params, - ...paginate(request), - }), - }, - ); - - server.method( - "v2.wallets.votes", - votes, - cacheDisabled - ? {} - : { - cache: { - expiresIn: 30 * 1000, - generateTimeout: getCacheTimeout(), - getDecoratedValue: true, - }, - generateKey: request => - generateCacheKey({ - ...{ id: request.params.id }, - ...request.params, - ...paginate(request), - }), - }, - ); - - server.method( - "v2.wallets.search", - search, - cacheDisabled - ? {} - : { - cache: { - expiresIn: 30 * 1000, - generateTimeout: getCacheTimeout(), - getDecoratedValue: true, - }, - generateKey: request => - generateCacheKey({ - ...request.payload, - ...request.query, - ...paginate(request), - }), - }, - ); + ServerCache.make(server) + .method("v2.wallets.index", index, 30, request => ({ + ...request.payload, + ...request.query, + ...paginate(request), + })) + .method("v2.wallets.top", top, 30, request => paginate(request)) + .method("v2.wallets.show", show, 30, request => ({ id: request.params.id })) + .method("v2.wallets.transactions", transactions, 30, request => ({ + ...{ id: request.params.id }, + ...request.query, + ...request.params, + ...paginate(request), + })) + .method("v2.wallets.transactionsSent", transactionsSent, 30, request => ({ + ...{ id: request.params.id }, + ...request.query, + ...request.params, + ...paginate(request), + })) + .method("v2.wallets.transactionsReceived", transactionsReceived, 30, request => ({ + ...{ id: request.params.id }, + ...request.query, + ...request.params, + ...paginate(request), + })) + .method("v2.wallets.votes", votes, 30, request => ({ + ...{ id: request.params.id }, + ...request.params, + ...paginate(request), + })) + .method("v2.wallets.search", search, 30, request => ({ + ...request.payload, + ...request.query, + ...paginate(request), + })); } diff --git a/packages/core-api/src/versions/utils.ts b/packages/core-api/src/versions/utils.ts deleted file mode 100644 index 9db53391e1..0000000000 --- a/packages/core-api/src/versions/utils.ts +++ /dev/null @@ -1,16 +0,0 @@ -import { app } from "@arkecosystem/core-container"; -import { createHash } from "crypto"; - -function getCacheTimeout() { - const { generateTimeout } = app.resolveOptions("api").cache; - - return JSON.parse(generateTimeout); -} - -function generateCacheKey(value) { - return createHash("sha256") - .update(JSON.stringify(value)) - .digest("hex"); -} - -export { getCacheTimeout, generateCacheKey }; diff --git a/packages/core-blockchain/src/index.ts b/packages/core-blockchain/src/index.ts index 8309f2a4b9..9025b74e3f 100644 --- a/packages/core-blockchain/src/index.ts +++ b/packages/core-blockchain/src/index.ts @@ -9,7 +9,7 @@ import { stateStorage } from "./state-storage"; * The struct used by the plugin container. * @type {Object} */ -export const plugin : Container.PluginDescriptor = { +export const plugin: Container.PluginDescriptor = { pkg: require("../package.json"), defaults, alias: "blockchain", diff --git a/packages/core-container/src/index.ts b/packages/core-container/src/index.ts index 23652c9bb2..6e9d336d6a 100644 --- a/packages/core-container/src/index.ts +++ b/packages/core-container/src/index.ts @@ -1,4 +1,4 @@ -import { Container as container} from "@arkecosystem/core-interfaces"; +import { Container as container } from "@arkecosystem/core-interfaces"; import { Container } from "./container"; const app: container.IContainer = new Container(); diff --git a/packages/core-database/__tests__/__fixtures__/dummy-class.ts b/packages/core-database/__tests__/__fixtures__/dummy-class.ts index 442384ecc1..4350503a8c 100644 --- a/packages/core-database/__tests__/__fixtures__/dummy-class.ts +++ b/packages/core-database/__tests__/__fixtures__/dummy-class.ts @@ -3,7 +3,6 @@ import { ConnectionInterface } from "../../src"; export class DummyConnection extends ConnectionInterface { - constructor(options: any) { super(options); } diff --git a/packages/core-database/src/plugin.ts b/packages/core-database/src/plugin.ts index 31dc831a94..d91bb0eb97 100644 --- a/packages/core-database/src/plugin.ts +++ b/packages/core-database/src/plugin.ts @@ -10,5 +10,5 @@ export const plugin: Container.PluginDescriptor = { container.resolvePlugin("logger").info("Starting Database Manager"); return new DatabaseManager(); - } + }, }; diff --git a/packages/core-elasticsearch/src/index.ts b/packages/core-elasticsearch/src/index.ts index d21803c861..2ca124d76e 100644 --- a/packages/core-elasticsearch/src/index.ts +++ b/packages/core-elasticsearch/src/index.ts @@ -8,7 +8,7 @@ import { startServer } from "./server"; import { client } from "./services/client"; import { storage } from "./services/storage"; -export const plugin : Container.PluginDescriptor = { +export const plugin: Container.PluginDescriptor = { pkg: require("../package.json"), defaults, alias: "elasticsearch", diff --git a/packages/core-error-tracker-bugsnag/src/index.ts b/packages/core-error-tracker-bugsnag/src/index.ts index 042fded305..09c6304902 100644 --- a/packages/core-error-tracker-bugsnag/src/index.ts +++ b/packages/core-error-tracker-bugsnag/src/index.ts @@ -2,7 +2,7 @@ import { Container } from "@arkecosystem/core-interfaces"; import bugsnag from "@bugsnag/js"; import { defaults } from "./defaults"; -export const plugin : Container.PluginDescriptor = { +export const plugin: Container.PluginDescriptor = { pkg: require("../package.json"), defaults, alias: "error-tracker", diff --git a/packages/core-error-tracker-sentry/src/index.ts b/packages/core-error-tracker-sentry/src/index.ts index 2a5d0a713f..fd9461fead 100644 --- a/packages/core-error-tracker-sentry/src/index.ts +++ b/packages/core-error-tracker-sentry/src/index.ts @@ -2,7 +2,7 @@ import { Container } from "@arkecosystem/core-interfaces"; import Sentry from "@sentry/node"; import { defaults } from "./defaults"; -export const plugin : Container.PluginDescriptor = { +export const plugin: Container.PluginDescriptor = { pkg: require("../package.json"), defaults, alias: "error-tracker", diff --git a/packages/core-forger/src/index.ts b/packages/core-forger/src/index.ts index 52320b2cf5..3e5c30ffc5 100644 --- a/packages/core-forger/src/index.ts +++ b/packages/core-forger/src/index.ts @@ -3,7 +3,7 @@ import pluralize from "pluralize"; import { defaults } from "./defaults"; import { ForgerManager } from "./manager"; -export const plugin : Container.PluginDescriptor = { +export const plugin: Container.PluginDescriptor = { pkg: require("../package.json"), defaults, alias: "forger", diff --git a/packages/core-graphql/src/index.ts b/packages/core-graphql/src/index.ts index 89494bdd62..867988e21d 100644 --- a/packages/core-graphql/src/index.ts +++ b/packages/core-graphql/src/index.ts @@ -1,4 +1,4 @@ -import { Container, Logger} from "@arkecosystem/core-interfaces"; +import { Container, Logger } from "@arkecosystem/core-interfaces"; import { defaults } from "./defaults"; import { startServer } from "./server"; @@ -6,7 +6,7 @@ import { startServer } from "./server"; * The struct used by the plugin manager. * @type {Object} */ -export const plugin : Container.PluginDescriptor = { +export const plugin: Container.PluginDescriptor = { pkg: require("../package.json"), defaults, alias: "graphql", diff --git a/packages/core-interfaces/src/core-blockchain/blockchain.ts b/packages/core-interfaces/src/core-blockchain/blockchain.ts index 5a634763fd..523c436cfe 100644 --- a/packages/core-interfaces/src/core-blockchain/blockchain.ts +++ b/packages/core-interfaces/src/core-blockchain/blockchain.ts @@ -162,7 +162,9 @@ export interface IBlockchain { * @param {Boolean} forForging * @return {Object} */ - getUnconfirmedTransactions(blockSize: any): { + getUnconfirmedTransactions( + blockSize: any, + ): { transactions: any[]; poolSize: any; count: number; diff --git a/packages/core-interfaces/src/core-blockchain/state-storage.ts b/packages/core-interfaces/src/core-blockchain/state-storage.ts index 051056da48..ba15fc48fb 100644 --- a/packages/core-interfaces/src/core-blockchain/state-storage.ts +++ b/packages/core-interfaces/src/core-blockchain/state-storage.ts @@ -1,7 +1,6 @@ import { models } from "@arkecosystem/crypto"; export interface IStateStorage { - reset(): void; /** @@ -59,7 +58,7 @@ export interface IStateStorage { /** * Cache the ids of the given transactions. */ - cacheTransactions(transactions: models.Transaction[]): { [key in 'added' | 'notAdded']: models.Transaction[] }; + cacheTransactions(transactions: models.Transaction[]): { [key in "added" | "notAdded"]: models.Transaction[] }; /** * Remove the given transaction ids from the cache. diff --git a/packages/core-interfaces/src/core-container/container.ts b/packages/core-interfaces/src/core-container/container.ts index ab770a8f0c..4490a16c16 100644 --- a/packages/core-interfaces/src/core-container/container.ts +++ b/packages/core-interfaces/src/core-container/container.ts @@ -1,24 +1,23 @@ import { Resolver } from "awilix"; export interface PluginDescriptor { - alias: string, - pkg: any, - defaults?: any, - extends?: string, - register(container: IContainer, options?: any) : Promise; + alias: string; + pkg: any; + defaults?: any; + extends?: string; + register(container: IContainer, options?: any): Promise; deregister?(container: IContainer, options?: any): Promise; } export interface PluginConfig { - name: string, - version: string, - options: {[key:string]: any}, - plugin: T + name: string; + version: string; + options: { [key: string]: any }; + plugin: T; } export interface IContainer { - - silentShutdown : boolean; + silentShutdown: boolean; isReady: boolean; diff --git a/packages/core-interfaces/src/core-p2p/monitor.ts b/packages/core-interfaces/src/core-p2p/monitor.ts index 4a43866be0..357d0fffe4 100644 --- a/packages/core-interfaces/src/core-p2p/monitor.ts +++ b/packages/core-interfaces/src/core-p2p/monitor.ts @@ -42,7 +42,7 @@ export interface IMonitor { * Get a list of all suspended peers. * @return {void} */ - getSuspendedPeers(): { [ip: string]: any; }; + getSuspendedPeers(): { [ip: string]: any }; /** * Get all available peers. diff --git a/packages/core-interfaces/src/core-p2p/peer.ts b/packages/core-interfaces/src/core-p2p/peer.ts index aadc9c1bef..d3ae8efb3c 100644 --- a/packages/core-interfaces/src/core-p2p/peer.ts +++ b/packages/core-interfaces/src/core-p2p/peer.ts @@ -1,7 +1,6 @@ import { models } from "@arkecosystem/crypto"; export interface IPeer { - setHeaders(headers: any): void; /** diff --git a/packages/core-interfaces/src/core-transaction-pool/index.ts b/packages/core-interfaces/src/core-transaction-pool/index.ts index fa211752cb..e11bb11e00 100644 --- a/packages/core-interfaces/src/core-transaction-pool/index.ts +++ b/packages/core-interfaces/src/core-transaction-pool/index.ts @@ -1,3 +1,2 @@ export * from "./transaction-pool"; export * from "./transaction-guard"; - diff --git a/packages/core-interfaces/src/core-transaction-pool/transaction-guard.ts b/packages/core-interfaces/src/core-transaction-pool/transaction-guard.ts index 0b31ab07f8..35f03e2b52 100644 --- a/packages/core-interfaces/src/core-transaction-pool/transaction-guard.ts +++ b/packages/core-interfaces/src/core-transaction-pool/transaction-guard.ts @@ -1,8 +1,8 @@ import { models } from "@arkecosystem/crypto"; export interface TransactionErrorDTO { - type: string, - message: string + type: string; + message: string; } export interface ValidationResultDTO { @@ -10,11 +10,10 @@ export interface ValidationResultDTO { broadcast: string[]; invalid: string[]; excess: string[]; - errors: { [key:string]: TransactionErrorDTO[] } | null + errors: { [key: string]: TransactionErrorDTO[] } | null; } export interface ITransactionGuard { - validate(transactions: models.Transaction[]): Promise; getBroadcastTransactions(): models.Transaction[]; diff --git a/packages/core-interfaces/src/core-transaction-pool/transaction-pool.ts b/packages/core-interfaces/src/core-transaction-pool/transaction-pool.ts index d01fed7e81..9f56dac6c5 100644 --- a/packages/core-interfaces/src/core-transaction-pool/transaction-pool.ts +++ b/packages/core-interfaces/src/core-transaction-pool/transaction-pool.ts @@ -1,18 +1,17 @@ import dayjs from "dayjs-ext"; -import { constants, models} from "@arkecosystem/crypto"; +import { constants, models } from "@arkecosystem/crypto"; export interface AddTransactionResponseDTO { - success: boolean + success: boolean; } export interface AddTransactionErrorDTO extends AddTransactionResponseDTO { - transaction: models.Transaction, - type: string, - message: string, + transaction: models.Transaction; + type: string; + message: string; } export interface ITransactionPool { - options: any; make(): Promise; @@ -48,15 +47,17 @@ export interface ITransactionPool { * notAdded: [ { transaction: Transaction, type: String, message: String }, ... ] * } */ - addTransactions(transactions: models.Transaction[]): { + addTransactions( + transactions: models.Transaction[], + ): { added: models.Transaction[]; - notAdded: AddTransactionErrorDTO[] + notAdded: AddTransactionErrorDTO[]; }; /** * Add a transaction to the pool. */ - addTransaction(transaction: models.Transaction): AddTransactionResponseDTO + addTransaction(transaction: models.Transaction): AddTransactionResponseDTO; /** * Remove a transaction from the pool by transaction object. diff --git a/packages/core-interfaces/src/index.ts b/packages/core-interfaces/src/index.ts index f2e09183f0..13d8c6faad 100644 --- a/packages/core-interfaces/src/index.ts +++ b/packages/core-interfaces/src/index.ts @@ -6,12 +6,4 @@ import * as P2P from "./core-p2p"; import * as TransactionPool from "./core-transaction-pool"; import * as Shared from "./shared"; -export { - Container, - Logger, - Blockchain, - TransactionPool, - Shared, - EventEmitter, - P2P -}; +export { Container, Logger, Blockchain, TransactionPool, Shared, EventEmitter, P2P }; diff --git a/packages/core-interfaces/src/shared/config.ts b/packages/core-interfaces/src/shared/config.ts index 86b0c68adb..1563710e3d 100644 --- a/packages/core-interfaces/src/shared/config.ts +++ b/packages/core-interfaces/src/shared/config.ts @@ -2,7 +2,7 @@ import get from "lodash/get"; import set from "lodash/set"; export class Config { - private config : any; + private config: any; public init(options: any): void { this.config = options; diff --git a/packages/core-json-rpc/src/index.ts b/packages/core-json-rpc/src/index.ts index f14a37cbc7..384b06471b 100644 --- a/packages/core-json-rpc/src/index.ts +++ b/packages/core-json-rpc/src/index.ts @@ -4,7 +4,7 @@ import { startServer } from "./server"; import { database } from "./server/services/database"; import { network } from "./server/services/network"; -export const plugin : Container.PluginDescriptor = { +export const plugin: Container.PluginDescriptor = { pkg: require("../package.json"), defaults, alias: "json-rpc", @@ -29,5 +29,5 @@ export const plugin : Container.PluginDescriptor = { return container.resolvePlugin("json-rpc").stop(); } - } + }, }; diff --git a/packages/core-logger-winston/src/driver.ts b/packages/core-logger-winston/src/driver.ts index 14a947cdbf..e16ac2c35c 100644 --- a/packages/core-logger-winston/src/driver.ts +++ b/packages/core-logger-winston/src/driver.ts @@ -8,7 +8,7 @@ export class WinstonLogger extends AbstractLogger { public logger: any; constructor(readonly options) { - super(options) + super(options); } /** diff --git a/packages/core-logger-winston/src/plugin.ts b/packages/core-logger-winston/src/plugin.ts index 4735908229..3484c37540 100644 --- a/packages/core-logger-winston/src/plugin.ts +++ b/packages/core-logger-winston/src/plugin.ts @@ -3,7 +3,7 @@ import { LogManager } from "@arkecosystem/core-logger"; import { defaults } from "./defaults"; import { WinstonLogger } from "./driver"; -export const plugin : Container.PluginDescriptor = { +export const plugin: Container.PluginDescriptor = { pkg: require("../package.json"), defaults, alias: "logger", diff --git a/packages/core-logger/src/logger.ts b/packages/core-logger/src/logger.ts index 34d9f287af..9825bde021 100644 --- a/packages/core-logger/src/logger.ts +++ b/packages/core-logger/src/logger.ts @@ -5,8 +5,7 @@ export abstract class AbstractLogger implements Logger.ILogger { * Create a new logger instance. * @param {Object} options */ - constructor(protected options: any) { - } + constructor(protected options: any) {} /** * Make the logger instance. diff --git a/packages/core-p2p/__tests__/court/guard.test.ts b/packages/core-p2p/__tests__/court/guard.test.ts index 33bd2e9dae..bc5d31e2f4 100644 --- a/packages/core-p2p/__tests__/court/guard.test.ts +++ b/packages/core-p2p/__tests__/court/guard.test.ts @@ -1,8 +1,8 @@ import { app } from "@arkecosystem/core-container"; -import { Peer } from "../../src/peer"; import dayjs from "dayjs-ext"; import { offences } from "../../src/court/offences"; import { defaults } from "../../src/defaults"; +import { Peer } from "../../src/peer"; import { setUp, tearDown } from "../__support__/setup"; const ARK_ENV = process.env.ARK_ENV; diff --git a/packages/core-p2p/__tests__/peer.test.ts b/packages/core-p2p/__tests__/peer.test.ts index a60537209e..aecad66a6d 100644 --- a/packages/core-p2p/__tests__/peer.test.ts +++ b/packages/core-p2p/__tests__/peer.test.ts @@ -19,7 +19,6 @@ beforeAll(async () => { // wrong network config. genesisBlock = new Block(require("@arkecosystem/core-test-utils/src/config/testnet/genesisBlock.json")); genesisTransaction = new Transaction(genesisBlock.transactions[0]); - }); afterAll(async () => { diff --git a/packages/core-p2p/src/index.ts b/packages/core-p2p/src/index.ts index 214840182a..812cd561b7 100644 --- a/packages/core-p2p/src/index.ts +++ b/packages/core-p2p/src/index.ts @@ -2,5 +2,3 @@ export * from "./monitor"; export * from "./peer"; export * from "./court"; export * from "./plugin"; - - diff --git a/packages/core-p2p/src/monitor.ts b/packages/core-p2p/src/monitor.ts index d047f80ee0..cb0e337408 100755 --- a/packages/core-p2p/src/monitor.ts +++ b/packages/core-p2p/src/monitor.ts @@ -657,7 +657,7 @@ export class Monitor implements P2P.IMonitor { // Rollback if last block is bad and quota high logger.info( `Last block id ${lastBlock.data.id} is bad, ` + - `but got enough common id quota: ${quota}. Going to rollback. :repeat:`, + `but got enough common id quota: ${quota}. Going to rollback. :repeat:`, ); state = "rollback"; } diff --git a/packages/core-p2p/src/peer.ts b/packages/core-p2p/src/peer.ts index 285e841192..581bb755c6 100755 --- a/packages/core-p2p/src/peer.ts +++ b/packages/core-p2p/src/peer.ts @@ -6,7 +6,6 @@ import util from "util"; import { config as localConfig } from "./config"; export class Peer implements P2P.IPeer { - public static isOk(peer) { return peer.status === 200 || peer.status === "OK"; } diff --git a/packages/core-p2p/src/server/versions/1/handlers.ts b/packages/core-p2p/src/server/versions/1/handlers.ts index 32a07f0a81..d22d119b52 100644 --- a/packages/core-p2p/src/server/versions/1/handlers.ts +++ b/packages/core-p2p/src/server/versions/1/handlers.ts @@ -1,13 +1,13 @@ import { app } from "@arkecosystem/core-container"; import { PostgresConnection } from "@arkecosystem/core-database-postgres"; import { Blockchain, Logger, P2P } from "@arkecosystem/core-interfaces"; -import { TransactionGuard, TransactionPool} from "@arkecosystem/core-transaction-pool"; +import { TransactionGuard, TransactionPool } from "@arkecosystem/core-transaction-pool"; import { Joi, models, slots } from "@arkecosystem/crypto"; import pluralize from "pluralize"; import { monitor } from "../../../monitor"; -const { Block} = models; +const { Block } = models; const transactionPool = app.resolvePlugin("transactionPool"); const logger = app.resolvePlugin("logger"); diff --git a/packages/core-p2p/src/server/versions/internal/handlers/rounds.ts b/packages/core-p2p/src/server/versions/internal/handlers/rounds.ts index c869052b62..bd9a2b6e6c 100644 --- a/packages/core-p2p/src/server/versions/internal/handlers/rounds.ts +++ b/packages/core-p2p/src/server/versions/internal/handlers/rounds.ts @@ -1,6 +1,6 @@ import { app } from "@arkecosystem/core-container"; -import { Blockchain } from "@arkecosystem/core-interfaces"; import { PostgresConnection } from "@arkecosystem/core-database-postgres"; +import { Blockchain } from "@arkecosystem/core-interfaces"; import { slots } from "@arkecosystem/crypto"; const config = app.getConfig(); diff --git a/packages/core-snapshots/src/index.ts b/packages/core-snapshots/src/index.ts index a28c88704e..88319f6f5f 100644 --- a/packages/core-snapshots/src/index.ts +++ b/packages/core-snapshots/src/index.ts @@ -1,5 +1,5 @@ -import { Container } from "@arkecosystem/core-interfaces"; import { PostgresConnection } from "@arkecosystem/core-database-postgres"; +import { Container } from "@arkecosystem/core-interfaces"; import { defaults } from "./defaults"; import { SnapshotManager } from "./manager"; @@ -7,7 +7,7 @@ import { SnapshotManager } from "./manager"; * The struct used by the plugin container. * @type {Object} */ -export const plugin : Container.PluginDescriptor = { +export const plugin: Container.PluginDescriptor = { pkg: require("../package.json"), defaults, alias: "snapshots", diff --git a/packages/core-test-utils/src/config/testnet/plugins.js b/packages/core-test-utils/src/config/testnet/plugins.js index 2d0d3cd85f..8f2848bc9a 100644 --- a/packages/core-test-utils/src/config/testnet/plugins.js +++ b/packages/core-test-utils/src/config/testnet/plugins.js @@ -32,8 +32,8 @@ module.exports = { maxTransactionAge: 4036608000, dynamicFees: { minFeePool: 1000, - minFeeBroadcast: 1000 - } + minFeeBroadcast: 1000, + }, }, "@arkecosystem/core-p2p": { host: process.env.ARK_P2P_HOST || "0.0.0.0", diff --git a/packages/core-transaction-pool/__tests__/connection.test.ts b/packages/core-transaction-pool/__tests__/connection.test.ts index 2cf4dee367..3adeff2ad6 100644 --- a/packages/core-transaction-pool/__tests__/connection.test.ts +++ b/packages/core-transaction-pool/__tests__/connection.test.ts @@ -17,7 +17,7 @@ const { delegatesSecrets } = fixtures; let config; let database: PostgresConnection; -let connection : TransactionPool; +let connection: TransactionPool; beforeAll(async () => { await setUpFull(); diff --git a/packages/core-transaction-pool/__tests__/dynamic-fee.test.ts b/packages/core-transaction-pool/__tests__/dynamic-fee.test.ts index 72c36da165..140ca1318f 100644 --- a/packages/core-transaction-pool/__tests__/dynamic-fee.test.ts +++ b/packages/core-transaction-pool/__tests__/dynamic-fee.test.ts @@ -1,10 +1,10 @@ -import { Blockchain, Container } from "@arkecosystem/core-interfaces"; -import { config } from "../src"; +import { Blockchain, Container } from "@arkecosystem/core-interfaces"; import { dynamicFeeMatcher } from "../dist/dynamic-fee"; +import { config } from "../src"; import { transactions } from "./__fixtures__/transactions"; import { setUpFull, tearDown } from "./__support__/setup"; -let blockchain : Blockchain.IBlockchain; +let blockchain: Blockchain.IBlockchain; let container: Container.IContainer; beforeAll(async () => { diff --git a/packages/core-transaction-pool/__tests__/guard.test.ts b/packages/core-transaction-pool/__tests__/guard.test.ts index f8abcb3d01..9a65daee2b 100644 --- a/packages/core-transaction-pool/__tests__/guard.test.ts +++ b/packages/core-transaction-pool/__tests__/guard.test.ts @@ -21,7 +21,7 @@ const { delegates } = fixtures; let container: Container.IContainer; let guard; -let transactionPool : TransactionPool; +let transactionPool: TransactionPool; beforeAll(async () => { container = await setUpFull(); diff --git a/packages/core-transaction-pool/__tests__/pool-wallet-manager.test.ts b/packages/core-transaction-pool/__tests__/pool-wallet-manager.test.ts index a181751bfb..e693d6bf9d 100644 --- a/packages/core-transaction-pool/__tests__/pool-wallet-manager.test.ts +++ b/packages/core-transaction-pool/__tests__/pool-wallet-manager.test.ts @@ -1,5 +1,5 @@ -import { Blockchain, Container } from "@arkecosystem/core-interfaces"; import { PostgresConnection } from "@arkecosystem/core-database-postgres"; +import { Blockchain, Container } from "@arkecosystem/core-interfaces"; import { fixtures, generators } from "@arkecosystem/core-test-utils"; import { crypto, models } from "@arkecosystem/crypto"; import bip39 from "bip39"; @@ -13,7 +13,7 @@ const { blocks2to100, delegates } = fixtures; const arktoshi = 10 ** 8; let container: Container.IContainer; let poolWalletManager; -let blockchain : Blockchain.IBlockchain; +let blockchain: Blockchain.IBlockchain; beforeAll(async () => { container = await setUpFull(); diff --git a/packages/core-transaction-pool/package.json b/packages/core-transaction-pool/package.json index f5791a4932..5564fc7a7a 100644 --- a/packages/core-transaction-pool/package.json +++ b/packages/core-transaction-pool/package.json @@ -36,7 +36,7 @@ "@arkecosystem/core-database": "^2.1.0", "@arkecosystem/core-database-postgres": "^2.1.0", "@arkecosystem/crypto": "^2.1.0", - "@arkecosystem/core-interfaces" : "^2.1.0", + "@arkecosystem/core-interfaces": "^2.1.0", "@types/better-sqlite3": "^5.2.0", "@types/fs-extra": "^5.0.4", "@types/pluralize": "^0.0.29", diff --git a/packages/core-transaction-pool/src/connection.ts b/packages/core-transaction-pool/src/connection.ts index f3bb61d8bb..dc76de28b4 100644 --- a/packages/core-transaction-pool/src/connection.ts +++ b/packages/core-transaction-pool/src/connection.ts @@ -1,6 +1,6 @@ import { app } from "@arkecosystem/core-container"; import { PostgresConnection } from "@arkecosystem/core-database-postgres"; -import { EventEmitter, Logger, TransactionPool as transactionPool} from "@arkecosystem/core-interfaces"; +import { EventEmitter, Logger, TransactionPool as transactionPool } from "@arkecosystem/core-interfaces"; import assert from "assert"; import dayjs from "dayjs-ext"; diff --git a/packages/core-transaction-pool/src/guard.ts b/packages/core-transaction-pool/src/guard.ts index 6a6278e379..99bb71176d 100644 --- a/packages/core-transaction-pool/src/guard.ts +++ b/packages/core-transaction-pool/src/guard.ts @@ -1,6 +1,6 @@ import { app } from "@arkecosystem/core-container"; import { PostgresConnection } from "@arkecosystem/core-database-postgres"; -import { Logger, TransactionPool as transanctionPool} from "@arkecosystem/core-interfaces"; +import { Logger, TransactionPool as transanctionPool } from "@arkecosystem/core-interfaces"; import { configManager, constants, models, slots } from "@arkecosystem/crypto"; import pluralize from "pluralize"; import { TransactionPool } from "./connection"; @@ -10,21 +10,20 @@ import { isRecipientOnActiveNetwork } from "./utils/is-on-active-network"; const { TransactionTypes } = constants; const { Transaction } = models; -export class TransactionGuard implements transanctionPool.ITransactionGuard { +export class TransactionGuard implements transanctionPool.ITransactionGuard { public transactions: models.Transaction[] = []; public excess: string[] = []; public accept: Map = new Map(); public broadcast: Map = new Map(); public invalid: Map = new Map(); - public errors: { [key:string]: transanctionPool.TransactionErrorDTO[] } = {}; + public errors: { [key: string]: transanctionPool.TransactionErrorDTO[] } = {}; /** * Create a new transaction guard instance. * @param {TransactionPoolInterface} pool * @return {void} */ - constructor(private pool: TransactionPool) { - } + constructor(private pool: TransactionPool) {} /** * Validate the specified transactions and accepted transactions to the pool. @@ -39,7 +38,7 @@ export class TransactionGuard implements transanctionPool.ITransactionGuard { * value=[ { type, message }, ... ] * } */ - public async validate(transactions : models.Transaction[]): Promise { + public async validate(transactions: models.Transaction[]): Promise { this.pool.loggedAllowedSenders = []; // Cache transactions @@ -88,7 +87,7 @@ export class TransactionGuard implements transanctionPool.ITransactionGuard { * Get broadcast transactions. * @return {Array} */ - public getBroadcastTransactions() : models.Transaction[] { + public getBroadcastTransactions(): models.Transaction[] { return Array.from(this.broadcast.values()); } diff --git a/packages/core-transaction-pool/src/plugin.ts b/packages/core-transaction-pool/src/plugin.ts index dcff7d06ea..8795125ec1 100644 --- a/packages/core-transaction-pool/src/plugin.ts +++ b/packages/core-transaction-pool/src/plugin.ts @@ -4,7 +4,7 @@ import { TransactionPool } from "./connection"; import { defaults } from "./defaults"; import { transactionPoolManager } from "./manager"; -export const plugin : Container.PluginDescriptor = { +export const plugin: Container.PluginDescriptor = { pkg: require("../package.json"), defaults, alias: "transactionPool", diff --git a/packages/core-vote-report/src/handler.ts b/packages/core-vote-report/src/handler.ts index 2f41290cbf..0ef0bc5582 100644 --- a/packages/core-vote-report/src/handler.ts +++ b/packages/core-vote-report/src/handler.ts @@ -1,6 +1,6 @@ import { app } from "@arkecosystem/core-container"; -import { Blockchain } from "@arkecosystem/core-interfaces"; import { PostgresConnection } from "@arkecosystem/core-database-postgres"; +import { Blockchain } from "@arkecosystem/core-interfaces"; import { delegateCalculator, supplyCalculator } from "@arkecosystem/core-utils"; import { configManager } from "@arkecosystem/crypto"; import sumBy from "lodash/sumBy"; diff --git a/packages/core-vote-report/src/index.ts b/packages/core-vote-report/src/index.ts index 552cfa4069..43ad992a47 100644 --- a/packages/core-vote-report/src/index.ts +++ b/packages/core-vote-report/src/index.ts @@ -2,7 +2,7 @@ import { Container } from "@arkecosystem/core-interfaces"; import { defaults } from "./defaults"; import { startServer } from "./server"; -export const plugin : Container.PluginDescriptor = { +export const plugin: Container.PluginDescriptor = { pkg: require("../package.json"), defaults, alias: "vote-report", diff --git a/packages/core-webhooks/src/index.ts b/packages/core-webhooks/src/index.ts index 7aace93bc5..109e380a5e 100644 --- a/packages/core-webhooks/src/index.ts +++ b/packages/core-webhooks/src/index.ts @@ -4,7 +4,7 @@ import { defaults } from "./defaults"; import { webhookManager } from "./manager"; import { startServer } from "./server"; -export const plugin : Container.PluginDescriptor = { +export const plugin: Container.PluginDescriptor = { pkg: require("../package.json"), defaults, alias: "webhooks",