beech-api 3.5.12 → 3.7.23

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 (66) hide show
  1. package/README.md +400 -185
  2. package/index.js +2 -3
  3. package/package.json +9 -5
  4. package/packages/cli/beech +2 -2
  5. package/packages/cli/bin/{beech.js → beech-app.js} +86 -28
  6. package/packages/cli/bin/beech-service.js +40 -212
  7. package/packages/cli/core/auth/Credentials.js +76 -35
  8. package/packages/cli/core/auth/Passport.js +318 -188
  9. package/packages/cli/core/auth/_Request.js +12 -0
  10. package/packages/cli/core/configure/_gitignore +9 -1
  11. package/packages/cli/core/configure/app.config-basic.js +10 -10
  12. package/packages/cli/core/configure/app.config-sequelize.js +12 -12
  13. package/packages/cli/core/configure/beech.config.js +8 -0
  14. package/packages/cli/core/configure/global.config-basic.js +4 -4
  15. package/packages/cli/core/configure/global.config-sequelize.js +4 -4
  16. package/packages/cli/core/configure/passport.config.js +5 -15
  17. package/packages/cli/core/databases/mysql.js +53 -29
  18. package/packages/cli/core/databases/sequelize.js +135 -107
  19. package/packages/cli/core/databases/test.js +168 -0
  20. package/packages/cli/core/file-walk/file-walk.js +31 -14
  21. package/packages/cli/core/generator/_add-on +15 -2
  22. package/packages/cli/core/generator/_endpoints +15 -82
  23. package/packages/cli/core/generator/_endpoints_basic +39 -0
  24. package/packages/cli/core/generator/_help +12 -11
  25. package/packages/cli/core/generator/_help_create +11 -0
  26. package/packages/cli/core/generator/{_service → _help_service} +4 -1
  27. package/packages/cli/core/generator/_models +20 -15
  28. package/packages/cli/core/generator/{_basic-models → _models_basic} +0 -2
  29. package/packages/cli/core/generator/_package +4 -3
  30. package/packages/cli/core/generator/index.js +302 -95
  31. package/packages/cli/core/helpers/math.js +55 -0
  32. package/packages/cli/core/helpers/poolEntity.js +31 -0
  33. package/packages/cli/core/index.js +96 -28
  34. package/packages/cli/core/origin/index.js +2 -0
  35. package/packages/cli/core/origin/whitelist/cors.js +91 -0
  36. package/packages/cli/core/services/http.express.js +338 -203
  37. package/packages/cli/core/test/utils.js +5 -5
  38. package/packages/lib/index.js +4 -0
  39. package/packages/lib/src/endpoint.js +98 -0
  40. package/packages/lib/src/salt.js +3 -0
  41. package/packages/lib/src/schema.js +62 -0
  42. package/packages/lib/src/user.js +196 -0
  43. package/packages/cli/core/generator/_create +0 -7
  44. package/packages/lib/beech.js +0 -136
  45. package/packages/lib/salt.js +0 -3
  46. package/packages/package.json +0 -20
  47. package/packages/src-/Add-on.js +0 -9
  48. package/packages/src-/endpoints/hello-endpoints.js +0 -118
  49. package/packages/src-/endpoints/test2-endpoints.js +0 -75
  50. package/packages/src-/endpoints/testSequalize-endpoints.js +0 -23
  51. package/packages/src-/helpers/Test2.js +0 -11
  52. package/packages/src-/helpers/my/Test.js +0 -11
  53. package/packages/src-/helpers/my/Test2.js +0 -11
  54. package/packages/src-/helpers/my/Test3.js +0 -11
  55. package/packages/src-/helpers/my/Test4.js +0 -11
  56. package/packages/src-/models/Jubu.js +0 -29
  57. package/packages/src-/models/Jubu2.js +0 -20
  58. package/packages/src-/models/Map_master.js +0 -22
  59. package/packages/src-/models/Test.js +0 -29
  60. package/packages/src-/models/Test2.js +0 -29
  61. package/packages/src-/models/User2Sequelize.js +0 -23
  62. package/packages/src-/models/Users-sqlite.js +0 -21
  63. package/packages/src-/models/Users.js +0 -53
  64. package/packages/src-/models/Uuuuuxxx.js +0 -23
  65. package/packages/src-/models/xxx/Uuuuuxxx.js +0 -23
  66. /package/packages/cli/core/generator/{_basic-helpers → _helpers_basic} +0 -0
@@ -1,5 +1,5 @@
1
- const fs = require("fs");
2
1
  const appRoot = require("app-root-path");
2
+ const { performance } = require("perf_hooks");
3
3
  const moduleAlias = require("module-alias");
4
4
  moduleAlias.addAlias("@", appRoot + "/src");
5
5
  const _express_ = require("express");
@@ -8,6 +8,7 @@ const cors = require("cors");
8
8
  global.endpoint = _express_.Router();
9
9
  const cookieParser = require("cookie-parser");
10
10
  const bodyParser = require("body-parser");
11
+ const methodOverride = require("method-override");
11
12
  const expressSession = require("express-session");
12
13
  const expressValidator = require("express-validator");
