beech-api 3.9.0-beta.9-rc → 3.9.80

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 +1717 -1649
  3. package/index.js +2 -2
  4. package/package.json +92 -84
  5. package/packages/cli/beech +9 -10
  6. package/packages/cli/bin/beech-app.js +390 -390
  7. package/packages/cli/bin/beech-service.js +263 -170
  8. package/packages/cli/core/auth/Credentials.js +174 -174
  9. package/packages/cli/core/auth/Passport.js +664 -664
  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 -188
  23. package/packages/cli/core/databases/test.js +250 -255
  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 +29 -19
  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 +166 -22
  32. package/packages/cli/core/generator/_models +6 -6
  33. package/packages/cli/core/generator/_models_basic +13 -13
  34. package/packages/cli/core/generator/_package +23 -19
  35. package/packages/cli/core/generator/_scheduler +32 -32
  36. package/packages/cli/core/generator/_spec +29 -29
  37. package/packages/cli/core/generator/index.js +1229 -992
  38. package/packages/cli/core/helpers/2fa.js +106 -106
  39. package/packages/cli/core/helpers/math.js +115 -115
  40. package/packages/cli/core/helpers/poolEntity.js +103 -103
  41. package/packages/cli/core/index.js +264 -266
  42. package/packages/cli/core/middleware/express/duplicateRequest.js +16 -16
  43. package/packages/cli/core/middleware/express/jwtCheckAllow.js +85 -85
  44. package/packages/cli/core/middleware/express/rateLimit.js +29 -29
  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 -75
  48. package/packages/cli/core/middleware/origin/whitelist/cors.js +94 -94
  49. package/packages/cli/core/services/http.express.js +481 -481
  50. package/packages/cli/core/test/check-node.js +21 -21
  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 -885
  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 -96
  58. package/packages/lib/src/specificExpress.js +7 -7
  59. package/packages/lib/src/user.js +271 -271
