fix: error "undefined setting key" at start
Massimo Melina committed
Jun 29, 2024 at 19:07 UTC
31c2a6acd1e5a01de94cf2010327f568929c6c68
3 files changed
+7
-6
package.json
+1
-1
@@ -71,7 +71,7 @@
71
"dependencies": {
72
"@koa/router": "^12.0.1",
73
"@node-rs/crc32": "^1.6.0",
74
- "@rejetto/kvstorage": "^0.11.1",
74
+ "@rejetto/kvstorage": "^0.12.1",
75
"acme-client": "^5.3.1",
76
"buffer-crc32": "^0.2.13",
77
"fast-glob": "^3.2.7",
src/index.ts
+1
-3
@@ -26,7 +26,6 @@ import { geoFilter } from './geo'
26
import { rootsMiddleware } from './roots'
27
import events from './events'
28
import { trackIpsMw } from './ips'
29
-import { storedMap } from './persistence'
29
30
ok(_.intersection(Object.keys(frontEndApis), Object.keys(adminApis)).length === 0) // they share same endpoints, don't clash
31
@@ -51,8 +50,7 @@ app.use(sessionMiddleware)
50
.use(mount(API_URI, apiMiddleware({ ...frontEndApis, ...adminApis })))
51
.use(serveGuiAndSharedFiles)
52
.on('error', errorHandler)
54
-storedMap.once('open', () =>
55
- events.emit('app', app))
53
+events.emit('app', app)
54
55
function errorHandler(err:Error & { code:string, path:string }) {
56
const { code } = err
src/listen.ts
+5
-2
@@ -28,6 +28,7 @@ import { X509Certificate } from 'crypto'
28
import events from './events'
29
import { isIPv6 } from 'net'
30
import { defaultBaseUrl } from './nat'
31
+import { storedMap } from './persistence'
32
33
interface ServerExtra { name: string, error?: string, busy?: Promise<string> }
34
let httpSrv: undefined | http.Server & ServerExtra
@@ -49,8 +50,10 @@ export function getHttpsWorkingPort() {
50
const commonServerOptions: http.ServerOptions = { requestTimeout: 0 }
51
const commonServerAssign = { headersTimeout: 30_000, timeout: MINUTE } // 'headersTimeout' is not recognized by type lib, and 'timeout' is not effective when passed in parameters
52
53
+const readyToListen = Promise.all([ storedMap.isOpening(), events.once('app') ])
54
+
55
const considerHttp = debounceAsync(async () => {
53
- await waitFor(() => app)
56
+ await readyToListen
57
void stopServer(httpSrv)
58
httpSrv = Object.assign(http.createServer(commonServerOptions, app.callback()), { name: 'http' }, commonServerAssign)
59
const port = await startServer(httpSrv, { port: portCfg.get(), host: listenInterface.get() })
@@ -92,12 +95,12 @@ export function getCertObject() {
95
}
96
97
const considerHttps = debounceAsync(async () => {
98
+ await readyToListen
99
void stopServer(httpsSrv)
100
defaultBaseUrl.proto = 'http'
101
defaultBaseUrl.port = getCurrentPort(httpSrv) ?? 0
102
let port = httpsPortCfg.get()
103
try {
100
- await waitFor(() => app)
104
httpsSrv = Object.assign(
105
https.createServer(port === PORT_DISABLED ? {} : { ...commonServerOptions, key: httpsOptions.private_key, cert: httpsOptions.cert }, app.callback()),
106
{ name: 'https' },