1
- 'use strict' ; Object . defineProperty ( exports , "__esModule" , { value : true } ) ; var _DataCollector = require ( './lib/DataCollector' ) ;
2
- var _config = require ( '../lib/config' ) ; var _config2 = _interopRequireDefault ( _config ) ;
3
- var _types = require ( '../lib/types' ) ;
4
- var _Block = require ( './modules/Block' ) ;
5
- var _Tx = require ( './modules/Tx' ) ;
6
- var _Address = require ( './modules/Address' ) ;
7
- var _Event = require ( './modules/Event' ) ;
8
- var _TokenAccount = require ( './modules/TokenAccount' ) ;
9
- var _TxPending = require ( './modules/TxPending' ) ;
10
- var _Stats = require ( './modules/Stats' ) ;
11
- var _getCirculatingSupply = require ( './lib/getCirculatingSupply' ) ; var _getCirculatingSupply2 = _interopRequireDefault ( _getCirculatingSupply ) ;
12
- var _apiTools = require ( './lib/apiTools' ) ; function _interopRequireDefault ( obj ) { return obj && obj . __esModule ? obj : { default : obj } ; }
13
-
14
-
15
-
16
-
17
-
18
- const lastLimit = _config2 . default . api . lastBlocks || 10 ;
19
- const collections = _config2 . default . blocks . collections ;
1
+ "use strict" ; Object . defineProperty ( exports , "__esModule" , { value : true } ) ; exports . default = void 0 ; var _DataCollector = require ( "./lib/DataCollector" ) ;
2
+ var _modules = require ( "./modules" ) ;
3
+ var _types = require ( "../lib/types" ) ;
4
+ var _getCirculatingSupply = _interopRequireDefault ( require ( "./lib/getCirculatingSupply" ) ) ;
5
+ var _blocksCollections = require ( "../lib/blocksCollections" ) ;
6
+ var _apiTools = require ( "./lib/apiTools" ) ;
7
+ var _config = _interopRequireDefault ( require ( "../lib/config" ) ) ; function _interopRequireDefault ( obj ) { return obj && obj . __esModule ? obj : { default : obj } ; }
20
8
21
9
class Api extends _DataCollector . DataCollector {
22
- constructor ( db ) {
23
- let collectionName = collections . Blocks ;
10
+ constructor ( { db , initConfig , nativeContracts } , { modules , collectionsNames , lastBlocks } = { } ) {
11
+ const collectionName = collectionsNames . Blocks ;
24
12
super ( db , { collectionName } ) ;
25
- this . lastLimit = lastLimit ;
13
+ this . collectionsNames = collectionsNames ;
14
+ this . collections = ( 0 , _blocksCollections . getDbBlocksCollections ) ( db ) ;
15
+ this . lastLimit = lastBlocks || 10 ;
26
16
this . latest = 0 ;
27
17
this . lastBlocks = [ ] ;
28
18
this . lastTransactions = [ ] ;
29
19
this . circulatingSupply = null ;
30
20
this . stats = { timestamp : 0 } ;
31
- this . addItem ( collections . Blocks , 'Block' , _Block . Block ) ;
32
- this . addItem ( collections . PendingTxs , 'TxPending' , _TxPending . TxPending ) ;
33
- this . addItem ( collections . Txs , 'Tx' , _Tx . Tx ) ;
34
- this . addItem ( collections . Addrs , 'Address' , _Address . Address ) ;
35
- this . addItem ( collections . Events , 'Event' , _Event . Event ) ;
36
- this . addItem ( collections . TokensAddrs , 'Token' , _TokenAccount . TokenAccount ) ;
37
- this . addItem ( collections . Stats , 'Stats' , _Stats . Stats ) ;
21
+ this . loadModules ( ( 0 , _modules . getEnabledApiModules ) ( modules ) ) ;
22
+ this . initConfig = initConfig ;
23
+ const { isNativeContract } = nativeContracts ;
24
+ this . isNativeContract = isNativeContract ;
38
25
}
39
26
tick ( ) {
40
27
this . setLastBlocks ( ) ;
41
28
this . setCirculatingSupply ( ) ;
42
29
}
43
30
31
+ loadModules ( modules ) {
32
+ Object . keys ( modules ) . forEach ( name => {
33
+ const module = new modules [ name ] ( this . collections , name ) ;
34
+ this . log . info ( `Loading module ${ name } ` ) ;
35
+ this . addModule ( module , name ) ;
36
+ } ) ;
37
+ }
38
+
44
39
async run ( payload ) {
45
40
try {
46
41
if ( Object . keys ( payload ) . length < 1 ) throw new Error ( 'invalid request' ) ;
47
- const action = payload . action ;
42
+ let { module , action, params } = payload ;
48
43
if ( ! action ) throw new Error ( 'Missing action' ) ;
49
- const params = ( 0 , _apiTools . filterParams ) ( payload . params ) ;
50
- const module = ( 0 , _apiTools . getModule ) ( payload . module ) ;
51
- if ( ! module ) throw new Error ( 'Unknown module' ) ;
52
- const delayed = ( 0 , _apiTools . getDelayedFields ) ( module , action ) ;
44
+ const moduleName = _apiTools . MODULES [ module ] ;
45
+ if ( ! moduleName ) throw new Error ( 'Unknown module' ) ;
46
+ const delayed = ( 0 , _apiTools . getDelayedFields ) ( moduleName , action ) ;
53
47
const time = Date . now ( ) ;
54
- const result = await this . itemPublicAction ( module , action , params ) ;
55
-
48
+ params = ( 0 , _apiTools . filterParams ) ( payload . params ) ;
49
+ const result = await this . getModule ( moduleName ) . run ( action , params ) ;
56
50
const queryTime = Date . now ( ) - time ;
57
51
const logCmd = queryTime > 1000 ? 'warn' : 'trace' ;
58
52
this . log [ logCmd ] ( `${ module } .${ action } (${ JSON . stringify ( params ) } ) ${ queryTime } ms` ) ;
59
-
60
- return { module , action , params , result , delayed } ;
53
+ const res = { module , action , params , result , delayed } ;
54
+ return res ;
61
55
} catch ( err ) {
56
+ this . log . debug ( err ) ;
62
57
return Promise . reject ( err ) ;
63
58
}
64
59
}
65
60
61
+ info ( ) {
62
+ let info = Object . assign ( { } , this . initConfig ) ;
63
+ info . txTypes = Object . assign ( { } , _types . txTypes ) ;
64
+ info . modules = _config . default . api . modules ;
65
+ return info ;
66
+ }
67
+
66
68
async setLastBlocks ( ) {
67
69
try {
68
- let { collection, lastLimit, Tx } = this ;
70
+ let { collection, lastLimit } = this ;
71
+ const Tx = this . getModule ( 'Tx' ) ;
69
72
let blocks = await collection . find ( ) . sort ( { number : - 1 } ) . limit ( lastLimit ) . toArray ( ) ;
70
73
let txs = await Tx . db . find ( { txType : { $in : [ _types . txTypes . default , _types . txTypes . contract ] } } ) .
71
74
sort ( { blockNumber : - 1 , transactionIndex : - 1 } ) .
@@ -80,8 +83,8 @@ class Api extends _DataCollector.DataCollector {
80
83
81
84
async setCirculatingSupply ( ) {
82
85
try {
83
- const collection = this . db . collection ( collections . Addrs ) ;
84
- let circulating = await ( 0 , _getCirculatingSupply2 . default ) ( collection ) ;
86
+ const collection = this . collections . Addrs ;
87
+ let circulating = await ( 0 , _getCirculatingSupply . default ) ( collection , this . initConfig . nativeContracts ) ;
85
88
this . circulatingSupply = Object . assign ( { } , circulating ) ;
86
89
} catch ( err ) {
87
90
this . log . debug ( err ) ;
@@ -114,7 +117,7 @@ class Api extends _DataCollector.DataCollector {
114
117
}
115
118
116
119
async getAddress ( address ) {
117
- return this . Address . run ( 'getAddress' , { address } ) ;
120
+ return this . getModule ( ' Address' ) . run ( 'getAddress' , { address } ) ;
118
121
}
119
122
120
123
async addAddressData ( address , data , key = '_addressData' ) {
@@ -123,15 +126,27 @@ class Api extends _DataCollector.DataCollector {
123
126
return data || account ;
124
127
}
125
128
129
+ getPendingTransaction ( params ) {
130
+ return this . getModule ( 'TxPending' ) . run ( 'getPendingTransaction' , params ) ;
131
+ }
132
+
126
133
async updateStats ( ) {
127
134
const oldStats = this . stats ;
128
- const stats = await this . Stats . run ( 'getLatest' ) ;
135
+ const stats = await this . getModule ( ' Stats' ) . run ( 'getLatest' ) ;
129
136
if ( ! stats ) return ;
137
+
138
+ const ExtendedStats = this . getModule ( 'ExtendedStats' ) ;
139
+ if ( ExtendedStats ) {
140
+ const blockNumber = parseInt ( stats . blockNumber ) ;
141
+ const extendedStats = await ExtendedStats . getExtendedStats ( blockNumber ) ;
142
+ Object . assign ( stats , extendedStats ) ;
143
+ }
144
+
130
145
this . stats = Object . assign ( { } , stats ) ;
131
146
if ( stats . timestamp !== oldStats . timestamp ) {
132
147
this . events . emit ( 'newStats' , this . stats ) ;
133
148
}
134
- } } exports . default =
149
+ } } var _default =
135
150
136
151
137
- Api ;
152
+ Api ; exports . default = _default ;
0 commit comments