DNET: simplify getServer return type; add all missing dnet properties to getServerAuthDetails (#2746)

This commit is contained in:
Michael Ficocelli
2026-05-12 16:22:25 -07:00
committed by GitHub
parent 00f0756a59
commit 3acdf019f8
62 changed files with 784 additions and 1178 deletions
@@ -1,60 +0,0 @@
<!-- Do not edit this file. It is automatically generated by API Documenter. -->
[Home](./index.md) &gt; [bitburner](./bitburner.md) &gt; [Darknet](./bitburner.darknet.md) &gt; [getServerAuthDetails](./bitburner.darknet.getserverauthdetails.md)
## Darknet.getServerAuthDetails() method
Returns the server's authentication protocol details.
**Signature:**
```typescript
getServerAuthDetails(host?: string): ServerAuthDetails & { isOnline: boolean };
```
## Parameters
<table><thead><tr><th>
Parameter
</th><th>
Type
</th><th>
Description
</th></tr></thead>
<tbody><tr><td>
host
</td><td>
string
</td><td>
_(Optional)_ Hostname/IP of the server to analyze. Defaults to the running script's server if not specified.
</td></tr>
</tbody></table>
**Returns:**
[ServerAuthDetails](./bitburner.serverauthdetails.md) &amp; { isOnline: boolean }
An object containing the server's authentication protocol details.
## Remarks
RAM cost: 0.1 GB
@@ -0,0 +1,62 @@
<!-- Do not edit this file. It is automatically generated by API Documenter. -->
[Home](./index.md) &gt; [bitburner](./bitburner.md) &gt; [Darknet](./bitburner.darknet.md) &gt; [getServerDetails](./bitburner.darknet.getserverdetails.md)
## Darknet.getServerDetails() method
Returns the darknet-specific details of the server.
If the darknet server has recently gone offline, the returned object will be a dummy server object with `isOnline: false`<!-- -->.
**Signature:**
```typescript
getServerDetails(host?: string): DarknetServerDetails & { isOnline: boolean };
```
## Parameters
<table><thead><tr><th>
Parameter
</th><th>
Type
</th><th>
Description
</th></tr></thead>
<tbody><tr><td>
host
</td><td>
string
</td><td>
_(Optional)_ Hostname/IP of the server to analyze. Defaults to the running script's server if not specified.
</td></tr>
</tbody></table>
**Returns:**
[DarknetServerDetails](./bitburner.darknetserverdetails.md) &amp; { isOnline: boolean }
An object containing the server's darknet-specific details.
## Remarks
RAM cost: 0.1 GB
+4 -2
View File
@@ -96,12 +96,14 @@ Returns -1 if the server is offline, not found, or not a darkweb server.
</td></tr>
<tr><td>
[getServerAuthDetails(host)](./bitburner.darknet.getserverauthdetails.md)
[getServerDetails(host)](./bitburner.darknet.getserverdetails.md)
</td><td>
Returns the server's authentication protocol details.
Returns the darknet-specific details of the server.
If the darknet server has recently gone offline, the returned object will be a dummy server object with `isOnline: false`<!-- -->.
</td></tr>
@@ -9,7 +9,12 @@ Gets the time it will take to authenticate a server.
**Signature:**
```typescript
getAuthenticateTime(darknetServerData: DarknetServerData, threads?: number, player?: Person): number;
getAuthenticateTime(
serverDetails: DarknetServerDetails,
threads?: number,
player?: Person,
correctCharactersInPassword?: number,
): number;
```
## Parameters
@@ -32,12 +37,12 @@ Description
</th></tr></thead>
<tbody><tr><td>
darknetServerData
serverDetails
</td><td>
[DarknetServerData](./bitburner.darknetserverdata.md)
[DarknetServerDetails](./bitburner.darknetserverdetails.md)
</td><td>
@@ -77,6 +82,22 @@ player
_(Optional)_ The player object. Optional, defaults to the current player status
</td></tr>
<tr><td>
correctCharactersInPassword
</td><td>
number
</td><td>
_(Optional)_ only used for 2G\_cellular model servers. The number of correct characters in the attempted password. Optional, defaults to 0
</td></tr>
</tbody></table>
@@ -9,7 +9,7 @@ Gets the expected amount off ram that will be freed by a call to dnet.memoryReal
**Signature:**
```typescript
getExpectedRamBlockRemoved(darknetServerData: DarknetServerData, threads?: number, player?: Person): number;
getExpectedRamBlockRemoved(serverDetails: DarknetServerDetails, threads?: number, player?: Person): number;
```
## Parameters
@@ -32,12 +32,12 @@ Description
</th></tr></thead>
<tbody><tr><td>
darknetServerData
serverDetails
</td><td>
[DarknetServerData](./bitburner.darknetserverdata.md)
[DarknetServerDetails](./bitburner.darknetserverdetails.md)
</td><td>
@@ -9,7 +9,7 @@ Gets the time it will take to scrape logs from a server.
**Signature:**
```typescript
getHeartbleedTime(darknetServerData: DarknetServerData, threads?: number, player?: Person): number;
getHeartbleedTime(serverDetails: DarknetServerDetails, threads?: number, player?: Person): number;
```
## Parameters
@@ -32,12 +32,12 @@ Description
</th></tr></thead>
<tbody><tr><td>
darknetServerData
serverDetails
</td><td>
[DarknetServerData](./bitburner.darknetserverdata.md)
[DarknetServerDetails](./bitburner.darknetserverdetails.md)
</td><td>
+3 -3
View File
@@ -27,7 +27,7 @@ Description
</th></tr></thead>
<tbody><tr><td>
[getAuthenticateTime(darknetServerData, threads, player)](./bitburner.darknetformulas.getauthenticatetime.md)
[getAuthenticateTime(serverDetails, threads, player, correctCharactersInPassword)](./bitburner.darknetformulas.getauthenticatetime.md)
</td><td>
@@ -38,7 +38,7 @@ Gets the time it will take to authenticate a server.
</td></tr>
<tr><td>
[getExpectedRamBlockRemoved(darknetServerData, threads, player)](./bitburner.darknetformulas.getexpectedramblockremoved.md)
[getExpectedRamBlockRemoved(serverDetails, threads, player)](./bitburner.darknetformulas.getexpectedramblockremoved.md)
</td><td>
@@ -49,7 +49,7 @@ Gets the expected amount off ram that will be freed by a call to dnet.memoryReal
</td></tr>
<tr><td>
[getHeartbleedTime(darknetServerData, threads, player)](./bitburner.darknetformulas.getheartbleedtime.md)
[getHeartbleedTime(serverDetails, threads, player)](./bitburner.darknetformulas.getheartbleedtime.md)
</td><td>
@@ -1,13 +0,0 @@
<!-- Do not edit this file. It is automatically generated by API Documenter. -->
[Home](./index.md) &gt; [bitburner](./bitburner.md) &gt; [DarknetServerData](./bitburner.darknetserverdata.md) &gt; [backdoorInstalled](./bitburner.darknetserverdata.backdoorinstalled.md)
## DarknetServerData.backdoorInstalled property
Flag indicating whether this server has a backdoor installed by the player
**Signature:**
```typescript
backdoorInstalled: boolean;
```
@@ -1,13 +0,0 @@
<!-- Do not edit this file. It is automatically generated by API Documenter. -->
[Home](./index.md) &gt; [bitburner](./bitburner.md) &gt; [DarknetServerData](./bitburner.darknetserverdata.md) &gt; [cpuCores](./bitburner.darknetserverdata.cpucores.md)
## DarknetServerData.cpuCores property
Number of CPU cores
**Signature:**
```typescript
cpuCores: number;
```
@@ -1,13 +0,0 @@
<!-- Do not edit this file. It is automatically generated by API Documenter. -->
[Home](./index.md) &gt; [bitburner](./bitburner.md) &gt; [DarknetServerData](./bitburner.darknetserverdata.md) &gt; [hasAdminRights](./bitburner.darknetserverdata.hasadminrights.md)
## DarknetServerData.hasAdminRights property
Flag indicating whether the player has admin/root access to this server
**Signature:**
```typescript
hasAdminRights: boolean;
```
@@ -1,13 +0,0 @@
<!-- Do not edit this file. It is automatically generated by API Documenter. -->
[Home](./index.md) &gt; [bitburner](./bitburner.md) &gt; [DarknetServerData](./bitburner.darknetserverdata.md) &gt; [hasStasisLink](./bitburner.darknetserverdata.hasstasislink.md)
## DarknetServerData.hasStasisLink property
If the server has a stasis link applied
**Signature:**
```typescript
hasStasisLink: boolean;
```
@@ -1,13 +0,0 @@
<!-- Do not edit this file. It is automatically generated by API Documenter. -->
[Home](./index.md) &gt; [bitburner](./bitburner.md) &gt; [DarknetServerData](./bitburner.darknetserverdata.md) &gt; [hostname](./bitburner.darknetserverdata.hostname.md)
## DarknetServerData.hostname property
Hostname. Must be unique
**Signature:**
```typescript
hostname: string;
```
@@ -1,13 +0,0 @@
<!-- Do not edit this file. It is automatically generated by API Documenter. -->
[Home](./index.md) &gt; [bitburner](./bitburner.md) &gt; [DarknetServerData](./bitburner.darknetserverdata.md) &gt; [ip](./bitburner.darknetserverdata.ip.md)
## DarknetServerData.ip property
IP Address. Must be unique
**Signature:**
```typescript
ip: string;
```
@@ -1,13 +0,0 @@
<!-- Do not edit this file. It is automatically generated by API Documenter. -->
[Home](./index.md) &gt; [bitburner](./bitburner.md) &gt; [DarknetServerData](./bitburner.darknetserverdata.md) &gt; [isConnectedTo](./bitburner.darknetserverdata.isconnectedto.md)
## DarknetServerData.isConnectedTo property
Flag indicating whether the player's terminal is currently connected to this server
**Signature:**
```typescript
isConnectedTo: boolean;
```
@@ -1,13 +0,0 @@
<!-- Do not edit this file. It is automatically generated by API Documenter. -->
[Home](./index.md) &gt; [bitburner](./bitburner.md) &gt; [DarknetServerData](./bitburner.darknetserverdata.md) &gt; [logTrafficInterval](./bitburner.darknetserverdata.logtrafficinterval.md)
## DarknetServerData.logTrafficInterval property
The interval at which the server periodically adds to its logs, in seconds.
**Signature:**
```typescript
logTrafficInterval: number;
```
@@ -1,13 +0,0 @@
<!-- Do not edit this file. It is automatically generated by API Documenter. -->
[Home](./index.md) &gt; [bitburner](./bitburner.md) &gt; [DarknetServerData](./bitburner.darknetserverdata.md) &gt; [maxRam](./bitburner.darknetserverdata.maxram.md)
## DarknetServerData.maxRam property
Max RAM (GB) of this server
**Signature:**
```typescript
maxRam: number;
```
-400
View File
@@ -1,400 +0,0 @@
<!-- Do not edit this file. It is automatically generated by API Documenter. -->
[Home](./index.md) &gt; [bitburner](./bitburner.md) &gt; [DarknetServerData](./bitburner.darknetserverdata.md)
## DarknetServerData interface
Darknet server data.
**Signature:**
```typescript
export interface DarknetServerData
```
## Properties
<table><thead><tr><th>
Property
</th><th>
Modifiers
</th><th>
Type
</th><th>
Description
</th></tr></thead>
<tbody><tr><td>
[backdoorInstalled](./bitburner.darknetserverdata.backdoorinstalled.md)
</td><td>
</td><td>
boolean
</td><td>
Flag indicating whether this server has a backdoor installed by the player
</td></tr>
<tr><td>
[blockedRam](./bitburner.darknetserverdata.blockedram.md)
</td><td>
</td><td>
number
</td><td>
The amount of ram blocked by the server owner
</td></tr>
<tr><td>
[cpuCores](./bitburner.darknetserverdata.cpucores.md)
</td><td>
</td><td>
number
</td><td>
Number of CPU cores
</td></tr>
<tr><td>
[depth](./bitburner.darknetserverdata.depth.md)
</td><td>
</td><td>
number
</td><td>
The depth of the server in the net
</td></tr>
<tr><td>
[difficulty](./bitburner.darknetserverdata.difficulty.md)
</td><td>
</td><td>
number
</td><td>
The difficulty rating of the server, associated with its original depth in the net
</td></tr>
<tr><td>
[hasAdminRights](./bitburner.darknetserverdata.hasadminrights.md)
</td><td>
</td><td>
boolean
</td><td>
Flag indicating whether the player has admin/root access to this server
</td></tr>
<tr><td>
[hasStasisLink](./bitburner.darknetserverdata.hasstasislink.md)
</td><td>
</td><td>
boolean
</td><td>
If the server has a stasis link applied
</td></tr>
<tr><td>
[hostname](./bitburner.darknetserverdata.hostname.md)
</td><td>
</td><td>
string
</td><td>
Hostname. Must be unique
</td></tr>
<tr><td>
[ip](./bitburner.darknetserverdata.ip.md)
</td><td>
</td><td>
string
</td><td>
IP Address. Must be unique
</td></tr>
<tr><td>
[isConnectedTo](./bitburner.darknetserverdata.isconnectedto.md)
</td><td>
</td><td>
boolean
</td><td>
Flag indicating whether the player's terminal is currently connected to this server
</td></tr>
<tr><td>
[isStationary](./bitburner.darknetserverdata.isstationary.md)
</td><td>
</td><td>
boolean
</td><td>
If this darknet server cannot be moved. True for fixed/story servers.
</td></tr>
<tr><td>
[logTrafficInterval](./bitburner.darknetserverdata.logtrafficinterval.md)
</td><td>
</td><td>
number
</td><td>
The interval at which the server periodically adds to its logs, in seconds.
</td></tr>
<tr><td>
[maxRam](./bitburner.darknetserverdata.maxram.md)
</td><td>
</td><td>
number
</td><td>
Max RAM (GB) of this server
</td></tr>
<tr><td>
[modelId](./bitburner.darknetserverdata.modelid.md)
</td><td>
</td><td>
string
</td><td>
The model of the server. Similar models have similar vulnerabilities. The model list is intentionally undocumented. You are supposed to experiment and discover the models.
</td></tr>
<tr><td>
[passwordHintData](./bitburner.darknetserverdata.passwordhintdata.md)
</td><td>
</td><td>
string
</td><td>
Data associated with the password hint
</td></tr>
<tr><td>
[purchasedByPlayer](./bitburner.darknetserverdata.purchasedbyplayer.md)
</td><td>
</td><td>
boolean
</td><td>
Whether this server was purchased by the player. Always false for darknet servers
</td></tr>
<tr><td>
[ramUsed](./bitburner.darknetserverdata.ramused.md)
</td><td>
</td><td>
number
</td><td>
Used RAM (GB). i.e. unavailable RAM
</td></tr>
<tr><td>
[requiredCharismaSkill](./bitburner.darknetserverdata.requiredcharismaskill.md)
</td><td>
</td><td>
number
</td><td>
The charisma skill required to heartbleed the server
</td></tr>
<tr><td>
[staticPasswordHint](./bitburner.darknetserverdata.staticpasswordhint.md)
</td><td>
</td><td>
string
</td><td>
The generic password prompt for the server
</td></tr>
</tbody></table>
@@ -1,13 +0,0 @@
<!-- Do not edit this file. It is automatically generated by API Documenter. -->
[Home](./index.md) &gt; [bitburner](./bitburner.md) &gt; [DarknetServerData](./bitburner.darknetserverdata.md) &gt; [passwordHintData](./bitburner.darknetserverdata.passwordhintdata.md)
## DarknetServerData.passwordHintData property
Data associated with the password hint
**Signature:**
```typescript
passwordHintData: string;
```
@@ -1,13 +0,0 @@
<!-- Do not edit this file. It is automatically generated by API Documenter. -->
[Home](./index.md) &gt; [bitburner](./bitburner.md) &gt; [DarknetServerData](./bitburner.darknetserverdata.md) &gt; [purchasedByPlayer](./bitburner.darknetserverdata.purchasedbyplayer.md)
## DarknetServerData.purchasedByPlayer property
Whether this server was purchased by the player. Always false for darknet servers
**Signature:**
```typescript
purchasedByPlayer: boolean;
```
@@ -1,13 +0,0 @@
<!-- Do not edit this file. It is automatically generated by API Documenter. -->
[Home](./index.md) &gt; [bitburner](./bitburner.md) &gt; [DarknetServerData](./bitburner.darknetserverdata.md) &gt; [ramUsed](./bitburner.darknetserverdata.ramused.md)
## DarknetServerData.ramUsed property
Used RAM (GB). i.e. unavailable RAM
**Signature:**
```typescript
ramUsed: number;
```
@@ -1,13 +0,0 @@
<!-- Do not edit this file. It is automatically generated by API Documenter. -->
[Home](./index.md) &gt; [bitburner](./bitburner.md) &gt; [DarknetServerData](./bitburner.darknetserverdata.md) &gt; [requiredCharismaSkill](./bitburner.darknetserverdata.requiredcharismaskill.md)
## DarknetServerData.requiredCharismaSkill property
The charisma skill required to heartbleed the server
**Signature:**
```typescript
requiredCharismaSkill: number;
```
@@ -1,13 +0,0 @@
<!-- Do not edit this file. It is automatically generated by API Documenter. -->
[Home](./index.md) &gt; [bitburner](./bitburner.md) &gt; [DarknetServerData](./bitburner.darknetserverdata.md) &gt; [staticPasswordHint](./bitburner.darknetserverdata.staticpasswordhint.md)
## DarknetServerData.staticPasswordHint property
The generic password prompt for the server
**Signature:**
```typescript
staticPasswordHint: string;
```
@@ -1,8 +1,8 @@
<!-- Do not edit this file. It is automatically generated by API Documenter. -->
[Home](./index.md) &gt; [bitburner](./bitburner.md) &gt; [DarknetServerData](./bitburner.darknetserverdata.md) &gt; [blockedRam](./bitburner.darknetserverdata.blockedram.md)
[Home](./index.md) &gt; [bitburner](./bitburner.md) &gt; [DarknetServerDetails](./bitburner.darknetserverdetails.md) &gt; [blockedRam](./bitburner.darknetserverdetails.blockedram.md)
## DarknetServerData.blockedRam property
## DarknetServerDetails.blockedRam property
The amount of ram blocked by the server owner
@@ -0,0 +1,13 @@
<!-- Do not edit this file. It is automatically generated by API Documenter. -->
[Home](./index.md) &gt; [bitburner](./bitburner.md) &gt; [DarknetServerDetails](./bitburner.darknetserverdetails.md) &gt; [data](./bitburner.darknetserverdetails.data.md)
## DarknetServerDetails.data property
Data from the passwordHint, if any.
**Signature:**
```typescript
data: string;
```
@@ -1,10 +1,10 @@
<!-- Do not edit this file. It is automatically generated by API Documenter. -->
[Home](./index.md) &gt; [bitburner](./bitburner.md) &gt; [DarknetServerData](./bitburner.darknetserverdata.md) &gt; [depth](./bitburner.darknetserverdata.depth.md)
[Home](./index.md) &gt; [bitburner](./bitburner.md) &gt; [DarknetServerDetails](./bitburner.darknetserverdetails.md) &gt; [depth](./bitburner.darknetserverdetails.depth.md)
## DarknetServerData.depth property
## DarknetServerDetails.depth property
The depth of the server in the net
The current depth in the darknet of the server
**Signature:**
@@ -1,8 +1,8 @@
<!-- Do not edit this file. It is automatically generated by API Documenter. -->
[Home](./index.md) &gt; [bitburner](./bitburner.md) &gt; [DarknetServerData](./bitburner.darknetserverdata.md) &gt; [difficulty](./bitburner.darknetserverdata.difficulty.md)
[Home](./index.md) &gt; [bitburner](./bitburner.md) &gt; [DarknetServerDetails](./bitburner.darknetserverdetails.md) &gt; [difficulty](./bitburner.darknetserverdetails.difficulty.md)
## DarknetServerData.difficulty property
## DarknetServerDetails.difficulty property
The difficulty rating of the server, associated with its original depth in the net
@@ -1,8 +1,8 @@
<!-- Do not edit this file. It is automatically generated by API Documenter. -->
[Home](./index.md) &gt; [bitburner](./bitburner.md) &gt; [ServerAuthDetails](./bitburner.serverauthdetails.md) &gt; [hasSession](./bitburner.serverauthdetails.hassession.md)
[Home](./index.md) &gt; [bitburner](./bitburner.md) &gt; [DarknetServerDetails](./bitburner.darknetserverdetails.md) &gt; [hasSession](./bitburner.darknetserverdetails.hassession.md)
## ServerAuthDetails.hasSession property
## DarknetServerDetails.hasSession property
True if the current script has authenticated to this server with the right password using authenticate() or connectToSesssion()
@@ -0,0 +1,13 @@
<!-- Do not edit this file. It is automatically generated by API Documenter. -->
[Home](./index.md) &gt; [bitburner](./bitburner.md) &gt; [DarknetServerDetails](./bitburner.darknetserverdetails.md) &gt; [isConnectedToCurrentServer](./bitburner.darknetserverdetails.isconnectedtocurrentserver.md)
## DarknetServerDetails.isConnectedToCurrentServer property
True if the server is directly connected to the current server
**Signature:**
```typescript
isConnectedToCurrentServer: boolean;
```
@@ -1,8 +1,8 @@
<!-- Do not edit this file. It is automatically generated by API Documenter. -->
[Home](./index.md) &gt; [bitburner](./bitburner.md) &gt; [DarknetServerData](./bitburner.darknetserverdata.md) &gt; [isStationary](./bitburner.darknetserverdata.isstationary.md)
[Home](./index.md) &gt; [bitburner](./bitburner.md) &gt; [DarknetServerDetails](./bitburner.darknetserverdetails.md) &gt; [isStationary](./bitburner.darknetserverdetails.isstationary.md)
## DarknetServerData.isStationary property
## DarknetServerDetails.isStationary property
If this darknet server cannot be moved. True for fixed/story servers.
@@ -1,8 +1,8 @@
<!-- Do not edit this file. It is automatically generated by API Documenter. -->
[Home](./index.md) &gt; [bitburner](./bitburner.md) &gt; [ServerAuthDetails](./bitburner.serverauthdetails.md) &gt; [logTrafficInterval](./bitburner.serverauthdetails.logtrafficinterval.md)
[Home](./index.md) &gt; [bitburner](./bitburner.md) &gt; [DarknetServerDetails](./bitburner.darknetserverdetails.md) &gt; [logTrafficInterval](./bitburner.darknetserverdetails.logtrafficinterval.md)
## ServerAuthDetails.logTrafficInterval property
## DarknetServerDetails.logTrafficInterval property
The frequency (in seconds) of the server adding its own messages to its logs, visible with heartBleed().
+286
View File
@@ -0,0 +1,286 @@
<!-- Do not edit this file. It is automatically generated by API Documenter. -->
[Home](./index.md) &gt; [bitburner](./bitburner.md) &gt; [DarknetServerDetails](./bitburner.darknetserverdetails.md)
## DarknetServerDetails interface
Details about a darknet server
**Signature:**
```typescript
interface DarknetServerDetails
```
## Properties
<table><thead><tr><th>
Property
</th><th>
Modifiers
</th><th>
Type
</th><th>
Description
</th></tr></thead>
<tbody><tr><td>
[blockedRam](./bitburner.darknetserverdetails.blockedram.md)
</td><td>
</td><td>
number
</td><td>
The amount of ram blocked by the server owner
</td></tr>
<tr><td>
[data](./bitburner.darknetserverdetails.data.md)
</td><td>
</td><td>
string
</td><td>
Data from the passwordHint, if any.
</td></tr>
<tr><td>
[depth](./bitburner.darknetserverdetails.depth.md)
</td><td>
</td><td>
number
</td><td>
The current depth in the darknet of the server
</td></tr>
<tr><td>
[difficulty](./bitburner.darknetserverdetails.difficulty.md)
</td><td>
</td><td>
number
</td><td>
The difficulty rating of the server, associated with its original depth in the net
</td></tr>
<tr><td>
[hasSession](./bitburner.darknetserverdetails.hassession.md)
</td><td>
</td><td>
boolean
</td><td>
True if the current script has authenticated to this server with the right password using authenticate() or connectToSesssion()
</td></tr>
<tr><td>
[isConnectedToCurrentServer](./bitburner.darknetserverdetails.isconnectedtocurrentserver.md)
</td><td>
</td><td>
boolean
</td><td>
True if the server is directly connected to the current server
</td></tr>
<tr><td>
[isStationary](./bitburner.darknetserverdetails.isstationary.md)
</td><td>
</td><td>
boolean
</td><td>
If this darknet server cannot be moved. True for fixed/story servers.
</td></tr>
<tr><td>
[logTrafficInterval](./bitburner.darknetserverdetails.logtrafficinterval.md)
</td><td>
</td><td>
number
</td><td>
The frequency (in seconds) of the server adding its own messages to its logs, visible with heartBleed().
</td></tr>
<tr><td>
[modelId](./bitburner.darknetserverdetails.modelid.md)
</td><td>
</td><td>
string
</td><td>
The model of the server. Similar models have similar vulnerabilities. The model list is intentionally undocumented. You are supposed to experiment and discover the models.
</td></tr>
<tr><td>
[passwordFormat](./bitburner.darknetserverdetails.passwordformat.md)
</td><td>
</td><td>
"numeric" \| "alphabetic" \| "alphanumeric" \| "ASCII" \| "unicode"
</td><td>
The character set used in the password
</td></tr>
<tr><td>
[passwordHint](./bitburner.darknetserverdetails.passwordhint.md)
</td><td>
</td><td>
string
</td><td>
Static password reminder text set for this server.
</td></tr>
<tr><td>
[passwordLength](./bitburner.darknetserverdetails.passwordlength.md)
</td><td>
</td><td>
number
</td><td>
The number of characters in the password
</td></tr>
<tr><td>
[requiredCharismaSkill](./bitburner.darknetserverdetails.requiredcharismaskill.md)
</td><td>
</td><td>
number
</td><td>
The charisma skill required to authenticate on the server
</td></tr>
</tbody></table>
@@ -1,8 +1,8 @@
<!-- Do not edit this file. It is automatically generated by API Documenter. -->
[Home](./index.md) &gt; [bitburner](./bitburner.md) &gt; [DarknetServerData](./bitburner.darknetserverdata.md) &gt; [modelId](./bitburner.darknetserverdata.modelid.md)
[Home](./index.md) &gt; [bitburner](./bitburner.md) &gt; [DarknetServerDetails](./bitburner.darknetserverdetails.md) &gt; [modelId](./bitburner.darknetserverdetails.modelid.md)
## DarknetServerData.modelId property
## DarknetServerDetails.modelId property
The model of the server. Similar models have similar vulnerabilities. The model list is intentionally undocumented. You are supposed to experiment and discover the models.
@@ -1,8 +1,8 @@
<!-- Do not edit this file. It is automatically generated by API Documenter. -->
[Home](./index.md) &gt; [bitburner](./bitburner.md) &gt; [ServerAuthDetails](./bitburner.serverauthdetails.md) &gt; [passwordFormat](./bitburner.serverauthdetails.passwordformat.md)
[Home](./index.md) &gt; [bitburner](./bitburner.md) &gt; [DarknetServerDetails](./bitburner.darknetserverdetails.md) &gt; [passwordFormat](./bitburner.darknetserverdetails.passwordformat.md)
## ServerAuthDetails.passwordFormat property
## DarknetServerDetails.passwordFormat property
The character set used in the password
@@ -0,0 +1,13 @@
<!-- Do not edit this file. It is automatically generated by API Documenter. -->
[Home](./index.md) &gt; [bitburner](./bitburner.md) &gt; [DarknetServerDetails](./bitburner.darknetserverdetails.md) &gt; [passwordHint](./bitburner.darknetserverdetails.passwordhint.md)
## DarknetServerDetails.passwordHint property
Static password reminder text set for this server.
**Signature:**
```typescript
passwordHint: string;
```
@@ -0,0 +1,13 @@
<!-- Do not edit this file. It is automatically generated by API Documenter. -->
[Home](./index.md) &gt; [bitburner](./bitburner.md) &gt; [DarknetServerDetails](./bitburner.darknetserverdetails.md) &gt; [passwordLength](./bitburner.darknetserverdetails.passwordlength.md)
## DarknetServerDetails.passwordLength property
The number of characters in the password
**Signature:**
```typescript
passwordLength: number;
```
@@ -0,0 +1,13 @@
<!-- Do not edit this file. It is automatically generated by API Documenter. -->
[Home](./index.md) &gt; [bitburner](./bitburner.md) &gt; [DarknetServerDetails](./bitburner.darknetserverdetails.md) &gt; [requiredCharismaSkill](./bitburner.darknetserverdetails.requiredcharismaskill.md)
## DarknetServerDetails.requiredCharismaSkill property
The charisma skill required to authenticate on the server
**Signature:**
```typescript
requiredCharismaSkill: number;
```
+2 -13
View File
@@ -382,12 +382,12 @@ Instability of the darknet caused by excessive backdoor-ing of servers.
</td></tr>
<tr><td>
[DarknetServerData](./bitburner.darknetserverdata.md)
[DarknetServerDetails](./bitburner.darknetserverdetails.md)
</td><td>
Darknet server data.
Details about a darknet server
</td></tr>
@@ -1218,17 +1218,6 @@ Various info about resets
A server. Not all servers have all of these properties - optional properties are missing on certain servers.
</td></tr>
<tr><td>
[ServerAuthDetails](./bitburner.serverauthdetails.md)
</td><td>
Details about a server's authentication schema
</td></tr>
<tr><td>
+3 -3
View File
@@ -6,12 +6,12 @@
Returns data of a server.
If the server is a darknet server and has recently gone offline, it will return a dummy server object with `isOnline: false`<!-- -->.
If the server is a darknet server, it will also contain the "isOnline" field. If the darknet server has recently gone offline, the returned object will be a dummy server object with `isOnline: false`<!-- -->.
**Signature:**
```typescript
getServer(host?: string): Server | (DarknetServerData & { isOnline: boolean });
getServer(host?: string): Server & { isOnline?: boolean };
```
## Parameters
@@ -52,7 +52,7 @@ _(Optional)_ Optional. Hostname/IP of the server. Defaults to the hostname of th
**Returns:**
[Server](./bitburner.server.md) \| ([DarknetServerData](./bitburner.darknetserverdata.md) &amp; { isOnline: boolean })
[Server](./bitburner.server.md) &amp; { isOnline?: boolean }
Data of the server.
+1 -1
View File
@@ -929,7 +929,7 @@ Get the ram cost of a script.
Returns data of a server.
If the server is a darknet server and has recently gone offline, it will return a dummy server object with `isOnline: false`<!-- -->.
If the server is a darknet server, it will also contain the "isOnline" field. If the darknet server has recently gone offline, the returned object will be a dummy server object with `isOnline: false`<!-- -->.
</td></tr>
@@ -1,13 +0,0 @@
<!-- Do not edit this file. It is automatically generated by API Documenter. -->
[Home](./index.md) &gt; [bitburner](./bitburner.md) &gt; [ServerAuthDetails](./bitburner.serverauthdetails.md) &gt; [data](./bitburner.serverauthdetails.data.md)
## ServerAuthDetails.data property
Data from the passwordHint, if any.
**Signature:**
```typescript
data: string;
```
@@ -1,13 +0,0 @@
<!-- Do not edit this file. It is automatically generated by API Documenter. -->
[Home](./index.md) &gt; [bitburner](./bitburner.md) &gt; [ServerAuthDetails](./bitburner.serverauthdetails.md) &gt; [isConnectedToCurrentServer](./bitburner.serverauthdetails.isconnectedtocurrentserver.md)
## ServerAuthDetails.isConnectedToCurrentServer property
True if the server is directly connected to the current server
**Signature:**
```typescript
isConnectedToCurrentServer: boolean;
```
-191
View File
@@ -1,191 +0,0 @@
<!-- Do not edit this file. It is automatically generated by API Documenter. -->
[Home](./index.md) &gt; [bitburner](./bitburner.md) &gt; [ServerAuthDetails](./bitburner.serverauthdetails.md)
## ServerAuthDetails interface
Details about a server's authentication schema
**Signature:**
```typescript
interface ServerAuthDetails
```
## Properties
<table><thead><tr><th>
Property
</th><th>
Modifiers
</th><th>
Type
</th><th>
Description
</th></tr></thead>
<tbody><tr><td>
[data](./bitburner.serverauthdetails.data.md)
</td><td>
</td><td>
string
</td><td>
Data from the passwordHint, if any.
</td></tr>
<tr><td>
[hasSession](./bitburner.serverauthdetails.hassession.md)
</td><td>
</td><td>
boolean
</td><td>
True if the current script has authenticated to this server with the right password using authenticate() or connectToSesssion()
</td></tr>
<tr><td>
[isConnectedToCurrentServer](./bitburner.serverauthdetails.isconnectedtocurrentserver.md)
</td><td>
</td><td>
boolean
</td><td>
True if the server is directly connected to the current server
</td></tr>
<tr><td>
[logTrafficInterval](./bitburner.serverauthdetails.logtrafficinterval.md)
</td><td>
</td><td>
number
</td><td>
The frequency (in seconds) of the server adding its own messages to its logs, visible with heartBleed().
</td></tr>
<tr><td>
[modelId](./bitburner.serverauthdetails.modelid.md)
</td><td>
</td><td>
string
</td><td>
The model ID of the server. Similar models share vulnerabilities.
</td></tr>
<tr><td>
[passwordFormat](./bitburner.serverauthdetails.passwordformat.md)
</td><td>
</td><td>
"numeric" \| "alphabetic" \| "alphanumeric" \| "ASCII" \| "unicode"
</td><td>
The character set used in the password
</td></tr>
<tr><td>
[passwordHint](./bitburner.serverauthdetails.passwordhint.md)
</td><td>
</td><td>
string
</td><td>
Static password reminder text set for this server.
</td></tr>
<tr><td>
[passwordLength](./bitburner.serverauthdetails.passwordlength.md)
</td><td>
</td><td>
number
</td><td>
The number of characters in the password
</td></tr>
</tbody></table>
@@ -1,13 +0,0 @@
<!-- Do not edit this file. It is automatically generated by API Documenter. -->
[Home](./index.md) &gt; [bitburner](./bitburner.md) &gt; [ServerAuthDetails](./bitburner.serverauthdetails.md) &gt; [modelId](./bitburner.serverauthdetails.modelid.md)
## ServerAuthDetails.modelId property
The model ID of the server. Similar models share vulnerabilities.
**Signature:**
```typescript
modelId: string;
```
@@ -1,13 +0,0 @@
<!-- Do not edit this file. It is automatically generated by API Documenter. -->
[Home](./index.md) &gt; [bitburner](./bitburner.md) &gt; [ServerAuthDetails](./bitburner.serverauthdetails.md) &gt; [passwordHint](./bitburner.serverauthdetails.passwordhint.md)
## ServerAuthDetails.passwordHint property
Static password reminder text set for this server.
**Signature:**
```typescript
passwordHint: string;
```
@@ -1,13 +0,0 @@
<!-- Do not edit this file. It is automatically generated by API Documenter. -->
[Home](./index.md) &gt; [bitburner](./bitburner.md) &gt; [ServerAuthDetails](./bitburner.serverauthdetails.md) &gt; [passwordLength](./bitburner.serverauthdetails.passwordlength.md)
## ServerAuthDetails.passwordLength property
The number of characters in the password
**Signature:**
```typescript
passwordLength: number;
```
+20 -3
View File
@@ -1,4 +1,5 @@
import type { _ValueOf, DarknetServerData } from "@nsdefs";
import type { _ValueOf, DarknetServerDetails } from "@nsdefs";
import type { DarknetServerData } from "./utils/darknetServerUtils";
export const HORIZONTAL_CONNECTION_CHANCE = 0.5;
export const VERTICAL_CONNECTION_CHANCE = 0.3;
@@ -67,7 +68,7 @@ export const ResponseCodeEnum = {
ServiceUnavailable: 503,
} as const;
export const exampleDarknetServerData: DarknetServerData = {
export const exampleDarknetServerData = {
hostname: "",
ip: "",
hasAdminRights: false,
@@ -87,4 +88,20 @@ export const exampleDarknetServerData: DarknetServerData = {
logTrafficInterval: -1,
isStationary: false,
purchasedByPlayer: false,
} as const;
} as const satisfies DarknetServerData;
export const exampleDarknetServerDetails = {
isConnectedToCurrentServer: false,
hasSession: false,
modelId: exampleDarknetServerData.modelId,
passwordHint: exampleDarknetServerData.staticPasswordHint,
data: exampleDarknetServerData.passwordHintData,
logTrafficInterval: exampleDarknetServerData.logTrafficInterval,
passwordLength: -1,
passwordFormat: "numeric",
blockedRam: exampleDarknetServerData.blockedRam,
difficulty: exampleDarknetServerData.difficulty,
requiredCharismaSkill: exampleDarknetServerData.requiredCharismaSkill,
depth: exampleDarknetServerData.depth,
isStationary: exampleDarknetServerData.isStationary,
} as const satisfies DarknetServerDetails;
+1 -1
View File
@@ -85,7 +85,7 @@ export const getCCTReward = (difficulty: number, server: DarknetServer): string
};
export const getMoneyReward = (difficulty: number): string => {
const sf15_3Factor = Player.activeSourceFileLvl(15) > 3 ? 1.5 : 1;
const sf15_3Factor = Player.activeSourceFileLvl(15) >= 3 ? 1.5 : 1;
const reward =
1.2 ** difficulty *
1e7 *
+7 -13
View File
@@ -1,5 +1,5 @@
import { Player } from "@player";
import type { DarknetServerData, Person as IPerson } from "@nsdefs";
import type { Person as IPerson, DarknetServerDetails } from "@nsdefs";
import { AugmentationName, CompletedProgramName, LiteratureName } from "@enums";
import {
commonPasswordDictionary,
@@ -16,17 +16,16 @@ import { DarknetServer } from "../../Server/DarknetServer";
import { GenericResponseMessage, ModelIds, NET_WIDTH, ResponseCodeEnum } from "../Enums";
import { addCacheToServer } from "./cacheFiles";
import { populateDarknet } from "../controllers/NetworkGenerator";
import { getDarknetServer } from "../utils/darknetServerUtils";
import { type DarknetServerData, getDarknetServer } from "../utils/darknetServerUtils";
import {
getAllMovableDarknetServers,
getBackdooredDarknetServers,
getNearbyNonEmptyPasswordServer,
getStasisLinkServers,
} from "../utils/darknetNetworkUtils";
import { getSharedChars, getTwoCharsInPassword } from "../utils/darknetAuthUtils";
import { getTwoCharsInPassword } from "../utils/darknetAuthUtils";
import { getTorRouter } from "../../Server/ServerHelpers";
import { DarknetConstants } from "../Constants";
import { GetServer } from "../../Server/AllServers";
import { isLabyrinthServer } from "./labyrinth";
import { NetscriptContext } from "../../Netscript/APIWrapper";
import { helpers } from "../../Netscript/NetscriptHelpers";
@@ -54,15 +53,15 @@ export const handleFailedAuth = (server: DarknetServer, threads: number) => {
* Returns the time it takes to authenticate on a server in milliseconds
* @param darknetServerData - the target server to attempt a password on
* @param person - the player's character
* @param attemptedPassword - the password being attempted
* @param correctCharsInPassword - the number of correct characters in the password. Only used for TimingAttack servers, where it adds some small auth time delay per char
* @param threads - the number of threads used for the password attempt (which speeds up the process)
* @param linear - if true, the time scaling is linear with the number of threads instead of having diminishing returns
*/
export const calculateAuthenticationTime = (
darknetServerData: DarknetServerData,
darknetServerData: DarknetServerData | DarknetServerDetails,
person: IPerson = Player,
threads = 1,
attemptedPassword = "",
correctCharsInPassword = 0,
linear = false,
) => {
const chaRequired = darknetServerData.requiredCharismaSkill;
@@ -83,13 +82,8 @@ export const calculateAuthenticationTime = (
const time =
baseTime * skillFactor * backdoorFactor * underleveledFactor * hasBootsFactor * hasSf15_2Factor * threadsFactor;
// We need to call GetServer and check if it's a dnet server later because this function can be called by formulas
// APIs (darknetServerData.hostname may be an invalid hostname).
const server = GetServer(darknetServerData.hostname);
const password = server instanceof DarknetServer ? server.password : "";
// Add extra time for timing attack server, per correct character
const sharedChars =
darknetServerData.modelId === ModelIds.TimingAttack ? getSharedChars(password, attemptedPassword) : 0;
const sharedChars = darknetServerData.modelId === ModelIds.TimingAttack ? correctCharsInPassword : 0;
const sharedCharsExtraTime = sharedChars * 50 * threadsFactor;
return time * calculateIntelligenceBonus(person.skills.intelligence, 0.25) + sharedCharsExtraTime;
+7 -2
View File
@@ -8,11 +8,12 @@ import { addCacheToServer } from "./cacheFiles";
import { DarknetState } from "../models/DarknetState";
import { getAllMovableDarknetServers } from "../utils/darknetNetworkUtils";
import { CompletedProgramName } from "@enums";
import type { DarknetServerData, Person as IPerson } from "@nsdefs";
import type { Person as IPerson, DarknetServerDetails } from "@nsdefs";
import { clampNumber } from "../../utils/helpers/clampNumber";
import { ResponseCodeEnum } from "../Enums";
import { isLabyrinthServer } from "./labyrinth";
import { roundToTwo } from "../../utils/helpers/roundToTwo";
import type { DarknetServerData } from "../utils/darknetServerUtils";
/*
* Handles the effects of removing some blocked RAM from a Darknet server.
@@ -67,7 +68,11 @@ export const handleRamBlockClearedRewards = (server: DarknetServer) => {
/*
* Calculates the amount of RAM block that is removed from a Darknet server, based on the number of threads and the player's charisma.
*/
export const getRamBlockRemoved = (darknetServerData: DarknetServerData, threads = 1, player: IPerson = Player) => {
export const getRamBlockRemoved = (
darknetServerData: DarknetServerData | DarknetServerDetails,
threads = 1,
player: IPerson = Player,
) => {
const difficulty = darknetServerData.difficulty;
const remainingRamBlock = darknetServerData.blockedRam;
const charismaFactor = 1 + player.skills.charisma / 100;
+47
View File
@@ -19,3 +19,50 @@ export function getDarknetServerOrThrow(host: string): DarknetServer {
}
return server;
}
/**
* Darknet server data.
*/
export interface DarknetServerData {
/** Hostname. Must be unique */
hostname: string;
/** IP Address. Must be unique */
ip: string;
/** Flag indicating whether the player has admin/root access to this server */
hasAdminRights: boolean;
/** Flag indicating whether the player's terminal is currently connected to this server */
isConnectedTo: boolean;
/** Number of CPU cores */
cpuCores: number;
/** Used RAM (GB). i.e. unavailable RAM */
ramUsed: number;
/** Max RAM (GB) of this server */
maxRam: number;
/** Flag indicating whether this server has a backdoor installed by the player */
backdoorInstalled: boolean;
/** If the server has a stasis link applied */
hasStasisLink: boolean;
/** The amount of ram blocked by the server owner */
blockedRam: number;
/**
* The model of the server. Similar models have similar vulnerabilities. The model list is intentionally undocumented.
* You are supposed to experiment and discover the models.
*/
modelId: string;
/** The generic password prompt for the server */
staticPasswordHint: string;
/** Data associated with the password hint */
passwordHintData: string;
/** The difficulty rating of the server, associated with its original depth in the net */
difficulty: number;
/** The depth of the server in the net */
depth: number;
/** The charisma skill required to heartbleed the server */
requiredCharismaSkill: number;
/** The interval at which the server periodically adds to its logs, in seconds. */
logTrafficInterval: number;
/** If this darknet server cannot be moved. True for fixed/story servers. */
isStationary: boolean;
/** Whether this server was purchased by the player. Always false for darknet servers */
purchasedByPlayer: boolean;
}
@@ -20,7 +20,7 @@ In some cases, the only way to get to deeper parts of the net is to hitch a ride
**There is an example starter script at the bottom of this document, to see some of these API methods in action.**
- `dnet.getServerAuthDetails(hostname)` tells you a server's password hint and format, and if the server is offline or connected to the current server.
- `dnet.getServerDetails(hostname)` tells you a server's password hint and format, and if the server is offline or connected to the current server.
- `ns.dnet.probe()` lets you find darknet servers directly connected to your current server. Use this to find targets to crack and copy your script onto.
- `await ns.dnet.authenticate(hostname, password)` lets you guess and check passwords for servers directly connected to your script's server. If you guess right, you get admin access and can use `exec` and `scp` to move scripts onto that server.
- Some servers require interactive feedback to guess their password. Use `await ns.dnet.heartbleed(hostname)` to check that server's logs and get clues after you attempt a password.
@@ -86,12 +86,12 @@ Darknet servers cannot simply be broken into with a few port openers you can buy
### Cracking servers with dnet.authenticate and dnet.heartbleed
Darknet servers require a password to interact with. To get started, use `dnet.getServerAuthDetails` to find out critical information about a server. It will give a hint to the password, and tell you if the server is still online.
Darknet servers require a password to interact with. To get started, use `dnet.getServerDetails` to find out critical information about a server. It will give a hint to the password, and tell you if the server is still online.
You can use `await ns.dnet.authenticate` to check if a guessed password is correct. (Remember to await it, network requests take time!) The higher your charisma, the faster you can smooth-talk your way through these vulnerable servers' security. Using more threads also speeds up this process. It may be faster to divide up the work across multiple scripts, if you can coordinate them. (Note that **`dnet.authenticate` can only target nearby connected servers**. You can verify if a server is connected to the current one using `dnet.probe` or `dnet.getServerAuthDetails`.)
You can use `await ns.dnet.authenticate` to check if a guessed password is correct. (Remember to await it, network requests take time!) The higher your charisma, the faster you can smooth-talk your way through these vulnerable servers' security. Using more threads also speeds up this process. It may be faster to divide up the work across multiple scripts, if you can coordinate them. (Note that **`dnet.authenticate` can only target nearby connected servers**. You can verify if a server is connected to the current one using `dnet.probe` or `dnet.getServerDetails`.)
```js
const details = ns.dnet.getServerAuthDetails(hostname);
const details = ns.dnet.getServerDetails(hostname);
if (!details.isConnectedToCurrentServer || !details.isOnline) {
/* If the server isn't connected or is offline, we can't authenticate */
return false;
@@ -123,12 +123,12 @@ Darknet servers are password-protected. This means that you will need to get a s
Once you have authenticated, other scripts can then connect to that same server using `dnet.connectToSession` and the password for the server. This is synchronous and can be done at any distance, meaning you don't have to wait for an authenticate call.
`scp` file transfers can be performed at any distance once you have established a session. However, `exec` also requires the script to either be run from a server adjacent to and connected to the target server, or a backdoor or stasis link on the target server. You can identify direct connections using `probe` or `getServerAuthDetails`.
`scp` file transfers can be performed at any distance once you have established a session. However, `exec` also requires the script to either be run from a server adjacent to and connected to the target server, or a backdoor or stasis link on the target server. You can identify direct connections using `probe` or `getServerDetails`.
```js
// the darknet server in "hostname" must be either backdoored, stasis linked, or directly connected to the server this script is running on
// to allow exec calls from the current server
if (ns.dnet.getServerAuthDetails(hostname).isConnectedToCurrentServer) {
if (ns.dnet.getServerDetails(hostname).isConnectedToCurrentServer) {
ns.dnet.connectToSession(hostname, previouslyDiscoveredPassword);
ns.scp("my_script.js", hostname);
ns.exec("my_script.js", hostname, {
@@ -214,7 +214,7 @@ export async function main(ns) {
*/
export const serverSolver = async (ns, hostname) => {
// Get key info about the server, so we know what kind it is and how to authenticate with it
const details = ns.dnet.getServerAuthDetails(hostname);
const details = ns.dnet.getServerDetails(hostname);
if (!details.isConnectedToCurrentServer || !details.isOnline) {
// If the server isn't connected or is offline, we can't authenticate
return false;
+30 -60
View File
@@ -428,7 +428,7 @@ import nsDoc_bitburner_darknet_connecttosession_md from "../../markdown/bitburne
import nsDoc_bitburner_darknet_getblockedram_md from "../../markdown/bitburner.darknet.getblockedram.md?raw";
import nsDoc_bitburner_darknet_getdarknetinstability_md from "../../markdown/bitburner.darknet.getdarknetinstability.md?raw";
import nsDoc_bitburner_darknet_getdepth_md from "../../markdown/bitburner.darknet.getdepth.md?raw";
import nsDoc_bitburner_darknet_getserverauthdetails_md from "../../markdown/bitburner.darknet.getserverauthdetails.md?raw";
import nsDoc_bitburner_darknet_getserverdetails_md from "../../markdown/bitburner.darknet.getserverdetails.md?raw";
import nsDoc_bitburner_darknet_getserverrequiredcharismalevel_md from "../../markdown/bitburner.darknet.getserverrequiredcharismalevel.md?raw";
import nsDoc_bitburner_darknet_getstasislinkedservers_md from "../../markdown/bitburner.darknet.getstasislinkedservers.md?raw";
import nsDoc_bitburner_darknet_getstasislinklimit_md from "../../markdown/bitburner.darknet.getstasislinklimit.md?raw";
@@ -456,26 +456,20 @@ import nsDoc_bitburner_darknetinstability_md from "../../markdown/bitburner.dark
import nsDoc_bitburner_darknetresponsecode_md from "../../markdown/bitburner.darknetresponsecode.md?raw";
import nsDoc_bitburner_darknetresponsecodetype_md from "../../markdown/bitburner.darknetresponsecodetype.md?raw";
import nsDoc_bitburner_darknetresult_md from "../../markdown/bitburner.darknetresult.md?raw";
import nsDoc_bitburner_darknetserverdata_backdoorinstalled_md from "../../markdown/bitburner.darknetserverdata.backdoorinstalled.md?raw";
import nsDoc_bitburner_darknetserverdata_blockedram_md from "../../markdown/bitburner.darknetserverdata.blockedram.md?raw";
import nsDoc_bitburner_darknetserverdata_cpucores_md from "../../markdown/bitburner.darknetserverdata.cpucores.md?raw";
import nsDoc_bitburner_darknetserverdata_depth_md from "../../markdown/bitburner.darknetserverdata.depth.md?raw";
import nsDoc_bitburner_darknetserverdata_difficulty_md from "../../markdown/bitburner.darknetserverdata.difficulty.md?raw";
import nsDoc_bitburner_darknetserverdata_hasadminrights_md from "../../markdown/bitburner.darknetserverdata.hasadminrights.md?raw";
import nsDoc_bitburner_darknetserverdata_hasstasislink_md from "../../markdown/bitburner.darknetserverdata.hasstasislink.md?raw";
import nsDoc_bitburner_darknetserverdata_hostname_md from "../../markdown/bitburner.darknetserverdata.hostname.md?raw";
import nsDoc_bitburner_darknetserverdata_ip_md from "../../markdown/bitburner.darknetserverdata.ip.md?raw";
import nsDoc_bitburner_darknetserverdata_isconnectedto_md from "../../markdown/bitburner.darknetserverdata.isconnectedto.md?raw";
import nsDoc_bitburner_darknetserverdata_isstationary_md from "../../markdown/bitburner.darknetserverdata.isstationary.md?raw";
import nsDoc_bitburner_darknetserverdata_logtrafficinterval_md from "../../markdown/bitburner.darknetserverdata.logtrafficinterval.md?raw";
import nsDoc_bitburner_darknetserverdata_maxram_md from "../../markdown/bitburner.darknetserverdata.maxram.md?raw";
import nsDoc_bitburner_darknetserverdata_md from "../../markdown/bitburner.darknetserverdata.md?raw";
import nsDoc_bitburner_darknetserverdata_modelid_md from "../../markdown/bitburner.darknetserverdata.modelid.md?raw";
import nsDoc_bitburner_darknetserverdata_passwordhintdata_md from "../../markdown/bitburner.darknetserverdata.passwordhintdata.md?raw";
import nsDoc_bitburner_darknetserverdata_purchasedbyplayer_md from "../../markdown/bitburner.darknetserverdata.purchasedbyplayer.md?raw";
import nsDoc_bitburner_darknetserverdata_ramused_md from "../../markdown/bitburner.darknetserverdata.ramused.md?raw";
import nsDoc_bitburner_darknetserverdata_requiredcharismaskill_md from "../../markdown/bitburner.darknetserverdata.requiredcharismaskill.md?raw";
import nsDoc_bitburner_darknetserverdata_staticpasswordhint_md from "../../markdown/bitburner.darknetserverdata.staticpasswordhint.md?raw";
import nsDoc_bitburner_darknetserverdetails_blockedram_md from "../../markdown/bitburner.darknetserverdetails.blockedram.md?raw";
import nsDoc_bitburner_darknetserverdetails_data_md from "../../markdown/bitburner.darknetserverdetails.data.md?raw";
import nsDoc_bitburner_darknetserverdetails_depth_md from "../../markdown/bitburner.darknetserverdetails.depth.md?raw";
import nsDoc_bitburner_darknetserverdetails_difficulty_md from "../../markdown/bitburner.darknetserverdetails.difficulty.md?raw";
import nsDoc_bitburner_darknetserverdetails_hassession_md from "../../markdown/bitburner.darknetserverdetails.hassession.md?raw";
import nsDoc_bitburner_darknetserverdetails_isconnectedtocurrentserver_md from "../../markdown/bitburner.darknetserverdetails.isconnectedtocurrentserver.md?raw";
import nsDoc_bitburner_darknetserverdetails_isstationary_md from "../../markdown/bitburner.darknetserverdetails.isstationary.md?raw";
import nsDoc_bitburner_darknetserverdetails_logtrafficinterval_md from "../../markdown/bitburner.darknetserverdetails.logtrafficinterval.md?raw";
import nsDoc_bitburner_darknetserverdetails_md from "../../markdown/bitburner.darknetserverdetails.md?raw";
import nsDoc_bitburner_darknetserverdetails_modelid_md from "../../markdown/bitburner.darknetserverdetails.modelid.md?raw";
import nsDoc_bitburner_darknetserverdetails_passwordformat_md from "../../markdown/bitburner.darknetserverdetails.passwordformat.md?raw";
import nsDoc_bitburner_darknetserverdetails_passwordhint_md from "../../markdown/bitburner.darknetserverdetails.passwordhint.md?raw";
import nsDoc_bitburner_darknetserverdetails_passwordlength_md from "../../markdown/bitburner.darknetserverdetails.passwordlength.md?raw";
import nsDoc_bitburner_darknetserverdetails_requiredcharismaskill_md from "../../markdown/bitburner.darknetserverdetails.requiredcharismaskill.md?raw";
import nsDoc_bitburner_division_awareness_md from "../../markdown/bitburner.division.awareness.md?raw";
import nsDoc_bitburner_division_cities_md from "../../markdown/bitburner.division.cities.md?raw";
import nsDoc_bitburner_division_industry_md from "../../markdown/bitburner.division.industry.md?raw";
@@ -1273,15 +1267,6 @@ import nsDoc_bitburner_server_servergrowth_md from "../../markdown/bitburner.ser
import nsDoc_bitburner_server_smtpportopen_md from "../../markdown/bitburner.server.smtpportopen.md?raw";
import nsDoc_bitburner_server_sqlportopen_md from "../../markdown/bitburner.server.sqlportopen.md?raw";
import nsDoc_bitburner_server_sshportopen_md from "../../markdown/bitburner.server.sshportopen.md?raw";
import nsDoc_bitburner_serverauthdetails_data_md from "../../markdown/bitburner.serverauthdetails.data.md?raw";
import nsDoc_bitburner_serverauthdetails_hassession_md from "../../markdown/bitburner.serverauthdetails.hassession.md?raw";
import nsDoc_bitburner_serverauthdetails_isconnectedtocurrentserver_md from "../../markdown/bitburner.serverauthdetails.isconnectedtocurrentserver.md?raw";
import nsDoc_bitburner_serverauthdetails_logtrafficinterval_md from "../../markdown/bitburner.serverauthdetails.logtrafficinterval.md?raw";
import nsDoc_bitburner_serverauthdetails_md from "../../markdown/bitburner.serverauthdetails.md?raw";
import nsDoc_bitburner_serverauthdetails_modelid_md from "../../markdown/bitburner.serverauthdetails.modelid.md?raw";
import nsDoc_bitburner_serverauthdetails_passwordformat_md from "../../markdown/bitburner.serverauthdetails.passwordformat.md?raw";
import nsDoc_bitburner_serverauthdetails_passwordhint_md from "../../markdown/bitburner.serverauthdetails.passwordhint.md?raw";
import nsDoc_bitburner_serverauthdetails_passwordlength_md from "../../markdown/bitburner.serverauthdetails.passwordlength.md?raw";
import nsDoc_bitburner_simpleopponentstats_md from "../../markdown/bitburner.simpleopponentstats.md?raw";
import nsDoc_bitburner_singularity_applytocompany_md from "../../markdown/bitburner.singularity.applytocompany.md?raw";
import nsDoc_bitburner_singularity_b1tflum3_md from "../../markdown/bitburner.singularity.b1tflum3.md?raw";
@@ -2051,7 +2036,7 @@ AllPages["nsDoc/bitburner.darknet.connecttosession.md"] = nsDoc_bitburner_darkne
AllPages["nsDoc/bitburner.darknet.getblockedram.md"] = nsDoc_bitburner_darknet_getblockedram_md;
AllPages["nsDoc/bitburner.darknet.getdarknetinstability.md"] = nsDoc_bitburner_darknet_getdarknetinstability_md;
AllPages["nsDoc/bitburner.darknet.getdepth.md"] = nsDoc_bitburner_darknet_getdepth_md;
AllPages["nsDoc/bitburner.darknet.getserverauthdetails.md"] = nsDoc_bitburner_darknet_getserverauthdetails_md;
AllPages["nsDoc/bitburner.darknet.getserverdetails.md"] = nsDoc_bitburner_darknet_getserverdetails_md;
AllPages["nsDoc/bitburner.darknet.getserverrequiredcharismalevel.md"] = nsDoc_bitburner_darknet_getserverrequiredcharismalevel_md;
AllPages["nsDoc/bitburner.darknet.getstasislinkedservers.md"] = nsDoc_bitburner_darknet_getstasislinkedservers_md;
AllPages["nsDoc/bitburner.darknet.getstasislinklimit.md"] = nsDoc_bitburner_darknet_getstasislinklimit_md;
@@ -2079,26 +2064,20 @@ AllPages["nsDoc/bitburner.darknetinstability.md"] = nsDoc_bitburner_darknetinsta
AllPages["nsDoc/bitburner.darknetresponsecode.md"] = nsDoc_bitburner_darknetresponsecode_md;
AllPages["nsDoc/bitburner.darknetresponsecodetype.md"] = nsDoc_bitburner_darknetresponsecodetype_md;
AllPages["nsDoc/bitburner.darknetresult.md"] = nsDoc_bitburner_darknetresult_md;
AllPages["nsDoc/bitburner.darknetserverdata.backdoorinstalled.md"] = nsDoc_bitburner_darknetserverdata_backdoorinstalled_md;
AllPages["nsDoc/bitburner.darknetserverdata.blockedram.md"] = nsDoc_bitburner_darknetserverdata_blockedram_md;
AllPages["nsDoc/bitburner.darknetserverdata.cpucores.md"] = nsDoc_bitburner_darknetserverdata_cpucores_md;
AllPages["nsDoc/bitburner.darknetserverdata.depth.md"] = nsDoc_bitburner_darknetserverdata_depth_md;
AllPages["nsDoc/bitburner.darknetserverdata.difficulty.md"] = nsDoc_bitburner_darknetserverdata_difficulty_md;
AllPages["nsDoc/bitburner.darknetserverdata.hasadminrights.md"] = nsDoc_bitburner_darknetserverdata_hasadminrights_md;
AllPages["nsDoc/bitburner.darknetserverdata.hasstasislink.md"] = nsDoc_bitburner_darknetserverdata_hasstasislink_md;
AllPages["nsDoc/bitburner.darknetserverdata.hostname.md"] = nsDoc_bitburner_darknetserverdata_hostname_md;
AllPages["nsDoc/bitburner.darknetserverdata.ip.md"] = nsDoc_bitburner_darknetserverdata_ip_md;
AllPages["nsDoc/bitburner.darknetserverdata.isconnectedto.md"] = nsDoc_bitburner_darknetserverdata_isconnectedto_md;
AllPages["nsDoc/bitburner.darknetserverdata.isstationary.md"] = nsDoc_bitburner_darknetserverdata_isstationary_md;
AllPages["nsDoc/bitburner.darknetserverdata.logtrafficinterval.md"] = nsDoc_bitburner_darknetserverdata_logtrafficinterval_md;
AllPages["nsDoc/bitburner.darknetserverdata.maxram.md"] = nsDoc_bitburner_darknetserverdata_maxram_md;
AllPages["nsDoc/bitburner.darknetserverdata.md"] = nsDoc_bitburner_darknetserverdata_md;
AllPages["nsDoc/bitburner.darknetserverdata.modelid.md"] = nsDoc_bitburner_darknetserverdata_modelid_md;
AllPages["nsDoc/bitburner.darknetserverdata.passwordhintdata.md"] = nsDoc_bitburner_darknetserverdata_passwordhintdata_md;
AllPages["nsDoc/bitburner.darknetserverdata.purchasedbyplayer.md"] = nsDoc_bitburner_darknetserverdata_purchasedbyplayer_md;
AllPages["nsDoc/bitburner.darknetserverdata.ramused.md"] = nsDoc_bitburner_darknetserverdata_ramused_md;
AllPages["nsDoc/bitburner.darknetserverdata.requiredcharismaskill.md"] = nsDoc_bitburner_darknetserverdata_requiredcharismaskill_md;
AllPages["nsDoc/bitburner.darknetserverdata.staticpasswordhint.md"] = nsDoc_bitburner_darknetserverdata_staticpasswordhint_md;
AllPages["nsDoc/bitburner.darknetserverdetails.blockedram.md"] = nsDoc_bitburner_darknetserverdetails_blockedram_md;
AllPages["nsDoc/bitburner.darknetserverdetails.data.md"] = nsDoc_bitburner_darknetserverdetails_data_md;
AllPages["nsDoc/bitburner.darknetserverdetails.depth.md"] = nsDoc_bitburner_darknetserverdetails_depth_md;
AllPages["nsDoc/bitburner.darknetserverdetails.difficulty.md"] = nsDoc_bitburner_darknetserverdetails_difficulty_md;
AllPages["nsDoc/bitburner.darknetserverdetails.hassession.md"] = nsDoc_bitburner_darknetserverdetails_hassession_md;
AllPages["nsDoc/bitburner.darknetserverdetails.isconnectedtocurrentserver.md"] = nsDoc_bitburner_darknetserverdetails_isconnectedtocurrentserver_md;
AllPages["nsDoc/bitburner.darknetserverdetails.isstationary.md"] = nsDoc_bitburner_darknetserverdetails_isstationary_md;
AllPages["nsDoc/bitburner.darknetserverdetails.logtrafficinterval.md"] = nsDoc_bitburner_darknetserverdetails_logtrafficinterval_md;
AllPages["nsDoc/bitburner.darknetserverdetails.md"] = nsDoc_bitburner_darknetserverdetails_md;
AllPages["nsDoc/bitburner.darknetserverdetails.modelid.md"] = nsDoc_bitburner_darknetserverdetails_modelid_md;
AllPages["nsDoc/bitburner.darknetserverdetails.passwordformat.md"] = nsDoc_bitburner_darknetserverdetails_passwordformat_md;
AllPages["nsDoc/bitburner.darknetserverdetails.passwordhint.md"] = nsDoc_bitburner_darknetserverdetails_passwordhint_md;
AllPages["nsDoc/bitburner.darknetserverdetails.passwordlength.md"] = nsDoc_bitburner_darknetserverdetails_passwordlength_md;
AllPages["nsDoc/bitburner.darknetserverdetails.requiredcharismaskill.md"] = nsDoc_bitburner_darknetserverdetails_requiredcharismaskill_md;
AllPages["nsDoc/bitburner.division.awareness.md"] = nsDoc_bitburner_division_awareness_md;
AllPages["nsDoc/bitburner.division.cities.md"] = nsDoc_bitburner_division_cities_md;
AllPages["nsDoc/bitburner.division.industry.md"] = nsDoc_bitburner_division_industry_md;
@@ -2896,15 +2875,6 @@ AllPages["nsDoc/bitburner.server.servergrowth.md"] = nsDoc_bitburner_server_serv
AllPages["nsDoc/bitburner.server.smtpportopen.md"] = nsDoc_bitburner_server_smtpportopen_md;
AllPages["nsDoc/bitburner.server.sqlportopen.md"] = nsDoc_bitburner_server_sqlportopen_md;
AllPages["nsDoc/bitburner.server.sshportopen.md"] = nsDoc_bitburner_server_sshportopen_md;
AllPages["nsDoc/bitburner.serverauthdetails.data.md"] = nsDoc_bitburner_serverauthdetails_data_md;
AllPages["nsDoc/bitburner.serverauthdetails.hassession.md"] = nsDoc_bitburner_serverauthdetails_hassession_md;
AllPages["nsDoc/bitburner.serverauthdetails.isconnectedtocurrentserver.md"] = nsDoc_bitburner_serverauthdetails_isconnectedtocurrentserver_md;
AllPages["nsDoc/bitburner.serverauthdetails.logtrafficinterval.md"] = nsDoc_bitburner_serverauthdetails_logtrafficinterval_md;
AllPages["nsDoc/bitburner.serverauthdetails.md"] = nsDoc_bitburner_serverauthdetails_md;
AllPages["nsDoc/bitburner.serverauthdetails.modelid.md"] = nsDoc_bitburner_serverauthdetails_modelid_md;
AllPages["nsDoc/bitburner.serverauthdetails.passwordformat.md"] = nsDoc_bitburner_serverauthdetails_passwordformat_md;
AllPages["nsDoc/bitburner.serverauthdetails.passwordhint.md"] = nsDoc_bitburner_serverauthdetails_passwordhint_md;
AllPages["nsDoc/bitburner.serverauthdetails.passwordlength.md"] = nsDoc_bitburner_serverauthdetails_passwordlength_md;
AllPages["nsDoc/bitburner.simpleopponentstats.md"] = nsDoc_bitburner_simpleopponentstats_md;
AllPages["nsDoc/bitburner.singularity.applytocompany.md"] = nsDoc_bitburner_singularity_applytocompany_md;
AllPages["nsDoc/bitburner.singularity.b1tflum3.md"] = nsDoc_bitburner_singularity_b1tflum3_md;
+1 -1
View File
@@ -245,7 +245,7 @@ const dnet = {
getStasisLinkLimit: 0,
getStasisLinkedServers: 0,
getServer: 2,
getServerAuthDetails: RamCostConstants.GetServer,
getServerDetails: RamCostConstants.GetServer,
induceServerMigration: 4,
unleashStormSeed: 0.1,
isDarknetServer: RamCostConstants.GetServer,
+4 -4
View File
@@ -1,7 +1,7 @@
import { exampleDarknetServerData } from "../DarkNet/Enums";
import type { DarknetServerData } from "@nsdefs";
import { exampleDarknetServerDetails } from "../DarkNet/Enums";
import type { NetscriptContext } from "./APIWrapper";
import { errorMessage } from "./ErrorMessages";
import type { DarknetServerDetails } from "@nsdefs";
const clip = (s: string): string => {
if (s.length > 15) {
@@ -68,8 +68,8 @@ export function missingKey(expect: object, actual: unknown): string | false {
return false;
}
export function assertDarknetServerData(ctx: NetscriptContext, data: unknown): asserts data is DarknetServerData {
const error = missingKey(exampleDarknetServerData, data);
export function assertDarknetServerDetails(ctx: NetscriptContext, data: unknown): asserts data is DarknetServerDetails {
const error = missingKey(exampleDarknetServerDetails, data);
if (error) {
throw errorMessage(ctx, `Invalid darknet server data.\n${error}`, "TYPE");
}
+29 -34
View File
@@ -74,7 +74,7 @@ import { NetscriptCorporation } from "./NetscriptFunctions/Corporation";
import { NetscriptFormulas } from "./NetscriptFunctions/Formulas";
import { NetscriptStockMarket } from "./NetscriptFunctions/StockMarket";
import { NetscriptGrafting } from "./NetscriptFunctions/Grafting";
import type { NS, RecentScript, ProcessInfo, NSEnums, Server as NSInterfaceServer, DarknetServerData } from "@nsdefs";
import type { NS, RecentScript, ProcessInfo, NSEnums, Server as NSInterfaceServer } from "@nsdefs";
import { NetscriptSingularity } from "./NetscriptFunctions/Singularity";
import { NetscriptCloud } from "./NetscriptFunctions/Cloud";
@@ -102,7 +102,7 @@ import { ServerConstants } from "./Server/data/Constants";
import { assertFunctionWithNSContext } from "./Netscript/TypeAssertion";
import { Router } from "./ui/GameRoot";
import { Page } from "./ui/Router";
import { NetscriptDarknet } from "./NetscriptFunctions/Darknet";
import { getDarknetPropertiesForDeprecationSupport, NetscriptDarknet } from "./NetscriptFunctions/Darknet";
import { canAccessBitNodeFeature } from "./BitNode/BitNodeUtils";
import { validBitNodes } from "./BitNode/Constants";
import { isIPAddress } from "./Types/strings";
@@ -116,6 +116,7 @@ import { exampleDarknetServerData, ResponseCodeEnum } from "./DarkNet/Enums";
import { renderToStaticMarkup } from "react-dom/server";
import { Literatures } from "./Literature/Literatures";
import { Messages } from "./Message/MessageHelpers";
import { setDeprecatedProperties } from "./utils/DeprecationHelper";
export const enums: NSEnums = {
CityName,
@@ -929,42 +930,22 @@ export const ns: InternalAPI<NSFull> = {
if (!server) {
// If the server is offline, return a dummy object with isOnline = false.
const isIp = isIPAddress(host);
return {
isOnline: false,
const result = {
sshPortOpen: false,
ftpPortOpen: false,
smtpPortOpen: false,
httpPortOpen: false,
sqlPortOpen: false,
organizationName: "",
...exampleDarknetServerData,
hostname: isIp ? "" : host,
ip: isIp ? host : "",
} satisfies DarknetServerData & { isOnline: boolean };
isOnline: false,
};
setDeprecatedProperties(result, getDarknetPropertiesForDeprecationSupport(result));
return result satisfies NSInterfaceServer & { isOnline: boolean };
}
if (server instanceof DarknetServer) {
return {
isOnline: true,
hostname: server.hostname,
ip: server.ip,
hasAdminRights: server.hasAdminRights,
isConnectedTo: server.isConnectedTo,
cpuCores: server.cpuCores,
ramUsed: server.ramUsed,
maxRam: server.maxRam,
backdoorInstalled: server.backdoorInstalled,
depth: server.depth,
modelId: server.modelId,
hasStasisLink: server.hasStasisLink,
blockedRam: server.blockedRam,
staticPasswordHint: server.staticPasswordHint,
passwordHintData: server.passwordHintData,
difficulty: server.difficulty,
requiredCharismaSkill: server.requiredCharismaSkill,
logTrafficInterval: server.logTrafficInterval,
isStationary: server.isStationary,
purchasedByPlayer: false,
} satisfies DarknetServerData & { isOnline: boolean };
}
// Throw if it's an isolated non-dnet server (e.g., pre-TOR darkweb, pre-TRP WD).
if (server.serversOnNetwork.length === 0) {
throw helpers.errorMessage(ctx, `Server ${host} does not exist.`);
}
return {
const result = {
hostname: server.hostname,
ip: server.ip,
sshPortOpen: server.sshPortOpen,
@@ -990,6 +971,20 @@ export const ns: InternalAPI<NSFull> = {
requiredHackingSkill: server.requiredHackingSkill,
serverGrowth: server.serverGrowth,
} satisfies NSInterfaceServer;
if (server instanceof DarknetServer) {
const resultWithAdditionalProps = {
...result,
isOnline: true,
};
setDeprecatedProperties(resultWithAdditionalProps, getDarknetPropertiesForDeprecationSupport(server));
return resultWithAdditionalProps satisfies NSInterfaceServer & { isOnline: boolean };
}
// Throw if it's an isolated non-dnet server (e.g., pre-TOR darkweb, pre-TRP WD).
if (server.serversOnNetwork.length === 0) {
throw helpers.errorMessage(ctx, `Server ${host} does not exist.`);
}
return result;
},
getServerMoneyAvailable: (ctx) => (_host?) => {
const server = helpers.getNormalServer(ctx, _host);
+67 -14
View File
@@ -38,7 +38,7 @@ import {
logger,
} from "../DarkNet/effects/offlineServerHandling";
import { DarknetServer } from "../Server/DarknetServer";
import { GenericResponseMessage, ResponseCodeEnum } from "../DarkNet/Enums";
import { exampleDarknetServerDetails, GenericResponseMessage, ResponseCodeEnum } from "../DarkNet/Enums";
import { getRewardFromCache } from "../DarkNet/effects/cacheFiles";
import { CONSTANTS } from "../Constants";
import { getStasisLinkServers } from "../DarkNet/utils/darknetNetworkUtils";
@@ -46,8 +46,9 @@ import { resolveCacheFilePath } from "../Paths/CacheFilePath";
import type { CacheResult } from "@nsdefs";
import { MAX_PASSWORD_LENGTH } from "../DarkNet/Constants";
import { isIPAddress } from "../Types/strings";
import { getDarknetServerOrThrow } from "../DarkNet/utils/darknetServerUtils";
import { type DarknetServerData, getDarknetServerOrThrow } from "../DarkNet/utils/darknetServerUtils";
import { shuffle } from "lodash";
import { getSharedChars } from "../DarkNet/utils/darknetAuthUtils";
type CompleteHeartbleedOptions = {
peek: boolean;
@@ -121,7 +122,8 @@ export function NetscriptDarknet(): InternalAPI<DarknetAPI> {
const server = serverCheck.server;
const threads = ctx.workerScript.scriptRef.threads;
const networkDelay = calculateAuthenticationTime(server, Player, threads, password) + additionalMsec;
const sharedChars = getSharedChars(server.password, password);
const networkDelay = calculateAuthenticationTime(server, Player, threads, sharedChars) + additionalMsec;
logger(ctx)(
`Connecting to ${server.hostname} with password '${password}'... (Est: ${formatNumber(
@@ -377,22 +379,15 @@ export function NetscriptDarknet(): InternalAPI<DarknetAPI> {
logger(ctx)(`Stasis linked servers: ${serverNames}`);
return serverNames;
},
getServerAuthDetails: (ctx) => (_host) => {
getServerDetails: (ctx) => (_host) => {
const targetHost = helpers.string(ctx, "host", _host ?? ctx.workerScript.hostname);
const serverCheck = checkDarknetServer(ctx, targetHost);
if (!serverCheck.success) {
logger(ctx)(serverCheck.message);
return {
...exampleDarknetServerDetails,
isOnline: false,
isConnectedToCurrentServer: false,
hasSession: false,
modelId: "",
passwordHint: "",
data: "",
logTrafficInterval: -1,
passwordLength: -1,
passwordFormat: "numeric",
} satisfies ReturnType<DarknetAPI["getServerAuthDetails"]>;
} satisfies ReturnType<DarknetAPI["getServerDetails"]>;
}
const targetServer = serverCheck.server;
const localServer = ctx.workerScript.getServer();
@@ -408,7 +403,12 @@ export function NetscriptDarknet(): InternalAPI<DarknetAPI> {
logTrafficInterval: targetServer.logTrafficInterval,
passwordLength: targetServer.password.length,
passwordFormat: getPasswordType(targetServer.password),
} satisfies ReturnType<DarknetAPI["getServerAuthDetails"]>;
blockedRam: targetServer.blockedRam,
difficulty: targetServer.difficulty,
requiredCharismaSkill: targetServer.requiredCharismaSkill,
depth: targetServer.depth,
isStationary: targetServer.isStationary,
} satisfies ReturnType<DarknetAPI["getServerDetails"]>;
},
induceServerMigration:
(ctx) =>
@@ -704,3 +704,56 @@ export function NetscriptDarknet(): InternalAPI<DarknetAPI> {
},
};
}
export const getDarknetPropertiesForDeprecationSupport = (dnetServer: DarknetServerData) => ({
depth: {
identifier: "ns.getServer().depth",
message: "Use ns.dnet.getServerDetails().depth instead.",
value: dnetServer.depth,
},
modelId: {
identifier: "ns.getServer().modelId",
message: "Use ns.dnet.getServerDetails().modelId instead.",
value: dnetServer.modelId,
},
hasStasisLink: {
identifier: "ns.getServer().hasStasisLink",
message: "Use ns.dnet.getServerDetails().hasStasisLink instead.",
value: dnetServer.hasStasisLink,
},
blockedRam: {
identifier: "ns.getServer().blockedRam",
message: "Use ns.dnet.getServerDetails().blockedRam instead.",
value: dnetServer.blockedRam,
},
staticPasswordHint: {
identifier: "ns.getServer().staticPasswordHint",
message: "Use ns.dnet.getServerDetails().staticPasswordHint instead.",
value: dnetServer.staticPasswordHint,
},
passwordHintData: {
identifier: "ns.getServer().passwordHintData",
message: "Use ns.dnet.getServerDetails().passwordHintData instead.",
value: dnetServer.passwordHintData,
},
difficulty: {
identifier: "ns.getServer().difficulty",
message: "Use ns.dnet.getServerDetails().difficulty instead.",
value: dnetServer.difficulty,
},
requiredCharismaSkill: {
identifier: "ns.getServer().requiredCharismaSkill",
message: "Use ns.dnet.getServerDetails().requiredCharismaSkill instead.",
value: dnetServer.requiredCharismaSkill,
},
logTrafficInterval: {
identifier: "ns.getServer().logTrafficInterval",
message: "Use ns.dnet.getServerDetails().logTrafficInterval instead.",
value: dnetServer.logTrafficInterval,
},
isStationary: {
identifier: "ns.getServer().isStationary",
message: "Use ns.dnet.getServerDetails().isStationary instead.",
value: dnetServer.isStationary,
},
});
+11 -10
View File
@@ -54,7 +54,7 @@ import type { PositiveNumber } from "../types";
import { Crimes } from "../Crime/Crimes";
import { calculateEffectiveSharedThreads, calculateShareBonus } from "../NetworkShare/Share";
import { calculateAuthenticationTime } from "../DarkNet/effects/effects";
import { assertDarknetServerData } from "../Netscript/TypeAssertion";
import { assertDarknetServerDetails } from "../Netscript/TypeAssertion";
import { getRamBlockRemoved } from "../DarkNet/effects/ramblock";
export function NetscriptFormulas(): InternalAPI<IFormulas> {
@@ -482,27 +482,28 @@ export function NetscriptFormulas(): InternalAPI<IFormulas> {
dnet: {
getAuthenticateTime:
(ctx) =>
(_darknetServerData, _threads, _player): number => {
assertDarknetServerData(ctx, _darknetServerData);
(_darknetServerDetails, _threads, _player, _correctCharactersInPassword): number => {
assertDarknetServerDetails(ctx, _darknetServerDetails);
const threads = helpers.number(ctx, "threads", _threads ?? 1);
const person = helpers.person(ctx, _player ?? Player);
return calculateAuthenticationTime(_darknetServerData, person, threads);
const correctChars = helpers.number(ctx, "correctCharactersInPassword", _correctCharactersInPassword ?? 0);
return calculateAuthenticationTime(_darknetServerDetails, person, threads, correctChars);
},
getHeartbleedTime:
(ctx) =>
(_darknetServerData, _threads, _player): number => {
assertDarknetServerData(ctx, _darknetServerData);
(_darknetServerDetails, _threads, _player): number => {
assertDarknetServerDetails(ctx, _darknetServerDetails);
const threads = helpers.number(ctx, "threads", _threads ?? 1);
const person = helpers.person(ctx, _player ?? Player);
return calculateAuthenticationTime(_darknetServerData, person, threads) * 1.5;
return calculateAuthenticationTime(_darknetServerDetails, person, threads) * 1.5;
},
getExpectedRamBlockRemoved:
(ctx) =>
(_darknetServerData, _threads, _person): number => {
assertDarknetServerData(ctx, _darknetServerData);
(_darknetServerDetails, _threads, _person): number => {
assertDarknetServerDetails(ctx, _darknetServerDetails);
const threads = helpers.number(ctx, "threads", _threads ?? 1);
const person = helpers.person(ctx, _person ?? Player);
return getRamBlockRemoved(_darknetServerData, threads, person);
return getRamBlockRemoved(_darknetServerDetails, threads, person);
},
},
};
+37 -63
View File
@@ -4412,54 +4412,6 @@ type DarknetResponseCode = _ValueOf<DarknetResponseCodeType>;
/** @public */
export type DarknetResult = { success: boolean; code: DarknetResponseCode; message: string };
/**
* Darknet server data.
* @public
*/
export interface DarknetServerData {
/** Hostname. Must be unique */
hostname: string;
/** IP Address. Must be unique */
ip: string;
/** Flag indicating whether the player has admin/root access to this server */
hasAdminRights: boolean;
/** Flag indicating whether the player's terminal is currently connected to this server */
isConnectedTo: boolean;
/** Number of CPU cores */
cpuCores: number;
/** Used RAM (GB). i.e. unavailable RAM */
ramUsed: number;
/** Max RAM (GB) of this server */
maxRam: number;
/** Flag indicating whether this server has a backdoor installed by the player */
backdoorInstalled: boolean;
/** If the server has a stasis link applied */
hasStasisLink: boolean;
/** The amount of ram blocked by the server owner */
blockedRam: number;
/**
* The model of the server. Similar models have similar vulnerabilities. The model list is intentionally undocumented.
* You are supposed to experiment and discover the models.
*/
modelId: string;
/** The generic password prompt for the server */
staticPasswordHint: string;
/** Data associated with the password hint */
passwordHintData: string;
/** The difficulty rating of the server, associated with its original depth in the net */
difficulty: number;
/** The depth of the server in the net */
depth: number;
/** The charisma skill required to heartbleed the server */
requiredCharismaSkill: number;
/** The interval at which the server periodically adds to its logs, in seconds. */
logTrafficInterval: number;
/** If this darknet server cannot be moved. True for fixed/story servers. */
isStationary: boolean;
/** Whether this server was purchased by the player. Always false for darknet servers */
purchasedByPlayer: boolean;
}
/** @public */
export type CacheResult = {
success: boolean;
@@ -4468,15 +4420,18 @@ export type CacheResult = {
};
/**
* Details about a server's authentication schema
* Details about a darknet server
* @public
*/
interface ServerAuthDetails {
interface DarknetServerDetails {
/** True if the server is directly connected to the current server */
isConnectedToCurrentServer: boolean;
/** True if the current script has authenticated to this server with the right password using authenticate() or connectToSesssion() */
hasSession: boolean;
/** The model ID of the server. Similar models share vulnerabilities. */
/**
* The model of the server. Similar models have similar vulnerabilities. The model list is intentionally undocumented.
* You are supposed to experiment and discover the models.
*/
modelId: string;
/** Static password reminder text set for this server. */
passwordHint: string;
@@ -4488,6 +4443,16 @@ interface ServerAuthDetails {
passwordLength: number;
/** The character set used in the password */
passwordFormat: "numeric" | "alphabetic" | "alphanumeric" | "ASCII" | "unicode";
/** The amount of ram blocked by the server owner */
blockedRam: number;
/** The difficulty rating of the server, associated with its original depth in the net */
difficulty: number;
/** The current depth in the darknet of the server */
depth: number;
/** The charisma skill required to authenticate on the server */
requiredCharismaSkill: number;
/** If this darknet server cannot be moved. True for fixed/story servers. */
isStationary: boolean;
}
/**
@@ -4653,15 +4618,18 @@ export interface Darknet {
getStasisLinkedServers(returnByIP?: boolean): string[];
/**
* Returns the server's authentication protocol details.
* Returns the darknet-specific details of the server.
*
* If the darknet server has recently gone offline, the returned object will be a dummy server object with
* `isOnline: false`.
*
* @remarks
* RAM cost: 0.1 GB
*
* @param host - Hostname/IP of the server to analyze. Defaults to the running script's server if not specified.
* @returns An object containing the server's authentication protocol details.
* @returns An object containing the server's darknet-specific details.
*/
getServerAuthDetails(host?: string): ServerAuthDetails & { isOnline: boolean };
getServerDetails(host?: string): DarknetServerDetails & { isOnline: boolean };
/**
* Increases the chance that the target server will move to other parts of the darknet, by overloading the connections between it and the current server.
@@ -6528,26 +6496,32 @@ interface BladeburnerFormulas {
interface DarknetFormulas {
/**
* Gets the time it will take to authenticate a server.
* @param darknetServerData - The server to check authentication time on.
* @param serverDetails - The server to check authentication time on.
* @param threads - The number of threads to use for the authentication. Optional, defaults to 1
* @param player - The player object. Optional, defaults to the current player status
* @param correctCharactersInPassword - only used for 2G_cellular model servers. The number of correct characters in the attempted password. Optional, defaults to 0
*/
getAuthenticateTime(darknetServerData: DarknetServerData, threads?: number, player?: Person): number;
getAuthenticateTime(
serverDetails: DarknetServerDetails,
threads?: number,
player?: Person,
correctCharactersInPassword?: number,
): number;
/**
* Gets the time it will take to scrape logs from a server.
* @param darknetServerData - The server to check heartbleed log scraping time on.
* @param serverDetails - The server to check heartbleed log scraping time on.
* @param threads - The number of threads to use for the authentication. Optional, defaults to 1
* @param player - The player object. Optional, defaults to the current player status
*/
getHeartbleedTime(darknetServerData: DarknetServerData, threads?: number, player?: Person): number;
getHeartbleedTime(serverDetails: DarknetServerDetails, threads?: number, player?: Person): number;
/**
* Gets the expected amount off ram that will be freed by a call to dnet.memoryReallocation
* @param darknetServerData - The server to check ram freed on.
* @param serverDetails - The server to check ram freed on.
* @param threads - The number of threads used in the memoryReallocation call. Optional, defaults to 1
* @param player - The player object. Optional, defaults to the current player status
*/
getExpectedRamBlockRemoved(darknetServerData: DarknetServerData, threads?: number, player?: Person): number;
getExpectedRamBlockRemoved(serverDetails: DarknetServerDetails, threads?: number, player?: Person): number;
}
/**
@@ -8209,8 +8183,8 @@ export interface NS {
/**
* Returns data of a server.
*
* If the server is a darknet server and has recently gone offline, it will return a dummy server object with
* `isOnline: false`.
* If the server is a darknet server, it will also contain the "isOnline" field. If the darknet server has recently
* gone offline, the returned object will be a dummy server object with `isOnline: false`.
*
* @remarks
* RAM cost: 2 GB
@@ -8218,7 +8192,7 @@ export interface NS {
* @param host - Optional. Hostname/IP of the server. Defaults to the hostname of the running script's server.
* @returns Data of the server.
*/
getServer(host?: string): Server | (DarknetServerData & { isOnline: boolean });
getServer(host?: string): Server & { isOnline?: boolean };
/**
* Get money available on a server.
+1 -1
View File
@@ -1,10 +1,10 @@
import { BaseServer } from "./BaseServer";
import { constructorsForReviver, IReviverValue } from "../utils/JSONReviver";
import type { DarknetServerData } from "@nsdefs";
import { exampleDarknetServerData } from "../DarkNet/Enums";
import { createRandomIp } from "../utils/IPAddress";
import type { CacheFilePath } from "../Paths/CacheFilePath";
import type { IPAddress } from "../Types/strings";
import type { DarknetServerData } from "../DarkNet/utils/darknetServerUtils";
export interface DarknetServerConstructorParams {
// Properties of BaseServer
+19
View File
@@ -0,0 +1,19 @@
import type { VersionBreakingChange } from "./APIBreak";
export const breakingChanges301: VersionBreakingChange = {
apiBreakingChanges: [
{
brokenAPIs: [
{
name: "ns.dnet.getServerAuthDetails",
migration: {
searchValue: "getServerAuthDetails",
replaceValue: "getServerDetails",
},
},
],
info: "ns.dnet.getServerAuthDetails has been renamed to ns.dnet.getServerDetails",
showWarning: false,
},
],
};
+4
View File
@@ -35,6 +35,7 @@ import { officeInitialCost, officeInitialSize, warehouseInitialCost } from "../C
import { load } from "../db";
import { downloadContentAsFile } from "./FileUtils";
import { initDarkwebServer } from "../DarkNet/controllers/NetworkGenerator";
import { breakingChanges301 } from "./APIBreaks/3.0.1";
/** Function for performing a series of defined replacements. See 0.58.0 for usage */
function convert(code: string, changes: [RegExp, string][]): string {
@@ -644,4 +645,7 @@ Error: ${e}`,
}
showAPIBreaks("3.0.0", breakingChanges300);
}
if (ver < 51) {
showAPIBreaks("3.0.1", breakingChanges301);
}
}
+19 -19
View File
@@ -211,9 +211,9 @@ describe("home", () => {
const ns = getNsOnHome();
expect(ns.getServer().hostname).toStrictEqual(SpecialServers.Home);
});
test("getServerAuthDetails", () => {
test("getServerDetails", () => {
const ns = getNsOnHome();
expect(() => ns.dnet.getServerAuthDetails()).toThrow("home is not a darknet server");
expect(() => ns.dnet.getServerDetails()).toThrow("home is not a darknet server");
});
test("induceServerMigration", () => {
const ns = getNsOnHome();
@@ -375,9 +375,9 @@ describe("Normal NPC server", () => {
const ns = getNS(SpecialServers.CyberSecServer);
expect(ns.getServer().hostname).toStrictEqual(SpecialServers.CyberSecServer);
});
test("getServerAuthDetails", () => {
test("getServerDetails", () => {
const ns = getNS(SpecialServers.CyberSecServer);
expect(() => ns.dnet.getServerAuthDetails()).toThrow("CSEC is not a darknet server");
expect(() => ns.dnet.getServerDetails()).toThrow("CSEC is not a darknet server");
});
test("induceServerMigration", () => {
const ns = getNS(SpecialServers.CyberSecServer);
@@ -465,9 +465,9 @@ describe("Private server", () => {
const ns = getNS("test-server-1");
expect(ns.getServer().hostname).toStrictEqual("test-server-1");
});
test("getServerAuthDetails", () => {
test("getServerDetails", () => {
const ns = getNS("test-server-1");
expect(() => ns.dnet.getServerAuthDetails()).toThrow("test-server-1 is not a darknet server");
expect(() => ns.dnet.getServerDetails()).toThrow("test-server-1 is not a darknet server");
});
test("induceServerMigration", () => {
const ns = getNS("test-server-1");
@@ -555,9 +555,9 @@ describe("Hashnet server", () => {
const ns = getNS("hacknet-server-0");
expect(ns.getServer().hostname).toStrictEqual("hacknet-server-0");
});
test("getServerAuthDetails", () => {
test("getServerDetails", () => {
const ns = getNS("hacknet-server-0");
expect(() => ns.dnet.getServerAuthDetails()).toThrow("hacknet-server-0 is not a darknet server");
expect(() => ns.dnet.getServerDetails()).toThrow("hacknet-server-0 is not a darknet server");
});
test("induceServerMigration", () => {
const ns = getNS("hacknet-server-0");
@@ -639,9 +639,9 @@ describe("Non-existent server", () => {
ns.getServer(hostnameOfNonExistentServer);
}).toThrow(errorMessageForNonExistentServer);
});
test("getServerAuthDetails", () => {
test("getServerDetails", () => {
const ns = getNsOnDarkWeb();
expect(() => ns.dnet.getServerAuthDetails(hostnameOfNonExistentServer)).toThrow(errorMessageForNonExistentServer);
expect(() => ns.dnet.getServerDetails(hostnameOfNonExistentServer)).toThrow(errorMessageForNonExistentServer);
});
test("induceServerMigration", () => {
const ns = getNsOnDarkWeb();
@@ -782,9 +782,9 @@ describe("darkweb", () => {
expect(server.isOnline).toStrictEqual(true);
expect(server.ip).toStrictEqual(getDarknetServerOrThrow(SpecialServers.DarkWeb).ip);
});
test("getServerAuthDetails", () => {
test("getServerDetails", () => {
const ns = getNsOnDarkWeb();
const authDetails = ns.dnet.getServerAuthDetails();
const authDetails = ns.dnet.getServerDetails();
expect(authDetails.isOnline).toStrictEqual(true);
expect(authDetails.modelId).toStrictEqual(ModelIds.NoPassword);
});
@@ -935,9 +935,9 @@ describe("Non-darkweb darknet server", () => {
const server = ns.getServer();
expect(server.hostname).toStrictEqual(ns.getHostname());
});
test("getServerAuthDetails", () => {
test("getServerDetails", () => {
const ns = getNsOnNonDarkwebDarknetServer();
const authDetails = ns.dnet.getServerAuthDetails();
const authDetails = ns.dnet.getServerDetails();
expect(authDetails.modelId).toStrictEqual(getDarknetServerOrThrow(ns.getHostname()).modelId);
});
test("induceServerMigration targeting connected server", async () => {
@@ -1071,12 +1071,12 @@ describe("Offline darknet server", () => {
expect(server.hostname).toBe("");
expect(server.ip).toBe(ipForOfflineServer);
});
test("getServerAuthDetails", () => {
test("getServerDetails", () => {
const ns = getNsOnDarkWeb();
let authDetails = ns.dnet.getServerAuthDetails(hostnameForOfflineServer);
let authDetails = ns.dnet.getServerDetails(hostnameForOfflineServer);
expect(authDetails.isOnline).toStrictEqual(false);
authDetails = ns.dnet.getServerAuthDetails(ipForOfflineServer);
authDetails = ns.dnet.getServerDetails(ipForOfflineServer);
expect(authDetails.isOnline).toStrictEqual(false);
});
test("induceServerMigration", async () => {
@@ -1174,9 +1174,9 @@ describe("Use IP instead of hostname", () => {
}
expect(server.ip).toStrictEqual(ip);
});
test("getServerAuthDetails", () => {
test("getServerDetails", () => {
const ns = getNsOnNonDarkwebDarknetServer();
const authDetails = ns.dnet.getServerAuthDetails(ip);
const authDetails = ns.dnet.getServerDetails(ip);
expect(authDetails.isOnline).toStrictEqual(true);
expect(authDetails.modelId).toStrictEqual(getDarknetServerOrThrow(ip).modelId);
});