()
| 105 | }); |
| 106 | |
| 107 | const findTailscale = async (): Promise<string | undefined> => { |
| 108 | for (const candidate of TAILSCALE_CANDIDATES) { |
| 109 | const { ok } = await sh(candidate, ["version"]); |
| 110 | if (ok) return candidate; |
| 111 | } |
| 112 | return undefined; |
| 113 | }; |
| 114 | |
| 115 | /** This machine's tailnet IPv4 (100.x.y.z), from interfaces — works even |
| 116 | * when the tailscale CLI is a broken shim. */ |