pinokiod 7.1.70 → 7.1.72
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/kernel/bin/caddy.js
CHANGED
|
@@ -79,12 +79,23 @@ class Caddy {
|
|
|
79
79
|
console.log("Caddy Installed?", installed)
|
|
80
80
|
if (installed) {
|
|
81
81
|
let resolved
|
|
82
|
+
let startup_output = []
|
|
83
|
+
this.kernel.caddy_startup_output = startup_output
|
|
82
84
|
await new Promise((resolve, reject) => {
|
|
83
85
|
this.kernel.exec({
|
|
84
86
|
message: `caddy run --watch`,
|
|
85
87
|
path: this.kernel.homedir,
|
|
86
88
|
}, (e) => {
|
|
87
89
|
process.stdout.write(e.raw)
|
|
90
|
+
const cleaned = e && e.cleaned ? e.cleaned : ""
|
|
91
|
+
const lines = cleaned.split(/\r?\n/).map((line) => line.trim()).filter(Boolean)
|
|
92
|
+
for (let line of lines) {
|
|
93
|
+
startup_output.push(line)
|
|
94
|
+
if (startup_output.length > 20) {
|
|
95
|
+
startup_output.shift()
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
this.kernel.caddy_startup_output = startup_output.slice()
|
|
88
99
|
if (!resolved) {
|
|
89
100
|
if (/endpoint started/i.test(e.cleaned)) {
|
|
90
101
|
resolved = true
|
|
@@ -93,6 +104,28 @@ class Caddy {
|
|
|
93
104
|
}
|
|
94
105
|
})
|
|
95
106
|
})
|
|
107
|
+
let admin_running = false
|
|
108
|
+
const admin_wait_started = Date.now()
|
|
109
|
+
while ((Date.now() - admin_wait_started) < 5000) {
|
|
110
|
+
admin_running = await this.running()
|
|
111
|
+
if (admin_running) {
|
|
112
|
+
break
|
|
113
|
+
}
|
|
114
|
+
await new Promise((resolve) => {
|
|
115
|
+
setTimeout(resolve, 250)
|
|
116
|
+
})
|
|
117
|
+
}
|
|
118
|
+
if (!admin_running) {
|
|
119
|
+
console.log("caddy admin unavailable after startup")
|
|
120
|
+
if (startup_output.length > 0) {
|
|
121
|
+
console.log("recent caddy startup output:")
|
|
122
|
+
for (let line of startup_output) {
|
|
123
|
+
console.log(line)
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
return
|
|
127
|
+
}
|
|
128
|
+
this.kernel.caddy_startup_output = startup_output.slice()
|
|
96
129
|
console.log("kernel.refresh bin.caddy.start")
|
|
97
130
|
this.kernel.peer.announce()
|
|
98
131
|
console.log("announced to peers")
|
package/package.json
CHANGED
package/server/index.js
CHANGED
|
@@ -80,7 +80,6 @@ const { createTaskPackageService } = require("./lib/task_packages")
|
|
|
80
80
|
const { createTaskWorkspaceLinkService } = require("./lib/task_workspace_links")
|
|
81
81
|
const { createContentValidationService } = require("./lib/content_validation")
|
|
82
82
|
const { buildSecureRouterDebugSnapshot, createSecureRouterDebugStore } = require("./lib/secure_router_debug")
|
|
83
|
-
const { ensureSecureRouterReady } = require("./lib/secure_router_ready")
|
|
84
83
|
const AppRegistryService = require("./lib/app_registry")
|
|
85
84
|
const AppLogService = require("./lib/app_logs")
|
|
86
85
|
const AppSearchService = require("./lib/app_search")
|
|
@@ -5520,9 +5519,6 @@ class Server {
|
|
|
5520
5519
|
|
|
5521
5520
|
return { success: true }
|
|
5522
5521
|
}
|
|
5523
|
-
async ensureSecureRouterReady(timeout = 120000, interval = 500) {
|
|
5524
|
-
return ensureSecureRouterReady(this, timeout, interval)
|
|
5525
|
-
}
|
|
5526
5522
|
async start(options) {
|
|
5527
5523
|
this.debug = false
|
|
5528
5524
|
if (options) {
|
|
@@ -5792,12 +5788,6 @@ class Server {
|
|
|
5792
5788
|
phase: "initializing_environment"
|
|
5793
5789
|
})
|
|
5794
5790
|
await Environment.init({}, this.kernel)
|
|
5795
|
-
if (this.kernel && this.kernel.peer && this.kernel.peer.https_active) {
|
|
5796
|
-
setStartupStatus({
|
|
5797
|
-
phase: "waiting_for_secure_router"
|
|
5798
|
-
})
|
|
5799
|
-
await this.ensureSecureRouterReady()
|
|
5800
|
-
}
|
|
5801
5791
|
setStartupStatus({
|
|
5802
5792
|
sys_ready: this.getStartupStatus().sys_ready,
|
|
5803
5793
|
managed_ready: true,
|
|
@@ -12692,7 +12682,7 @@ class Server {
|
|
|
12692
12682
|
|
|
12693
12683
|
await this.kernel.peer.check_peers()
|
|
12694
12684
|
|
|
12695
|
-
let list = this.getPeers()
|
|
12685
|
+
let list = this.kernel.peer.info ? this.getPeers() : []
|
|
12696
12686
|
|
|
12697
12687
|
// let list = this.getPeerInfo()
|
|
12698
12688
|
let processes = []
|
|
@@ -12705,8 +12695,22 @@ class Server {
|
|
|
12705
12695
|
peer = item
|
|
12706
12696
|
}
|
|
12707
12697
|
}
|
|
12698
|
+
let peer_info = host && this.kernel.peer.info ? this.kernel.peer.info[host] : null
|
|
12699
|
+
if (!peer_info && req.params.name === this.kernel.peer.name) {
|
|
12700
|
+
try {
|
|
12701
|
+
await this.kernel.peer.refresh_host(this.kernel.peer.host)
|
|
12702
|
+
} catch (e) {
|
|
12703
|
+
}
|
|
12704
|
+
host = this.kernel.peer.host
|
|
12705
|
+
peer_info = this.kernel.peer.info && this.kernel.peer.info[host] ? this.kernel.peer.info[host] : null
|
|
12706
|
+
if (peer_info) {
|
|
12707
|
+
peer = peer_info
|
|
12708
|
+
}
|
|
12709
|
+
}
|
|
12708
12710
|
try {
|
|
12709
|
-
|
|
12711
|
+
if (peer_info) {
|
|
12712
|
+
processes = peer_info.router_info
|
|
12713
|
+
}
|
|
12710
12714
|
for(let i=0; i<processes.length; i++) {
|
|
12711
12715
|
if (!processes[i].icon) {
|
|
12712
12716
|
if (protocol === "https") {
|
|
@@ -12719,8 +12723,8 @@ class Server {
|
|
|
12719
12723
|
}
|
|
12720
12724
|
} catch (e) {
|
|
12721
12725
|
}
|
|
12722
|
-
let installed =
|
|
12723
|
-
let serverless_mapping =
|
|
12726
|
+
let installed = peer_info ? peer_info.installed : []
|
|
12727
|
+
let serverless_mapping = peer_info ? peer_info.rewrite_mapping : {}
|
|
12724
12728
|
let serverless = Object.keys(serverless_mapping).map((name) => {
|
|
12725
12729
|
return serverless_mapping[name]
|
|
12726
12730
|
})
|
|
@@ -12729,7 +12733,7 @@ class Server {
|
|
|
12729
12733
|
return this.kernel.router.rewrite_mapping[key]
|
|
12730
12734
|
})
|
|
12731
12735
|
const peerAccess = await this.composePeerAccessPayload()
|
|
12732
|
-
const allow_dns_creation = req.params.name === this.kernel.peer.name
|
|
12736
|
+
const allow_dns_creation = !!peer_info && req.params.name === this.kernel.peer.name
|
|
12733
12737
|
res.render("net", {
|
|
12734
12738
|
static_routes,
|
|
12735
12739
|
selected_name: req.params.name,
|
|
@@ -12742,7 +12746,7 @@ class Server {
|
|
|
12742
12746
|
processes,
|
|
12743
12747
|
installed,
|
|
12744
12748
|
serverless,
|
|
12745
|
-
error: null
|
|
12749
|
+
error: peer_info ? null : `Peer "${req.params.name}" is not ready yet. Try again in a moment.`,
|
|
12746
12750
|
list,
|
|
12747
12751
|
host,
|
|
12748
12752
|
peer,
|
|
@@ -72,6 +72,9 @@ async function buildSecureRouterDebugSnapshot(server, store) {
|
|
|
72
72
|
const startupStatus = server && typeof server.getStartupStatus === "function"
|
|
73
73
|
? server.getStartupStatus()
|
|
74
74
|
: null
|
|
75
|
+
const caddyStartupOutput = kernel && Array.isArray(kernel.caddy_startup_output)
|
|
76
|
+
? clone(kernel.caddy_startup_output)
|
|
77
|
+
: []
|
|
75
78
|
const state = store && store.state ? clone(store.state) : {}
|
|
76
79
|
const events = store && Array.isArray(store.events) ? clone(store.events) : []
|
|
77
80
|
return {
|
|
@@ -87,6 +90,7 @@ async function buildSecureRouterDebugSnapshot(server, store) {
|
|
|
87
90
|
start_attempted: !!state.caddy_start_attempted,
|
|
88
91
|
start_finished: !!state.caddy_start_finished,
|
|
89
92
|
start_error: state.caddy_start_error || null,
|
|
93
|
+
startup_output: caddyStartupOutput,
|
|
90
94
|
},
|
|
91
95
|
peer: {
|
|
92
96
|
host: peer && peer.host ? peer.host : null,
|
|
@@ -76,6 +76,10 @@
|
|
|
76
76
|
if (serverDebug) {
|
|
77
77
|
lines.push(`Flags: ${JSON.stringify(serverDebug.flags || null)}`)
|
|
78
78
|
lines.push(`Caddy: ${JSON.stringify(serverDebug.caddy || null)}`)
|
|
79
|
+
if (serverDebug.caddy && Array.isArray(serverDebug.caddy.startup_output) && serverDebug.caddy.startup_output.length > 0) {
|
|
80
|
+
lines.push("Caddy startup output:")
|
|
81
|
+
lines.push(...serverDebug.caddy.startup_output)
|
|
82
|
+
}
|
|
79
83
|
lines.push(`Peer: ${JSON.stringify(serverDebug.peer || null)}`)
|
|
80
84
|
lines.push(`Router: ${JSON.stringify(serverDebug.router || null)}`)
|
|
81
85
|
lines.push(`Wait: ${JSON.stringify(serverDebug.wait || null)}`)
|
|
@@ -1,96 +0,0 @@
|
|
|
1
|
-
const { createSecureRouterDebugStore, recordSecureRouterDebug } = require("./secure_router_debug")
|
|
2
|
-
|
|
3
|
-
async function ensureSecureRouterReady(server, timeout = 120000, interval = 500) {
|
|
4
|
-
if (!(server.kernel && server.kernel.peer && server.kernel.peer.https_active)) {
|
|
5
|
-
return { success: true, stage: "disabled" }
|
|
6
|
-
}
|
|
7
|
-
server.secure_router_debug = createSecureRouterDebugStore()
|
|
8
|
-
recordSecureRouterDebug(server.secure_router_debug, "wait started", {
|
|
9
|
-
active: true,
|
|
10
|
-
started_at: new Date().toISOString(),
|
|
11
|
-
last_status: null,
|
|
12
|
-
caddy_start_attempted: false,
|
|
13
|
-
caddy_start_finished: false,
|
|
14
|
-
caddy_start_error: null,
|
|
15
|
-
refresh_attempted: false,
|
|
16
|
-
refresh_finished: false,
|
|
17
|
-
refresh_error: null,
|
|
18
|
-
})
|
|
19
|
-
const caddy = server.kernel && server.kernel.bin && server.kernel.bin.mod
|
|
20
|
-
? server.kernel.bin.mod.caddy
|
|
21
|
-
: null
|
|
22
|
-
const deadline = Date.now() + timeout
|
|
23
|
-
let startedCaddyManually = false
|
|
24
|
-
let refreshedRouter = false
|
|
25
|
-
let lastStatus = null
|
|
26
|
-
let lastStatusSummary = null
|
|
27
|
-
while (Date.now() < deadline) {
|
|
28
|
-
lastStatus = await server.check_router_up()
|
|
29
|
-
const statusSummary = lastStatus && lastStatus.success
|
|
30
|
-
? "success"
|
|
31
|
-
: (lastStatus && lastStatus.error ? lastStatus.error : JSON.stringify(lastStatus))
|
|
32
|
-
if (statusSummary !== lastStatusSummary) {
|
|
33
|
-
lastStatusSummary = statusSummary
|
|
34
|
-
recordSecureRouterDebug(server.secure_router_debug, `check_router_up -> ${statusSummary}`, {
|
|
35
|
-
last_status: lastStatus
|
|
36
|
-
})
|
|
37
|
-
}
|
|
38
|
-
if (lastStatus && lastStatus.success) {
|
|
39
|
-
recordSecureRouterDebug(server.secure_router_debug, "wait success", {
|
|
40
|
-
active: false
|
|
41
|
-
})
|
|
42
|
-
return lastStatus
|
|
43
|
-
}
|
|
44
|
-
if (
|
|
45
|
-
lastStatus &&
|
|
46
|
-
lastStatus.error === "caddy admin unavailable" &&
|
|
47
|
-
!startedCaddyManually &&
|
|
48
|
-
caddy &&
|
|
49
|
-
typeof caddy.start === "function"
|
|
50
|
-
) {
|
|
51
|
-
startedCaddyManually = true
|
|
52
|
-
recordSecureRouterDebug(server.secure_router_debug, "manual caddy.start() attempted", {
|
|
53
|
-
caddy_start_attempted: true
|
|
54
|
-
})
|
|
55
|
-
try {
|
|
56
|
-
await caddy.start()
|
|
57
|
-
recordSecureRouterDebug(server.secure_router_debug, "manual caddy.start() finished", {
|
|
58
|
-
caddy_start_finished: true
|
|
59
|
-
})
|
|
60
|
-
} catch (e) {
|
|
61
|
-
recordSecureRouterDebug(server.secure_router_debug, "manual caddy.start() failed", {
|
|
62
|
-
caddy_start_error: e && e.message ? e.message : String(e)
|
|
63
|
-
})
|
|
64
|
-
throw e
|
|
65
|
-
}
|
|
66
|
-
continue
|
|
67
|
-
}
|
|
68
|
-
if (!refreshedRouter) {
|
|
69
|
-
refreshedRouter = true
|
|
70
|
-
recordSecureRouterDebug(server.secure_router_debug, "kernel.refresh(true) attempted", {
|
|
71
|
-
refresh_attempted: true
|
|
72
|
-
})
|
|
73
|
-
await server.kernel.refresh(true).then(() => {
|
|
74
|
-
recordSecureRouterDebug(server.secure_router_debug, "kernel.refresh(true) finished", {
|
|
75
|
-
refresh_finished: true
|
|
76
|
-
})
|
|
77
|
-
}).catch((e) => {
|
|
78
|
-
recordSecureRouterDebug(server.secure_router_debug, "kernel.refresh(true) failed", {
|
|
79
|
-
refresh_error: e && e.message ? e.message : String(e)
|
|
80
|
-
})
|
|
81
|
-
})
|
|
82
|
-
continue
|
|
83
|
-
}
|
|
84
|
-
await new Promise((resolve) => {
|
|
85
|
-
setTimeout(resolve, interval)
|
|
86
|
-
})
|
|
87
|
-
}
|
|
88
|
-
recordSecureRouterDebug(server.secure_router_debug, "wait timeout", {
|
|
89
|
-
active: false
|
|
90
|
-
})
|
|
91
|
-
throw new Error(lastStatus && lastStatus.error ? lastStatus.error : "secure router did not come up")
|
|
92
|
-
}
|
|
93
|
-
|
|
94
|
-
module.exports = {
|
|
95
|
-
ensureSecureRouterReady,
|
|
96
|
-
}
|