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:
kappa
2026-01-17 00:39:58 +09:00
parent b8109f86d8
commit 8d0c4d9da1
2 changed files with 140 additions and 0 deletions

View File

@@ -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);