feat(M06-A): 建立MQTT连接与Broker基础
This commit is contained in:
+21
-3
@@ -21,8 +21,12 @@ const configSchema = z.object({
|
||||
QIPAI_PROFIT_SHARE_MOCK_ENABLED: z.enum(['true', 'false']).default('false'),
|
||||
QIPAI_THIRD_PARTY_CREDENTIALS: z.string().default('{}'),
|
||||
QIPAI_MQTT_URL: z.string().url().default('mqtt://101.42.38.246:1883'),
|
||||
QIPAI_MQTT_CLIENT_ID: z.string().min(1).max(128).default('qipai-backend'),
|
||||
QIPAI_MQTT_USERNAME: z.string().default(''),
|
||||
QIPAI_MQTT_PASSWORD: z.string().default('')
|
||||
QIPAI_MQTT_PASSWORD: z.string().default(''),
|
||||
QIPAI_MQTT_RECONNECT_MS: z.coerce.number().int().min(1000).max(60000).default(3000),
|
||||
QIPAI_MQTT_CONNECT_TIMEOUT_MS: z.coerce.number().int().min(1000).max(60000).default(10000),
|
||||
QIPAI_MQTT_MAX_MESSAGE_BYTES: z.coerce.number().int().min(1024).max(1048576).default(65536)
|
||||
});
|
||||
|
||||
export type AppConfig = ReturnType<typeof loadConfig>;
|
||||
@@ -35,6 +39,14 @@ export function loadConfig(env: NodeJS.ProcessEnv = process.env) {
|
||||
) {
|
||||
throw new Error('QIPAI_JWT_SECRET must be explicitly configured in production.');
|
||||
}
|
||||
const mqttUsernameConfigured = parsed.QIPAI_MQTT_USERNAME.length > 0;
|
||||
const mqttPasswordConfigured = parsed.QIPAI_MQTT_PASSWORD.length > 0;
|
||||
if (mqttUsernameConfigured !== mqttPasswordConfigured) {
|
||||
throw new Error('QIPAI_MQTT_USERNAME and QIPAI_MQTT_PASSWORD must be configured together.');
|
||||
}
|
||||
if (parsed.NODE_ENV === 'production' && !mqttUsernameConfigured) {
|
||||
throw new Error('MQTT credentials must be explicitly configured in production.');
|
||||
}
|
||||
|
||||
return {
|
||||
nodeEnv: parsed.NODE_ENV,
|
||||
@@ -69,8 +81,14 @@ export function loadConfig(env: NodeJS.ProcessEnv = process.env) {
|
||||
},
|
||||
mqtt: {
|
||||
url: parsed.QIPAI_MQTT_URL,
|
||||
usernameConfigured: parsed.QIPAI_MQTT_USERNAME.length > 0,
|
||||
passwordConfigured: parsed.QIPAI_MQTT_PASSWORD.length > 0
|
||||
clientId: parsed.QIPAI_MQTT_CLIENT_ID,
|
||||
username: parsed.QIPAI_MQTT_USERNAME,
|
||||
credential: parsed.QIPAI_MQTT_PASSWORD,
|
||||
usernameConfigured: mqttUsernameConfigured,
|
||||
passwordConfigured: mqttPasswordConfigured,
|
||||
reconnectPeriodMs: parsed.QIPAI_MQTT_RECONNECT_MS,
|
||||
connectTimeoutMs: parsed.QIPAI_MQTT_CONNECT_TIMEOUT_MS,
|
||||
maxMessageBytes: parsed.QIPAI_MQTT_MAX_MESSAGE_BYTES
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user