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.
@@ -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
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "pinokiod",
3
- "version": "7.1.70",
3
+ "version": "7.1.72",
4
4
  "description": "",
5
5
  "main": "index.js",
6
6
  "scripts": {
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
- processes = this.kernel.peer.info[host].router_info
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 = this.kernel.peer.info[host].installed
12723
- let serverless_mapping = this.kernel.peer.info[host].rewrite_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
- }