From d3af2e9d565c65fc9c0c730a1d23009429ab94b3 Mon Sep 17 00:00:00 2001 From: Brian Faust Date: Wed, 8 May 2019 08:21:19 +0200 Subject: [PATCH] feat(core-wallet-api): initial implementation (#2544) --- .circleci/config.yml | 36 ++++++++++++------- packages/core-wallet-api/.gitattributes | 7 ++++ packages/core-wallet-api/README.md | 21 +++++++++++ packages/core-wallet-api/package.json | 34 ++++++++++++++++++ packages/core-wallet-api/src/index.ts | 1 + packages/core-wallet-api/src/plugin.ts | 17 +++++++++ .../core-wallet-api/src/server/handlers.ts | 28 +++++++++++++++ packages/core-wallet-api/src/server/index.ts | 17 +++++++++ .../src/server/transformers.ts | 25 +++++++++++++ packages/core-wallet-api/tsconfig.json | 7 ++++ packages/core/bin/config/devnet/plugins.js | 1 + packages/core/bin/config/mainnet/plugins.js | 1 + packages/core/bin/config/testnet/plugins.js | 1 + 13 files changed, 184 insertions(+), 12 deletions(-) create mode 100644 packages/core-wallet-api/.gitattributes create mode 100644 packages/core-wallet-api/README.md create mode 100644 packages/core-wallet-api/package.json create mode 100644 packages/core-wallet-api/src/index.ts create mode 100644 packages/core-wallet-api/src/plugin.ts create mode 100644 packages/core-wallet-api/src/server/handlers.ts create mode 100755 packages/core-wallet-api/src/server/index.ts create mode 100644 packages/core-wallet-api/src/server/transformers.ts create mode 100644 packages/core-wallet-api/tsconfig.json diff --git a/.circleci/config.yml b/.circleci/config.yml index 599134c290..f96abc0afc 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -30,7 +30,6 @@ jobs: - save_cache: key: 'core-node10-{{ checksum "checksum.txt" }}-unit-2' paths: - - ./packages/core-json-rpc/node_modules - ./packages/core-logger/node_modules - ./packages/core-logger-pino/node_modules - ./packages/core-logger-signale/node_modules @@ -44,6 +43,7 @@ jobs: - ./packages/core-transactions/node_modules - ./packages/core-utils/node_modules - ./packages/core-vote-report/node_modules + - ./packages/core-wallet-api/node_modules - ./packages/core-webhooks/node_modules - ./packages/crypto/node_modules - ./node_modules @@ -68,6 +68,7 @@ jobs: - ./packages/core-http-utils/node_modules - ./packages/core-interfaces/node_modules - ./packages/core-jest-matchers/node_modules + - ./packages/core-json-rpc/node_modules - run: name: Create .core/database directory command: mkdir -p $HOME/.core/database @@ -116,7 +117,6 @@ jobs: - save_cache: key: 'core-node11-{{ checksum "checksum.txt" }}-unit-2' paths: - - ./packages/core-json-rpc/node_modules - ./packages/core-logger/node_modules - ./packages/core-logger-pino/node_modules - ./packages/core-logger-signale/node_modules @@ -130,6 +130,7 @@ jobs: - ./packages/core-transactions/node_modules - ./packages/core-utils/node_modules - ./packages/core-vote-report/node_modules + - ./packages/core-wallet-api/node_modules - ./packages/core-webhooks/node_modules - ./packages/crypto/node_modules - ./node_modules @@ -154,6 +155,7 @@ jobs: - ./packages/core-http-utils/node_modules - ./packages/core-interfaces/node_modules - ./packages/core-jest-matchers/node_modules + - ./packages/core-json-rpc/node_modules - run: name: Create .core/database directory command: mkdir -p $HOME/.core/database @@ -210,7 +212,6 @@ jobs: - save_cache: key: 'core-node10-{{ checksum "checksum.txt" }}-functional-2' paths: - - ./packages/core-json-rpc/node_modules - ./packages/core-logger/node_modules - ./packages/core-logger-pino/node_modules - ./packages/core-logger-signale/node_modules @@ -224,6 +225,7 @@ jobs: - ./packages/core-transactions/node_modules - ./packages/core-utils/node_modules - ./packages/core-vote-report/node_modules + - ./packages/core-wallet-api/node_modules - ./packages/core-webhooks/node_modules - ./packages/crypto/node_modules - ./node_modules @@ -248,6 +250,7 @@ jobs: - ./packages/core-http-utils/node_modules - ./packages/core-interfaces/node_modules - ./packages/core-jest-matchers/node_modules + - ./packages/core-json-rpc/node_modules - run: name: Create .core/database directory command: mkdir -p $HOME/.core/database @@ -304,7 +307,6 @@ jobs: - save_cache: key: 'core-node11-{{ checksum "checksum.txt" }}-functional-2' paths: - - ./packages/core-json-rpc/node_modules - ./packages/core-logger/node_modules - ./packages/core-logger-pino/node_modules - ./packages/core-logger-signale/node_modules @@ -318,6 +320,7 @@ jobs: - ./packages/core-transactions/node_modules - ./packages/core-utils/node_modules - ./packages/core-vote-report/node_modules + - ./packages/core-wallet-api/node_modules - ./packages/core-webhooks/node_modules - ./packages/crypto/node_modules - ./node_modules @@ -342,6 +345,7 @@ jobs: - ./packages/core-http-utils/node_modules - ./packages/core-interfaces/node_modules - ./packages/core-jest-matchers/node_modules + - ./packages/core-json-rpc/node_modules - run: name: Create .core/database directory command: mkdir -p $HOME/.core/database @@ -398,7 +402,6 @@ jobs: - save_cache: key: 'core-node10-{{ checksum "checksum.txt" }}-1-2' paths: - - ./packages/core-json-rpc/node_modules - ./packages/core-logger/node_modules - ./packages/core-logger-pino/node_modules - ./packages/core-logger-signale/node_modules @@ -412,6 +415,7 @@ jobs: - ./packages/core-transactions/node_modules - ./packages/core-utils/node_modules - ./packages/core-vote-report/node_modules + - ./packages/core-wallet-api/node_modules - ./packages/core-webhooks/node_modules - ./packages/crypto/node_modules - ./node_modules @@ -436,6 +440,7 @@ jobs: - ./packages/core-http-utils/node_modules - ./packages/core-interfaces/node_modules - ./packages/core-jest-matchers/node_modules + - ./packages/core-json-rpc/node_modules - run: name: Create .core/database directory command: mkdir -p $HOME/.core/database @@ -517,7 +522,6 @@ jobs: - save_cache: key: 'core-node11-{{ checksum "checksum.txt" }}-1-2' paths: - - ./packages/core-json-rpc/node_modules - ./packages/core-logger/node_modules - ./packages/core-logger-pino/node_modules - ./packages/core-logger-signale/node_modules @@ -531,6 +535,7 @@ jobs: - ./packages/core-transactions/node_modules - ./packages/core-utils/node_modules - ./packages/core-vote-report/node_modules + - ./packages/core-wallet-api/node_modules - ./packages/core-webhooks/node_modules - ./packages/crypto/node_modules - ./node_modules @@ -555,6 +560,7 @@ jobs: - ./packages/core-http-utils/node_modules - ./packages/core-interfaces/node_modules - ./packages/core-jest-matchers/node_modules + - ./packages/core-json-rpc/node_modules - run: name: Create .core/database directory command: mkdir -p $HOME/.core/database @@ -625,7 +631,6 @@ jobs: - save_cache: key: 'core-node10-{{ checksum "checksum.txt" }}-benchmark-2' paths: - - ./packages/core-json-rpc/node_modules - ./packages/core-logger/node_modules - ./packages/core-logger-pino/node_modules - ./packages/core-logger-signale/node_modules @@ -639,6 +644,7 @@ jobs: - ./packages/core-transactions/node_modules - ./packages/core-utils/node_modules - ./packages/core-vote-report/node_modules + - ./packages/core-wallet-api/node_modules - ./packages/core-webhooks/node_modules - ./packages/crypto/node_modules - ./node_modules @@ -663,6 +669,7 @@ jobs: - ./packages/core-http-utils/node_modules - ./packages/core-interfaces/node_modules - ./packages/core-jest-matchers/node_modules + - ./packages/core-json-rpc/node_modules - run: name: Benchmark command: cd ~/core && yarn bench @@ -693,7 +700,6 @@ jobs: - save_cache: key: 'core-node11-{{ checksum "checksum.txt" }}-benchmark-2' paths: - - ./packages/core-json-rpc/node_modules - ./packages/core-logger/node_modules - ./packages/core-logger-pino/node_modules - ./packages/core-logger-signale/node_modules @@ -707,6 +713,7 @@ jobs: - ./packages/core-transactions/node_modules - ./packages/core-utils/node_modules - ./packages/core-vote-report/node_modules + - ./packages/core-wallet-api/node_modules - ./packages/core-webhooks/node_modules - ./packages/crypto/node_modules - ./node_modules @@ -731,6 +738,7 @@ jobs: - ./packages/core-http-utils/node_modules - ./packages/core-interfaces/node_modules - ./packages/core-jest-matchers/node_modules + - ./packages/core-json-rpc/node_modules - run: name: Benchmark command: cd ~/core && yarn bench @@ -769,7 +777,6 @@ jobs: - save_cache: key: 'ark-node10-e2e-{{ checksum "checksum.txt" }}-1-2' paths: - - ./packages/core-json-rpc/node_modules - ./packages/core-logger/node_modules - ./packages/core-logger-pino/node_modules - ./packages/core-logger-signale/node_modules @@ -783,6 +790,7 @@ jobs: - ./packages/core-transactions/node_modules - ./packages/core-utils/node_modules - ./packages/core-vote-report/node_modules + - ./packages/core-wallet-api/node_modules - ./packages/core-webhooks/node_modules - ./packages/crypto/node_modules - ./node_modules @@ -807,6 +815,7 @@ jobs: - ./packages/core-http-utils/node_modules - ./packages/core-interfaces/node_modules - ./packages/core-jest-matchers/node_modules + - ./packages/core-json-rpc/node_modules - run: name: Generate files command: >- @@ -887,7 +896,6 @@ jobs: - save_cache: key: 'ark-node11-e2e-{{ checksum "checksum.txt" }}-2-2' paths: - - ./packages/core-json-rpc/node_modules - ./packages/core-logger/node_modules - ./packages/core-logger-pino/node_modules - ./packages/core-logger-signale/node_modules @@ -901,6 +909,7 @@ jobs: - ./packages/core-transactions/node_modules - ./packages/core-utils/node_modules - ./packages/core-vote-report/node_modules + - ./packages/core-wallet-api/node_modules - ./packages/core-webhooks/node_modules - ./packages/crypto/node_modules - ./node_modules @@ -925,6 +934,7 @@ jobs: - ./packages/core-http-utils/node_modules - ./packages/core-interfaces/node_modules - ./packages/core-jest-matchers/node_modules + - ./packages/core-json-rpc/node_modules - run: name: Generate files command: >- @@ -1008,7 +1018,6 @@ jobs: - save_cache: key: 'core-node10-{{ checksum "checksum.txt" }}-1-2' paths: - - ./packages/core-json-rpc/node_modules - ./packages/core-logger/node_modules - ./packages/core-logger-pino/node_modules - ./packages/core-logger-signale/node_modules @@ -1022,6 +1031,7 @@ jobs: - ./packages/core-transactions/node_modules - ./packages/core-utils/node_modules - ./packages/core-vote-report/node_modules + - ./packages/core-wallet-api/node_modules - ./packages/core-webhooks/node_modules - ./packages/crypto/node_modules - ./node_modules @@ -1046,6 +1056,7 @@ jobs: - ./packages/core-http-utils/node_modules - ./packages/core-interfaces/node_modules - ./packages/core-jest-matchers/node_modules + - ./packages/core-json-rpc/node_modules - run: name: Create .core/database directory command: mkdir -p $HOME/.core/database @@ -1127,7 +1138,6 @@ jobs: - save_cache: key: 'core-node11-{{ checksum "checksum.txt" }}-1-2' paths: - - ./packages/core-json-rpc/node_modules - ./packages/core-logger/node_modules - ./packages/core-logger-pino/node_modules - ./packages/core-logger-signale/node_modules @@ -1141,6 +1151,7 @@ jobs: - ./packages/core-transactions/node_modules - ./packages/core-utils/node_modules - ./packages/core-vote-report/node_modules + - ./packages/core-wallet-api/node_modules - ./packages/core-webhooks/node_modules - ./packages/crypto/node_modules - ./node_modules @@ -1165,6 +1176,7 @@ jobs: - ./packages/core-http-utils/node_modules - ./packages/core-interfaces/node_modules - ./packages/core-jest-matchers/node_modules + - ./packages/core-json-rpc/node_modules - run: name: Create .core/database directory command: mkdir -p $HOME/.core/database diff --git a/packages/core-wallet-api/.gitattributes b/packages/core-wallet-api/.gitattributes new file mode 100644 index 0000000000..63f6a5b970 --- /dev/null +++ b/packages/core-wallet-api/.gitattributes @@ -0,0 +1,7 @@ +# Path-based git attributes +# https://www.kernel.org/pub/software/scm/git/docs/gitattributes.html + +# Ignore all test and documentation with "export-ignore". +/.gitattributes export-ignore +/.gitignore export-ignore +/README.md export-ignore diff --git a/packages/core-wallet-api/README.md b/packages/core-wallet-api/README.md new file mode 100644 index 0000000000..ab5fb5fb11 --- /dev/null +++ b/packages/core-wallet-api/README.md @@ -0,0 +1,21 @@ +# ARK Core - Wallet API + +

+ +

+ +## Documentation + +You can find installation instructions and detailed instructions on how to use this package at the [dedicated documentation site](https://docs.ark.io/guidebook/core/plugins/required/core-wallet-api.html). + +## Security + +If you discover a security vulnerability within this package, please send an e-mail to security@ark.io. All security vulnerabilities will be promptly addressed. + +## Credits + +This project exists thanks to all the people who [contribute](../../../../contributors). + +## License + +[MIT](LICENSE) © [ARK Ecosystem](https://ark.io) diff --git a/packages/core-wallet-api/package.json b/packages/core-wallet-api/package.json new file mode 100644 index 0000000000..1ceb6a57e6 --- /dev/null +++ b/packages/core-wallet-api/package.json @@ -0,0 +1,34 @@ +{ + "name": "@arkecosystem/core-wallet-api", + "description": "Wallet API for ARK Core", + "version": "2.4.0-next.1", + "contributors": [ + "Brian Faust ", + "Alex Barnsley " + ], + "license": "MIT", + "main": "dist/index", + "types": "dist/index", + "files": [ + "dist" + ], + "scripts": { + "prepublishOnly": "yarn build", + "pretest": "bash ../../scripts/pre-test.sh", + "compile": "../../node_modules/typescript/bin/tsc", + "build": "yarn clean && yarn compile", + "build:watch": "yarn clean && yarn compile -w", + "clean": "del dist" + }, + "dependencies": { + "@arkecosystem/core-container": "^2.4.0-next.1", + "@arkecosystem/core-http-utils": "^2.4.0-next.1", + "@arkecosystem/core-interfaces": "^2.4.0-next.1" + }, + "publishConfig": { + "access": "public" + }, + "engines": { + "node": ">=10.x" + } +} diff --git a/packages/core-wallet-api/src/index.ts b/packages/core-wallet-api/src/index.ts new file mode 100644 index 0000000000..39b9a61b26 --- /dev/null +++ b/packages/core-wallet-api/src/index.ts @@ -0,0 +1 @@ +export * from "./plugin"; diff --git a/packages/core-wallet-api/src/plugin.ts b/packages/core-wallet-api/src/plugin.ts new file mode 100644 index 0000000000..99f4677746 --- /dev/null +++ b/packages/core-wallet-api/src/plugin.ts @@ -0,0 +1,17 @@ +import { Container, Logger } from "@arkecosystem/core-interfaces"; +import { startServer } from "./server"; + +export const plugin: Container.IPluginDescriptor = { + pkg: require("../package.json"), + alias: "wallet-api", + async register(container: Container.IContainer, options) { + container.resolvePlugin("logger").info("Starting Wallet API"); + + return startServer(options); + }, + async deregister(container: Container.IContainer, options) { + container.resolvePlugin("logger").info("Stopping Wallet API"); + + return container.resolvePlugin("wallet-api").stop(); + }, +}; diff --git a/packages/core-wallet-api/src/server/handlers.ts b/packages/core-wallet-api/src/server/handlers.ts new file mode 100644 index 0000000000..7d411b9c99 --- /dev/null +++ b/packages/core-wallet-api/src/server/handlers.ts @@ -0,0 +1,28 @@ +import { app } from "@arkecosystem/core-container"; +import { transformPlugins } from "./transformers"; + +export const config = { + async handler() { + const appConfig = app.getConfig(); + + return { + data: { + version: app.getVersion(), + network: { + version: appConfig.get("network.pubKeyHash"), + name: appConfig.get("network.name"), + nethash: appConfig.get("network.nethash"), + explorer: appConfig.get("network.client.explorer"), + token: { + name: appConfig.get("network.client.token"), + symbol: appConfig.get("network.client.symbol"), + }, + }, + plugins: transformPlugins(appConfig.config), + }, + }; + }, + config: { + cors: true, + }, +}; diff --git a/packages/core-wallet-api/src/server/index.ts b/packages/core-wallet-api/src/server/index.ts new file mode 100755 index 0000000000..6cb1fe09e7 --- /dev/null +++ b/packages/core-wallet-api/src/server/index.ts @@ -0,0 +1,17 @@ +import { createServer, mountServer, plugins } from "@arkecosystem/core-http-utils"; +import * as handlers from "./handlers"; + +export const startServer = async config => { + const server = await createServer({ + host: "0.0.0.0", + port: 4040, + }); + + await server.register({ + plugin: plugins.corsHeaders, + }); + + server.route([{ method: "GET", path: "/", ...handlers.config }]); + + return mountServer("Wallet API", server); +}; diff --git a/packages/core-wallet-api/src/server/transformers.ts b/packages/core-wallet-api/src/server/transformers.ts new file mode 100644 index 0000000000..5e901ff9d2 --- /dev/null +++ b/packages/core-wallet-api/src/server/transformers.ts @@ -0,0 +1,25 @@ +export const transformPlugins = config => { + const allowed = ["@arkecosystem/core-api", "@arkecosystem/core-json-rpc", "@arkecosystem/core-webhooks"]; + + const result: { [key: string]: { enabled: boolean; port: number } } = {}; + + for (const [name, options] of Object.entries(config.plugins) as any) { + if (allowed.includes(name)) { + if (options.server) { + result[name] = { + enabled: !!options.server.enabled, + port: +options.server.port, + }; + + continue; + } + + result[name] = { + enabled: !!options.enabled, + port: +options.port, + }; + } + } + + return result; +}; diff --git a/packages/core-wallet-api/tsconfig.json b/packages/core-wallet-api/tsconfig.json new file mode 100644 index 0000000000..0b089c5fa8 --- /dev/null +++ b/packages/core-wallet-api/tsconfig.json @@ -0,0 +1,7 @@ +{ + "extends": "../../tsconfig.json", + "compilerOptions": { + "outDir": "dist" + }, + "include": ["src/**/**.ts"] +} diff --git a/packages/core/bin/config/devnet/plugins.js b/packages/core/bin/config/devnet/plugins.js index 28af248258..a623cd9710 100644 --- a/packages/core/bin/config/devnet/plugins.js +++ b/packages/core/bin/config/devnet/plugins.js @@ -40,6 +40,7 @@ module.exports = { coldStart: 5, }, "@arkecosystem/core-blockchain": {}, + "@arkecosystem/core-wallet-api": {}, "@arkecosystem/core-api": { enabled: !process.env.CORE_API_DISABLED, host: process.env.CORE_API_HOST || "0.0.0.0", diff --git a/packages/core/bin/config/mainnet/plugins.js b/packages/core/bin/config/mainnet/plugins.js index b215f36e5f..9be4310140 100644 --- a/packages/core/bin/config/mainnet/plugins.js +++ b/packages/core/bin/config/mainnet/plugins.js @@ -38,6 +38,7 @@ module.exports = { }, }, "@arkecosystem/core-blockchain": {}, + "@arkecosystem/core-wallet-api": {}, "@arkecosystem/core-api": { enabled: !process.env.CORE_API_DISABLED, host: process.env.CORE_API_HOST || "0.0.0.0", diff --git a/packages/core/bin/config/testnet/plugins.js b/packages/core/bin/config/testnet/plugins.js index 2686bf3ab8..17054404e5 100644 --- a/packages/core/bin/config/testnet/plugins.js +++ b/packages/core/bin/config/testnet/plugins.js @@ -40,6 +40,7 @@ module.exports = { coldStart: 5, }, "@arkecosystem/core-blockchain": {}, + "@arkecosystem/core-wallet-api": {}, "@arkecosystem/core-api": { enabled: !process.env.CORE_API_DISABLED, host: process.env.CORE_API_HOST || "0.0.0.0",