diff --git a/.gitignore b/.gitignore index e33419e421c7fb54de9f98e3e02c9572fb131f3a..dfc3e2077942a9e57e79ccac71c736f59cd7c5d9 100644 --- a/.gitignore +++ b/.gitignore @@ -33,11 +33,20 @@ coverage/ # TS migration test/blockchain/*.js* +test/blockchain/*.d.ts test/blockchain/lib/*.js* +test/blockchain/lib/*.d.ts /index.js* +/index.d.ts /server.js* +/server.d.ts app/**/*.js* +app/**/*.d.ts test/integration/membership_chainability.js* +test/integration/membership_chainability.d.ts test/integration/tools/toolbox.js* +test/integration/tools/toolbox.d.ts test/integration/documents-currency.js* -test/fast/modules/crawler/block_pulling.js* \ No newline at end of file +test/integration/documents-currency.d.ts +test/fast/modules/crawler/block_pulling.js* +test/fast/modules/crawler/block_pulling.d.ts diff --git a/.npmignore b/.npmignore new file mode 100644 index 0000000000000000000000000000000000000000..05cac4f53afce72d178648595fa97793dd919270 --- /dev/null +++ b/.npmignore @@ -0,0 +1,34 @@ +*.sublime* +node_modules/ +*.html +npm-debug.log +bin/jpgp*.jar +.idea/ +naclb/build +naclb/node_modules +gui/nw + +# Vim swap files +*~ +*.swp +*.swo + +# Vagrant +.vagrant/ +vagrant/*.log +vagrant/duniter + +# Releases +*.deb +*.tar.gz +*.log +*.exe + +# vscode +.vscode + +# istanbul +.nyc_output +coverage/ + +# TS => JS: OK! diff --git a/app/lib/common-libs/crypto/keyring.ts b/app/lib/common-libs/crypto/keyring.ts index 24cb7a1a13051279060f128b6be8d62a3e02edde..1427a7e55effda9291f92af99d0e4f00d64a2939 100644 --- a/app/lib/common-libs/crypto/keyring.ts +++ b/app/lib/common-libs/crypto/keyring.ts @@ -7,7 +7,7 @@ const naclBinding = require('naclb'); const crypto_sign_BYTES = 64; -class Key { +export class Key { constructor(readonly pub:string, readonly sec:string) { } diff --git a/app/lib/indexer.ts b/app/lib/indexer.ts index 7f667b325f45a92076b503dd0829e5436fac361a..2ceced445e9e1b707d5a3962308545b47a7852e0 100644 --- a/app/lib/indexer.ts +++ b/app/lib/indexer.ts @@ -108,7 +108,7 @@ export interface SindexEntry extends IndexEntry { isTimeLocked?: boolean, } -interface Ranger { +export interface Ranger { (n:number, m:number, prop?:string): Promise<DBHead[]> } diff --git a/app/modules/bma/lib/bma.ts b/app/modules/bma/lib/bma.ts index 07277734df59118f384a89328f55dc3ecbda696c..d3a2967c7a23808d0c9adff2b65901cf704a2eb0 100644 --- a/app/modules/bma/lib/bma.ts +++ b/app/modules/bma/lib/bma.ts @@ -1,6 +1,6 @@ import {Server} from "../../../../server" -import {Network, NetworkInterface} from "./network" -import * as dtos from "./dtos" +import {BmaApi, Network, NetworkInterface} from "./network" +import {block2HttpBlock, HttpPeer} from "./dtos" import {BMALimitation} from "./limiter" import {BlockchainBinding} from "./controllers/blockchain" import {NodeBinding} from "./controllers/node" @@ -8,15 +8,14 @@ import {NetworkBinding} from "./controllers/network" import {WOTBinding} from "./controllers/wot" import {TransactionBinding} from "./controllers/transactions" import {UDBinding} from "./controllers/uds" -import {block2HttpBlock, HttpBlock, HttpPeer, HttpTransactionOfBlock} from "./dtos"; -import {PeerDTO} from "../../../lib/dto/PeerDTO"; -import {BlockDTO} from "../../../lib/dto/BlockDTO"; +import {PeerDTO} from "../../../lib/dto/PeerDTO" +import {BlockDTO} from "../../../lib/dto/BlockDTO" const co = require('co'); const es = require('event-stream'); const WebSocketServer = require('ws').Server; -export const bma = function(server:Server, interfaces:NetworkInterface[], httpLogs:boolean, logger:any) { +export const bma = function(server:Server, interfaces:NetworkInterface[], httpLogs:boolean, logger:any): Promise<BmaApi> { if (!interfaces) { interfaces = []; diff --git a/app/modules/bma/lib/controllers/AbstractController.ts b/app/modules/bma/lib/controllers/AbstractController.ts index 048a292ebca3ef4e8e50dc16099485e9beeb9b31..8ebcb3f409f3288134bbcbb25eabe3e138f53ecd 100644 --- a/app/modules/bma/lib/controllers/AbstractController.ts +++ b/app/modules/bma/lib/controllers/AbstractController.ts @@ -1,13 +1,17 @@ -import {Server} from "../../../../../server"; -import {dos2unix} from "../../../../lib/common-libs/dos2unix"; -import {CommonConstants} from "../../../../lib/common-libs/constants"; +import {Server} from "../../../../../server" +import {dos2unix} from "../../../../lib/common-libs/dos2unix" +import {CommonConstants} from "../../../../lib/common-libs/constants" +import {BlockchainService} from "../../../../service/BlockchainService" +import {IdentityService} from "../../../../service/IdentityService" +import {PeeringService} from "../../../../service/PeeringService" +import {ConfDTO} from "../../../../lib/dto/ConfDTO" export abstract class AbstractController { constructor(protected server:Server) { } - get conf() { + get conf(): ConfDTO { return this.server.conf } @@ -15,15 +19,15 @@ export abstract class AbstractController { return this.server.logger } - get BlockchainService() { + get BlockchainService(): BlockchainService { return this.server.BlockchainService } - get IdentityService() { + get IdentityService(): IdentityService { return this.server.IdentityService } - get PeeringService() { + get PeeringService(): PeeringService { return this.server.PeeringService } diff --git a/app/modules/crawler/lib/sync.ts b/app/modules/crawler/lib/sync.ts index 046006982cc4e45b0727424f668255c2b230394b..25e8899524f3b80d864b7f3ea91e548efc933160 100644 --- a/app/modules/crawler/lib/sync.ts +++ b/app/modules/crawler/lib/sync.ts @@ -14,6 +14,8 @@ import {BlockchainService} from "../../../service/BlockchainService" import {rawer} from "../../../lib/common-libs/index" import {dos2unix} from "../../../lib/common-libs/dos2unix" import {hashf} from "../../../lib/common" +import {ConfDTO} from "../../../lib/dto/ConfDTO" +import {PeeringService} from "../../../service/PeeringService" const util = require('util'); const _ = require('underscore'); @@ -65,7 +67,7 @@ export class Synchroniser extends stream.Duplex { } } - get conf() { + get conf(): ConfDTO { return this.server.conf } @@ -73,7 +75,7 @@ export class Synchroniser extends stream.Duplex { return this.server.logger } - get PeeringService() { + get PeeringService(): PeeringService { return this.server.PeeringService } diff --git a/app/modules/prover/index.ts b/app/modules/prover/index.ts index 509c61aa5bd9fdb913dc188ba1db48323990912f..094888333fd0ad2f767be0bf9cbf2cadb261d540 100644 --- a/app/modules/prover/index.ts +++ b/app/modules/prover/index.ts @@ -6,7 +6,8 @@ import {Prover} from "./lib/prover" import {Contacter} from "../crawler/lib/contacter" import {parsers} from "../../lib/common-libs/parsers/index" import {PeerDTO} from "../../lib/dto/PeerDTO" -import {Server} from "../../../server"; +import {Server} from "../../../server" +import {BlockDTO} from "../../lib/dto/BlockDTO" const async = require('async'); @@ -112,7 +113,7 @@ export const ProverDependency = { throw 'Difficulty is required.'; } const generator = new BlockGenerator(server); - return generateAndSend(program, difficulty, server, () => generator.manualRoot); + return generateAndSend(program, difficulty, server, () => (): Promise<BlockDTO> => generator.manualRoot()) } }] } diff --git a/app/service/IdentityService.ts b/app/service/IdentityService.ts index f4922af463fe94a334d077c205d4276b5f3c9392..81288451dc47dda3de811b1cc02c104d8f994b94 100644 --- a/app/service/IdentityService.ts +++ b/app/service/IdentityService.ts @@ -1,15 +1,15 @@ -import {GlobalFifoPromise} from "./GlobalFifoPromise"; -import {FileDAL} from "../lib/dal/fileDAL"; -import {ConfDTO} from "../lib/dto/ConfDTO"; -import {DBIdentity} from "../lib/dal/sqliteDAL/IdentityDAL"; -import {GLOBAL_RULES_FUNCTIONS, GLOBAL_RULES_HELPERS} from "../lib/rules/global_rules"; -import {BlockDTO} from "../lib/dto/BlockDTO"; -import {RevocationDTO} from "../lib/dto/RevocationDTO"; -import {BasicIdentity, IdentityDTO} from "../lib/dto/IdentityDTO"; -import {CertificationDTO} from "../lib/dto/CertificationDTO"; -import {DBCert} from "../lib/dal/sqliteDAL/CertDAL"; -import {verify} from "../lib/common-libs/crypto/keyring"; -import {FIFOService} from "./FIFOService"; +import {GlobalFifoPromise} from "./GlobalFifoPromise" +import {FileDAL} from "../lib/dal/fileDAL" +import {ConfDTO} from "../lib/dto/ConfDTO" +import {DBIdentity, ExistingDBIdentity} from "../lib/dal/sqliteDAL/IdentityDAL" +import {GLOBAL_RULES_FUNCTIONS, GLOBAL_RULES_HELPERS} from "../lib/rules/global_rules" +import {BlockDTO} from "../lib/dto/BlockDTO" +import {RevocationDTO} from "../lib/dto/RevocationDTO" +import {BasicIdentity, IdentityDTO} from "../lib/dto/IdentityDTO" +import {CertificationDTO} from "../lib/dto/CertificationDTO" +import {DBCert} from "../lib/dal/sqliteDAL/CertDAL" +import {verify} from "../lib/common-libs/crypto/keyring" +import {FIFOService} from "./FIFOService" "use strict"; const constants = require('../lib/constants'); @@ -36,7 +36,7 @@ export class IdentityService extends FIFOService { return this.dal.searchJustIdentities(search) } - async findMember(search:string) { + async findMember(search:string): Promise<ExistingDBIdentity> { let idty = null; if (search.match(constants.PUBLIC_KEY)) { idty = await this.dal.getWrittenIdtyByPubkey(search); diff --git a/server.ts b/server.ts index e6e35e10c13c16ad752bc7de9fc02c873ea4128e..f707d0211033195d3f0ab4ad51ce8a3979418ce6 100644 --- a/server.ts +++ b/server.ts @@ -1,21 +1,29 @@ -import {IdentityService} from "./app/service/IdentityService"; -import {MembershipService} from "./app/service/MembershipService"; -import {PeeringService} from "./app/service/PeeringService"; -import {BlockchainService} from "./app/service/BlockchainService"; -import {TransactionService} from "./app/service/TransactionsService"; -import {ConfDTO, NetworkConfDTO} from "./app/lib/dto/ConfDTO"; -import {FileDAL} from "./app/lib/dal/fileDAL"; -import {DuniterBlockchain} from "./app/lib/blockchain/DuniterBlockchain"; -import {SQLBlockchain} from "./app/lib/blockchain/SqlBlockchain"; -import * as stream from "stream"; -import {KeyGen, randomKey} from "./app/lib/common-libs/crypto/keyring"; -import {parsers} from "./app/lib/common-libs/parsers/index"; -import {Cloneable} from "./app/lib/dto/Cloneable"; -import {DuniterDocument, duniterDocument2str} from "./app/lib/common-libs/constants"; -import {CrawlerConstants} from "./app/modules/crawler/lib/constants"; -import {GlobalFifoPromise} from "./app/service/GlobalFifoPromise"; - -interface HookableServer { +import {IdentityService} from "./app/service/IdentityService" +import {MembershipService} from "./app/service/MembershipService" +import {PeeringService} from "./app/service/PeeringService" +import {BlockchainService} from "./app/service/BlockchainService" +import {TransactionService} from "./app/service/TransactionsService" +import {ConfDTO, NetworkConfDTO} from "./app/lib/dto/ConfDTO" +import {FileDAL} from "./app/lib/dal/fileDAL" +import {DuniterBlockchain} from "./app/lib/blockchain/DuniterBlockchain" +import {SQLBlockchain} from "./app/lib/blockchain/SqlBlockchain" +import * as stream from "stream" +import {KeyGen, randomKey} from "./app/lib/common-libs/crypto/keyring" +import {parsers} from "./app/lib/common-libs/parsers/index" +import {Cloneable} from "./app/lib/dto/Cloneable" +import {DuniterDocument, duniterDocument2str} from "./app/lib/common-libs/constants" +import {CrawlerConstants} from "./app/modules/crawler/lib/constants" +import {GlobalFifoPromise} from "./app/service/GlobalFifoPromise" +import {BlockchainContext} from "./app/lib/computation/BlockchainContext" +import {BlockDTO} from "./app/lib/dto/BlockDTO" +import {DBIdentity} from "./app/lib/dal/sqliteDAL/IdentityDAL" +import {CertificationDTO} from "./app/lib/dto/CertificationDTO" +import {MembershipDTO} from "./app/lib/dto/MembershipDTO" +import {RevocationDTO} from "./app/lib/dto/RevocationDTO" +import {TransactionDTO} from "./app/lib/dto/TransactionDTO" +import {PeerDTO} from "./app/lib/dto/PeerDTO" + +export interface HookableServer { getMainEndpoint: (...args:any[]) => Promise<any> generatorGetJoinData: (...args:any[]) => Promise<any> generatorComputeNewCerts: (...args:any[]) => Promise<any> @@ -108,7 +116,7 @@ export class Server extends stream.Duplex implements HookableServer { } } - getBcContext() { + getBcContext(): BlockchainContext { return this.BlockchainService.getContext() } @@ -179,7 +187,7 @@ export class Server extends stream.Duplex implements HookableServer { return this; } - async writeRawBlock(raw:string) { + async writeRawBlock(raw:string): Promise<BlockDTO> { const obj = parsers.parseBlock.syncWrite(raw, logger) return await this.writeBlock(obj) } @@ -190,12 +198,12 @@ export class Server extends stream.Duplex implements HookableServer { return res } - async writeRawIdentity(raw:string) { + async writeRawIdentity(raw:string): Promise<DBIdentity> { const obj = parsers.parseIdentity.syncWrite(raw, logger) return await this.writeIdentity(obj) } - async writeIdentity(obj:any, notify = true) { + async writeIdentity(obj:any, notify = true): Promise<DBIdentity> { const res = await this.IdentityService.submitIdentity(obj) if (notify) { this.emitDocument(res, DuniterDocument.ENTITY_IDENTITY) @@ -203,7 +211,7 @@ export class Server extends stream.Duplex implements HookableServer { return res } - async writeRawCertification(raw:string) { + async writeRawCertification(raw:string): Promise<CertificationDTO> { const obj = parsers.parseCertification.syncWrite(raw, logger) return await this.writeCertification(obj) } @@ -216,7 +224,7 @@ export class Server extends stream.Duplex implements HookableServer { return res } - async writeRawMembership(raw:string) { + async writeRawMembership(raw:string): Promise<MembershipDTO> { const obj = parsers.parseMembership.syncWrite(raw, logger) return await this.writeMembership(obj) } @@ -229,7 +237,7 @@ export class Server extends stream.Duplex implements HookableServer { return res } - async writeRawRevocation(raw:string) { + async writeRawRevocation(raw:string): Promise<RevocationDTO> { const obj = parsers.parseRevocation.syncWrite(raw, logger) return await this.writeRevocation(obj) } @@ -240,7 +248,7 @@ export class Server extends stream.Duplex implements HookableServer { return res } - async writeRawTransaction(raw:string) { + async writeRawTransaction(raw:string): Promise<TransactionDTO> { const obj = parsers.parseTransaction.syncWrite(raw, logger) return await this.writeTransaction(obj) } @@ -251,7 +259,7 @@ export class Server extends stream.Duplex implements HookableServer { return res } - async writeRawPeer(raw:string) { + async writeRawPeer(raw:string): Promise<PeerDTO> { const obj = parsers.parsePeer.syncWrite(raw, logger) return await this.writePeer(obj) } diff --git a/test/integration/tools/toolbox.ts b/test/integration/tools/toolbox.ts index 5d04dcbc696caa64f25ed16cc5d4e8112b4198c7..d26842937f4140da9e516bb146222d9a36fc1eed 100644 --- a/test/integration/tools/toolbox.ts +++ b/test/integration/tools/toolbox.ts @@ -6,7 +6,15 @@ import * as stream from "stream" import {RevocationDTO} from "../../../app/lib/dto/RevocationDTO" import {IdentityDTO} from "../../../app/lib/dto/IdentityDTO" import {PeerDTO} from "../../../app/lib/dto/PeerDTO" -import {Network} from "../../../app/modules/bma/lib/network"; +import {Network} from "../../../app/modules/bma/lib/network" +import {DBIdentity} from "../../../app/lib/dal/sqliteDAL/IdentityDAL" +import {CertificationDTO} from "../../../app/lib/dto/CertificationDTO" +import {BlockchainService} from "../../../app/service/BlockchainService" +import {PeeringService} from "../../../app/service/PeeringService" +import {ConfDTO} from "../../../app/lib/dto/ConfDTO" +import {FileDAL} from "../../../app/lib/dal/fileDAL" +import {MembershipDTO} from "../../../app/lib/dto/MembershipDTO" +import {TransactionDTO} from "../../../app/lib/dto/TransactionDTO" const _ = require('underscore'); const rp = require('request-promise'); @@ -220,19 +228,19 @@ export class TestingServer { server.getMainEndpoint = require('../../../app/modules/bma').BmaDependency.duniter.methods.getMainEndpoint } - get BlockchainService() { + get BlockchainService(): BlockchainService { return this.server.BlockchainService } - get PeeringService() { + get PeeringService(): PeeringService { return this.server.PeeringService } - get conf() { + get conf(): ConfDTO { return this.server.conf } - get dal() { + get dal(): FileDAL { return this.server.dal } @@ -264,15 +272,15 @@ export class TestingServer { return this.server.writeBlock(obj) } - async writeIdentity(obj:any) { + async writeIdentity(obj:any): Promise<DBIdentity> { return this.server.writeIdentity(obj) } - async writeCertification(obj:any) { + async writeCertification(obj:any): Promise<CertificationDTO> { return this.server.writeCertification(obj) } - async writeMembership(obj:any) { + async writeMembership(obj:any): Promise<MembershipDTO> { return this.server.writeMembership(obj) } @@ -280,7 +288,7 @@ export class TestingServer { return this.server.writeRevocation(obj) } - async writeTransaction(obj:any) { + async writeTransaction(obj:any): Promise<TransactionDTO> { return this.server.writeTransaction(obj) } diff --git a/tsconfig.json b/tsconfig.json index 171c2148ef6a63c041f1d14927ce671f18ea5740..330af57dbdab513110b9a54bd45b6721b7921ef1 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -2,6 +2,7 @@ "compilerOptions": { "sourceMap": true, "target": "es6", + "declaration": true, "moduleResolution": "node", "module": "commonjs", "strictNullChecks": true,