feat: 사설 ccSLD 미지원 처리 및 README 추가
- it.com, uk.com 등 CentralNic 사설 ccSLD 목록 추가 - 미지원 ccSLD 조회 시 적절한 안내 메시지 반환 - README.md 문서 작성 (API 사용법, 지원 TLD, ccSLD 안내) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
@@ -1,6 +1,32 @@
|
||||
import { createConnection } from 'net';
|
||||
import type { VercelRequest, VercelResponse } from '@vercel/node';
|
||||
|
||||
// WHOIS 미지원 사설 ccSLD 목록
|
||||
const UNSUPPORTED_CCSLDS = [
|
||||
'it.com', // it.com Domains Ltd (런던) - 사설 레지스트리
|
||||
'uk.com', // CentralNic - WHOIS 미제공
|
||||
'us.com', // CentralNic - WHOIS 미제공
|
||||
'eu.com', // CentralNic - WHOIS 미제공
|
||||
'de.com', // CentralNic - WHOIS 미제공
|
||||
'br.com', // CentralNic - WHOIS 미제공
|
||||
'cn.com', // CentralNic - WHOIS 미제공
|
||||
'jpn.com', // CentralNic - WHOIS 미제공
|
||||
'kr.com', // CentralNic - WHOIS 미제공
|
||||
'ru.com', // CentralNic - WHOIS 미제공
|
||||
'za.com', // CentralNic - WHOIS 미제공
|
||||
];
|
||||
|
||||
function isUnsupportedCcSLD(domain: string): string | null {
|
||||
const parts = domain.toLowerCase().split('.');
|
||||
if (parts.length >= 3) {
|
||||
const ccSLD = parts.slice(-2).join('.');
|
||||
if (UNSUPPORTED_CCSLDS.includes(ccSLD)) {
|
||||
return ccSLD;
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
// TLD to WHOIS server mapping
|
||||
const WHOIS_SERVERS: Record<string, string> = {
|
||||
// Generic TLDs
|
||||
@@ -175,6 +201,21 @@ export default async function handler(req: VercelRequest, res: VercelResponse) {
|
||||
const domainName = domain.toLowerCase().trim();
|
||||
const startTime = Date.now();
|
||||
|
||||
// 사설 ccSLD WHOIS 미지원 체크
|
||||
const unsupportedCcSLD = isUnsupportedCcSLD(domainName);
|
||||
if (unsupportedCcSLD) {
|
||||
return res.status(200).json({
|
||||
domain: domainName,
|
||||
whois_supported: false,
|
||||
ccSLD: unsupportedCcSLD,
|
||||
message: `${unsupportedCcSLD} is a private ccSLD that does not provide public WHOIS data`,
|
||||
message_ko: `${unsupportedCcSLD}은(는) 공개 WHOIS를 제공하지 않는 사설 ccSLD입니다`,
|
||||
suggestion: 'Use registrar account API or contact the registry directly',
|
||||
suggestion_ko: '등록기관 계정 API를 사용하거나 레지스트리에 직접 문의하세요',
|
||||
query_time_ms: Date.now() - startTime,
|
||||
});
|
||||
}
|
||||
|
||||
try {
|
||||
const whoisServer = getWhoisServer(domainName);
|
||||
let raw = await queryWhois(whoisServer, domainName);
|
||||
|
||||
Reference in New Issue
Block a user