13
14
  const globalVariable = require(appRoot + "/global.config.js");
@@ -16,33 +17,46 @@ globalVariable.init();
16
17
  global._config_ = require(appRoot + "/app.config");
17
18
  const mySqlDbConnect = require("./databases/mysql");
18
19
  const SequelizeDbConnect = require("./databases/sequelize");
20
+ // database test
21
+ const {
22
+ testConnectInProcess,
23
+ filterDbIsTrue,
24
+ disConnectTestDB,
25
+ } = require("./databases/test");
19
26
  // create global sequelize object
20
27
  const { QueryTypes, DataTypes, Op } = require("sequelize");
21
28
  global.QueryTypes = QueryTypes;
22
29
  global.DataTypes = DataTypes;
23
30
  global.Op = Op;
24
- // engine import
25
- const httpExpress = require("./services/http.express");
26
- const fileWalk = require("./file-walk/file-walk");
31
+ // allow whitelist cors
32
+ _app_.use(cors({ origin: true, credentials: true }));
33
+ const { whitelist, sign } = require("./origin/index");
27
34
  // View engine
28
35
  _app_.use(bodyParser.json());
29
36
  _app_.use(bodyParser.urlencoded({ extended: true }));
37
+ _app_.use(methodOverride());
30
38
  _app_.use(cookieParser());
31
- _app_.use(expressSession({
32
- secret: 'keyboard cat',
33
- resave: true,
34
- saveUninitialized: true
35
- }));
39
+ _app_.use(
40
+ expressSession({
41
+ secret: "surprise you mother f*cker",
42
+ resave: true,
43
+ saveUninitialized: true,
44
+ })
45
+ );
36
46
  _app_.use(expressValidator());