@@ -1,272 +1,272 @@
1
- const md5 = require("md5");
2
- const secret = require("./salt").salt;
3
- const { findPassportPk } = require("../../cli/core/helpers/poolEntity");
4
-
5
- async function FindOne(fields, fieldCondArr, cb) {
6
- try {
7
- const passport_config = require(appRoot + "/passport.config.js");
8
- let stm = '';
9
- let cond = '1=1';
10
- let passportTable = await [passport_config.model.table || "users"];
11
- const pool = await eval("sql." + passport_config.model.name);
12
- let expectFields = await (fields[0]) ? fields : (passport_config.model.fields.length) ? passport_config.model.fields : [];
13
- await findPassportPk(pool_base, pool, passportTable, expectFields, async (err, passportFields) => {
14
- if(err) {
15
- cb(err, null);
16
- } else {
17
- let dynReplacement = [];
18
- // Generate condition
19
- Object.keys(fieldCondArr).forEach(key => {
20
- cond += ` AND ${key} = ?`;
21
- dynReplacement.push(fieldCondArr[key]);
22
- });
23
- // check base pool
24
- if (pool_base == "basic") {
25
- // pool base is MySQL
26
- stm += 'SELECT ?? FROM ?? WHERE ' + cond + ' LIMIT 1;';
27
- await pool.query(stm, [passportFields, passportTable, ...dynReplacement], (err, row) => {
28
- if(err) {
29
- cb(err, null);
30
- } else {
31
- cb(null, row);
32
- }
33
- });
34
- } else if (pool_base == "sequelize") {
35
- // pool base is Sequelize
36
- try {
37
- stm += `SELECT ${passportFields} FROM ${passportTable} WHERE ` + cond;
38
- let result = await pool.query(stm, {
39
- replacements: [...dynReplacement],
40
- type: QueryTypes.SELECT
41
- });
42
- return cb(null, result);
43
- } catch (error) {
44
- if(error.sql) {
45
- delete error.sql;
46
- if(error.parent) {
47
- delete error.parent;
48
- }
49
- if(error.original) {
50
- delete error.original.sql;
51
- }
52
- if(error.parameters) {
53
- delete error.parameters;
54
- }
55
- return cb(error, null);
56
- } else {
57
- return cb(String(error), null);
58
- }
59
- }
60
- } else {
61
- return cb({ error: "The Base pool error. UNKNOWN pool_base = '"+ pool_base +"'" }, null);
62
- }
63
- }
64
- });
65
- } catch (error) {
66
- cb(error, null);
67
- }
68
- }
69
-
70
- async function Store(fields, cb) {
71
- try {
72
- const passport_config = require(appRoot + "/passport.config.js");
73
- let stm = '';
74
- let keys = [];
75
- let escaped = [];
76
- let values = await [passport_config.model.table || "users"];
77
- let usernameField = await String(passport_config.model.username_field || "username");
78
- let passwordField = await String(passport_config.model.password_field || "password");
79
- const pool = await eval("sql." + passport_config.model.name);
80
- // declare for check have a username and password ?
81
- let haveUsernameAndPassword = 0;
82
- // sql generate
83
- await Object.keys(fields).forEach(key => {
84
- // check have a username and password fields
85
- if(key == usernameField) {
86
- haveUsernameAndPassword += 1;
87
- }
88
- if(key == passwordField) {
89
- haveUsernameAndPassword += 1;
90
- // asign pwd hash
91
- fields[passwordField] = md5(fields[passwordField] + secret);
92
- }
93
- keys.push(key);
94
- values.push(fields[key]);
95
- escaped.push('?');
96
- });
97
- if(haveUsernameAndPassword > 1) {
98
- // check base pool
99
- if (pool_base == "basic") {
100
- // pool base is MySQL
101
- stm += 'INSERT INTO ?? (' + keys.join() + ') VALUES (' + escaped.join() + ')';
102
- await pool.query(stm, values, (err, result) => {
103
- if(err) {
104
- let error = JSON.parse(JSON.stringify(err));
105
- delete error.sql;
106
- cb(error, null);
107
- } else {
108
- cb(null, {
109
- insertId: result.insertId,
110
- affectedRows: result.affectedRows,
111
- });
112
- }
113
- });
114
- } else if (pool_base == "sequelize") {
115
- // pool base is Sequelize
116
- try {
117
- stm += `INSERT INTO ${values.shift()} (` + keys.join() + ') VALUES (' + escaped.join() + ')';
118
- let result = await pool.query(stm, {
119
- replacements: values,
120
- type: QueryTypes.INSERT
121
- });
122
- return cb(null, {
123
- insertId: result[0],
124
- affectedRows: result[1]
125
- });
126
- } catch (error) {
127
- if(pool.options.logging) {
128
- return cb(error, null);
129
- } else {
130
- if(error.sql) {
131
- delete error.sql;
132
- if(error.parent) {
133
- delete error.parent;
134
- }
135
- if(error.original) {
136
- delete error.original.sql;
137
- }
138
- if(error.parameters) {
139
- delete error.parameters;
140
- }
141
- return cb(error, null);
142
- } else {
143
- return cb(String(error), null);
144
- }
145
- }
146
- }
147
- } else {
148
- return cb({ error: "The Base pool error. UNKNOWN pool_base = '"+ pool_base +"'" }, null);
149
- }
150
- } else {
151
- cb({ code: "ER_BAD_FIELD_ERROR", message: `You lost some fields ${usernameField} or ${passwordField} ?` }, null);
152
- }
153
- } catch (error) {
154
- cb(`${error}`, null);
155
- }
156
- }
157
-
158
- async function Update(someFields, id, cb) {
159
- try {
160
- const passport_config = require(appRoot + "/passport.config.js");
161
- let stm = '';
162
- let keys = [];
163
- let values = await [passport_config.model.table || "users"];
164
- let passwordField = await String(passport_config.model.password_field || "password");
165
- const pool = await eval("sql." + passport_config.model.name);
166
- // check password body for asign hash
167
- if (someFields[passwordField]) {
168
- someFields[passwordField] = md5(someFields[passwordField] + secret);
169
- }
170
- // sql generate
171
- Object.keys(someFields).forEach(key => {
172
- keys.push(`${key}=?`);
173
- values.push(someFields[key]);
174
- });
175
- values.push(id);
176
- // check base pool
177
- if (pool_base == "basic") {
178
- // pool base is MySQL
179
- pool.query("SHOW KEYS FROM " + values[0] + " WHERE Key_name = 'PRIMARY'", (err, pk) => {
180
- if(err) {
181
- return done(err, null);
182
- } else {
183
- let fieldPk = pk[0].Column_name;
184
- stm += 'UPDATE ?? SET ' + keys.join() + ' WHERE ' + fieldPk + ' = ?';
185
- pool.query(stm, values, (err, result) => {
186
- if(err) {
187
- let error = JSON.parse(JSON.stringify(err));
188
- delete error.sql;
189
- cb(error, null);
190
- } else {
191
- cb(null, {
192
- updateId: (result.changedRows) ? parseInt(id) : null,
193
- affectedRows: result.changedRows
194
- });
195
- }
196
- });
197
- }
198
- });
199
- } else if (pool_base == "sequelize") {
200
- // pool base is Sequelize
201
- try {
202
- pool.query("SHOW KEYS FROM " + values[0] + " WHERE Key_name = 'PRIMARY'", { type: QueryTypes.SELECT }).then((pk) => {
203
- let fieldPk = pk[0].Column_name;
204
- stm += `UPDATE ${values.shift()} SET ` + keys.join() + ' WHERE ' + fieldPk + ' = ?';
205
- pool.query(stm, {
206
- replacements: values,
207
- type: QueryTypes.UPDATE
208
- }).then((result) => {
209
- return cb(null, {
210
- updateId: (result[1]) ? parseInt(id) : null,
211
- affectedRows: result[1],
212
- });
213
- }).catch((error) => {
214
- if(pool.options.logging) {
215
- return cb(error, null);
216
- } else {
217
- if(error.sql) {
218
- delete error.sql;
219
- if(error.errors) {
220
- delete error.errors;
221
- }
222
- if(error.parent) {
223
- delete error.parent;
224
- }
225
- if(error.original) {
226
- delete error.original.sql;
227
- }
228
- if(error.parameters) {
229
- delete error.parameters;
230
- }
231
- return cb(error, null);
232
- } else {
233
- return cb(String(error), null);
234
- }
235
- }
236
- });
237
- }).catch((error) => {
238
- if(pool.options.logging) {
239
- return cb(error, null);
240
- } else {
241
- if(error.sql) {
242
- delete error.sql;
243
- if(error.errors) {
244
- delete error.errors;
245
- }
246
- if(error.parent) {
247
- delete error.parent;
248
- }
249
- if(error.original) {
250
- delete error.original.sql;
251
- }
252
- if(error.parameters) {
253
- delete error.parameters;
254
- }
255
- return cb(error, null);
256
- } else {
257
- return cb(String(error), null);
258
- }
259
- }
260
- });
261
- } catch (error) {
262
- return cb(error, null);
263
- }
264
- } else {
265
- return cb({ error: "The Base pool error. UNKNOWN pool_base = '"+ pool_base +"'" }, null);
266
- }
267
- } catch (error) {
268
- cb(error, null);
269
- }
270
- }
271
-
1
+ const md5 = require("md5");
2
+ const secret = require("./salt").salt;
3
+ const { findPassportPk } = require("../../cli/core/helpers/poolEntity");
4
+
5
+ async function FindOne(fields, fieldCondArr, cb) {
6
+ try {
7
+ const passport_config = require(appRoot + "/passport.config.js");
8
+ let stm = '';
9
+ let cond = '1=1';
10
+ let passportTable = await [passport_config.model.table || "users"];
11
+ const pool = await eval("sql." + passport_config.model.name);
12
+ let expectFields = await (fields[0]) ? fields : (passport_config.model.fields.length) ? passport_config.model.fields : [];
13
+ await findPassportPk(pool_base, pool, passportTable, expectFields, async (err, passportFields) => {
14
+ if(err) {
15
+ cb(err, null);
16
+ } else {
17
+ let dynReplacement = [];
18
+ // Generate condition
19
+ Object.keys(fieldCondArr).forEach(key => {
20
+ cond += ` AND ${key} = ?`;
21
+ dynReplacement.push(fieldCondArr[key]);
22
+ });
23
+ // check base pool
24
+ if (pool_base == "basic") {
25
+ // pool base is MySQL
26
+ stm += 'SELECT ?? FROM ?? WHERE ' + cond + ' LIMIT 1;';
27
+ await pool.query(stm, [passportFields, passportTable, ...dynReplacement], (err, row) => {
28
+ if(err) {
29
+ cb(err, null);
30
+ } else {
31
+ cb(null, row);
32
+ }
33
+ });
34
+ } else if (pool_base == "sequelize") {
35
+ // pool base is Sequelize
36
+ try {
37
+ stm += `SELECT ${passportFields} FROM ${passportTable} WHERE ` + cond;
38
+ let result = await pool.query(stm, {
39
+ replacements: [...dynReplacement],
40
+ type: QueryTypes.SELECT
41
+ });
42
+ return cb(null, result);
43
+ } catch (error) {
44
+ if(error.sql) {
45
+ delete error.sql;
46
+ if(error.parent) {
47
+ delete error.parent;
48
+ }
49
+ if(error.original) {
50
+ delete error.original.sql;
51
+ }
52
+ if(error.parameters) {
53
+ delete error.parameters;
54
+ }
55
+ return cb(error, null);
56
+ } else {
57
+ return cb(String(error), null);
58
+ }
59
+ }
60
+ } else {
61
+ return cb({ error: "The Base pool error. UNKNOWN pool_base = '"+ pool_base +"'" }, null);
62
+ }
63
+ }
64
+ });
65
+ } catch (error) {
66
+ cb(error, null);
67
+ }
68
+ }
69
+
70
+ async function Store(fields, cb) {
71
+ try {
72
+ const passport_config = require(appRoot + "/passport.config.js");
73
+ let stm = '';
74
+ let keys = [];
75
+ let escaped = [];
76
+ let values = await [passport_config.model.table || "users"];
77
+ let usernameField = await String(passport_config.model.username_field || "username");
78
+ let passwordField = await String(passport_config.model.password_field || "password");
79
+ const pool = await eval("sql." + passport_config.model.name);
80
+ // declare for check have a username and password ?
81
+ let haveUsernameAndPassword = 0;
82
+ // sql generate
83
+ await Object.keys(fields).forEach(key => {
84
+ // check have a username and password fields
85
+ if(key == usernameField) {
86
+ haveUsernameAndPassword += 1;
87
+ }
88
+ if(key == passwordField) {
89
+ haveUsernameAndPassword += 1;
90
+ // asign pwd hash
91
+ fields[passwordField] = md5(fields[passwordField] + secret);
92
+ }
93
+ keys.push(key);
94
+ values.push(fields[key]);
95
+ escaped.push('?');
96
+ });
97
+ if(haveUsernameAndPassword > 1) {
98
+ // check base pool
99
+ if (pool_base == "basic") {
100
+ // pool base is MySQL
101
+ stm += 'INSERT INTO ?? (' + keys.join() + ') VALUES (' + escaped.join() + ')';
102
+ await pool.query(stm, values, (err, result) => {
103
+ if(err) {
104
+ let error = JSON.parse(JSON.stringify(err));
105
+ delete error.sql;
106
+ cb(error, null);
107
+ } else {
108
+ cb(null, {
109
+ insertId: result.insertId,
110
+ affectedRows: result.affectedRows,
111
+ });
112
+ }
113
+ });
114
+ } else if (pool_base == "sequelize") {
115
+ // pool base is Sequelize
116
+ try {
117
+ stm += `INSERT INTO ${values.shift()} (` + keys.join() + ') VALUES (' + escaped.join() + ')';
118
+ let result = await pool.query(stm, {
119
+ replacements: values,
120
+ type: QueryTypes.INSERT
121
+ });
122
+ return cb(null, {
123
+ insertId: result[0],
124
+ affectedRows: result[1]
125
+ });
126
+ } catch (error) {
127
+ if(pool.options.logging) {
128
+ return cb(error, null);
129
+ } else {
130
+ if(error.sql) {
131
+ delete error.sql;
132
+ if(error.parent) {
133
+ delete error.parent;
134
+ }
135
+ if(error.original) {
136
+ delete error.original.sql;
137
+ }
138
+ if(error.parameters) {
139
+ delete error.parameters;
140
+ }
141
+ return cb(error, null);
142
+ } else {
143
+ return cb(String(error), null);
144
+ }
145
+ }
146
+ }
147
+ } else {
148
+ return cb({ error: "The Base pool error. UNKNOWN pool_base = '"+ pool_base +"'" }, null);
149
+ }
150
+ } else {
151
+ cb({ code: "ER_BAD_FIELD_ERROR", message: `You lost some fields ${usernameField} or ${passwordField} ?` }, null);
152
+ }
153
+ } catch (error) {
154
+ cb(`${error}`, null);
155
+ }
156
+ }
157
+
158
+ async function Update(someFields, id, cb) {
159
+ try {
160
+ const passport_config = require(appRoot + "/passport.config.js");
161
+ let stm = '';
162
+ let keys = [];
163
+ let values = await [passport_config.model.table || "users"];
164
+ let passwordField = await String(passport_config.model.password_field || "password");
165
+ const pool = await eval("sql." + passport_config.model.name);
166
+ // check password body for asign hash
167
+ if (someFields[passwordField]) {
168
+ someFields[passwordField] = md5(someFields[passwordField] + secret);
169
+ }
170
+ // sql generate
171
+ Object.keys(someFields).forEach(key => {
172
+ keys.push(`${key}=?`);
173
+ values.push(someFields[key]);
174
+ });
175
+ values.push(id);
176
+ // check base pool
177
+ if (pool_base == "basic") {
178
+ // pool base is MySQL
179
+ pool.query("SHOW KEYS FROM " + values[0] + " WHERE Key_name = 'PRIMARY'", (err, pk) => {
180
+ if(err) {
181
+ return done(err, null);
182
+ } else {
183
+ let fieldPk = pk[0].Column_name;
184
+ stm += 'UPDATE ?? SET ' + keys.join() + ' WHERE ' + fieldPk + ' = ?';
185
+ pool.query(stm, values, (err, result) => {
186
+ if(err) {
187
+ let error = JSON.parse(JSON.stringify(err));
188
+ delete error.sql;
189
+ cb(error, null);
190
+ } else {
191
+ cb(null, {
192
+ updateId: (result.changedRows) ? parseInt(id) : null,
193
+ affectedRows: result.changedRows
194
+ });
195
+ }
196
+ });
197
+ }
198
+ });
199
+ } else if (pool_base == "sequelize") {
200
+ // pool base is Sequelize
201
+ try {
202
+ pool.query("SHOW KEYS FROM " + values[0] + " WHERE Key_name = 'PRIMARY'", { type: QueryTypes.SELECT }).then((pk) => {
203
+ let fieldPk = pk[0].Column_name;
204
+ stm += `UPDATE ${values.shift()} SET ` + keys.join() + ' WHERE ' + fieldPk + ' = ?';
205
+ pool.query(stm, {
206
+ replacements: values,
207
+ type: QueryTypes.UPDATE
208
+ }).then((result) => {
209
+ return cb(null, {
210
+ updateId: (result[1]) ? parseInt(id) : null,
211
+ affectedRows: result[1],
212
+ });
213
+ }).catch((error) => {
214
+ if(pool.options.logging) {
215
+ return cb(error, null);
216
+ } else {
217
+ if(error.sql) {
218
+ delete error.sql;
219
+ if(error.errors) {
220
+ delete error.errors;
221
+ }
222
+ if(error.parent) {
223
+ delete error.parent;
224
+ }
225
+ if(error.original) {
226
+ delete error.original.sql;
227
+ }
228
+ if(error.parameters) {
229
+ delete error.parameters;
230
+ }
231
+ return cb(error, null);
232
+ } else {
233
+ return cb(String(error), null);
234
+ }
235
+ }
236
+ });
237
+ }).catch((error) => {
238
+ if(pool.options.logging) {
239
+ return cb(error, null);
240
+ } else {
241
+ if(error.sql) {
242
+ delete error.sql;
243
+ if(error.errors) {
244
+ delete error.errors;
245
+ }
246
+ if(error.parent) {
247
+ delete error.parent;
248
+ }
249
+ if(error.original) {
250
+ delete error.original.sql;
251
+ }
252
+ if(error.parameters) {
253
+ delete error.parameters;
254
+ }
255
+ return cb(error, null);
256
+ } else {
257
+ return cb(String(error), null);
258
+ }
259
+ }
260
+ });
261
+ } catch (error) {
262
+ return cb(error, null);
263
+ }
264
+ } else {
265
+ return cb({ error: "The Base pool error. UNKNOWN pool_base = '"+ pool_base +"'" }, null);
266
+ }
267
+ } catch (error) {
268
+ cb(error, null);
269
+ }
270
+ }
271
+
272
272
  module.exports = { Store, Update, FindOne };