@rpcbase/server 0.50.0 → 0.53.0

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.
package/cli/run_docker.js CHANGED
@@ -10,7 +10,7 @@ const run_docker = async(infrastructure_dir, proj_prefix) => {
10
10
 
11
11
  // compose files
12
12
  const compose_files = ["-f common.yml"]
13
- if (is_production)) {
13
+ if (is_production) {
14
14
  compose_files.push("-f prod.yml")
15
15
  }
16
16
  else compose_files.push("-f dev.yml")
package/cli/run_native.js CHANGED
@@ -1,6 +1,6 @@
1
1
  /* @flow */
2
2
  const {spawn} = require("child_process")
3
- const dotenv = require("dotenv")
3
+ // const dotenv = require("dotenv")
4
4
  const path = require("path")
5
5
  const fs = require("fs")
6
6
 
@@ -20,20 +20,18 @@ const run_processes = [
20
20
  ]],
21
21
  ]
22
22
 
23
-
24
-
25
- const get_env = () => {
26
- const env_path = path.join(process.cwd(), ".env")
27
- const env_buf = fs.readFileSync(env_path)
28
- const env = dotenv.parse(env_buf)
29
- return env
30
- }
23
+ // const get_env = () => {
24
+ // const env_path = path.join(process.cwd(), ".env")
25
+ // const env_buf = fs.readFileSync(env_path)
26
+ // const env = dotenv.parse(env_buf)
27
+ // return env
28
+ // }
31
29
 
32
30
 
33
31
 