37
- _app_.use(cors({ origin: true, credentials: true }));
38
- // Allow Origin
39
- _app_.all("/", (req, res, next) => {
40
- res.header("Access-Control-Allow-Origin", "*");
41
- res.header("Access-Control-Allow-Headers", "X-Requested-With");
42
- res.header("Access-Control-Allow-Methods", "GET, PUT, PATCH, POST, DELETE, OPTIONS");
43
- res.header("Content-Type", "application/json; charset=utf-8");
47
+ // Dev. activity
48
+ _app_.use((req, res, next) => {
49
+ console.log("Request URL:", req.method, req.originalUrl);
50
+ var t0 = performance.now();
51
+ res.on("finish", () => {
52
+ var t1 = performance.now();
53
+ console.log(`Responded with status : ${res.statusCode} (${(t1 - t0).toFixed(2)}ms)`);
54
+ });
44
55
  next();
45
56
  });
57
+ // engine import
58
+ const httpExpress = require("./services/http.express");
59
+ const fileWalk = require("./file-walk/file-walk");
46
60
  // passport initialization
47
61
  const authPassport = require("./auth/Passport");
48
62
  const passport = require("passport");
@@ -58,12 +72,6 @@ passport.deserializeUser((user, done) => {
58
72
  const walk = require("walk");
59
73
  let jsfiles = [];
60
74
  let walker = walk.walk(appRoot + "/src/endpoints", { followLinks: false });
61
- // check add-on file exists ?
62
- if (fs.existsSync(appRoot + "/src/Add-on.js")) {
63
- if (_config_.addOn) {
64
- jsfiles.push(appRoot + "/src/Add-on.js");
65
- }
66
- }
67
75
  // Walk file on push
68
76
  walker.on("file", (root, stat, next) => {
69
77
  jsfiles.push(root + "/" + stat.name);
@@ -76,14 +84,74 @@ walker.on("end", () => {
76
84
  // Initialize the application
77
85
  init = async (jsfiles) => {
78
86
  try {
79
- await ((pool_base == "basic") ? new Promise((resolve) => resolve(mySqlDbConnect.connect())) : new Promise((resolve) => resolve(SequelizeDbConnect.connect())));
80
- await new Promise((resolve) => resolve(authPassport.init()));
81
- await new Promise((resolve) => resolve(fileWalk.fileWalk(jsfiles)));
82
- await new Promise((resolve) => resolve(httpExpress.expressStart()));
87
+ const testConnectToDB = new Promise((resolve) => {
88
+ filterDbIsTrue(_config_.database_config, (err, dbTruthy) => {
89
+ if (err) {
90
+ throw ("Config file crash.", err);
91
+ }
92
+ // leave data to disconnect database
93
+ let leaveDataForDisconnect = dbTruthy.slice(0);
94
+ // check db connect truthy length ?
95
+ if (dbTruthy.length > 0) {
96
+ testConnectInProcess(dbTruthy, dbTruthy.length, (err, result, dbs) => {
97
+ if (err) {
98
+ throw (" Failed  Database connect failed.", err);
99
+ }
100
+ if (result) {
101
+ // Disconnect database
102
+ disConnectTestDB(leaveDataForDisconnect, dbs, (err, disResult) => {
103
+ if (err) {
104
+ throw (" Failed  Testing Database connect failed.", err);
105
+ }
106
+ if (disResult) {
107
+ // Disconnect and Next to real
108
+ resolve(true);
109
+ } else {
110
+ throw err;
111
+ }
112
+ });
113
+ }
114
+ });
115
+ } else {
116
+ // Not ON connect, Next to real
117
+ resolve(true);
118
+ }
119
+ });
120
+ });
121
+ Promise.all([testConnectToDB]).then(async (x) => {
122
+ if (x[0]) {
123
+ await (pool_base == "basic"
124
+ ? new Promise((resolve) => resolve(mySqlDbConnect.connect()))
125
+ : new Promise((resolve) => resolve(SequelizeDbConnect.connect())));
126
+ await whitelist(async (lists, originSensitive) => {
127
+ await _app_.use((req, res, next) => {
128
+ sign(req, res, lists, originSensitive, (err) => {
129
+ if (!err) {
130
+ next();
131
+ } else {
132
+ throw err;
133
+ }
134
+ });
135
+ });
136
+ await authPassport.init().then(async (x) => {
137
+ if (x[0]) {
138
+ throw x[0];
139
+ } else {
140
+ await new Promise((resolve) => resolve(fileWalk.fileWalk(jsfiles)));
141
+ await new Promise((resolve) => {
142
+ httpExpress.expressStart().then((expss) => {
143
+ resolve(expss);
144
+ });
145
+ });
146
+ }
147
+ });
148
+ });
149
+ }
150
+ });
83
151
  } catch (error) {
84
152
  console.log(" Compile failed ", error);
85
153
  throw error;
86
154
  }
87
- }
155
+ };
88
156
  // use router
89
- _app_.use(endpoint);
157
+ _app_.use(endpoint);
@@ -0,0 +1,2 @@
1
+ const { whitelist, sign } = require("./whitelist/cors");
2
+ module.exports = { whitelist, sign };
@@ -0,0 +1,91 @@
1
+ const fs = require("fs");
2
+ const appRoot = require("app-root-path");
3
+ function whitelist(cb) {
4
+ var whitelists = [];
5
+ const getWhitelists = new Promise((resolve) => {
6
+ if (fs.existsSync(appRoot + "/beech.config.js")) {
7
+ fs.readFile(appRoot + "/beech.config.js", "utf8", (err, e) => {
8
+ if (!err) {
9
+ let defineConfig = eval(e).defineConfig;
10
+ let origin = defineConfig.server.origin;
11
+ let originSensitive = defineConfig.server.originSensitive;
12
+ let allAllow = origin.filter((allow) => {
13
+ return allow == "*";
14
+ });
15
+ if (allAllow.length) {
16
+ resolve([whitelists, originSensitive]);
17
+ } else {
18
+ resolve([origin, originSensitive]);
19
+ }
20
+ } else {
21
+ // error resolve default whitelist
22
+ resolve([whitelists, originSensitive]);
23
+ }
24
+ });
25
+ } else {
26
+ resolve([whitelists, originSensitive]);
27
+ }
28
+ });
29
+ // promise all
30
+ Promise.all([getWhitelists]).then((final) => {
31
+ cb(final[0][0], final[0][1]);
32
+ });
33
+ }
34
+
35
+ function sign(req, res, whitelist, originSensitive, cb) {
36
+ try {
37
+ const origin = req.headers.origin;
38
+ let doYouSignSomeOrigin = false;
39
+ //var host = req.get("host");
40
+ console.log("Request from origin:", origin || "localhost");
41
+
42
+ if (whitelist.length > 0) {
43
+ whitelist.forEach((val, k) => {
44
+ if (origin) {
45
+ if (origin.indexOf(val) > -1) {
46
+ doYouSignSomeOrigin = true;
47
+ if (originSensitive) {
48
+ res.setHeader("Access-Control-Allow-Origin", val);
49
+ } else {
50
+ res.setHeader("Access-Control-Allow-Origin", origin);
51
+ }
52
+ }
53
+ }
54
+ if (whitelist.length == k + 1) {
55
+ if (!doYouSignSomeOrigin) {
56
+ res.setHeader(
57
+ "Access-Control-Allow-Origin",
58
+ "http://localhost:" + _config_.main_config.app_port
59
+ );
60
+ }
61
+ }
62
+ });
63
+ } else {
64
+ res.setHeader("Access-Control-Allow-Origin", origin);
65
+ }
66
+ // Request methods you wish to allow
67
+ res.setHeader(
68
+ "Access-Control-Allow-Methods",
69
+ "GET, POST, OPTIONS, PUT, PATCH, DELETE"
70
+ );
71
+ // Request headers you wish to allow
72
+ res.setHeader(
73
+ "Access-Control-Allow-Headers",
74
+ "X-Requested-With",
75
+ "Content-Type",
76
+ "Accept",
77
+ "Authorization",
78
+ "Origin",
79
+ "application/json; charset=utf-8"
80
+ );
81
+ // Set to true if you need the website to include cookies in the requests sent
82
+ // to the API (e.g. in case you use sessions)
83
+ res.setHeader("Access-Control-Allow-Credentials", true);
84
+ // callback
85
+ cb(null);
86
+ } catch (error) {
87
+ cb(error);
88
+ }
89
+ }
90
+
91
+ module.exports = { whitelist, sign };