{
  "permissions": {
    "allow": [
      "PowerShell(tailscale *)",
      "PowerShell(Resolve-DnsName *)",
      "WebFetch(domain:tailscale.com)",
      "PowerShell($deadline = \\(Get-Date\\).AddMinutes\\(9\\); do { try { $r = Resolve-DnsName javier-pc.tailc70361.ts.net -Type A -Server ns1.dnsimple.com -ErrorAction Stop; $ips = \\($r | Where-Object Type -eq 'A'\\).IPAddress } catch { $ips = @\\('error'\\) }; if \\($ips -notcontains '100.95.15.17' -and $ips.Count -gt 0 -and $ips -notcontains 'error'\\) { \"UPDATED: $\\($ips -join ', '\\)\"; break }; \"still: $\\($ips -join ', '\\) @ $\\(Get-Date -Format HH:mm:ss\\)\"; Start-Sleep -Seconds 30 } while \\(\\(Get-Date\\) -lt $deadline\\))",
      "PowerShell(tailscale status *)",
      "PowerShell($j = tailscale status --json | ConvertFrom-Json; $j.Self.Capabilities; '---CapMap---'; if \\($j.Self.CapMap\\) { $j.Self.CapMap.PSObject.Properties.Name })",
      "WebSearch",
      "WebFetch(domain:github.com)",
      "PowerShell(foreach \\($ns in 'ns1.dnsimple.com','ns2.dnsimple-edge.net','ns3.dnsimple.com','ns4.dnsimple-edge.org'\\) { try { $r = Resolve-DnsName javier-pc.tailc70361.ts.net -Type A -Server $ns -ErrorAction Stop; \"$ns -> $\\(\\($r | Where-Object Type -eq 'A'\\).IPAddress -join ', '\\)\" } catch { \"$ns -> ERROR: $\\($_.Exception.Message\\)\" } })",
      "PowerShell($deadline = \\(Get-Date\\).AddMinutes\\(11\\); do { try { $r = Resolve-DnsName javier-pc.tailc70361.ts.net -Type A -Server ns1.dnsimple.com -ErrorAction Stop; $ips = \\($r | Where-Object Type -eq 'A'\\).IPAddress } catch { $ips = @\\('error'\\) }; if \\($ips -notcontains '100.95.15.17' -and $ips.Count -gt 0 -and $ips -notcontains 'error'\\) { \"UPDATED: $\\($ips -join ', '\\)\"; break }; \"still: $\\($ips -join ', '\\) @ $\\(Get-Date -Format HH:mm:ss\\)\"; Start-Sleep -Seconds 45 } while \\(\\(Get-Date\\) -lt $deadline\\))",
      "PowerShell($deadline = \\(Get-Date\\).AddMinutes\\(11\\); do { try { $r = Resolve-DnsName descargas.tailc70361.ts.net -Type A -Server ns1.dnsimple.com -ErrorAction Stop; $ips = \\($r | Where-Object Type -eq 'A'\\).IPAddress } catch { $ips = @\\('NXDOMAIN'\\) }; if \\($ips.Count -gt 0 -and $ips -notmatch '^100\\\\.' -and $ips -notcontains 'NXDOMAIN'\\) { \"UPDATED: $\\($ips -join ', '\\)\"; break }; \"still: $\\($ips -join ', '\\) @ $\\(Get-Date -Format HH:mm:ss\\)\"; Start-Sleep -Seconds 40 } while \\(\\(Get-Date\\) -lt $deadline\\))",
      "PowerShell(try { Resolve-DnsName descargas.tailc70361.ts.net -Type AAAA -Server ns1.dnsimple.com -ErrorAction Stop | Format-Table Name,Type,IPAddress -AutoSize } catch { \"AAAA: $\\($_.Exception.Message\\)\" }; try { Resolve-DnsName javier-pc.tailc70361.ts.net -Type A -Server ns1.dnsimple.com -ErrorAction Stop | Format-Table Name,Type,IPAddress -AutoSize } catch { \"javier-pc A: $\\($_.Exception.Message\\)\" })",
      "PowerShell(foreach \\($srv in '8.8.8.8','1.1.1.1','9.9.9.9','ns1.dnsimple.com','ns2.dnsimple-edge.net'\\) { foreach \\($t in 'A','AAAA'\\) { try { $r = Resolve-DnsName descargas.tailc70361.ts.net -Type $t -Server $srv -ErrorAction Stop | Where-Object {$_.Type -eq $t}; \"$srv [$t] -> $\\($r.IPAddress -join ', '\\)\" } catch { \"$srv [$t] -> $\\($_.Exception.Message\\)\" } } })",
      "PowerShell(curl.exe -sS -I --max-time 30 --resolve descargas.tailc70361.ts.net:443:185.40.234.37 https://descargas.tailc70361.ts.net/Javi/PublishWebSite.zip)",
      "PowerShell(foreach \\($srv in '8.8.8.8','1.1.1.1','ns1.dnsimple.com'\\) { try { $r = Resolve-DnsName descargas.tailc70361.ts.net -Type A -Server $srv -ErrorAction Stop | Where-Object Type -eq 'A'; \"$srv -> $\\($r.IPAddress -join ', '\\)\" } catch { \"$srv -> $\\($_.Exception.Message\\)\" } })",
      "PowerShell(Start-Process \"https://login.tailscale.com/admin/machines\")",
      "PowerShell($j = tailscale status --json | ConvertFrom-Json; \"Expiry: $\\($j.Self.KeyExpiry\\)\"; \"Expired: $\\($j.Self.Expired\\)\")",
      "PowerShell(tailscale whois *)",
      "PowerShell($nm = tailscale debug netmap | ConvertFrom-Json; \"KeyExpiry: $\\($nm.SelfNode.KeyExpiry\\)\"; \"Capabilities contain expiry-disabled: $\\($null -ne \\($nm.SelfNode.Capabilities -match 'expire'\\)\\)\")",
      "PowerShell($raw = tailscale debug netmap; \\($raw | Select-String 'Expir' -SimpleMatch -AllMatches | Select-Object -First 5\\); $nm = $raw | ConvertFrom-Json; $nm.SelfNode.PSObject.Properties.Name -join ', ')",
      "PowerShell($j = tailscale status --json | ConvertFrom-Json; $j.Peer.PSObject.Properties | ForEach-Object { $p = $_.Value; \"{0}: KeyExpiry={1} Expired={2}\" -f $p.HostName, $p.KeyExpiry, $p.Expired })"
    ]
  }
}
