@live-change/server 0.1.7 → 0.1.11

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/lib/Services.js CHANGED
@@ -1,3 +1,4 @@
1
+ const { def } = require('@vue/shared')
1
2
  const fs = require('fs')
2
3
  const path = require('path')
3
4
  const resolve = require('util').promisify(require('resolve'))
@@ -5,7 +6,7 @@ const app = require("@live-change/framework").app()
5
6
 
6
7
  class Services {
7
8
  constructor(configPath) {
8
- if(!configPath) throw new Error("services config parameter is required")
9
+ if(!configPath) throw new Error("services config parameter is required")
9
10
  this.configPath = path.resolve(configPath)
10
11
  this.config = require(path.resolve(this.configPath))
11
12
  this.servicesDir = path.dirname(this.configPath)
@@ -21,7 +22,7 @@ class Services {
21
22
  return path
22
23
  }
23
24
  async getServiceEntryFile(config) {
24
- const path = await resolve(config.path, { basedir: this.servicesDir })
25
+ const path = await resolve(config.path, { basedir: this.servicesDir })
25
26
  console.log("PATH RESOLVE", config.path, "IN", this.servicesDir, "=>", path)
26
27
  return path
27
28
  }
@@ -104,7 +105,10 @@ class Services {
104
105
 
105
106
  async update() {
106
107
  await Promise.all(this.serviceDefinitions.map(defn => {
107
- app.processServiceDefinition(defn, [ ...app.defaultProcessors ])
108
+ if(!defn.processed) {
109
+ app.processServiceDefinition(defn, [ ...app.defaultProcessors ])
110
+ defn.processed = true
111
+ }
108
112
  return app.updateService(defn)
109
113
  }))
110
114
  }
@@ -112,7 +116,10 @@ class Services {
112
116
  async start(startOptions) {
113
117
  await Promise.all(this.plugins.map(plugin => plugin(app, this)))
114
118
  this.services = await Promise.all(this.serviceDefinitions.map(defn => {
115
- app.processServiceDefinition(defn, [ ...app.defaultProcessors ])
119
+ if(!defn.processed) {
120
+ app.processServiceDefinition(defn, [ ...app.defaultProcessors ])
121
+ defn.processed = true
122
+ }
116
123
  return app.startService(defn, startOptions)
117
124
  }))
118
125
  }
package/lib/SsrServer.js CHANGED
@@ -1,9 +1,10 @@
1
1
  const cookie = require('cookie')
2
2
  const path = require('path')
3
3
  const serveStatic = require('serve-static')
4
+ const crypto = require('crypto')
4
5
 
5
6
  const serverDao = require('@live-change/vue3-ssr/serverDao.js')
6
- const generateUuid = require('@live-change/vue3-ssr/generateUuid.js')
7
+ const { hashCode, encodeNumber, uidGenerator } = require('@live-change/uid')
7
8
  const getIp = require('@live-change/vue3-ssr/getIp.js')
8
9
 
9
10
  const Renderer = require('./Renderer.js')
@@ -17,6 +18,10 @@ class SsrServer {
17
18
  this.express = express
18
19
  this.renderer = new Renderer(manifest, settings)
19
20
 
21
+ this.instanceId = encodeNumber(hashCode(
22
+ `ssr${process.pid}${require("os").hostname()} ${process.cwd()}/${process.argv.join(' ')}`))
23
+ this.uidGenerator = uidGenerator(this.instanceId, 1)
24
+
20
25
  this.root = this.settings.root || process.cwd()
21
26
  }
22
27
 
@@ -36,24 +41,25 @@ class SsrServer {
36
41
  async setupSsr() {
37
42
  const readCredentials = this.settings.readCredentials || ((req) => {
38
43
  const cookies = cookie.parse(req.headers.cookie || '')
39
- return { sessionKey: cookies.sessionKey || generateUuid() }
44
+ return { sessionKey: cookies.sessionKey || crypto.randomBytes(64).toString('base64').slice(0, 48) }
40
45
  })
41
46
  const writeCredentials = this.settings.writeCredentials || ((res, credentials) => {
42
- console.log("WRC!!!")
47
+ //console.log("WRITE CREDENTIALS", credentials)
43
48
  const cookieExpireDate =
44
49
  this.settings.sessionExpires ? new Date(Date.now() + this.settings.sessionExpires).toUTCString() : null
45
- res.set({
46
- 'Content-Type': 'text/html',
47
- 'Set-Cookie': `sessionKey=${credentials.sessionKey}; path=/`
48
- + cookieExpireDate ? `; expires=${cookieExpireDate}` : ''
49
- })
50
+ if(credentials.sessionKey) {
51
+ res.set({
52
+ 'Set-Cookie': `sessionKey=${credentials.sessionKey}; Path=/`
53
+ + (cookieExpireDate ? `; Expires=${cookieExpireDate}` : '')
54
+ })
55
+ }
50
56
  })
51
57
  this.express.use('*', async (req, res) => {
52
58
  const url = req.originalUrl
53
59
  const clientIp = getIp(req)
54
60
 
55
61
  const credentials = readCredentials(req)
56
- const windowId = generateUuid()
62
+ const windowId = this.uidGenerator()
57
63
  try {
58
64
  let dao
59
65
  if(this.settings.daoFactory) {
@@ -74,6 +80,9 @@ class SsrServer {
74
80
 
75
81
  res.status(200)
76
82
  writeCredentials(res, credentials)
83
+ res.set({
84
+ 'Content-Type': 'text/html'
85
+ })
77
86
  res.end(html)
78
87
  } catch (e) {
79
88
  this.renderer.fixStackTrace(e)
package/lib/TestServer.js CHANGED
@@ -7,6 +7,7 @@ const app = require('@live-change/framework').app()
7
7
  const setupApiServer = require('./setupApiServer.js')
8
8
  const setupApiSockJs = require('./setupApiSockJs.js')
9
9
  const setupApiWs = require('./setupApiWs.js')
10
+ const setupApp = require('./setupApp.js')
10
11
  const setupDbServer = require('./setupDbServer.js')
11
12
  const createLoopbackDao = require('./createLoopbackDao.js')
12
13
  const SsrServer = require('./SsrServer.js')
@@ -23,9 +24,10 @@ class TestServer {
23
24
  path.resolve(this.config.ssrRoot, 'dist/client/ssr-manifest.json')
24
25
  )
25
26
 
26
- this.dbServer = await setupDbServer({ dbBackend: 'mem' })
27
- app.dao.dispose()
28
- app.dao = await createLoopbackDao('local', () => this.dbServer.createDao('local') )
27
+ await setupApp({
28
+ withDb: true,
29
+ dbBackend: 'mem'
30
+ })
29
31
 
30
32
  await app.dao.request(['database', 'createDatabase'], app.databaseName, { }).catch(err => 'exists')
31
33
 
@@ -47,11 +49,11 @@ class TestServer {
47
49
  await this.ssrServer.start()
48
50
 
49
51
  this.expressServer = http.createServer(this.expressApp)
50
- this.services = this.apiServer.services.getServicesObject()
52
+ this.services = this.apiServer.services.getServicesObject()
51
53
 
52
54
  this.wsServer = await setupApiWs(this.expressServer, this.apiServer)
53
55
  this.sockJsServer = await setupApiSockJs(this.expressServer, this.apiServer)
54
-
56
+
55
57
  await new Promise((resolve, reject) => {
56
58
  this.httpServer = this.expressServer.listen(this.config.port || 0, () => {
57
59
  this.port = this.expressServer.address().port,
package/lib/setupApp.js CHANGED
@@ -1,8 +1,15 @@
1
+ const { hashCode, encodeNumber, uidGenerator } = require('@live-change/uid')
2
+
1
3
  const setupDbServer = require('./setupDbServer.js')
2
4
  const setupDbClient = require('./setupDbClient.js')
5
+ const createLoopbackDao = require('./createLoopbackDao.js')
3
6
 
4
7
  async function setupApp(settings, env = process.env) {
5
8
  const app = require("@live-change/framework").app()
9
+ app.instanceId = encodeNumber(hashCode(
10
+ `app${process.pid}${require("os").hostname()} ${process.cwd()}/${process.argv.join(' ')}`))
11
+ app.uidGenerator = uidGenerator(app.instanceId, 1)
12
+ console.log("SETUP APP", settings)
6
13
  let dbServer
7
14
  if(settings.withDb) {
8
15
  dbServer = await setupDbServer(settings)
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@live-change/server",
3
- "version": "0.1.7",
3
+ "version": "0.1.11",
4
4
  "description": "Live Change Framework - server",
5
5
  "main": "index.js",
6
6
  "scripts": {
@@ -26,6 +26,7 @@
26
26
  "@live-change/db-server": "^0.4.80",
27
27
  "@live-change/framework": "^0.5.0",
28
28
  "@live-change/vue3-ssr": "^0.1.0",
29
+ "@live-change/uid": "^0.1.3",
29
30
  "http-proxy-middleware": "2.0.0",
30
31
  "dotenv": "^9.0.2",
31
32
  "express": "^4.17.1",