Add live money configuration setup

This commit is contained in:
Theodore Song
2026-07-12 16:58:10 -04:00
parent c4acfd047a
commit f66155da69
6 changed files with 157 additions and 17 deletions
+34 -3
View File
@@ -1,11 +1,22 @@
const REQUIRED_ENV = [
["KYC_PROVIDER", "KYC / eligibility provider"],
["KYC_API_KEY", "KYC provider API key"],
["KYC_WEBHOOK_SECRET", "KYC webhook secret"],
["PAYMENTS_PROVIDER", "Deposit and withdrawal provider"],
["PAYMENTS_API_KEY", "Payments provider API key"],
["PAYMENTS_WEBHOOK_SECRET", "Payments webhook secret"],
["WALLET_PROVIDER", "Wallet or deposit-wallet provider"],
["WALLET_PROJECT_ID", "Wallet provider project ID"],
["WALLET_API_KEY", "Wallet provider API key"],
["DEPOSIT_WALLET_ADDRESS", "Polymarket deposit-wallet address"],
["POLYMARKET_SIGNATURE_TYPE", "Polymarket signature type"],
["POLYMARKET_CLOB_API_KEY", "Polymarket CLOB API key"],
["POLYMARKET_CLOB_SECRET", "Polymarket CLOB API secret"],
["POLYMARKET_CLOB_PASSPHRASE", "Polymarket CLOB passphrase"],
["SETTLEMENT_ASSET", "Settlement asset"],
["SETTLEMENT_CHAIN", "Settlement chain"],
["AUDIT_LOG_STORE", "Durable audit log store"],
["ADMIN_ALERT_EMAIL", "Admin alert destination"],
];
function providerStatus() {
@@ -13,23 +24,43 @@ function providerStatus() {
key,
label,
configured: Boolean(process.env[key]),
expected: key === "POLYMARKET_SIGNATURE_TYPE" ? "3 for new deposit-wallet API users" : undefined,
}));
}
function liveTradingReady() {
return providerStatus().every((x) => x.configured) && process.env.LIVE_TRADING_ENABLED === "true";
const requiredConfigured = providerStatus().every((x) => x.configured);
const liveFlagEnabled = process.env.LIVE_TRADING_ENABLED === "true";
const signatureTypeOk = String(process.env.POLYMARKET_SIGNATURE_TYPE || "") === "3";
const chainOk = String(process.env.POLYMARKET_CHAIN_ID || "137") === "137";
return requiredConfigured && liveFlagEnabled && signatureTypeOk && chainOk;
}
function baseStatus() {
const providers = providerStatus();
const liveFlagEnabled = process.env.LIVE_TRADING_ENABLED === "true";
const signatureTypeOk = String(process.env.POLYMARKET_SIGNATURE_TYPE || "") === "3";
const chainOk = String(process.env.POLYMARKET_CHAIN_ID || "137") === "137";
const missing = providers.filter((x) => !x.configured).map((x) => x.label);
if (!liveFlagEnabled) missing.push("LIVE_TRADING_ENABLED=true after final approval");
if (!signatureTypeOk) missing.push("POLYMARKET_SIGNATURE_TYPE=3 for deposit-wallet users");
if (!chainOk) missing.push("POLYMARKET_CHAIN_ID=137");
return {
ok: true,
live_trading_enabled: liveTradingReady(),
live_flag_enabled: liveFlagEnabled,
signature_type_ok: signatureTypeOk,
chain_ok: chainOk,
locked_reason: liveTradingReady()
? null
: "Live trading is locked until KYC, payments, wallet signing, CLOB credentials, audit storage, and LIVE_TRADING_ENABLED=true are configured.",
: "Live trading is locked until eligibility, payments, wallet/deposit-wallet signing, Polymarket CLOB credentials, audit storage, monitoring, and LIVE_TRADING_ENABLED=true are configured.",
providers,
next_required: providers.filter((x) => !x.configured).map((x) => x.label),
next_required: missing,
docs: {
polymarket_overview: "https://docs.polymarket.com/trading/overview",
polymarket_quickstart: "https://docs.polymarket.com/trading/quickstart",
deposit_wallets: "https://docs.polymarket.com/trading/deposit-wallets",
},
};
}