beech-api 3.8.0 → 3.9.75

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (59) hide show
  1. package/LICENSE +21 -21
  2. package/README.md +1715 -1244
  3. package/index.js +2 -2
  4. package/package.json +92 -83
  5. package/packages/cli/beech +9 -10
  6. package/packages/cli/bin/beech-app.js +389 -389
  7. package/packages/cli/bin/beech-service.js +262 -132
  8. package/packages/cli/core/auth/Credentials.js +174 -147
  9. package/packages/cli/core/auth/Passport.js +664 -592
  10. package/packages/cli/core/auth/_Request.js +12 -12
  11. package/packages/cli/core/configure/_gitignore +16 -15
  12. package/packages/cli/core/configure/_sequelizerc +9 -9
  13. package/packages/cli/core/configure/app.config-basic.js +55 -55
  14. package/packages/cli/core/configure/app.config-sequelize.js +88 -88
  15. package/packages/cli/core/configure/beech.config.js +9 -9
  16. package/packages/cli/core/configure/global.config-basic.js +8 -8
  17. package/packages/cli/core/configure/global.config-sequelize.js +8 -8
  18. package/packages/cli/core/configure/jest.config.js +6 -6
  19. package/packages/cli/core/configure/jsconfig.json +8 -7
  20. package/packages/cli/core/configure/passport.config.js +97 -97
  21. package/packages/cli/core/databases/mysql.js +94 -95
  22. package/packages/cli/core/databases/sequelize.js +187 -179
  23. package/packages/cli/core/databases/test.js +251 -170
  24. package/packages/cli/core/file-walk/file-walk.js +35 -35
  25. package/packages/cli/core/generator/_endpoints +15 -15
  26. package/packages/cli/core/generator/_endpoints_basic +42 -42
  27. package/packages/cli/core/generator/_help +26 -18
  28. package/packages/cli/core/generator/_help_create +10 -10
  29. package/packages/cli/core/generator/_help_service +10 -10
  30. package/packages/cli/core/generator/_helpers +9 -9
  31. package/packages/cli/core/generator/_helpers_basic +22 -22
  32. package/packages/cli/core/generator/_models +6 -29
  33. package/packages/cli/core/generator/_models_basic +13 -22
  34. package/packages/cli/core/generator/_package +23 -20
  35. package/packages/cli/core/generator/_scheduler +32 -22
  36. package/packages/cli/core/generator/_spec +29 -29
  37. package/packages/cli/core/generator/index.js +1081 -738
  38. package/packages/cli/core/helpers/2fa.js +106 -85
  39. package/packages/cli/core/helpers/math.js +115 -103
  40. package/packages/cli/core/helpers/poolEntity.js +103 -59
  41. package/packages/cli/core/index.js +264 -188
  42. package/packages/cli/core/middleware/express/duplicateRequest.js +16 -12
  43. package/packages/cli/core/middleware/express/jwtCheckAllow.js +86 -68
  44. package/packages/cli/core/middleware/express/rateLimit.js +29 -17
  45. package/packages/cli/core/middleware/express/slowDown.js +2 -2
  46. package/packages/cli/core/middleware/index.js +6 -6
  47. package/packages/cli/core/middleware/origin/guard/advance.js +75 -74
  48. package/packages/cli/core/middleware/origin/whitelist/cors.js +94 -94
  49. package/packages/cli/core/services/http.express.js +481 -441
  50. package/packages/cli/core/test/check-node.js +21 -0
  51. package/packages/cli/core/test/utils.js +7 -7
  52. package/packages/cli/entry +10 -0
  53. package/packages/lib/index.js +6 -6
  54. package/packages/lib/src/endpoint.js +947 -532
  55. package/packages/lib/src/guard.js +60 -60
  56. package/packages/lib/src/salt.js +3 -3
  57. package/packages/lib/src/schema.js +96 -93
  58. package/packages/lib/src/specificExpress.js +7 -7
  59. package/packages/lib/src/user.js +271 -271
