Environment variables
This commit is contained in:
Executable
+27
@@ -0,0 +1,27 @@
|
||||
import { ADDITIONAL_MARKET_FEE } from '../../shared/market.ts';
|
||||
import { validateXmrAddress } from './xmr.ts';
|
||||
|
||||
export type MarketPolicy = { marketEnabled?: boolean; tradingEnabled?: boolean; hostFeeAddress?: string };
|
||||
export function operatorMarketPolicy(env: NodeJS.ProcessEnv = process.env): Required<MarketPolicy> {
|
||||
const flag = (name: string, fallback: boolean) => {
|
||||
const value = env[name] ?? (fallback ? '1' : '0');
|
||||
if (value !== '0' && value !== '1') throw new Error(`${name} must be 0 or 1`);
|
||||
return value === '1';
|
||||
};
|
||||
const hostFeeAddress = env.WIKIDECK_MARKET_HOST_FEE_ADDRESS ?? ADDITIONAL_MARKET_FEE.address;
|
||||
if (!/^[1-9A-HJ-NP-Za-km-z]{95}$/.test(hostFeeAddress)) throw new Error('Invalid WIKIDECK_MARKET_HOST_FEE_ADDRESS');
|
||||
return { marketEnabled: flag('WIKIDECK_MARKET_ENABLED', true),
|
||||
tradingEnabled: flag('WIKIDECK_MARKET_TRADING_ENABLED', true), hostFeeAddress };
|
||||
}
|
||||
export function resolvedMarketPolicy(policy: MarketPolicy): Required<MarketPolicy> {
|
||||
return { marketEnabled: policy.marketEnabled ?? true, tradingEnabled: policy.tradingEnabled ?? true,
|
||||
hostFeeAddress: policy.hostFeeAddress ?? ADDITIONAL_MARKET_FEE.address };
|
||||
}
|
||||
export async function validateMarketPolicy(policy: MarketPolicy): Promise<void> {
|
||||
await validateXmrAddress(resolvedMarketPolicy(policy).hostFeeAddress);
|
||||
}
|
||||
/** Pausing new business never hides liabilities or blocks safe resolution/withdrawal requests. */
|
||||
export function permitsMarketAction(policy: MarketPolicy, action: string): boolean {
|
||||
return !['list', 'bid', 'buy', 'reserve', 'mock-credit'].includes(action) ||
|
||||
(resolvedMarketPolicy(policy).marketEnabled && resolvedMarketPolicy(policy).tradingEnabled);
|
||||
}
|
||||
Reference in New Issue
Block a user