Files
akmon/push-receiver-service/check-config.js
2026-01-20 08:04:15 +08:00

118 lines
4.1 KiB
JavaScript
Raw Permalink Blame History

This file contains invisible Unicode characters
This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
/**
* Supabase 连接配置检查脚本
* 帮助验证 Supabase 连接配置是否正确
*/
require('dotenv').config();
class SupabaseConfigChecker {
constructor() {
this.config = {
SUPABASE_URL: process.env.SUPABASE_URL,
SUPABASE_ANON_KEY: process.env.SUPABASE_ANON_KEY,
SUPABASE_SERVICE_ROLE_KEY: process.env.SUPABASE_SERVICE_ROLE_KEY,
API_KEY: process.env.API_KEY
};
}
async checkConfig() {
console.log('🔍 检查 Supabase 配置...\n');
// 检查环境变量
console.log('📋 环境变量检查:');
for (const [key, value] of Object.entries(this.config)) {
if (value) {
const displayValue = value.length > 20 ?
value.substring(0, 20) + '...' : value;
console.log(`${key}: ${displayValue}`);
} else {
console.log(`${key}: 未设置`);
}
}
console.log('\n🌐 URL 格式检查:');
if (this.config.SUPABASE_URL) {
try {
const url = new URL(this.config.SUPABASE_URL);
console.log(`✅ 协议: ${url.protocol}`);
console.log(`✅ 主机: ${url.hostname}`);
console.log(`✅ 端口: ${url.port || '默认'}`);
} catch (error) {
console.log(`❌ URL 格式错误: ${error.message}`);
}
}
// 尝试基本连接测试
if (this.config.SUPABASE_URL && this.config.SUPABASE_ANON_KEY) {
console.log('\n🔗 尝试连接测试...');
await this.testConnection();
} else {
console.log('\n⚠ 无法进行连接测试,缺少必要配置');
}
console.log('\n💡 配置建议:');
this.provideSuggestions();
}
async testConnection() {
try {
const { createClient } = require('@supabase/supabase-js');
const supabase = createClient(
this.config.SUPABASE_URL,
this.config.SUPABASE_ANON_KEY
);
// 尝试一个简单的查询
const { data, error } = await supabase
.from('ps_push_messages')
.select('count')
.limit(1);
if (error) {
console.log(`❌ 连接测试失败: ${error.message}`);
// 提供错误分析
if (error.message.includes('authentication')) {
console.log('💡 建议: 检查 SUPABASE_ANON_KEY 是否正确');
} if (error.message.includes('relation') && error.message.includes('does not exist')) {
console.log('💡 建议: 数据库中缺少 ps_push_messages 表,请先执行数据库初始化脚本');
}
if (error.message.includes('connection')) {
console.log('💡 建议: 检查 SUPABASE_URL 是否可访问');
}
} else {
console.log('✅ 基本连接测试成功');
}
} catch (error) {
console.log(`❌ 连接测试出错: ${error.message}`);
}
}
provideSuggestions() {
console.log('1. 确保 Supabase 实例正在运行并可访问');
console.log('2. 检查防火墙和网络配置');
console.log('3. 验证 API 密钥的有效性');
console.log('4. 确保数据库中存在必要的表结构');
console.log('5. 如使用自托管 Supabase确认服务状态');
console.log('\n📝 下一步操作:');
console.log('1. 更新 .env 文件中的正确配置');
console.log('2. 运行: npm run setup-supabase');
console.log('3. 运行: npm test');
console.log('4. 运行: npm start');
}
}
// 执行检查
async function main() {
const checker = new SupabaseConfigChecker();
await checker.checkConfig();
}
if (require.main === module) {
main().catch(console.error);
}
module.exports = SupabaseConfigChecker;