Commit ab8ec365 authored by Kelvin Fichter's avatar Kelvin Fichter

feat(cmn): BSv2 private options by default

Makes BaseServiceV2 options "secret" by default. Services will have to
explicitly mark options as "public" for those options to be logged and
included in metrics. Much more sane than logging everything, especially
for anyone using BaseServiceV2 who might not know that this happens
under the hood.
parent be4a7b0b
---
'@eth-optimism/common-ts': minor
'@eth-optimism/drippie-mon': patch
'@eth-optimism/fault-detector': patch
'@eth-optimism/replica-healthcheck': patch
---
Updates BaseServiceV2 so that options are secret by default. Services will have to explicitly mark options as "public" for those options to be logged and included in the metadata metric.
...@@ -31,7 +31,7 @@ export type OptionsSpec<TOptions extends Options> = { ...@@ -31,7 +31,7 @@ export type OptionsSpec<TOptions extends Options> = {
validator: (spec?: Spec<TOptions[P]>) => ValidatorSpec<TOptions[P]> validator: (spec?: Spec<TOptions[P]>) => ValidatorSpec<TOptions[P]>
desc: string desc: string
default?: TOptions[P] default?: TOptions[P]
secret?: boolean public?: boolean
} }
} }
...@@ -167,21 +167,25 @@ export abstract class BaseServiceV2< ...@@ -167,21 +167,25 @@ export abstract class BaseServiceV2<
validator: validators.num, validator: validators.num,
desc: 'Loop interval in milliseconds', desc: 'Loop interval in milliseconds',
default: params.loopIntervalMs || 0, default: params.loopIntervalMs || 0,
public: true,
}, },
port: { port: {
validator: validators.num, validator: validators.num,
desc: 'Port for the app server', desc: 'Port for the app server',
default: params.port || 7300, default: params.port || 7300,
public: true,
}, },
hostname: { hostname: {
validator: validators.str, validator: validators.str,
desc: 'Hostname for the app server', desc: 'Hostname for the app server',
default: params.hostname || '0.0.0.0', default: params.hostname || '0.0.0.0',
public: true,
}, },
logLevel: { logLevel: {
validator: validators.logLevel, validator: validators.logLevel,
desc: 'Log level', desc: 'Log level',
default: params.logLevel || 'debug', default: params.logLevel || 'debug',
public: true,
}, },
} }
...@@ -194,7 +198,7 @@ export abstract class BaseServiceV2< ...@@ -194,7 +198,7 @@ export abstract class BaseServiceV2<
// List of options that can safely be logged. // List of options that can safely be logged.
const publicOptionNames = Object.entries(params.optionsSpec) const publicOptionNames = Object.entries(params.optionsSpec)
.filter(([, spec]) => { .filter(([, spec]) => {
return spec.secret !== true return spec.public
}) })
.map(([key]) => { .map(([key]) => {
return key return key
......
...@@ -41,11 +41,11 @@ export class DrippieMonService extends BaseServiceV2< ...@@ -41,11 +41,11 @@ export class DrippieMonService extends BaseServiceV2<
rpc: { rpc: {
validator: validators.provider, validator: validators.provider,
desc: 'Provider for network where Drippie is deployed', desc: 'Provider for network where Drippie is deployed',
secret: true,
}, },
drippieAddress: { drippieAddress: {
validator: validators.str, validator: validators.str,
desc: 'Address of Drippie contract', desc: 'Address of Drippie contract',
public: true,
}, },
}, },
metricsSpec: { metricsSpec: {
......
...@@ -50,17 +50,16 @@ export class FaultDetector extends BaseServiceV2<Options, Metrics, State> { ...@@ -50,17 +50,16 @@ export class FaultDetector extends BaseServiceV2<Options, Metrics, State> {
l1RpcProvider: { l1RpcProvider: {
validator: validators.provider, validator: validators.provider,
desc: 'Provider for interacting with L1', desc: 'Provider for interacting with L1',
secret: true,
}, },
l2RpcProvider: { l2RpcProvider: {
validator: validators.provider, validator: validators.provider,
desc: 'Provider for interacting with L2', desc: 'Provider for interacting with L2',
secret: true,
}, },
startBatchIndex: { startBatchIndex: {
validator: validators.num, validator: validators.num,
default: -1, default: -1,
desc: 'Batch index to start checking from', desc: 'Batch index to start checking from',
public: true,
}, },
}, },
metricsSpec: { metricsSpec: {
......
...@@ -46,22 +46,20 @@ export class MessageRelayerService extends BaseServiceV2< ...@@ -46,22 +46,20 @@ export class MessageRelayerService extends BaseServiceV2<
l1RpcProvider: { l1RpcProvider: {
validator: validators.provider, validator: validators.provider,
desc: 'Provider for interacting with L1.', desc: 'Provider for interacting with L1.',
secret: true,
}, },
l2RpcProvider: { l2RpcProvider: {
validator: validators.provider, validator: validators.provider,
desc: 'Provider for interacting with L2.', desc: 'Provider for interacting with L2.',
secret: true,
}, },
l1Wallet: { l1Wallet: {
validator: validators.wallet, validator: validators.wallet,
desc: 'Wallet used to interact with L1.', desc: 'Wallet used to interact with L1.',
secret: true,
}, },
fromL2TransactionIndex: { fromL2TransactionIndex: {
validator: validators.num, validator: validators.num,
desc: 'Index of the first L2 transaction to start processing from.', desc: 'Index of the first L2 transaction to start processing from.',
default: 0, default: 0,
public: true,
}, },
}, },
metricsSpec: { metricsSpec: {
......
...@@ -42,17 +42,16 @@ export class HealthcheckService extends BaseServiceV2< ...@@ -42,17 +42,16 @@ export class HealthcheckService extends BaseServiceV2<
referenceRpcProvider: { referenceRpcProvider: {
validator: validators.provider, validator: validators.provider,
desc: 'Provider for interacting with L1', desc: 'Provider for interacting with L1',
secret: true,
}, },
targetRpcProvider: { targetRpcProvider: {
validator: validators.provider, validator: validators.provider,
desc: 'Provider for interacting with L2', desc: 'Provider for interacting with L2',
secret: true,
}, },
onDivergenceWaitMs: { onDivergenceWaitMs: {
validator: validators.num, validator: validators.num,
desc: 'Waiting time in ms per loop when divergence is detected', desc: 'Waiting time in ms per loop when divergence is detected',
default: 60_000, default: 60_000,
public: true,
}, },
}, },
metricsSpec: { metricsSpec: {
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment