Skip to main content

Variable: COMMON_CONFIG_SCHEMA

const COMMON_CONFIG_SCHEMA: ZodObject<{
ackTimeoutMs: ConfigField<number, {
describe: "how long to wait for an RFQ server ack, in milliseconds";
env: "ACK_TIMEOUT_MS";
scope: "host";
}>;
apiKey: ConfigField<string, {
arg: "<key>";
describe: "Overcast backend API key";
env: "API_KEY";
flag: "--api-key";
scope: "host";
secret: true;
}>;
backend: ConfigField<string, {
arg: "<url>";
describe: "Overcast backend url";
env: "BACKEND_URL";
flag: "--backend";
scope: "host";
}>;
domain: ConfigField<number, {
arg: "<n>";
describe: "protocol domain separator of the deployment; read from chain when omitted";
env: "DOMAIN";
flag: "--domain";
}>;
socketConfig: ConfigField<{
transports: ("websocket" | "polling")[];
}, {
arg: "<transport>";
describe: "pin the RFQ socket to one transport instead of negotiating";
env: "TRANSPORT";
flag: "--transport";
scope: "host";
}>;
}, $strip>;

Defined in: packages/overcast-core/src/config-schema.ts:644

The OvercastConfig fields that mean the same thing on every chain, so every layer schema can spread its shape in rather than restating them.

Three OvercastConfig fields are deliberately not here:

  • chainName, because which name a deployment is filed under is the host's decision (a preset's name, or the one an operator declared), not something read from a per-field source;
  • privateKey and owner, because their encoding is a per-chain fact — 0x-hex on EVM, base58 on Solana — so each layer schema states its own and gets a parser that can actually reject a wrong-chain value;
  • socketUrl, whose meaningful values include "" (a same-origin proxy), and readConfig reads a blank string as "unset". A programmatic caller sets it directly.

Everything but domain is ConfigScope "host": how this process reaches the backend rather than a fact about the chain.