smart-web-mcp 0.19.0 → 0.20.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +172 -0
- package/README.md +55 -5
- package/dist/cli.js +0 -0
- package/dist/dev.js +0 -0
- package/dist/index.js +0 -0
- package/dist/korea/coupang.js +116 -32
- package/dist/korea/coupang.js.map +1 -1
- package/dist/korea/fine-dust.d.ts +7 -0
- package/dist/korea/fine-dust.js +49 -1
- package/dist/korea/fine-dust.js.map +1 -1
- package/dist/korea/food-safety.d.ts +4 -1
- package/dist/korea/food-safety.js +119 -13
- package/dist/korea/food-safety.js.map +1 -1
- package/dist/korea/geeknews.js +2 -1
- package/dist/korea/geeknews.js.map +1 -1
- package/dist/korea/law.d.ts +8 -0
- package/dist/korea/law.js +53 -3
- package/dist/korea/law.js.map +1 -1
- package/dist/korea/proxy-client.d.ts +1 -0
- package/dist/korea/proxy-client.js +103 -8
- package/dist/korea/proxy-client.js.map +1 -1
- package/dist/korea/public-restroom.d.ts +7 -4
- package/dist/korea/public-restroom.js +71 -12
- package/dist/korea/public-restroom.js.map +1 -1
- package/dist/korea/real-estate.d.ts +7 -0
- package/dist/korea/real-estate.js +72 -5
- package/dist/korea/real-estate.js.map +1 -1
- package/dist/korea/stock.js +49 -20
- package/dist/korea/stock.js.map +1 -1
- package/dist/korea/weather.js +5 -0
- package/dist/korea/weather.js.map +1 -1
- package/dist/mcp-server.js +16 -10
- package/dist/mcp-server.js.map +1 -1
- package/dist/settings.d.ts +2 -0
- package/dist/settings.js +1 -0
- package/dist/settings.js.map +1 -1
- package/dist/smartcrawl-export.d.ts +36 -0
- package/dist/smartcrawl-export.js +74 -7
- package/dist/smartcrawl-export.js.map +1 -1
- package/dist/smartcrawl.js +19 -1
- package/dist/smartcrawl.js.map +1 -1
- package/dist/smartfetch/archive-fallback.js +18 -0
- package/dist/smartfetch/archive-fallback.js.map +1 -1
- package/dist/smartfetch/pipeline.js +5 -3
- package/dist/smartfetch/pipeline.js.map +1 -1
- package/dist/smartfetch/providers/cp-common.js +16 -3
- package/dist/smartfetch/providers/cp-common.js.map +1 -1
- package/dist/smartfetch/providers/naver-blog.js +49 -7
- package/dist/smartfetch/providers/naver-blog.js.map +1 -1
- package/dist/smartfetch/providers/naver-cafe.js +26 -7
- package/dist/smartfetch/providers/naver-cafe.js.map +1 -1
- package/dist/smartfetch/providers/wikidocs.js +42 -11
- package/dist/smartfetch/providers/wikidocs.js.map +1 -1
- package/dist/smartfetch.js +5 -2
- package/dist/smartfetch.js.map +1 -1
- package/dist/smartsearch.js +59 -0
- package/dist/smartsearch.js.map +1 -1
- package/package.json +20 -2
|
@@ -7,17 +7,26 @@ const DEFAULT_PROXY = "https://k-skill-proxy.nomadamas.org";
|
|
|
7
7
|
const DEFAULT_TIMEOUT_MS = 15000;
|
|
8
8
|
const MAX_REDIRECTS = 5;
|
|
9
9
|
const BROWSER_UA = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/134.0.0.0 Safari/537.36";
|
|
10
|
+
const REDACTED = "[redacted]";
|
|
11
|
+
const CREDENTIAL_QUERY_PARAM = "(?:serviceKey|apiKey|apikey|api_key|key|token|access_token|client_secret|clientSecret|authorization|auth|authToken|auth_token)";
|
|
12
|
+
const CREDENTIAL_QUERY_RE = new RegExp(`([?&;]|&)(${CREDENTIAL_QUERY_PARAM})=([^&#\\s"'<>\\\\}]*)`, "gi");
|
|
13
|
+
const KAKAO_AUTH_RE = /\bKakaoAK\s+[\w.+/=-]+/gi;
|
|
10
14
|
export function proxyBase() {
|
|
11
15
|
return (process.env["KSKILL_PROXY_BASE_URL"] || DEFAULT_PROXY).replace(/\/+$/, "");
|
|
12
16
|
}
|
|
13
17
|
function invalidUrlError(message) {
|
|
14
|
-
return { ok: false, status: 0, message, code: "invalid_url" };
|
|
18
|
+
return { ok: false, status: 0, message: redactErrorMessage(message), code: "invalid_url" };
|
|
15
19
|
}
|
|
16
20
|
function allowPrivateHosts() {
|
|
17
21
|
return configFlag("network.allowPrivateHosts");
|
|
18
22
|
}
|
|
19
23
|
function blockedUrlError(message) {
|
|
20
|
-
return { ok: false, status: 0, message, code: "blocked_url" };
|
|
24
|
+
return { ok: false, status: 0, message: redactErrorMessage(message), code: "blocked_url" };
|
|
25
|
+
}
|
|
26
|
+
function redactErrorMessage(message) {
|
|
27
|
+
return message
|
|
28
|
+
.replace(CREDENTIAL_QUERY_RE, (_match, separator, key) => `${separator}${key}=${REDACTED}`)
|
|
29
|
+
.replace(KAKAO_AUTH_RE, `KakaoAK ${REDACTED}`);
|
|
21
30
|
}
|
|
22
31
|
function isRedirectStatus(status) {
|
|
23
32
|
return status === 301 || status === 302 || status === 303 || status === 307 || status === 308;
|
|
@@ -70,7 +79,7 @@ async function validatedFetchText(url, init, timeoutMs, options = {}) {
|
|
|
70
79
|
if (!isRedirectStatus(res.status)) {
|
|
71
80
|
const text = await res.text();
|
|
72
81
|
if (!res.ok) {
|
|
73
|
-
return { ok: false, status: res.status, message: text.slice(0, 500), code: `http_${res.status}` };
|
|
82
|
+
return { ok: false, status: res.status, message: redactErrorMessage(text.slice(0, 500)), code: `http_${res.status}` };
|
|
74
83
|
}
|
|
75
84
|
return { ok: true, data: text };
|
|
76
85
|
}
|
|
@@ -81,7 +90,7 @@ async function validatedFetchText(url, init, timeoutMs, options = {}) {
|
|
|
81
90
|
catch {
|
|
82
91
|
// Ignore best-effort stream cleanup failures.
|
|
83
92
|
}
|
|
84
|
-
return { ok: false, status: res.status, message: `Redirects are not allowed while requesting URL: ${url}
|
|
93
|
+
return { ok: false, status: res.status, message: redactErrorMessage(`Redirects are not allowed while requesting URL: ${url}`), code: "redirect_not_allowed" };
|
|
85
94
|
}
|
|
86
95
|
if (hop === MAX_REDIRECTS) {
|
|
87
96
|
try {
|
|
@@ -90,7 +99,7 @@ async function validatedFetchText(url, init, timeoutMs, options = {}) {
|
|
|
90
99
|
catch {
|
|
91
100
|
// Ignore best-effort stream cleanup failures.
|
|
92
101
|
}
|
|
93
|
-
return { ok: false, status: res.status, message: `Too many redirects while requesting URL: ${url}
|
|
102
|
+
return { ok: false, status: res.status, message: redactErrorMessage(`Too many redirects while requesting URL: ${url}`), code: "too_many_redirects" };
|
|
94
103
|
}
|
|
95
104
|
const location = res.headers.get("location");
|
|
96
105
|
try {
|
|
@@ -104,16 +113,92 @@ async function validatedFetchText(url, init, timeoutMs, options = {}) {
|
|
|
104
113
|
currentUrl = new URL(location, currentUrl).toString();
|
|
105
114
|
currentInit = redirectInit(res.status, currentInit);
|
|
106
115
|
}
|
|
107
|
-
return { ok: false, status: 0, message: `Too many redirects while requesting URL: ${url}
|
|
116
|
+
return { ok: false, status: 0, message: redactErrorMessage(`Too many redirects while requesting URL: ${url}`), code: "too_many_redirects" };
|
|
108
117
|
}
|
|
109
118
|
catch (err) {
|
|
110
119
|
const message = err instanceof Error ? err.message : String(err);
|
|
111
|
-
return { ok: false, status: 0, message, code: err instanceof Error && err.name === "AbortError" ? "timeout" : "network_error" };
|
|
120
|
+
return { ok: false, status: 0, message: redactErrorMessage(message), code: err instanceof Error && err.name === "AbortError" ? "timeout" : "network_error" };
|
|
112
121
|
}
|
|
113
122
|
finally {
|
|
114
123
|
clearTimeout(timer);
|
|
115
124
|
}
|
|
116
125
|
}
|
|
126
|
+
async function validatedFetchBytes(url, init, timeoutMs, options = {}) {
|
|
127
|
+
const controller = new AbortController();
|
|
128
|
+
const timer = setTimeout(() => controller.abort(), timeoutMs);
|
|
129
|
+
let currentUrl = url;
|
|
130
|
+
let currentInit = init;
|
|
131
|
+
const followRedirects = options.followRedirects !== false;
|
|
132
|
+
try {
|
|
133
|
+
for (let hop = 0; hop <= MAX_REDIRECTS; hop++) {
|
|
134
|
+
const validation = await validateOutboundUrl(currentUrl, { allowPrivateHosts: allowPrivateHosts() });
|
|
135
|
+
if (!validation.ok)
|
|
136
|
+
return blockedUrlError(validation.message);
|
|
137
|
+
const res = await fetch(currentUrl, {
|
|
138
|
+
...currentInit,
|
|
139
|
+
signal: controller.signal,
|
|
140
|
+
redirect: "manual",
|
|
141
|
+
});
|
|
142
|
+
if (!isRedirectStatus(res.status)) {
|
|
143
|
+
const bytes = new Uint8Array(await res.arrayBuffer());
|
|
144
|
+
if (!res.ok) {
|
|
145
|
+
const text = new TextDecoder("utf-8").decode(bytes.slice(0, 500));
|
|
146
|
+
return { ok: false, status: res.status, message: redactErrorMessage(text), code: `http_${res.status}` };
|
|
147
|
+
}
|
|
148
|
+
return { ok: true, data: bytes };
|
|
149
|
+
}
|
|
150
|
+
if (!followRedirects) {
|
|
151
|
+
try {
|
|
152
|
+
await res.body?.cancel();
|
|
153
|
+
}
|
|
154
|
+
catch {
|
|
155
|
+
// Ignore best-effort stream cleanup failures.
|
|
156
|
+
}
|
|
157
|
+
return { ok: false, status: res.status, message: redactErrorMessage(`Redirects are not allowed while requesting URL: ${url}`), code: "redirect_not_allowed" };
|
|
158
|
+
}
|
|
159
|
+
if (hop === MAX_REDIRECTS) {
|
|
160
|
+
try {
|
|
161
|
+
await res.body?.cancel();
|
|
162
|
+
}
|
|
163
|
+
catch {
|
|
164
|
+
// Ignore best-effort stream cleanup failures.
|
|
165
|
+
}
|
|
166
|
+
return { ok: false, status: res.status, message: redactErrorMessage(`Too many redirects while requesting URL: ${url}`), code: "too_many_redirects" };
|
|
167
|
+
}
|
|
168
|
+
const location = res.headers.get("location");
|
|
169
|
+
try {
|
|
170
|
+
await res.body?.cancel();
|
|
171
|
+
}
|
|
172
|
+
catch {
|
|
173
|
+
// Ignore best-effort stream cleanup failures.
|
|
174
|
+
}
|
|
175
|
+
if (!location)
|
|
176
|
+
return { ok: false, status: res.status, message: "Redirect response did not include a Location header", code: "redirect_missing_location" };
|
|
177
|
+
currentUrl = new URL(location, currentUrl).toString();
|
|
178
|
+
currentInit = redirectInit(res.status, currentInit);
|
|
179
|
+
}
|
|
180
|
+
return { ok: false, status: 0, message: redactErrorMessage(`Too many redirects while requesting URL: ${url}`), code: "too_many_redirects" };
|
|
181
|
+
}
|
|
182
|
+
catch (err) {
|
|
183
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
184
|
+
return { ok: false, status: 0, message: redactErrorMessage(message), code: err instanceof Error && err.name === "AbortError" ? "timeout" : "network_error" };
|
|
185
|
+
}
|
|
186
|
+
finally {
|
|
187
|
+
clearTimeout(timer);
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
function decodeBytes(bytes, encodings) {
|
|
191
|
+
const candidates = encodings.length > 0 ? encodings : ["utf-8"];
|
|
192
|
+
for (const encoding of candidates) {
|
|
193
|
+
try {
|
|
194
|
+
return new TextDecoder(encoding, { fatal: true }).decode(bytes);
|
|
195
|
+
}
|
|
196
|
+
catch {
|
|
197
|
+
// Try the next explicit candidate.
|
|
198
|
+
}
|
|
199
|
+
}
|
|
200
|
+
return new TextDecoder(candidates[candidates.length - 1] ?? "utf-8").decode(bytes);
|
|
201
|
+
}
|
|
117
202
|
export async function proxyGet(path, params = {}, timeoutMs = DEFAULT_TIMEOUT_MS) {
|
|
118
203
|
const proxyUrl = buildProxyUrl(path);
|
|
119
204
|
if (!proxyUrl.ok)
|
|
@@ -134,6 +219,16 @@ export async function httpGetText(url, headers = {}, timeoutMs = DEFAULT_TIMEOUT
|
|
|
134
219
|
},
|
|
135
220
|
}, timeoutMs);
|
|
136
221
|
}
|
|
222
|
+
export async function httpGetDecodedText(url, headers = {}, timeoutMs = DEFAULT_TIMEOUT_MS, encodings = ["utf-8"]) {
|
|
223
|
+
const result = await validatedFetchBytes(url, {
|
|
224
|
+
headers: {
|
|
225
|
+
"user-agent": BROWSER_UA,
|
|
226
|
+
"accept-language": "ko-KR,ko;q=0.9,en;q=0.8",
|
|
227
|
+
...headers,
|
|
228
|
+
},
|
|
229
|
+
}, timeoutMs);
|
|
230
|
+
return result.ok ? { ok: true, data: decodeBytes(result.data, encodings) } : result;
|
|
231
|
+
}
|
|
137
232
|
export async function httpGet(url, headers = {}, timeoutMs = DEFAULT_TIMEOUT_MS) {
|
|
138
233
|
const result = await httpGetText(url, { accept: "application/json, */*", ...headers }, timeoutMs);
|
|
139
234
|
if (!result.ok)
|
|
@@ -158,6 +253,6 @@ export async function httpPost(url, body, headers = {}, timeoutMs = DEFAULT_TIME
|
|
|
158
253
|
return result.ok ? { ok: true, data: result.data } : result;
|
|
159
254
|
}
|
|
160
255
|
export function formatError(err) {
|
|
161
|
-
return `[${err.code}] ${err.message}`;
|
|
256
|
+
return `[${err.code}] ${redactErrorMessage(err.message)}`;
|
|
162
257
|
}
|
|
163
258
|
//# sourceMappingURL=proxy-client.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"proxy-client.js","sourceRoot":"","sources":["../../src/korea/proxy-client.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"proxy-client.js","sourceRoot":"","sources":["../../src/korea/proxy-client.ts"],"names":[],"mappings":"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"}
|
|
@@ -25,6 +25,12 @@ export type RestroomResult = {
|
|
|
25
25
|
radius_km: number;
|
|
26
26
|
total: number;
|
|
27
27
|
items: NearbyRestroom[];
|
|
28
|
+
warning?: string;
|
|
29
|
+
data_error?: {
|
|
30
|
+
code: string;
|
|
31
|
+
status: number;
|
|
32
|
+
message: string;
|
|
33
|
+
};
|
|
28
34
|
};
|
|
29
35
|
export type NearbyRestroom = RestroomRow & {
|
|
30
36
|
distance_m: number;
|
|
@@ -37,8 +43,5 @@ export declare function runPublicRestroom(options: {
|
|
|
37
43
|
radiusKm?: number;
|
|
38
44
|
limit?: number;
|
|
39
45
|
timeoutMs?: number;
|
|
40
|
-
}): Promise<RestroomResult
|
|
41
|
-
ok: false;
|
|
42
|
-
message: string;
|
|
43
|
-
}>;
|
|
46
|
+
}): Promise<RestroomResult>;
|
|
44
47
|
export declare function renderPublicRestroom(result: RestroomResult): string;
|
|
@@ -8,8 +8,9 @@
|
|
|
8
8
|
* This tool downloads a regional CSV on first call (cached in memory for the session).
|
|
9
9
|
* CSV is ~2-5 MB per region; nationwide is ~15 MB.
|
|
10
10
|
*/
|
|
11
|
-
import { httpGet } from "./proxy-client.js";
|
|
11
|
+
import { formatError, httpGet, httpGetDecodedText } from "./proxy-client.js";
|
|
12
12
|
const CSV_BASE = "https://file.localdata.go.kr/file/download/public_restroom_info";
|
|
13
|
+
const LOCALDATA_REFERER = "https://www.localdata.go.kr/";
|
|
13
14
|
const KAKAO_SEARCH = "https://dapi.kakao.com/v2/local/search/keyword.json";
|
|
14
15
|
// In-memory cache: regionCode → parsed rows
|
|
15
16
|
const csvCache = new Map();
|
|
@@ -57,20 +58,59 @@ function parseCSV(text) {
|
|
|
57
58
|
}
|
|
58
59
|
return rows;
|
|
59
60
|
}
|
|
61
|
+
function compactErrorMessage(message) {
|
|
62
|
+
return message
|
|
63
|
+
.replace(/<[^>]+>/g, " ")
|
|
64
|
+
.replace(/\s+/g, " ")
|
|
65
|
+
.trim()
|
|
66
|
+
.slice(0, 180);
|
|
67
|
+
}
|
|
68
|
+
function coordinateUnavailableResult(location, radiusKm) {
|
|
69
|
+
return {
|
|
70
|
+
source: "public-restroom",
|
|
71
|
+
location_hint: location,
|
|
72
|
+
radius_km: radiusKm,
|
|
73
|
+
total: 0,
|
|
74
|
+
items: [],
|
|
75
|
+
warning: "좌표를 확인할 수 없습니다. lat/lon을 직접 입력하거나 KAKAO_REST_API_KEY를 설정해 주세요.",
|
|
76
|
+
data_error: {
|
|
77
|
+
code: "coordinate_unavailable",
|
|
78
|
+
status: 0,
|
|
79
|
+
message: "좌표 확인 실패: lat/lon 입력 또는 KAKAO_REST_API_KEY 설정이 필요합니다.",
|
|
80
|
+
},
|
|
81
|
+
};
|
|
82
|
+
}
|
|
60
83
|
async function fetchCSV(regionCode, timeoutMs = 30000) {
|
|
61
84
|
const cacheKey = regionCode ?? "nationwide";
|
|
62
85
|
if (csvCache.has(cacheKey))
|
|
63
|
-
return csvCache.get(cacheKey);
|
|
86
|
+
return { rows: csvCache.get(cacheKey) };
|
|
64
87
|
const url = regionCode
|
|
65
|
-
? `${CSV_BASE}/info?
|
|
88
|
+
? `${CSV_BASE}/info?localCode=${regionCode}`
|
|
66
89
|
: `${CSV_BASE}/info`;
|
|
67
|
-
const result = await
|
|
68
|
-
if (!result.ok)
|
|
69
|
-
return
|
|
70
|
-
|
|
71
|
-
|
|
90
|
+
const result = await httpGetDecodedText(url, { accept: "text/csv, text/plain, */*", referer: LOCALDATA_REFERER }, timeoutMs, ["utf-8", "euc-kr"]);
|
|
91
|
+
if (!result.ok) {
|
|
92
|
+
return {
|
|
93
|
+
rows: [],
|
|
94
|
+
error: {
|
|
95
|
+
code: result.code,
|
|
96
|
+
status: result.status,
|
|
97
|
+
message: compactErrorMessage(formatError(result)),
|
|
98
|
+
},
|
|
99
|
+
};
|
|
100
|
+
}
|
|
101
|
+
const rows = parseCSV(result.data);
|
|
102
|
+
if (rows.length === 0) {
|
|
103
|
+
return {
|
|
104
|
+
rows,
|
|
105
|
+
error: {
|
|
106
|
+
code: "empty_csv",
|
|
107
|
+
status: 0,
|
|
108
|
+
message: "CSV response did not contain parseable restroom rows",
|
|
109
|
+
},
|
|
110
|
+
};
|
|
111
|
+
}
|
|
72
112
|
csvCache.set(cacheKey, rows);
|
|
73
|
-
return rows;
|
|
113
|
+
return { rows };
|
|
74
114
|
}
|
|
75
115
|
async function resolveLocationCoords(location, kakaoApiKey, timeoutMs = 10000) {
|
|
76
116
|
const key = kakaoApiKey ?? process.env["KAKAO_REST_API_KEY"] ?? "";
|
|
@@ -128,13 +168,24 @@ export async function runPublicRestroom(options) {
|
|
|
128
168
|
anchorLon = coords.lon;
|
|
129
169
|
}
|
|
130
170
|
else {
|
|
131
|
-
return
|
|
171
|
+
return coordinateUnavailableResult(location, radiusKm);
|
|
132
172
|
}
|
|
133
173
|
}
|
|
134
174
|
const regionCode = inferRegionCode(location);
|
|
135
|
-
const
|
|
175
|
+
const csv = await fetchCSV(regionCode, timeoutMs);
|
|
176
|
+
const rows = csv.rows;
|
|
136
177
|
if (rows.length === 0) {
|
|
137
|
-
return {
|
|
178
|
+
return {
|
|
179
|
+
source: "public-restroom",
|
|
180
|
+
location_hint: location,
|
|
181
|
+
anchor_lat: anchorLat,
|
|
182
|
+
anchor_lon: anchorLon,
|
|
183
|
+
radius_km: radiusKm,
|
|
184
|
+
total: 0,
|
|
185
|
+
items: [],
|
|
186
|
+
warning: "공중화장실 데이터 원본을 불러오지 못해 근처 결과를 계산할 수 없습니다. 잠시 후 다시 시도하세요.",
|
|
187
|
+
...(csv.error ? { data_error: csv.error } : {}),
|
|
188
|
+
};
|
|
138
189
|
}
|
|
139
190
|
const radiusM = radiusKm * 1000;
|
|
140
191
|
const nearby = rows
|
|
@@ -162,6 +213,14 @@ export function renderPublicRestroom(result) {
|
|
|
162
213
|
`검색 반경: ${result.radius_km}km | ${result.total}개 발견`,
|
|
163
214
|
"",
|
|
164
215
|
];
|
|
216
|
+
if (result.warning) {
|
|
217
|
+
lines.push(result.warning);
|
|
218
|
+
if (result.data_error) {
|
|
219
|
+
const status = result.data_error.status ? ` / HTTP ${result.data_error.status}` : "";
|
|
220
|
+
lines.push(`진단: ${result.data_error.code}${status} - ${result.data_error.message}`);
|
|
221
|
+
}
|
|
222
|
+
return lines.join("\n");
|
|
223
|
+
}
|
|
165
224
|
if (result.total === 0) {
|
|
166
225
|
lines.push(`반경 ${result.radius_km}km 내 공중화장실이 없습니다. 반경을 늘려서 다시 시도해보세요.`);
|
|
167
226
|
return lines.join("\n");
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"public-restroom.js","sourceRoot":"","sources":["../../src/korea/public-restroom.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAA;
|
|
1
|
+
{"version":3,"file":"public-restroom.js","sourceRoot":"","sources":["../../src/korea/public-restroom.ts"],"names":[],"mappings":"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"}
|
|
@@ -27,6 +27,11 @@ export type RealEstateSummary = {
|
|
|
27
27
|
median_deposit_10k?: number;
|
|
28
28
|
monthly_rent_avg_10k?: number;
|
|
29
29
|
};
|
|
30
|
+
export type RealEstateDataError = {
|
|
31
|
+
code: string;
|
|
32
|
+
status: number;
|
|
33
|
+
message: string;
|
|
34
|
+
};
|
|
30
35
|
export type RealEstateResult = {
|
|
31
36
|
source: "real-estate";
|
|
32
37
|
action: "region-code" | "transactions";
|
|
@@ -37,6 +42,8 @@ export type RealEstateResult = {
|
|
|
37
42
|
region_codes?: RegionCode[];
|
|
38
43
|
items?: RealEstateDeal[];
|
|
39
44
|
summary?: RealEstateSummary;
|
|
45
|
+
warning?: string;
|
|
46
|
+
data_error?: RealEstateDataError;
|
|
40
47
|
};
|
|
41
48
|
export type AssetType = "apartment" | "officetel" | "villa" | "single-house" | "commercial";
|
|
42
49
|
export type DealType = "trade" | "rent";
|
|
@@ -8,14 +8,46 @@ function prevMonthYmd() {
|
|
|
8
8
|
d.setMonth(d.getMonth() - 1);
|
|
9
9
|
return d.toISOString().slice(0, 7).replace("-", "");
|
|
10
10
|
}
|
|
11
|
+
function compactDiagnosticMessage(message) {
|
|
12
|
+
try {
|
|
13
|
+
const parsed = JSON.parse(message);
|
|
14
|
+
if (parsed && typeof parsed === "object" && "message" in parsed) {
|
|
15
|
+
const nested = parsed.message;
|
|
16
|
+
if (typeof nested === "string" && nested.trim())
|
|
17
|
+
return compactDiagnosticMessage(nested);
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
catch {
|
|
21
|
+
// Fall through to generic compaction.
|
|
22
|
+
}
|
|
23
|
+
return message
|
|
24
|
+
.replace(/<[^>]+>/g, " ")
|
|
25
|
+
.replace(/\s+/g, " ")
|
|
26
|
+
.trim()
|
|
27
|
+
.slice(0, 220);
|
|
28
|
+
}
|
|
29
|
+
function dataErrorResult(result) {
|
|
30
|
+
return {
|
|
31
|
+
code: result.code,
|
|
32
|
+
status: result.status,
|
|
33
|
+
message: compactDiagnosticMessage(result.message),
|
|
34
|
+
};
|
|
35
|
+
}
|
|
11
36
|
export async function runRealEstate(options) {
|
|
12
37
|
const { action, q, lawd_cd, asset_type = "apartment", deal_type = "trade", deal_ymd, num_of_rows = 100, timeoutMs = 20000 } = options;
|
|
13
38
|
if (action === "region-code") {
|
|
14
39
|
if (!q)
|
|
15
40
|
return { ok: false, message: "지역명(q)이 필요합니다." };
|
|
16
41
|
const result = await proxyGet("/v1/real-estate/region-code", { q }, timeoutMs);
|
|
17
|
-
if (!result.ok)
|
|
18
|
-
return {
|
|
42
|
+
if (!result.ok) {
|
|
43
|
+
return {
|
|
44
|
+
source: "real-estate",
|
|
45
|
+
action: "region-code",
|
|
46
|
+
region_codes: [],
|
|
47
|
+
warning: "부동산 지역코드 데이터를 지금 불러올 수 없습니다. 잠시 후 다시 시도하세요.",
|
|
48
|
+
data_error: dataErrorResult(result),
|
|
49
|
+
};
|
|
50
|
+
}
|
|
19
51
|
const regions = (result.data["results"] ?? []);
|
|
20
52
|
return { source: "real-estate", action: "region-code", region_codes: regions };
|
|
21
53
|
}
|
|
@@ -25,8 +57,20 @@ export async function runRealEstate(options) {
|
|
|
25
57
|
const ymd = deal_ymd || prevMonthYmd();
|
|
26
58
|
const path = `/v1/real-estate/${asset_type}/${deal_type}`;
|
|
27
59
|
const result = await proxyGet(path, { lawd_cd, deal_ymd: ymd, num_of_rows: String(num_of_rows) }, timeoutMs);
|
|
28
|
-
if (!result.ok)
|
|
29
|
-
return {
|
|
60
|
+
if (!result.ok) {
|
|
61
|
+
return {
|
|
62
|
+
source: "real-estate",
|
|
63
|
+
action: "transactions",
|
|
64
|
+
asset_type,
|
|
65
|
+
deal_type,
|
|
66
|
+
lawd_cd,
|
|
67
|
+
deal_ymd: ymd,
|
|
68
|
+
items: [],
|
|
69
|
+
summary: { sample_count: 0 },
|
|
70
|
+
warning: "부동산 실거래가 데이터를 지금 불러올 수 없습니다. 잠시 후 다시 시도하세요.",
|
|
71
|
+
data_error: dataErrorResult(result),
|
|
72
|
+
};
|
|
73
|
+
}
|
|
30
74
|
const d = result.data;
|
|
31
75
|
const items = (d["items"] ?? []);
|
|
32
76
|
const summary = d["summary"];
|
|
@@ -55,6 +99,15 @@ function formatPrice(won10k) {
|
|
|
55
99
|
export function renderRealEstate(result) {
|
|
56
100
|
if (result.action === "region-code") {
|
|
57
101
|
const lines = ["# 지역코드 조회", ""];
|
|
102
|
+
if (result.warning) {
|
|
103
|
+
lines.push(result.warning);
|
|
104
|
+
lines.push("k-skill-proxy 또는 국토교통부 상류 서비스가 호출 한도나 일시적인 프록시 오류를 반환했을 수 있습니다.");
|
|
105
|
+
if (result.data_error) {
|
|
106
|
+
const status = result.data_error.status ? ` / HTTP ${result.data_error.status}` : "";
|
|
107
|
+
lines.push(`진단: ${result.data_error.code}${status} - ${result.data_error.message}`);
|
|
108
|
+
}
|
|
109
|
+
return lines.join("\n");
|
|
110
|
+
}
|
|
58
111
|
for (const r of result.region_codes ?? []) {
|
|
59
112
|
lines.push(`- **${r.name}**: \`${r.lawd_cd}\``);
|
|
60
113
|
}
|
|
@@ -69,6 +122,15 @@ export function renderRealEstate(result) {
|
|
|
69
122
|
`기준: ${result.deal_ymd}`,
|
|
70
123
|
"",
|
|
71
124
|
];
|
|
125
|
+
if (result.warning) {
|
|
126
|
+
lines.push(result.warning);
|
|
127
|
+
lines.push("k-skill-proxy 또는 국토교통부 상류 서비스가 호출 한도나 일시적인 프록시 오류를 반환했을 수 있습니다.");
|
|
128
|
+
if (result.data_error) {
|
|
129
|
+
const status = result.data_error.status ? ` / HTTP ${result.data_error.status}` : "";
|
|
130
|
+
lines.push(`진단: ${result.data_error.code}${status} - ${result.data_error.message}`);
|
|
131
|
+
}
|
|
132
|
+
lines.push("");
|
|
133
|
+
}
|
|
72
134
|
if (s) {
|
|
73
135
|
lines.push("## 요약");
|
|
74
136
|
lines.push(`- 거래건수: ${s.sample_count}건`);
|
|
@@ -85,7 +147,12 @@ export function renderRealEstate(result) {
|
|
|
85
147
|
lines.push("");
|
|
86
148
|
}
|
|
87
149
|
lines.push("## 상위 거래");
|
|
88
|
-
|
|
150
|
+
const items = result.items ?? [];
|
|
151
|
+
if (items.length === 0) {
|
|
152
|
+
lines.push("조회된 거래가 없습니다.");
|
|
153
|
+
lines.push("법정동코드, 기준월, 주택유형/거래유형을 확인하거나 다른 월로 다시 조회하세요.");
|
|
154
|
+
}
|
|
155
|
+
for (const item of items.slice(0, 10)) {
|
|
89
156
|
const price = item.price_10k !== undefined ? formatPrice(item.price_10k) : item.deposit_10k !== undefined ? `보증금 ${formatPrice(item.deposit_10k)}` : "";
|
|
90
157
|
lines.push(`- ${item.name ?? "?"} ${item.area_m2 ?? "?"}㎡ ${item.floor ?? "?"}층 ${price} (${item.deal_date ?? "?"})`);
|
|
91
158
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"real-estate.js","sourceRoot":"","sources":["../../src/korea/real-estate.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAA;
|
|
1
|
+
{"version":3,"file":"real-estate.js","sourceRoot":"","sources":["../../src/korea/real-estate.ts"],"names":[],"mappings":"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"}
|