@@ -1,96 +1,95 @@
1
- const mysql = require("mysql");
2
- const { DeHashIt, M, X } = require(__dirname + "/../helpers/math");
3
- global.sql = {};
4
-
5
- exports.connect = () => {
6
- return new Promise((resolve, reject) => {
7
- try {
8
- mysqlInProcess(_config_.database_config, true, (err, result) => {
9
- if (!err) {
10
- resolve(result);
11
- } else {
12
- reject(err);
13
- }
14
- });
15
- } catch (error) {
16
- reject(error);
17
- }
18
- })
19
- }
20
-
21
- mysqlInProcess = (database_config, headDbShow, cb) => {
22
- try {
23
- let val = database_config.shift();
24
- // checking turn on db connect
25
- if (val.is_connect) {
26
- const promise = new Promise((resolve) => {
27
- // check hash ?
28
- if(val.username && val.password) {
29
- if(val.username.length < 55 || val.password < 55) {
30
- return cb("Error: No Hash access for connect to database.\n", null);
31
- }
32
- let accessDb = [];
33
- [val.username, val.password].map((e, k) => {
34
- DeHashIt(e.toString(), null, (17).toString().slice(0,-1).length, (err, d) => {
35
- if(!err) {
36
- accessDb.push(d.split("sh,")[1].split(M(X).toString().slice(0,2)+M(X).toString())[0].slice(0,-1));
37
- }
38
- });
39
- if(k+1==2) {
40
- resolve(accessDb);
41
- }
42
- });
43
- } else {
44
- resolve([null, null]);
45
- }
46
- });
47
- Promise.all([promise]).then(final => {
48
- // db connection config
49
- let connection = mysql.createConnection({
50
- host: val.host,
51
- user: final[0][0],
52
- password: final[0][1],
53
- database: val.database,
54
- charset: val.charset,
55
- port: val.port
56
- });
57
- // db connecting
58
- connection.connect(err => {
59
- if (!err) {
60
- // show only one text db connnections
61
- if (headDbShow) {
62
- console.log(' Passed  Database is connected at:');
63
- headDbShow = false;
64
- }
65
- // declare to global mysql variable
66
- sql[ val.name ] = connection;
67
- console.log('- ' + val.name + ' -> ' + connection.config.database + ':' + connection.config.port + '');
68
- // checking recursive database connection
69
- if (database_config.length > 0) {
70
- mysqlInProcess(database_config, headDbShow, e => {
71
- cb(e, true);
72
- });
73
- } else {
74
- // perfectly recursive
75
- cb(err, true);
76
- }
77
- } else {
78
- console.log(' Failed  Database `' + val.name + '` is connect failed.');
79
- cb(err, null);
80
- }
81
- });
82
- });
83
- } else {
84
- if (database_config.length > 0) {
85
- mysqlInProcess(database_config, headDbShow, e => {
86
- cb(e, true);
87
- });
88
- } else {
89
- // perfectly recursive
90
- cb(null, true);
91
- }
92
- }
93
- } catch (error) {
94
- cb(error, null);
95
- }
1
+ const mysql = require("mysql");
2
+ const { DeHashIt, M, X } = require(__dirname + "/../helpers/math");
3
+ global.sql = {};
4
+
5
+ exports.connect = () => {
6
+ return new Promise((resolve, reject) => {
7
+ try {
8
+ mysqlInProcess(_config_.database_config, true, (err, result) => {
9
+ if (!err) {
10
+ resolve(result);
11
+ } else {
12
+ reject(err);
13
+ }
14
+ });
15
+ } catch (error) {
16
+ reject(error);
17
+ }
18
+ })
19
+ }
20
+
21
+ mysqlInProcess = (database_config, headDbShow, cb) => {
22
+ try {
23
+ let val = database_config.shift();
24
+ // checking turn on db connect
25
+ if (val.is_connect) {
26
+ const promise = new Promise((resolve) => {
27
+ // check hash ?
28
+ if(val.username && val.password) {
29
+ if(val.username.length < 55 || val.password < 55) {
30
+ return cb("Error: Incorrect Hash access for connect to database.\n", null);
31
+ }
32
+ let accessDb = [];
33
+ [val.username, val.password].forEach((e, k) => {
34
+ DeHashIt(e.toString(), null, (17).toString().slice(0, -1).length, (err, d) => {
35
+ if (err) return reject(err);
36
+ accessDb[k] = d.split("sh,")[1].split(M(X).toString().slice(0, 2) + M(X).toString())[0].slice(0, -1);
37
+ if (accessDb[0] !== undefined && accessDb[1] !== undefined) {
38
+ resolve(accessDb);
39
+ }
40
+ });
41
+ });
42
+ } else {
43
+ resolve([null, null]);
44
+ }
45
+ });
46
+ Promise.all([promise]).then(final => {
47
+ // db connection config
48
+ let connection = mysql.createConnection({
49
+ host: val.host,
50
+ user: final[0][0],
51
+ password: final[0][1],
52
+ database: val.database,
53
+ charset: val.charset,
54
+ port: val.port
55
+ });
56
+ // db connecting
57
+ connection.connect(err => {
58
+ if (!err) {
59
+ // show only one text db connnections
60
+ if (headDbShow) {
61
+ console.log(' Passed  Database is connected at:');
62
+ headDbShow = false;
63
+ }
64
+ // declare to global mysql variable
65
+ sql[ val.name ] = connection;
66
+ console.log('- ' + val.name + ' -> ' + connection.config.database + ':' + connection.config.port + '');
67
+ // checking recursive database connection
68
+ if (database_config.length > 0) {
69
+ mysqlInProcess(database_config, headDbShow, e => {
70
+ cb(e, true);
71
+ });
72
+ } else {
73
+ // perfectly recursive
74
+ cb(err, true);
75
+ }
76
+ } else {
77
+ console.log(' Failed  Database `' + val.name + '` is connect failed.');
78
+ cb(err, null);
79
+ }
80
+ });
81
+ });
82
+ } else {
83
+ if (database_config.length > 0) {
84
+ mysqlInProcess(database_config, headDbShow, e => {
85
+ cb(e, true);
86
+ });
87
+ } else {
88
+ // perfectly recursive
89
+ cb(null, true);
90
+ }
91
+ }
92
+ } catch (error) {
93
+ cb(error, null);
94
+ }
96
95
  }
@@ -1,180 +1,188 @@
1
- const Sequelize = require('sequelize');
2
- const { DeHashIt, M, X } = require(__dirname + "/../helpers/math");
3
- global.sql = {};
4
-
5
- exports.connect = () => {
6
- return new Promise((resolve, reject) => {
7
- try {
8
- connectInProcess(_config_.database_config, true, (err, result) => {
9
- if (!err) {
10
- resolve(result);
11
- } else {
12
- reject(err);
13
- }
14
- });
15
- } catch (error) {
16
- reject(error);
17
- }
18
- })
19
- }
20
-
21
- connectInProcess = async (database_config, headDbShow, cb) => {
22
- try {
23
- let val = database_config.shift();
24
- // checking turn on db connect
25
- if (val.is_connect) {
26
- const promise = new Promise((resolve) => {
27
- // check hash ?
28
- if(val.username && val.password) {
29
- if(val.username.length < 55 || val.password < 55) {
30
- return cb("Error: No Hash access for connect to database.\n", null);
31
- }
32
- let accessDb = [];
33
- [val.username, val.password].map((e, k) => {
34
- DeHashIt(e.toString(), null, (17).toString().slice(0,-1).length, (err, d) => {
35
- if(!err) {
36
- accessDb.push(d.split("sh,")[1].split(M(X).toString().slice(0,2)+M(X).toString())[0].slice(0,-1));
37
- }
38
- });
39
- if(k+1==2) {
40
- resolve(accessDb);
41
- }
42
- });
43
- } else {
44
- resolve([null, null]);
45
- }
46
- });
47
- Promise.all([promise]).then(async (final) => {
48
- const sq = await new Sequelize({
49
- // one of 'mysql' | 'sqlite' | 'mariadb' | 'postgres' | 'mssql'
50
- dialect: val.dialect || "mysql",
51
-
52
- // for postgres, you can also specify an absolute path to a directory
53
- // containing a UNIX socket to connect over
54
- // host: '/sockets/psql_sockets'.
55
- host: (val.host == "localhost" || val.host == "http://localhost") ? "127.0.0.1" : val.host,
56
- username: final[0][0],
57
- password: final[0][1],
58
- database: val.database,
59
- port: val.port,
60
-
61
- // set connection timezone
62
- timezone: val.timezone || "+00:00",
63
-
64
- // the storage engine for sqlite
65
- // - default ':memory:'
66
- storage: val.storage || ":memory:",
67
-
68
- // custom protocol; default: 'tcp'
69
- // postgres only, useful for Heroku
70
- protocol: val.protocol || null,
71
- // disable logging or provide a custom logging function; default: console.log
72
- logging: val.logging || false,
73
-
74
- // you can also pass any dialect options to the underlying dialect library
75
- // - default is empty
76
- // - currently supported: 'mysql', 'postgres', 'mssql'
77
- dialectOptions: {
78
- socketPath: ((val.dialectOptions) ? ((val.dialectOptions.socketPath) ? val.dialectOptions.socketPath : "") : ""), //Applications/MAMP/tmp/mysql/mysql.sock
79
- supportBigNumbers: ((val.dialectOptions) ? ((val.dialectOptions.supportBigNumbers) ? val.dialectOptions.supportBigNumbers : false) : false),
80
- bigNumberStrings: ((val.dialectOptions) ? ((val.dialectOptions.bigNumberStrings) ? val.dialectOptions.bigNumberStrings : false) : false),
81
- options: ((val.dialectOptions) ? ((val.dialectOptions.options) ? ({ encrypt: false, ...val.dialectOptions.options }) : { encrypt: false }) : { encrypt: false }),
82
- },
83
-
84
- // disable inserting undefined values as NULL
85
- // - default: false
86
- omitNull: val.omitNull || false,
87
-
88
- // a flag for using a native library or not.
89
- // in the case of 'pg' -- set this to true will allow SSL support
90
- // - default: false
91
- native: val.native || false,
92
-
93
- // Specify options, which are used when sequelize.define is called.
94
- // The following example:
95
- // define: { timestamps: false }
96
- // is basically the same as:
97
- // Model.init(attributes, { timestamps: false });
98
- // sequelize.define(name, attributes, { timestamps: false });
99
- // so defining the timestamps for each model will be not necessary
100
- define: {
101
- underscored: ((val.define) ? ((val.define.underscored) ? val.define.underscored : false) : false),
102
- freezeTableName: ((val.define) ? ((val.define.freezeTableName === false) ? val.define.freezeTableName : true) : true),
103
- charset: ((val.define) ? ((val.define.charset) ? val.define.charset : "utf8") : "utf8"),
104
- dialectOptions: {
105
- collate: ((val.define) ? ((val.define.dialectOptions) ? ((val.define.dialectOptions.timestamps) ? val.define.dialectOptions.timestamps : "utf8_general_ci") : "utf8_general_ci") : "utf8_general_ci"),
106
- },
107
- timestamps: ((val.define) ? ((val.define.timestamps) ? val.define.timestamps : false) : false),
108
- },
109
-
110
- // similar for sync: you can define this to always force sync for models
111
- sync: {
112
- force: ((val.sync) ? ((val.sync.force) ? val.sync.force : false) : false),
113
- },
114
-
115
- // pool configuration used to pool database connections
116
- pool: {
117
- max: ((val.pool) ? ((val.pool.max) ? val.pool.max : 5) : 5),
118
- idle: ((val.pool) ? ((val.pool.idle) ? val.pool.idle : 30000) : 30000),
119
- acquire: ((val.pool) ? ((val.pool.acquire) ? val.pool.acquire : 60000) : 60000),
120
- },
121
-
122
- // isolation level of each transaction
123
- // defaults to dialect default
124
- isolationLevel: val.isolationLevel || "Transaction.ISOLATION_LEVELS.REPEATABLE_READ",
125
-
126
- // JSON response
127
- query: {
128
- raw: ((val.query) ? ((val.query.raw) ? val.query.raw : true) : true),
129
- nest: ((val.query) ? ((val.query.nest) ? val.query.nest : true) : true),
130
- }
131
- });
132
-
133
- // show only one text db connnections
134
- if (headDbShow) {
135
- console.log(' Passed  Database is connected at:');
136
- headDbShow = false;
137
- }
138
-
139
- // checking shout by dialect sql
140
- if (val.dialect == "sqlite") {
141
- // shout for sqlite
142
- console.log('- [' + val.dialect + '] ' + val.name + ' -> ' + sq.options.storage + '');
143
- } else {
144
- // shuout
145
- console.log('- [' + val.dialect + '] ' + val.name + ' -> ' + sq.config.database + ':' + sq.config.port + '');
146
- }
147
-
148
- // connection
149
- await sq.authenticate()
150
- .then(() => {
151
- // create database pool
152
- sql[ val.name ] = sq;
153
- // checking recursive database connection
154
- if (database_config.length > 0) {
155
- connectInProcess(database_config, headDbShow, e => {
156
- cb(e, true);
157
- });
158
- } else {
159
- // perfectly recursive
160
- cb(null, true);
161
- }
162
- })
163
- .catch(err => {
164
- console.error('Unable to connect to the database:', err);
165
- });
166
- });
167
- } else {
168
- if (database_config.length > 0) {
169
- connectInProcess(database_config, headDbShow, e => {
170
- cb(e, true);
171
- });
172
- } else {
173
- // perfectly recursive
174
- cb(null, true);
175
- }
176
- }
177
- } catch (error) {
178
- cb(error, null);
179
- }
1
+ const Sequelize = require('sequelize');
2
+ const { DeHashIt, M, X } = require(__dirname + "/../helpers/math");
3
+ global.sql = {};
4
+
5
+ exports.connect = () => {
6
+ return new Promise((resolve, reject) => {
7
+ try {
8
+ connectInProcess(_config_.database_config, true, (err, result) => {
9
+ if (!err) {
10
+ resolve(result);
11
+ } else {
12
+ reject(err);
13
+ }
14
+ });
15
+ } catch (error) {
16
+ reject(error);
17
+ }
18
+ })
19
+ }
20
+
21
+ connectInProcess = async (database_config, headDbShow, cb) => {
22
+ try {
23
+ let val = database_config.shift();
24
+ // checking turn on db connect
25
+ if (val.is_connect) {
26
+ const promise = new Promise((resolve) => {
27
+ // check hash ?
28
+ if(val.username && val.password) {
29
+ if(val.username.length < 55 || val.password < 55) {
30
+ return cb("Error: Incorrect Hash access for connect to database.\n", null);
31
+ }
32
+ let accessDb = [];
33
+ [val.username, val.password].forEach((e, k) => {
34
+ DeHashIt(e.toString(), null, (17).toString().slice(0, -1).length, (err, d) => {
35
+ if (err) return reject(err);
36
+ accessDb[k] = d.split("sh,")[1].split(M(X).toString().slice(0, 2) + M(X).toString())[0].slice(0, -1);
37
+ if (accessDb[0] !== undefined && accessDb[1] !== undefined) {
38
+ resolve(accessDb);
39
+ }
40
+ });
41
+ });
42
+ } else {
43
+ resolve([null, null]);
44
+ }
45
+ });
46
+ Promise.all([promise]).then(async (final) => {
47
+ const sq = await new Sequelize({
48
+ // one of 'mysql' | 'sqlite' | 'mariadb' | 'postgres' | 'mssql'
49
+ dialect: val.dialect || "mysql",
50
+
51
+ // for postgres, you can also specify an absolute path to a directory
52
+ // containing a UNIX socket to connect over
53
+ // host: '/sockets/psql_sockets'.
54
+ host: (val.host == "localhost" || val.host == "http://localhost") ? "127.0.0.1" : val.host,
55
+ username: final[0][0],
56
+ password: final[0][1],
57
+ database: val.database,
58
+ port: val.port,
59
+
60
+ // set connection timezone
61
+ timezone: val.timezone || "+00:00",
62
+
63
+ // the storage engine for sqlite
64
+ // - default ':memory:'
65
+ storage: val.storage || ":memory:",
66
+
67
+ // custom protocol; default: 'tcp'
68
+ // postgres only, useful for Heroku
69
+ protocol: val.protocol || null,
70
+ // disable logging or provide a custom logging function; default: console.log
71
+ logging: val.logging || false,
72
+
73
+ // you can also pass any dialect options to the underlying dialect library
74
+ // - default is empty
75
+ // - currently supported: 'mysql', 'postgres', 'mssql'
76
+ dialectOptions: {
77
+ socketPath: ((val.dialectOptions) ? ((val.dialectOptions.socketPath) ? val.dialectOptions.socketPath : "") : ""), //Applications/MAMP/tmp/mysql/mysql.sock
78
+ supportBigNumbers: ((val.dialectOptions) ? ((val.dialectOptions.supportBigNumbers) ? val.dialectOptions.supportBigNumbers : false) : false),
79
+ bigNumberStrings: ((val.dialectOptions) ? ((val.dialectOptions.bigNumberStrings) ? val.dialectOptions.bigNumberStrings : false) : false),
80
+ options: ((val.dialectOptions) ? ((val.dialectOptions.options) ? ({ encrypt: false, ...val.dialectOptions.options }) : { encrypt: false }) : { encrypt: false }),
81
+ },
82
+
83
+ // disable inserting undefined values as NULL
84
+ // - default: false
85
+ omitNull: val.omitNull || false,
86
+
87
+ // a flag for using a native library or not.
88
+ // in the case of 'pg' -- set this to true will allow SSL support
89
+ // - default: false
90
+ native: val.native || false,
91
+
92
+ // Specify options, which are used when sequelize.define is called.
93
+ // The following example:
94
+ // define: { timestamps: false }
95
+ // is basically the same as:
96
+ // Model.init(attributes, { timestamps: false });
97
+ // sequelize.define(name, attributes, { timestamps: false });
98
+ // so defining the timestamps for each model will be not necessary
99
+ define: {
100
+ underscored: ((val.define) ? ((val.define.underscored) ? val.define.underscored : false) : false),
101
+ freezeTableName: ((val.define) ? ((val.define.freezeTableName === false) ? val.define.freezeTableName : true) : true),
102
+ charset: ((val.define) ? ((val.define.charset) ? val.define.charset : "utf8") : "utf8"),
103
+ dialectOptions: {
104
+ collate: ((val.define) ? ((val.define.dialectOptions) ? ((val.define.dialectOptions.collate) ? val.define.dialectOptions.collate : "utf8_general_ci") : "utf8_general_ci") : "utf8_general_ci"),
105
+ },
106
+ timestamps: ((val.define) ? ((val.define.timestamps) ? val.define.timestamps : false) : false),
107
+ },
108
+
109
+ // similar for sync: you can define this to always force sync for models
110
+ sync: {
111
+ force: ((val.sync) ? ((val.sync.force) ? val.sync.force : false) : false),
112
+ },
113
+
114
+ // pool configuration used to pool database connections
115
+ pool: {
116
+ max: ((val.pool) ? ((val.pool.max) ? val.pool.max : 5) : 5),
117
+ idle: ((val.pool) ? ((val.pool.idle) ? val.pool.idle : 30000) : 30000),
118
+ acquire: ((val.pool) ? ((val.pool.acquire) ? val.pool.acquire : 60000) : 60000),
119
+ },
120
+
121
+ // isolation level of each transaction
122
+ // defaults to dialect default
123
+ isolationLevel: val.isolationLevel || "Transaction.ISOLATION_LEVELS.REPEATABLE_READ",
124
+
125
+ // JSON response
126
+ query: {
127
+ raw: ((val.query) ? ((val.query.raw) ? val.query.raw : false) : false),
128
+ nest: ((val.query) ? ((val.query.nest) ? val.query.nest : true) : true),
129
+ }
130
+ });
131
+
132
+ // Hook to set `SET NAMES xxx` (ONLY MySQL)
133
+ await sq.addHook('afterConnect', async (connection) => {
134
+ if(val.dialect == "mysql") {
135
+ let charset = ["SET NAMES", ((val.define) ? ((val.define.charset) ? val.define.charset : "utf8") : "utf8")].join(" ");
136
+ connection.query(charset);
137
+ }
138
+ });
139
+
140
+ // show only one text db connnections
141
+ if (headDbShow) {
142
+ console.log(' Passed  Database is connected at:');
143
+ headDbShow = false;
144
+ }
145
+
146
+ // checking shout by dialect sql
147
+ if (val.dialect == "sqlite") {
148
+ // shout for sqlite
149
+ console.log('[/] [' + val.dialect + '] ' + val.name + ' -> ' + sq.options.storage + '');
150
+ } else {
151
+ // shuout for other sql
152
+ console.log('[/] [' + val.dialect + '] ' + val.name + ' -> ' + sq.config.database + ':' + sq.config.port + '');
153
+ }
154
+
155
+ // connection
156
+ await sq.authenticate()
157
+ .then(() => {
158
+ // create database pool
159
+ sql[ val.name ] = sq;
160
+ // checking recursive database connection
161
+ if (database_config.length > 0) {
162
+ connectInProcess(database_config, headDbShow, e => {
163
+ cb(e, true);
164
+ });
165
+ } else {
166
+ // perfectly recursive
167
+ cb(null, true);
168
+ }
169
+ })
170
+ .catch(err => {
171
+ console.log("Unable to connect to the database:", err);
172
+ cb(err, null);
173
+ });
174
+ });
175
+ } else {
176
+ if (database_config.length > 0) {
177
+ connectInProcess(database_config, headDbShow, e => {
178
+ cb(e, true);
179
+ });
180
+ } else {
181
+ // perfectly recursive
182
+ cb(null, true);
183
+ }
184
+ }
185
+ } catch (error) {
186
+ cb(error, null);
187
+ }
180
188
  }