cangku/backend/src/services/imageSearchCredentialGuard.js

46 lines
1.5 KiB
JavaScript

'use strict';
const { getAlibaba1688ImageSearchRuntimeConfig } = require('./alibaba1688ImageSearchSettings');
const { getSimilarProductsRuntimeConfig } = require('./similarProductsSettings');
function shouldRequireImageSearchCredentials() {
// Image search is an optional integration in the PDD edition.
const configured = String(process.env.REQUIRE_PERSISTED_IMAGE_SEARCH_SECRETS || '').trim().toLowerCase();
return configured === 'true' || configured === '1';
}
async function verifyImageSearchCredentials() {
const [companyConfig, alibabaConfig] = await Promise.all([
getSimilarProductsRuntimeConfig({ forceRefresh: true }),
getAlibaba1688ImageSearchRuntimeConfig({ forceRefresh: true }),
]);
const status = {
company: {
configured: Boolean(companyConfig.token),
source: companyConfig.secretSource || companyConfig.source || 'unconfigured',
},
alibaba1688: {
configured: Boolean(alibabaConfig.ak),
source: alibabaConfig.secretSource || alibabaConfig.source || 'unconfigured',
},
};
const missing = [];
if (!status.company.configured) missing.push('公司以图搜图 API Key');
if (!status.alibaba1688.configured) missing.push('1688 以图搜图 AccessKey');
if (missing.length) {
const error = new Error(`生产密钥守卫校验失败:${missing.join('、')}`);
error.code = 'IMAGE_SEARCH_CREDENTIALS_MISSING';
error.status = status;
throw error;
}
return status;
}
module.exports = {
shouldRequireImageSearchCredentials,
verifyImageSearchCredentials,
};