Skip to content

Commit b8aeb10

Browse files
committed
Fail fast on invalid STACKS_NETWORK values
1 parent b3afb29 commit b8aeb10

File tree

3 files changed

+24
-2
lines changed

3 files changed

+24
-2
lines changed

README.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -287,6 +287,8 @@ misconfiguration.
287287
Integer env vars must be plain integer text (for example `10000`, not `10s`
288288
or `12.5`); malformed numeric values fail fast instead of being silently
289289
coerced.
290+
`STACKS_NETWORK` accepts only `mainnet`, `testnet`, `devnet`, or `mocknet`
291+
(case-insensitive); invalid values fail fast instead of silently defaulting.
290292
Observer ingress controls:
291293

292294
- `STACKFLOW_NODE_OBSERVER_LOCALHOST_ONLY` defaults to `true` and restricts

server/src/config.ts

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -121,10 +121,16 @@ function normalizeBaseUrl(input: string): string {
121121

122122
function parseNetwork(value: unknown): 'mainnet' | 'testnet' | 'devnet' | 'mocknet' {
123123
const normalized = String(value || 'devnet').trim().toLowerCase();
124-
if (normalized === 'mainnet' || normalized === 'testnet' || normalized === 'mocknet') {
124+
if (
125+
normalized === 'mainnet' ||
126+
normalized === 'testnet' ||
127+
normalized === 'devnet' ||
128+
normalized === 'mocknet'
129+
) {
125130
return normalized;
126131
}
127-
return 'devnet';
132+
133+
throw new Error('STACKS_NETWORK must be one of: mainnet, testnet, devnet, mocknet');
128134
}
129135

130136
function parseSignatureVerifierMode(value: unknown): SignatureVerifierMode {

tests/stackflow-node-config.test.ts

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -97,6 +97,14 @@ describe('stackflow-node config parsing', () => {
9797
).toThrow(/STACKFLOW_NODE_PEER_WRITE_RATE_LIMIT_PER_MINUTE must be an integer/);
9898
});
9999

100+
it('fails fast when integer env vars exceed safe integer bounds', () => {
101+
expect(() =>
102+
loadConfig({
103+
STACKFLOW_NODE_MAX_RECENT_EVENTS: '9007199254740992',
104+
}),
105+
).toThrow(/STACKFLOW_NODE_MAX_RECENT_EVENTS must be a safe integer/);
106+
});
107+
100108
it('rejects stackflow-node ports outside the TCP range', () => {
101109
expect(() =>
102110
loadConfig({
@@ -151,6 +159,12 @@ describe('stackflow-node config parsing', () => {
151159
}),
152160
).toThrow(/COUNTERPARTY_SIGNER_MODE/);
153161

162+
expect(() =>
163+
loadConfig({
164+
STACKS_NETWORK: 'dev',
165+
}),
166+
).toThrow(/STACKS_NETWORK must be one of/);
167+
154168
expect(() =>
155169
loadConfig({
156170
STACKFLOW_NODE_STACKFLOW_MESSAGE_VERSION: '版本',

0 commit comments

Comments
 (0)