@jsenv/server 12.5.9 → 12.6.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/README.md +1 -2
- package/package.json +1 -1
- package/src/internal/getServerOrigins.js +18 -25
- package/src/internal/listen.js +0 -3
- package/src/startServer.js +10 -5
package/README.md
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
# server [](https://www.npmjs.com/package/@jsenv/server)
|
|
1
|
+
# server [](https://www.npmjs.com/package/@jsenv/server)
|
|
2
2
|
|
|
3
3
|
`@jsenv/server` helps to write flexible server code with a declarative API.
|
|
4
4
|
|
|
@@ -7,7 +7,6 @@ import { startServer } from "@jsenv/server"
|
|
|
7
7
|
|
|
8
8
|
await startServer({
|
|
9
9
|
protocol: "http",
|
|
10
|
-
ip: "127.0.0.1",
|
|
11
10
|
port: 8080,
|
|
12
11
|
requestToResponse: () => {
|
|
13
12
|
return {
|
package/package.json
CHANGED
|
@@ -2,43 +2,37 @@ import { networkInterfaces } from "os"
|
|
|
2
2
|
import { URL } from "url"
|
|
3
3
|
|
|
4
4
|
export const getServerOrigins = ({ protocol, ip, port }) => {
|
|
5
|
+
const isInternalIp = ip === "127.0.0.1"
|
|
6
|
+
const internalOrigin = createServerOrigin({
|
|
7
|
+
protocol,
|
|
8
|
+
hostname: "localhost",
|
|
9
|
+
port,
|
|
10
|
+
})
|
|
11
|
+
if (isInternalIp) {
|
|
12
|
+
return { internal: internalOrigin }
|
|
13
|
+
}
|
|
14
|
+
const isAnyIp = !ip || ip === "::" || ip === "0.0.0.0"
|
|
5
15
|
return {
|
|
6
|
-
|
|
7
|
-
external: createServerOrigin({
|
|
16
|
+
internal: internalOrigin,
|
|
17
|
+
external: createServerOrigin({
|
|
18
|
+
protocol,
|
|
19
|
+
hostname: isAnyIp ? getExternalIp(ip) : ip,
|
|
20
|
+
port,
|
|
21
|
+
}),
|
|
8
22
|
}
|
|
9
23
|
}
|
|
10
24
|
|
|
11
|
-
const createServerOrigin = ({ protocol,
|
|
25
|
+
const createServerOrigin = ({ protocol, hostname, port }) => {
|
|
12
26
|
const url = new URL("https://127.0.0.1:80")
|
|
13
|
-
|
|
14
27
|
url.protocol = protocol
|
|
15
|
-
url.hostname =
|
|
28
|
+
url.hostname = hostname
|
|
16
29
|
url.port = port
|
|
17
|
-
|
|
18
30
|
return url.origin
|
|
19
31
|
}
|
|
20
32
|
|
|
21
|
-
const ipToHostname = (
|
|
22
|
-
ip,
|
|
23
|
-
{
|
|
24
|
-
preferLocalhost = true,
|
|
25
|
-
preferLocalIp = false,
|
|
26
|
-
preferExternalIp = false,
|
|
27
|
-
} = {},
|
|
28
|
-
) => {
|
|
29
|
-
if (ip === "0.0.0.0" || !ip) {
|
|
30
|
-
if (preferLocalhost) return "localhost"
|
|
31
|
-
if (preferLocalIp) return "127.0.0.1"
|
|
32
|
-
if (preferExternalIp) return getExternalIp(ip) || "0.0.0.0"
|
|
33
|
-
return "0.0.0.0"
|
|
34
|
-
}
|
|
35
|
-
return ip
|
|
36
|
-
}
|
|
37
|
-
|
|
38
33
|
const getExternalIp = () => {
|
|
39
34
|
const networkInterfaceMap = networkInterfaces()
|
|
40
35
|
let internalIPV4NetworkAddress
|
|
41
|
-
|
|
42
36
|
Object.keys(networkInterfaceMap).find((key) => {
|
|
43
37
|
const networkAddressArray = networkInterfaceMap[key]
|
|
44
38
|
return networkAddressArray.find((networkAddress) => {
|
|
@@ -48,6 +42,5 @@ const getExternalIp = () => {
|
|
|
48
42
|
return true
|
|
49
43
|
})
|
|
50
44
|
})
|
|
51
|
-
|
|
52
45
|
return internalIPV4NetworkAddress ? internalIPV4NetworkAddress.address : null
|
|
53
46
|
}
|
package/src/internal/listen.js
CHANGED
|
@@ -20,7 +20,6 @@ const listen = async ({
|
|
|
20
20
|
ip,
|
|
21
21
|
})
|
|
22
22
|
}
|
|
23
|
-
|
|
24
23
|
listeningOperation.throwIfAborted()
|
|
25
24
|
port = await startListening({ server, port, ip })
|
|
26
25
|
listeningOperation.addAbortCallback(() => stopListening(server))
|
|
@@ -43,7 +42,6 @@ export const findFreePort = async (
|
|
|
43
42
|
} = {},
|
|
44
43
|
) => {
|
|
45
44
|
const findFreePortOperation = Abort.startOperation()
|
|
46
|
-
|
|
47
45
|
try {
|
|
48
46
|
findFreePortOperation.addAbortSignal(signal)
|
|
49
47
|
findFreePortOperation.throwIfAborted()
|
|
@@ -61,7 +59,6 @@ export const findFreePort = async (
|
|
|
61
59
|
}
|
|
62
60
|
return testUntil(nextPort, ip)
|
|
63
61
|
}
|
|
64
|
-
|
|
65
62
|
const freePort = await testUntil(initialPort, ip)
|
|
66
63
|
return freePort
|
|
67
64
|
} finally {
|
package/src/startServer.js
CHANGED
|
@@ -40,6 +40,7 @@ import {
|
|
|
40
40
|
export const startServer = async ({
|
|
41
41
|
signal = new AbortController().signal,
|
|
42
42
|
logLevel,
|
|
43
|
+
startLog = true,
|
|
43
44
|
serverName = "server",
|
|
44
45
|
|
|
45
46
|
protocol = "http",
|
|
@@ -47,7 +48,8 @@ export const startServer = async ({
|
|
|
47
48
|
http1Allowed = true,
|
|
48
49
|
redirectHttpToHttps,
|
|
49
50
|
allowHttpRequestOnHttps = false,
|
|
50
|
-
|
|
51
|
+
listenAnyIp = false,
|
|
52
|
+
ip = listenAnyIp ? undefined : "127.0.0.1",
|
|
51
53
|
port = 0, // assign a random available port
|
|
52
54
|
portHint,
|
|
53
55
|
privateKey,
|
|
@@ -207,7 +209,7 @@ export const startServer = async ({
|
|
|
207
209
|
|
|
208
210
|
status = "opened"
|
|
209
211
|
const serverOrigins = getServerOrigins({ protocol, ip, port })
|
|
210
|
-
const serverOrigin = serverOrigins.
|
|
212
|
+
const serverOrigin = serverOrigins.internal
|
|
211
213
|
|
|
212
214
|
const removeConnectionErrorListener = listenServerConnectionError(
|
|
213
215
|
nodeServer,
|
|
@@ -734,9 +736,11 @@ export const startServer = async ({
|
|
|
734
736
|
// ensure we don't try to handle new requests while server is stopping
|
|
735
737
|
stopCallbackList.add(removeRequestListener)
|
|
736
738
|
|
|
737
|
-
|
|
738
|
-
|
|
739
|
-
|
|
739
|
+
if (startLog) {
|
|
740
|
+
logger.info(
|
|
741
|
+
`${serverName} started at ${serverOrigin} (${serverOrigins.external})`,
|
|
742
|
+
)
|
|
743
|
+
}
|
|
740
744
|
|
|
741
745
|
const addEffect = (callback) => {
|
|
742
746
|
const cleanup = callback()
|
|
@@ -748,6 +752,7 @@ export const startServer = async ({
|
|
|
748
752
|
return {
|
|
749
753
|
getStatus: () => status,
|
|
750
754
|
origin: serverOrigin,
|
|
755
|
+
origins: serverOrigins,
|
|
751
756
|
nodeServer,
|
|
752
757
|
stop,
|
|
753
758
|
stoppedPromise,
|