smart-web-mcp 0.39.0 → 0.40.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 +17 -0
- package/README.md +11 -8
- package/dist/korea/smartvertical.d.ts +64 -0
- package/dist/korea/smartvertical.js +272 -0
- package/dist/korea/smartvertical.js.map +1 -0
- package/dist/mcp-server.js +67 -439
- package/dist/mcp-server.js.map +1 -1
- package/dist/smartfetch/provider-types.d.ts +12 -0
- package/dist/smartfetch/providers/commerce.js +83 -1
- package/dist/smartfetch/providers/commerce.js.map +1 -1
- package/dist/smartfetch.d.ts +8 -0
- package/dist/smartfetch.js +8 -4
- package/dist/smartfetch.js.map +1 -1
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -8,6 +8,7 @@ The format is based on Keep a Changelog[^1] and this project uses SemVer.
|
|
|
8
8
|
|
|
9
9
|
### Added
|
|
10
10
|
|
|
11
|
+
- Added `smartvertical`, a single Korean/local structured-data MCP router for places, weather, transit, finance, DART, real estate, safety, news, commerce, spellcheck, zipcode, law, public restrooms, and GeekNews domains.
|
|
11
12
|
- X/Twitter `smartfetch` now unrolls public mega-threads through Thread Reader when direct public seed/oEmbed metadata only exposes the first post, preserving outbound links such as GitHub Gists and blog versions.
|
|
12
13
|
- Added `kr_aliexpress`, a no-secret MCP product search tool that scrapes AliExpress public search pages for product candidates, current storefront prices, images, and links with delivery/coupon/customs caveats.
|
|
13
14
|
- `kr_place_search` now provides Korean map-style local recommendations by merging Kakao Local, Google Places, and Naver Local candidates with distance/rating/review-count ranking for 맛집, 카페, 산책, and dog-walk use cases.
|
|
@@ -15,6 +16,7 @@ The format is based on Keep a Changelog[^1] and this project uses SemVer.
|
|
|
15
16
|
- `smartfetch` now accepts an MCP `output_budget` preset (`compact`, `balanced`, or `full`) and `fetch.outputBudget.preset` settings, so token-sensitive hosts can request smaller structured payloads without hand-tuning every numeric cap.
|
|
16
17
|
- Added MCP host-profile guidance for Hermes/Raon, Codex, OpenCode, and Claude Code, including budget-control precedence and compact/balanced/full follow-up retrieval guidance.
|
|
17
18
|
- Added deterministic MCP smoke coverage proving large `smartfetch` structured payloads stay out of `content[0].text` unless `format: "json"` is explicitly requested.
|
|
19
|
+
- Added optional `smartfetch.reference_queries` for blocked commerce URLs; catalog candidates are accepted only when every product identifier from the resolved URL matches exactly.
|
|
18
20
|
- Added `docs/roadmap.md` with long-term provider strategy, lane replacement criteria, and benchmark planning for optional external provider lanes.
|
|
19
21
|
- Added a CI-safe provider evaluation skeleton script (`scripts/provider-benchmark.mjs`) with corpus definitions and explicit available/skipped lane reporting.
|
|
20
22
|
- Added deterministic provider benchmark measurement mode (`--run-measurements`) with fixture metrics and build-vs-wrap recommendation sections.
|
|
@@ -84,6 +86,7 @@ The format is based on Keep a Changelog[^1] and this project uses SemVer.
|
|
|
84
86
|
|
|
85
87
|
### Changed
|
|
86
88
|
|
|
89
|
+
- Collapsed the public MCP surface for Korean/local helpers from individual `kr_*` tools into `smartvertical` domains while keeping provider adapters modular internally.
|
|
87
90
|
- CI pull request verification now stays on GitHub-hosted runners while trusted push/release events can still use the configured runner pool.
|
|
88
91
|
- Release publishing now scopes npm credentials to the publish step, avoids dependency lifecycle scripts in OIDC/write-scoped jobs, and verifies the pinned MCP publisher asset digest before execution.
|
|
89
92
|
- YouTube transcript failures and X/Twitter login/error shells now return compact unavailable guidance instead of raw fallback page text or shell links.
|
|
@@ -161,6 +164,20 @@ The format is based on Keep a Changelog[^1] and this project uses SemVer.
|
|
|
161
164
|
- Korean public API helpers now validate outbound URLs and redirects before fetching, blocking localhost, private, and reserved targets unless `network.allowPrivateHosts` is explicitly enabled.
|
|
162
165
|
- CI now declares read-only default repository permissions, Dependabot auto-merge pins the reusable workflow without forwarding all caller secrets, and the workflow check enforces those guards.
|
|
163
166
|
|
|
167
|
+
## [0.40.1](https://github.com/jojo-labs/smart-web/compare/v0.40.0...v0.40.1) (2026-07-10)
|
|
168
|
+
|
|
169
|
+
|
|
170
|
+
### Bug Fixes
|
|
171
|
+
|
|
172
|
+
* **smartfetch:** recover blocked Coupang metadata ([#413](https://github.com/jojo-labs/smart-web/issues/413)) ([f648896](https://github.com/jojo-labs/smart-web/commit/f648896bac52c1f06efa7d9cb0f1a0ff470df987))
|
|
173
|
+
|
|
174
|
+
## [0.40.0](https://github.com/jojo-labs/smart-web/compare/v0.39.0...v0.40.0) (2026-07-03)
|
|
175
|
+
|
|
176
|
+
|
|
177
|
+
### Features
|
|
178
|
+
|
|
179
|
+
* collapse Korean tools into smartvertical ([#410](https://github.com/jojo-labs/smart-web/issues/410)) ([36a4f9a](https://github.com/jojo-labs/smart-web/commit/36a4f9a1064ecacb09e8570a700f5f4f5ba3469f))
|
|
180
|
+
|
|
164
181
|
## [0.39.0](https://github.com/jojo-labs/smart-web/compare/v0.38.1...v0.39.0) (2026-07-03)
|
|
165
182
|
|
|
166
183
|
|
package/README.md
CHANGED
|
@@ -4,11 +4,12 @@
|
|
|
4
4
|
|
|
5
5
|
Local MCP for agentic web retrieval.
|
|
6
6
|
|
|
7
|
-
`smart-web` bundles
|
|
7
|
+
`smart-web` bundles four public tools in one stdio server:
|
|
8
8
|
|
|
9
9
|
- `smartfetch` for direct URLs
|
|
10
10
|
- `smartsearch` for discovery
|
|
11
11
|
- `smartcrawl` for same-site multi-page traversal
|
|
12
|
+
- `smartvertical` for Korean/local structured vertical data such as places, weather, transit, finance, law, commerce, and safety lookups
|
|
12
13
|
|
|
13
14
|
It is designed for **agents and MCP hosts**, not for manual browser automation. The job is to return structured retrieval output first, then signal when a browser-task runtime would be a better next step.
|
|
14
15
|
|
|
@@ -22,7 +23,7 @@ If `smart-web` returns reproducible incorrect or misleading output, open a GitHu
|
|
|
22
23
|
|
|
23
24
|
## Highlights
|
|
24
25
|
|
|
25
|
-
- one local MCP instead of separate search, fetch, and
|
|
26
|
+
- one local MCP instead of separate search, fetch, crawl, and Korean vertical-data servers
|
|
26
27
|
- explicit routing: URL → `smartfetch`, query → `smartsearch`, known site → `smartcrawl`
|
|
27
28
|
- up-front smartfetch acquisition lanes instead of broad direct → browser retry chains, with `pipeline.acquire.attempt_map` showing seed/direct/relay/archive/browser phases and skip/failure reasons
|
|
28
29
|
- optional Jina Reader relay for weak generic/article fetches when you explicitly enable it, with JSON mode and alternate-link preservation
|
|
@@ -40,6 +41,7 @@ If `smart-web` returns reproducible incorrect or misleading output, open a GitHu
|
|
|
40
41
|
- local-first defaults with privacy-aware search/fetch behavior
|
|
41
42
|
- useful normalization for common public surfaces instead of raw HTML dumps
|
|
42
43
|
- social unavailable shells such as Threads generic join/login pages stay partial and chrome-free instead of masquerading as verified post content
|
|
44
|
+
- blocked commerce URLs can accept up to five contextual `reference_queries`; public catalog metadata is returned only when the resolved product, item, and vendor identifiers all match, so a title hint cannot silently select a different listing
|
|
43
45
|
|
|
44
46
|
## Tool routing
|
|
45
47
|
|
|
@@ -47,17 +49,18 @@ If `smart-web` returns reproducible incorrect or misleading output, open a GitHu
|
|
|
47
49
|
- `smartsearch` when the user gave a topic, keywords, or a `site:` query
|
|
48
50
|
- `smartcrawl` when you already know the site and need multiple relevant pages
|
|
49
51
|
|
|
50
|
-
| Situation | Tool
|
|
51
|
-
| ------------------------------------------------- |
|
|
52
|
-
| User already gave a URL or shortlink | `smartfetch`
|
|
53
|
-
| User gave a topic, keywords, or `site:` query | `smartsearch`
|
|
54
|
-
| You already know the site and need multiple pages | `smartcrawl`
|
|
52
|
+
| Situation | Tool |
|
|
53
|
+
| ------------------------------------------------- | --------------- |
|
|
54
|
+
| User already gave a URL or shortlink | `smartfetch` |
|
|
55
|
+
| User gave a topic, keywords, or `site:` query | `smartsearch` |
|
|
56
|
+
| You already know the site and need multiple pages | `smartcrawl` |
|
|
57
|
+
| User needs Korean/local structured data | `smartvertical` |
|
|
55
58
|
|
|
56
59
|
`smart-web` is a retrieval layer. It is not a general-purpose click/type/form-fill browser agent.[^1]
|
|
57
60
|
|
|
58
61
|
## What the tools return
|
|
59
62
|
|
|
60
|
-
All
|
|
63
|
+
All public tools are shaped for agent consumption. Common high-signal fields include:
|
|
61
64
|
|
|
62
65
|
- `assessment`: confidence, block/auth hints, recommended handoff
|
|
63
66
|
- `pipeline`: resolve/acquire/normalize/assess stages, plus policy metadata for relay-style usage and authwall likelihood; `pipeline.acquire.attempt_map` describes the default seed, direct/impit, Jina Reader, archive, and browser phases as succeeded, failed, or skipped
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
export declare const SMARTVERTICAL_DOMAINS: readonly ["geeknews", "subway", "weather", "fine_dust", "stock", "dart", "real_estate", "drug_safety", "food_safety", "news", "aliexpress", "shopping", "coupang", "spellcheck", "zipcode", "law", "place", "public_restroom"];
|
|
2
|
+
export type SmartverticalDomain = typeof SMARTVERTICAL_DOMAINS[number];
|
|
3
|
+
type SmartverticalInputOptionalFields = {
|
|
4
|
+
action: string;
|
|
5
|
+
query: string;
|
|
6
|
+
id: string;
|
|
7
|
+
text: string;
|
|
8
|
+
item_names: string[];
|
|
9
|
+
location: string;
|
|
10
|
+
station_name: string;
|
|
11
|
+
region_hint: string;
|
|
12
|
+
station: string;
|
|
13
|
+
nx: number;
|
|
14
|
+
ny: number;
|
|
15
|
+
lat: number;
|
|
16
|
+
lon: number;
|
|
17
|
+
base_date: string;
|
|
18
|
+
base_time: string;
|
|
19
|
+
market: "KOSPI" | "KOSDAQ" | "KONEX";
|
|
20
|
+
code: string;
|
|
21
|
+
bas_date: string;
|
|
22
|
+
corp_code: string;
|
|
23
|
+
bgn_de: string;
|
|
24
|
+
end_de: string;
|
|
25
|
+
bsns_year: string;
|
|
26
|
+
reprt_code: string;
|
|
27
|
+
fs_div: "OFS" | "CFS";
|
|
28
|
+
pblntf_ty: string;
|
|
29
|
+
lawd_cd: string;
|
|
30
|
+
asset_type: "apartment" | "officetel" | "villa" | "single-house" | "commercial";
|
|
31
|
+
deal_type: "trade" | "rent";
|
|
32
|
+
deal_ymd: string;
|
|
33
|
+
display: number;
|
|
34
|
+
start: number;
|
|
35
|
+
sort: string;
|
|
36
|
+
locale: "ko" | "en";
|
|
37
|
+
currency: "KRW" | "USD";
|
|
38
|
+
ship_to: string;
|
|
39
|
+
max_price: number;
|
|
40
|
+
law_id: string;
|
|
41
|
+
article: string;
|
|
42
|
+
radius_m: number;
|
|
43
|
+
radius_km: number;
|
|
44
|
+
providers: Array<"kakao" | "google" | "naver">;
|
|
45
|
+
intent: "auto" | "food" | "cafe" | "walk" | "dog_walk" | "errand" | "date" | "work";
|
|
46
|
+
limit: number;
|
|
47
|
+
page_count: number;
|
|
48
|
+
num_of_rows: number;
|
|
49
|
+
timeout_ms: number;
|
|
50
|
+
};
|
|
51
|
+
export type SmartverticalInput = {
|
|
52
|
+
domain: SmartverticalDomain;
|
|
53
|
+
} & {
|
|
54
|
+
[K in keyof SmartverticalInputOptionalFields]?: SmartverticalInputOptionalFields[K] | undefined;
|
|
55
|
+
};
|
|
56
|
+
export type SmartverticalOutput = {
|
|
57
|
+
source: "smartvertical";
|
|
58
|
+
domain: SmartverticalDomain;
|
|
59
|
+
result: unknown;
|
|
60
|
+
text: string;
|
|
61
|
+
};
|
|
62
|
+
export declare function runSmartvertical(input: SmartverticalInput): Promise<SmartverticalOutput>;
|
|
63
|
+
export declare function renderSmartvertical(output: SmartverticalOutput): string;
|
|
64
|
+
export {};
|
|
@@ -0,0 +1,272 @@
|
|
|
1
|
+
import { renderAliExpress, renderCoupang, renderDart, renderDrugSafety, renderFineDust, renderFoodSafety, renderGeeknews, renderLaw, renderNaverNews, renderNaverShopping, renderPlaceSearch, renderPublicRestroom, renderRealEstate, renderSpellCheck, renderStock, renderSubway, renderWeather, renderZipcode, runAliExpress, runCoupang, runDart, runDrugSafety, runFineDust, runFoodSafety, runGeeknews, runLaw, runNaverNews, runNaverShopping, runPlaceSearch, runPublicRestroom, runRealEstate, runSpellCheck, runStock, runSubway, runWeather, runZipcode, } from "./index.js";
|
|
2
|
+
export const SMARTVERTICAL_DOMAINS = [
|
|
3
|
+
"geeknews",
|
|
4
|
+
"subway",
|
|
5
|
+
"weather",
|
|
6
|
+
"fine_dust",
|
|
7
|
+
"stock",
|
|
8
|
+
"dart",
|
|
9
|
+
"real_estate",
|
|
10
|
+
"drug_safety",
|
|
11
|
+
"food_safety",
|
|
12
|
+
"news",
|
|
13
|
+
"aliexpress",
|
|
14
|
+
"shopping",
|
|
15
|
+
"coupang",
|
|
16
|
+
"spellcheck",
|
|
17
|
+
"zipcode",
|
|
18
|
+
"law",
|
|
19
|
+
"place",
|
|
20
|
+
"public_restroom",
|
|
21
|
+
];
|
|
22
|
+
function isErrorResult(result) {
|
|
23
|
+
return typeof result === "object" && result !== null && "ok" in result && result.ok === false;
|
|
24
|
+
}
|
|
25
|
+
function unwrapResult(result) {
|
|
26
|
+
if (isErrorResult(result))
|
|
27
|
+
throw new Error(result.message);
|
|
28
|
+
return result;
|
|
29
|
+
}
|
|
30
|
+
function queryOrEmpty(input) {
|
|
31
|
+
return input.query || input.location || input.station_name || "";
|
|
32
|
+
}
|
|
33
|
+
function normalizeGeeknewsAction(action) {
|
|
34
|
+
if (action === "search" || action === "detail" || action === "list")
|
|
35
|
+
return action;
|
|
36
|
+
return undefined;
|
|
37
|
+
}
|
|
38
|
+
function normalizeStockAction(action) {
|
|
39
|
+
if (action === "search" || action === "base-info" || action === "trade-info")
|
|
40
|
+
return action;
|
|
41
|
+
return "search";
|
|
42
|
+
}
|
|
43
|
+
function normalizeDartAction(action) {
|
|
44
|
+
if (action === "disclosures" || action === "company" || action === "financials")
|
|
45
|
+
return action;
|
|
46
|
+
return "disclosures";
|
|
47
|
+
}
|
|
48
|
+
function normalizeRealEstateAction(action) {
|
|
49
|
+
if (action === "region-code" || action === "transactions")
|
|
50
|
+
return action;
|
|
51
|
+
return "region-code";
|
|
52
|
+
}
|
|
53
|
+
function normalizeFoodSafetyAction(action) {
|
|
54
|
+
if (action === "recall" || action === "unfit" || action === "functional-ingredient")
|
|
55
|
+
return action;
|
|
56
|
+
return "recall";
|
|
57
|
+
}
|
|
58
|
+
function normalizeCoupangAction(action) {
|
|
59
|
+
if (action === "search" || action === "rocket" || action === "budget" || action === "goldbox")
|
|
60
|
+
return action;
|
|
61
|
+
return undefined;
|
|
62
|
+
}
|
|
63
|
+
function normalizeLawAction(action) {
|
|
64
|
+
if (action === "search" || action === "get-text" || action === "search-precedents")
|
|
65
|
+
return action;
|
|
66
|
+
return "search";
|
|
67
|
+
}
|
|
68
|
+
function normalizeSort(sort, allowed) {
|
|
69
|
+
if (sort !== undefined && allowed.includes(sort))
|
|
70
|
+
return sort;
|
|
71
|
+
return undefined;
|
|
72
|
+
}
|
|
73
|
+
export async function runSmartvertical(input) {
|
|
74
|
+
switch (input.domain) {
|
|
75
|
+
case "geeknews": {
|
|
76
|
+
const action = normalizeGeeknewsAction(input.action);
|
|
77
|
+
const result = unwrapResult(await runGeeknews({
|
|
78
|
+
...(action === undefined ? {} : { action }),
|
|
79
|
+
...(input.query === undefined ? {} : { query: input.query }),
|
|
80
|
+
...(input.id === undefined ? {} : { id: input.id }),
|
|
81
|
+
...(input.limit === undefined ? {} : { limit: input.limit }),
|
|
82
|
+
...(input.timeout_ms === undefined ? {} : { timeoutMs: input.timeout_ms }),
|
|
83
|
+
}));
|
|
84
|
+
return { source: "smartvertical", domain: input.domain, result, text: renderGeeknews(result) };
|
|
85
|
+
}
|
|
86
|
+
case "subway": {
|
|
87
|
+
const result = unwrapResult(await runSubway({
|
|
88
|
+
stationName: input.station_name || input.station || input.query || input.location || "",
|
|
89
|
+
...(input.limit === undefined ? {} : { limit: input.limit }),
|
|
90
|
+
...(input.timeout_ms === undefined ? {} : { timeoutMs: input.timeout_ms }),
|
|
91
|
+
}));
|
|
92
|
+
return { source: "smartvertical", domain: input.domain, result, text: renderSubway(result) };
|
|
93
|
+
}
|
|
94
|
+
case "weather": {
|
|
95
|
+
const result = unwrapResult(await runWeather({
|
|
96
|
+
...(input.nx === undefined ? {} : { nx: input.nx }),
|
|
97
|
+
...(input.ny === undefined ? {} : { ny: input.ny }),
|
|
98
|
+
...(input.lat === undefined ? {} : { lat: input.lat }),
|
|
99
|
+
...(input.lon === undefined ? {} : { lon: input.lon }),
|
|
100
|
+
...(input.base_date === undefined ? {} : { baseDate: input.base_date }),
|
|
101
|
+
...(input.base_time === undefined ? {} : { baseTime: input.base_time }),
|
|
102
|
+
...(input.timeout_ms === undefined ? {} : { timeoutMs: input.timeout_ms }),
|
|
103
|
+
}));
|
|
104
|
+
return { source: "smartvertical", domain: input.domain, result, text: renderWeather(result) };
|
|
105
|
+
}
|
|
106
|
+
case "fine_dust": {
|
|
107
|
+
const result = unwrapResult(await runFineDust({
|
|
108
|
+
...(input.region_hint === undefined ? {} : { regionHint: input.region_hint }),
|
|
109
|
+
...(input.station_name === undefined ? {} : { stationName: input.station_name }),
|
|
110
|
+
...(input.timeout_ms === undefined ? {} : { timeoutMs: input.timeout_ms }),
|
|
111
|
+
}));
|
|
112
|
+
return { source: "smartvertical", domain: input.domain, result, text: renderFineDust(result) };
|
|
113
|
+
}
|
|
114
|
+
case "stock": {
|
|
115
|
+
const result = unwrapResult(await runStock({
|
|
116
|
+
action: normalizeStockAction(input.action),
|
|
117
|
+
...(input.query === undefined ? {} : { q: input.query }),
|
|
118
|
+
...(input.market === undefined ? {} : { market: input.market }),
|
|
119
|
+
...(input.code === undefined ? {} : { code: input.code }),
|
|
120
|
+
...(input.bas_date === undefined ? {} : { basDate: input.bas_date }),
|
|
121
|
+
...(input.limit === undefined ? {} : { limit: input.limit }),
|
|
122
|
+
...(input.timeout_ms === undefined ? {} : { timeoutMs: input.timeout_ms }),
|
|
123
|
+
}));
|
|
124
|
+
return { source: "smartvertical", domain: input.domain, result, text: renderStock(result) };
|
|
125
|
+
}
|
|
126
|
+
case "dart": {
|
|
127
|
+
const result = unwrapResult(await runDart({
|
|
128
|
+
action: normalizeDartAction(input.action),
|
|
129
|
+
...(input.corp_code === undefined ? {} : { corp_code: input.corp_code }),
|
|
130
|
+
...(input.bgn_de === undefined ? {} : { bgn_de: input.bgn_de }),
|
|
131
|
+
...(input.end_de === undefined ? {} : { end_de: input.end_de }),
|
|
132
|
+
...(input.bsns_year === undefined ? {} : { bsns_year: input.bsns_year }),
|
|
133
|
+
...(input.reprt_code === undefined ? {} : { reprt_code: input.reprt_code }),
|
|
134
|
+
...(input.fs_div === undefined ? {} : { fs_div: input.fs_div }),
|
|
135
|
+
...(input.pblntf_ty === undefined ? {} : { pblntf_ty: input.pblntf_ty }),
|
|
136
|
+
...(input.page_count === undefined ? {} : { page_count: input.page_count }),
|
|
137
|
+
...(input.timeout_ms === undefined ? {} : { timeoutMs: input.timeout_ms }),
|
|
138
|
+
}));
|
|
139
|
+
return { source: "smartvertical", domain: input.domain, result, text: renderDart(result) };
|
|
140
|
+
}
|
|
141
|
+
case "real_estate": {
|
|
142
|
+
const result = unwrapResult(await runRealEstate({
|
|
143
|
+
action: normalizeRealEstateAction(input.action),
|
|
144
|
+
...(input.query === undefined ? {} : { q: input.query }),
|
|
145
|
+
...(input.lawd_cd === undefined ? {} : { lawd_cd: input.lawd_cd }),
|
|
146
|
+
...(input.asset_type === undefined ? {} : { asset_type: input.asset_type }),
|
|
147
|
+
...(input.deal_type === undefined ? {} : { deal_type: input.deal_type }),
|
|
148
|
+
...(input.deal_ymd === undefined ? {} : { deal_ymd: input.deal_ymd }),
|
|
149
|
+
...(input.num_of_rows === undefined ? {} : { num_of_rows: input.num_of_rows }),
|
|
150
|
+
...(input.timeout_ms === undefined ? {} : { timeoutMs: input.timeout_ms }),
|
|
151
|
+
}));
|
|
152
|
+
return { source: "smartvertical", domain: input.domain, result, text: renderRealEstate(result) };
|
|
153
|
+
}
|
|
154
|
+
case "drug_safety": {
|
|
155
|
+
const itemNames = input.item_names || (input.query === undefined ? [] : [input.query]);
|
|
156
|
+
const result = unwrapResult(await runDrugSafety({
|
|
157
|
+
itemNames,
|
|
158
|
+
...(input.timeout_ms === undefined ? {} : { timeoutMs: input.timeout_ms }),
|
|
159
|
+
}));
|
|
160
|
+
return { source: "smartvertical", domain: input.domain, result, text: renderDrugSafety(result) };
|
|
161
|
+
}
|
|
162
|
+
case "food_safety": {
|
|
163
|
+
const result = unwrapResult(await runFoodSafety({
|
|
164
|
+
action: normalizeFoodSafetyAction(input.action),
|
|
165
|
+
query: queryOrEmpty(input),
|
|
166
|
+
...(input.limit === undefined ? {} : { limit: input.limit }),
|
|
167
|
+
...(input.timeout_ms === undefined ? {} : { timeoutMs: input.timeout_ms }),
|
|
168
|
+
}));
|
|
169
|
+
return { source: "smartvertical", domain: input.domain, result, text: renderFoodSafety(result) };
|
|
170
|
+
}
|
|
171
|
+
case "news": {
|
|
172
|
+
const sort = normalizeSort(input.sort, ["sim", "date"]);
|
|
173
|
+
const result = unwrapResult(await runNaverNews({
|
|
174
|
+
query: queryOrEmpty(input),
|
|
175
|
+
...(input.display === undefined ? {} : { display: input.display }),
|
|
176
|
+
...(input.start === undefined ? {} : { start: input.start }),
|
|
177
|
+
...(sort === undefined ? {} : { sort }),
|
|
178
|
+
...(input.timeout_ms === undefined ? {} : { timeoutMs: input.timeout_ms }),
|
|
179
|
+
}));
|
|
180
|
+
return { source: "smartvertical", domain: input.domain, result, text: renderNaverNews(result) };
|
|
181
|
+
}
|
|
182
|
+
case "aliexpress": {
|
|
183
|
+
const result = unwrapResult(await runAliExpress({
|
|
184
|
+
query: queryOrEmpty(input),
|
|
185
|
+
...(input.limit === undefined ? {} : { limit: input.limit }),
|
|
186
|
+
...(input.locale === undefined ? {} : { locale: input.locale }),
|
|
187
|
+
...(input.currency === undefined ? {} : { currency: input.currency }),
|
|
188
|
+
...(input.ship_to === undefined ? {} : { shipTo: input.ship_to }),
|
|
189
|
+
...(input.timeout_ms === undefined ? {} : { timeoutMs: input.timeout_ms }),
|
|
190
|
+
}));
|
|
191
|
+
return { source: "smartvertical", domain: input.domain, result, text: renderAliExpress(result) };
|
|
192
|
+
}
|
|
193
|
+
case "shopping": {
|
|
194
|
+
const sort = normalizeSort(input.sort, ["rel", "date", "price_asc", "price_dsc", "review"]);
|
|
195
|
+
const result = unwrapResult(await runNaverShopping({
|
|
196
|
+
query: queryOrEmpty(input),
|
|
197
|
+
...(input.limit === undefined ? {} : { limit: input.limit }),
|
|
198
|
+
...(sort === undefined ? {} : { sort }),
|
|
199
|
+
...(input.timeout_ms === undefined ? {} : { timeoutMs: input.timeout_ms }),
|
|
200
|
+
}));
|
|
201
|
+
return { source: "smartvertical", domain: input.domain, result, text: renderNaverShopping(result) };
|
|
202
|
+
}
|
|
203
|
+
case "coupang": {
|
|
204
|
+
const action = normalizeCoupangAction(input.action);
|
|
205
|
+
const result = unwrapResult(await runCoupang({
|
|
206
|
+
...(action === undefined ? {} : { action }),
|
|
207
|
+
...(input.query === undefined ? {} : { query: input.query }),
|
|
208
|
+
...(input.max_price === undefined ? {} : { maxPrice: input.max_price }),
|
|
209
|
+
...(input.limit === undefined ? {} : { limit: input.limit }),
|
|
210
|
+
...(input.timeout_ms === undefined ? {} : { timeoutMs: input.timeout_ms }),
|
|
211
|
+
}));
|
|
212
|
+
return { source: "smartvertical", domain: input.domain, result, text: renderCoupang(result) };
|
|
213
|
+
}
|
|
214
|
+
case "spellcheck": {
|
|
215
|
+
const result = unwrapResult(await runSpellCheck({
|
|
216
|
+
text: input.text || input.query || "",
|
|
217
|
+
...(input.timeout_ms === undefined ? {} : { timeoutMs: input.timeout_ms }),
|
|
218
|
+
}));
|
|
219
|
+
return { source: "smartvertical", domain: input.domain, result, text: renderSpellCheck(result) };
|
|
220
|
+
}
|
|
221
|
+
case "zipcode": {
|
|
222
|
+
const result = unwrapResult(await runZipcode({
|
|
223
|
+
query: queryOrEmpty(input),
|
|
224
|
+
...(input.limit === undefined ? {} : { limit: input.limit }),
|
|
225
|
+
...(input.timeout_ms === undefined ? {} : { timeoutMs: input.timeout_ms }),
|
|
226
|
+
}));
|
|
227
|
+
return { source: "smartvertical", domain: input.domain, result, text: renderZipcode(result) };
|
|
228
|
+
}
|
|
229
|
+
case "law": {
|
|
230
|
+
const result = unwrapResult(await runLaw({
|
|
231
|
+
action: normalizeLawAction(input.action),
|
|
232
|
+
...(input.query === undefined ? {} : { query: input.query }),
|
|
233
|
+
...(input.law_id === undefined ? {} : { law_id: input.law_id }),
|
|
234
|
+
...(input.article === undefined ? {} : { article: input.article }),
|
|
235
|
+
...(input.limit === undefined ? {} : { limit: input.limit }),
|
|
236
|
+
...(input.timeout_ms === undefined ? {} : { timeoutMs: input.timeout_ms }),
|
|
237
|
+
}));
|
|
238
|
+
return { source: "smartvertical", domain: input.domain, result, text: renderLaw(result) };
|
|
239
|
+
}
|
|
240
|
+
case "place": {
|
|
241
|
+
const sort = normalizeSort(input.sort, ["blended", "relevance", "distance", "rating", "review_count"]);
|
|
242
|
+
const result = await runPlaceSearch({
|
|
243
|
+
...(input.query === undefined ? {} : { query: input.query }),
|
|
244
|
+
...(input.location === undefined ? {} : { location: input.location }),
|
|
245
|
+
...(input.lat === undefined ? {} : { lat: input.lat }),
|
|
246
|
+
...(input.lon === undefined ? {} : { lon: input.lon }),
|
|
247
|
+
...(input.radius_m === undefined ? {} : { radiusM: input.radius_m }),
|
|
248
|
+
...(input.limit === undefined ? {} : { limit: input.limit }),
|
|
249
|
+
...(input.intent === undefined ? {} : { intent: input.intent }),
|
|
250
|
+
...(sort === undefined ? {} : { sort }),
|
|
251
|
+
...(input.providers === undefined ? {} : { providers: input.providers }),
|
|
252
|
+
...(input.timeout_ms === undefined ? {} : { timeoutMs: input.timeout_ms }),
|
|
253
|
+
});
|
|
254
|
+
return { source: "smartvertical", domain: input.domain, result, text: renderPlaceSearch(result) };
|
|
255
|
+
}
|
|
256
|
+
case "public_restroom": {
|
|
257
|
+
const result = await runPublicRestroom({
|
|
258
|
+
location: queryOrEmpty(input),
|
|
259
|
+
...(input.lat === undefined ? {} : { lat: input.lat }),
|
|
260
|
+
...(input.lon === undefined ? {} : { lon: input.lon }),
|
|
261
|
+
...(input.radius_km === undefined ? {} : { radiusKm: input.radius_km }),
|
|
262
|
+
...(input.limit === undefined ? {} : { limit: input.limit }),
|
|
263
|
+
...(input.timeout_ms === undefined ? {} : { timeoutMs: input.timeout_ms }),
|
|
264
|
+
});
|
|
265
|
+
return { source: "smartvertical", domain: input.domain, result, text: renderPublicRestroom(result) };
|
|
266
|
+
}
|
|
267
|
+
}
|
|
268
|
+
}
|
|
269
|
+
export function renderSmartvertical(output) {
|
|
270
|
+
return output.text;
|
|
271
|
+
}
|
|
272
|
+
//# sourceMappingURL=smartvertical.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"smartvertical.js","sourceRoot":"","sources":["../../src/korea/smartvertical.ts"],"names":[],"mappings":"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"}
|