34
32
  const run_native = (infrastructure_dir, proj_prefix) => {
35
33
  console.log("native mode")
36
- const env = get_env()
34
+ // const env = get_env()
37
35
 
38
36
  const ps = spawn("ls", ["-la"])
39
37
  ps.stdout.on("data", (data) => {
package/express/index.js CHANGED
@@ -3,13 +3,13 @@ const cors = require("cors")
3
3
  const express = require("express")
4
4
  const body_parser = require("body-parser")
5
5
 
6
- const get_session_middleware = require("./get_session_middleware")
6
+ const session_middleware = require("./session_middleware")
7
7
 
8
8
  const is_production = process.env.IS_PRODUCTION === "yes"
9
9
  const {APP_DOMAIN, CLIENT_PORT} = process.env
10
10
 
11
11
 
12
- module.exports = async() => {
12
+ module.exports = () => {
13
13
  const app = express()
14
14
  app.use(body_parser.json({limit: "2mb"}))
15
15
 
@@ -50,7 +50,6 @@ module.exports = async() => {
50
50
  credentials: true // enable set-cookie
51
51
  }))
52
52
 
53
- const session_middleware = await get_session_middleware()
54
53
  app.use(session_middleware)
55
54
 
56
55
  app.get("/api/ping", (req, res) => res.json({message: "pong"}))
@@ -0,0 +1,76 @@
1
+ /* @flow */
2
+ const session = require("express-session")
3
+ const validator = require("validator")
4
+ const {createClient} = require("redis")
5
+ const redis_store = require("connect-redis")(session)
6
+
7
+ // WARNING:
8
+ // https://stackoverflow.com/questions/70867229/error-connection-timeout-when-connecting-to-redis-docker-instance
9
+ // https://github.com/redis/node-redis/issues/1656/
10
+
11
+ const {SESSION_STORE_PORT} = process.env
12
+
13
+ if (typeof SESSION_STORE_PORT === "string" && !validator.isPort(SESSION_STORE_PORT)) {
14
+ throw new Error("expected SESSION_STORE_PORT to be a valid port number")
15
+ }
16
+
17
+ let session_middleware = null
18
+
19
+ // extreme warning: when there is blocking io redis client won't connect
20
+ // process.nextTick(async() => {
21
+ setTimeout(async() => {
22
+ if (!SESSION_STORE_PORT) {
23
+ return
24
+ }
25
+
26
+ const reconnectStrategy = (retries) => {
27
+ console.log("redis_client::reconnectStrategy::retrying with arg", retries)
28
+ if (retries < 5) {
29
+ console.log("retry count:", retries, "retrying in 1s")
30
+ return 4000
31
+ } else {
32
+ return new Error("max retries expiered")
33
+ }
34
+ }
35
+
36
+ const redis_client = createClient({
37
+ socket: {
38
+ host: "session-store",
39
+ port: SESSION_STORE_PORT,
40
+ reconnectStrategy,
41
+ connectTimeout: 10000,
42
+ keepAlive: 0,
43
+ },
44
+ legacyMode: true,
45
+ })
46
+
47
+
48
+ redis_client.on("ready", () => {
49
+ console.log("session-storage::redis_client connected")
50
+ })
51
+
52
+ const res = await redis_client.connect()
53
+
54
+ session_middleware = session({
55
+ store: new redis_store({client: redis_client}),
56
+ proxy: true,
57
+ saveUninitialized: false,
58
+ // TODO: use session secret from env
59
+ secret: "session secret wowow",
60
+ resave: false,
61
+ })
62
+
63
+ }, 500)
64
+
65
+
66
+ module.exports = (req, res, next) => {
67
+ if (!SESSION_STORE_PORT) {
68
+ return next()
69
+ }
70
+
71
+ if (session_middleware) {
72
+ session_middleware(req, res, next)
73
+ } else {
74
+ console.warn("session middleware not set yet")
75
+ }
76
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@rpcbase/server",
3
- "version": "0.50.0",
3
+ "version": "0.53.0",
4
4
  "license": "SSPL-1.0",
5
5
  "main": "./index.js",
6
6
  "bin": {
@@ -14,14 +14,13 @@
14
14
  "connect-redis": "6.1.3",
15
15
  "cors": "2.8.5",
16
16
  "debug": "4.3.4",
17
- "dotenv": "16.0.0",
18
17
  "express": "4.18.1",
19
- "express-session": "1.17.2",
20
- "glob": "8.0.1",
21
- "mongoose": "6.3.2",
18
+ "express-session": "1.17.3",
19
+ "glob": "8.0.3",
20
+ "mongoose": "6.3.3",
22
21
  "postmark": "3.0.1",
23
22
  "redis": "4.1.0",
24
23
  "validator": "13.7.0",
25
- "yargs": "17.4.1"
24
+ "yargs": "17.5.1"
26
25
  }
27
26
  }
@@ -1,75 +0,0 @@
1
- /* @flow */
2
- const session = require("express-session")
3
- const validator = require("validator")
4
- const {createClient} = require("redis")
5
- const redis_store = require("connect-redis")(session)
6
-
7
- // WARNING:
8
- // https://stackoverflow.com/questions/70867229/error-connection-timeout-when-connecting-to-redis-docker-instance
9
- // https://github.com/redis/node-redis/issues/1656/
10
-
11
- const {SESSION_STORE_PORT, SESSION_STORE_HOST} = process.env
12
-
13
-
14
- // extreme warning: when there is blocking io redis client won't connect
15
- // process.nextTick(() => {
16
- // redis_client.connect()
17
- // .catch((err) => {
18
- // console.log("session store error ohh", err)
19
- // })
20
- // .then(() => {
21
- // console.log("redis session-store connected port:", SESSION_STORE_PORT)
22
- // })
23
- // })
24
-
25
-
26
- module.exports = () => new Promise((resolve, reject) => {
27
-
28
- if (!SESSION_STORE_PORT) {
29
- return resolve((req, res, next) => next())
30
- }
31
-
32
- if (typeof SESSION_STORE_PORT === "string" && !validator.isPort(SESSION_STORE_PORT)) {
33
- throw new Error("expected SESSION_STORE_PORT to be a valid port number")
34
- }
35
-
36
- setTimeout(async() => {
37
- const reconnectStrategy = (retries) => {
38
- console.log("redis_client::reconnectStrategy::retrying with arg", retries)
39
- if (retries < 5) {
40
- console.log("retry count:", retries, "retrying in 1s")
41
- return 4000
42
- } else {
43
- return new Error("max retries expiered")
44
- }
45
- }
46
-
47
- const redis_client = createClient({
48
- socket: {
49
- host: SESSION_STORE_HOST,
50
- port: SESSION_STORE_PORT,
51
- reconnectStrategy,
52
- connectTimeout: 10000,
53
- keepAlive: 0,
54
- },
55
- legacyMode: true,
56
- })
57
-
58
- console.log("redis session willconnect")
59
- await redis_client.connect()
60
- console.log("redis session connected")
61
-
62
- const session_middleware = session({
63
- store: new redis_store({client: redis_client}),
64
- proxy: true,
65
- saveUninitialized: false,
66
- // TODO: use session secret from env
67
- secret: "session secret wowow",
68
- resave: false,
69
- })
70
-
71
- resolve(session_middleware)
72
-
73
- }, 100)
74
-
75
- })