There were two large holes in the existing offline server handling:
1. It didn't include IPs, so scripts that used IPs instead of hostnames
would get exceptions thrown for "server not found."
2. Coverage was very low for non-Darknet APIs. Maybe most of them don't
need to be covered, but many obvious ones like "ps", "killall" and
"hasRootAccess" were missing. IMO the only reliable answer is one
that enforces *all* are covered via the type system.
To accomplish the second part, helpers.getServer() was changed to return
null when a server is offline. This intentionally breaks a lot of its
utility, which was to return a server unconditionally. To compensate,
its utility was increased - it now also does unknown argument
processing, allowing it to subsume a common line that all callers were
repeating.
Some callers switched to ctx.workerScript.getServer(), because they
didn't actually need to be using helpers.getServer(). Similarly, a few
callsites switched to GetServerOrThrow(), for the cases where it should
be guaranteed that the server is valid. The rest are returning a
default/failure response when the server is offline. (Except for
contracts, which threw on failure already anyway.)
This simplifies the logic. It also adjusts the position of special
servers slightly; in particular, they are horizontally centered
(appearing in-between the adjacent row, and not merely staggered).
The split into two functions is in preparation for perf improvements
that require calculating this without access to the server.
* Add some re-rendering improvements to avoid the canvas and visual servers getting desynched
* removed underlevelled nerf to low-level servers; improved charisma level docs
* Remove offscreen dynamic culling
* PR feedback; add cache file names to tooltip
* Ensure stasis link servers get loaded properly; ensure darkweb has neighbors to prevent unit tests from failing; remove extra optional chaining accessors
Thankfully, the existing AllServers map is not exported, so we can
ensure that all the changes are only local to this file.
This also fixes a bug if renameServer was called with the same
name. (Probably calling code checked that case already.)
There was duplicated code, and more importantly, were were handling
certain things subtly differently in exec() and scp() as a result. This
notably causes a behavior change in exec() and scp() where failure to
authenticate now returns failure instead of throwing, which I believe is
the proper response.
This also makes it easier to see in the code exactly which functions
require what (auth, session, etc.)
* REFACTOR: Move Result to the public API
This refactors Result<T> to be part of the public NetscriptDefinitions.
It is not used by anything in this PR, but it is planned to be used in
the autoinfil APIs, or lacking that, future APIs, so this should not be
exposing anything prematurely.
* Add @public as api-extractor suggested and generate docs
* Use import type
---------
Co-authored-by: CatLover <152669316+catloversg@users.noreply.github.com>
"Made with beginners in mind" might be a bit of an overstatement, but I'm not gonna quibble on the wording. (IMO we are less "let me hold your hand while you learn how to cast your fishing rod" and more "I shoved you into the pond, grab some fish or smth idk")