smart-web-mcp 0.44.0 → 1.0.0
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 +352 -1
- package/README.md +33 -566
- package/dist/assessment.d.ts +10 -3
- package/dist/assessment.js +21 -6
- package/dist/assessment.js.map +1 -1
- package/dist/body-export.d.ts +10 -0
- package/dist/body-export.js +28 -0
- package/dist/body-export.js.map +1 -0
- package/dist/browser-session.d.ts +32 -1
- package/dist/browser-session.js +373 -3
- package/dist/browser-session.js.map +1 -1
- package/dist/cli-fetch-options.d.ts +7 -0
- package/dist/cli-fetch-options.js +41 -0
- package/dist/cli-fetch-options.js.map +1 -0
- package/dist/cli.js +31 -12
- package/dist/cli.js.map +1 -1
- package/dist/comment-export.d.ts +10 -0
- package/dist/comment-export.js +39 -0
- package/dist/comment-export.js.map +1 -0
- package/dist/composition.d.ts +1 -22
- package/dist/composition.js +0 -16
- package/dist/composition.js.map +1 -1
- package/dist/extraction/budget.d.ts +3 -0
- package/dist/extraction/budget.js +88 -7
- package/dist/extraction/budget.js.map +1 -1
- package/dist/extraction/document.js +134 -9
- package/dist/extraction/document.js.map +1 -1
- package/dist/korea/coupang-filters.d.ts +5 -0
- package/dist/korea/coupang-filters.js +87 -0
- package/dist/korea/coupang-filters.js.map +1 -0
- package/dist/korea/coupang.d.ts +27 -6
- package/dist/korea/coupang.js +202 -82
- package/dist/korea/coupang.js.map +1 -1
- package/dist/korea/proxy-client.d.ts +1 -0
- package/dist/korea/proxy-client.js +6 -2
- package/dist/korea/proxy-client.js.map +1 -1
- package/dist/korea/smartvertical.d.ts +1 -0
- package/dist/korea/smartvertical.js +39 -25
- package/dist/korea/smartvertical.js.map +1 -1
- package/dist/lib.d.ts +4 -2
- package/dist/lib.js +2 -1
- package/dist/lib.js.map +1 -1
- package/dist/mcp-server.js +39 -15
- package/dist/mcp-server.js.map +1 -1
- package/dist/operator-browser-fixture.d.ts +7 -0
- package/dist/operator-browser-fixture.js +19 -0
- package/dist/operator-browser-fixture.js.map +1 -0
- package/dist/operator-canary-cli.d.ts +6 -0
- package/dist/operator-canary-cli.js +190 -0
- package/dist/operator-canary-cli.js.map +1 -0
- package/dist/operator-canary.d.ts +74 -0
- package/dist/operator-canary.js +135 -0
- package/dist/operator-canary.js.map +1 -0
- package/dist/operator-cdp.d.ts +15 -0
- package/dist/operator-cdp.js +195 -0
- package/dist/operator-cdp.js.map +1 -0
- package/dist/operator-frame.d.ts +3 -0
- package/dist/operator-frame.js +55 -0
- package/dist/operator-frame.js.map +1 -0
- package/dist/settings.d.ts +3 -0
- package/dist/settings.js +1 -0
- package/dist/settings.js.map +1 -1
- package/dist/shared.d.ts +47 -10
- package/dist/shared.js +15 -9
- package/dist/shared.js.map +1 -1
- package/dist/smartbrowser.d.ts +169 -0
- package/dist/smartbrowser.js +288 -0
- package/dist/smartbrowser.js.map +1 -0
- package/dist/smartcrawl.js +16 -21
- package/dist/smartcrawl.js.map +1 -1
- package/dist/smartfetch/academic-fallback.js +3 -5
- package/dist/smartfetch/academic-fallback.js.map +1 -1
- package/dist/smartfetch/archive-fallback.js +2 -5
- package/dist/smartfetch/archive-fallback.js.map +1 -1
- package/dist/smartfetch/assets.d.ts +1 -1
- package/dist/smartfetch/assets.js +28 -1
- package/dist/smartfetch/assets.js.map +1 -1
- package/dist/smartfetch/jina-reader.d.ts +1 -0
- package/dist/smartfetch/jina-reader.js +17 -3
- package/dist/smartfetch/jina-reader.js.map +1 -1
- package/dist/smartfetch/pipeline.js +15 -25
- package/dist/smartfetch/pipeline.js.map +1 -1
- package/dist/smartfetch/provider-policy.d.ts +3 -0
- package/dist/smartfetch/provider-policy.js +45 -2
- package/dist/smartfetch/provider-policy.js.map +1 -1
- package/dist/smartfetch/provider-types.d.ts +8 -0
- package/dist/smartfetch/providers/article.js +76 -10
- package/dist/smartfetch/providers/article.js.map +1 -1
- package/dist/smartfetch/providers/blind-post.d.ts +2 -0
- package/dist/smartfetch/providers/blind-post.js +167 -0
- package/dist/smartfetch/providers/blind-post.js.map +1 -0
- package/dist/smartfetch/providers/clien.d.ts +2 -0
- package/dist/smartfetch/providers/clien.js +157 -0
- package/dist/smartfetch/providers/clien.js.map +1 -0
- package/dist/smartfetch/providers/commerce.d.ts +15 -0
- package/dist/smartfetch/providers/commerce.js +123 -7
- package/dist/smartfetch/providers/commerce.js.map +1 -1
- package/dist/smartfetch/providers/dcinside.js +313 -20
- package/dist/smartfetch/providers/dcinside.js.map +1 -1
- package/dist/smartfetch/providers/hackernews-html.d.ts +21 -0
- package/dist/smartfetch/providers/hackernews-html.js +148 -0
- package/dist/smartfetch/providers/hackernews-html.js.map +1 -0
- package/dist/smartfetch/providers/hackernews.js +76 -14
- package/dist/smartfetch/providers/hackernews.js.map +1 -1
- package/dist/smartfetch/providers/index.js +7 -1
- package/dist/smartfetch/providers/index.js.map +1 -1
- package/dist/smartfetch/providers/linkedin.js +2 -1
- package/dist/smartfetch/providers/linkedin.js.map +1 -1
- package/dist/smartfetch/providers/naver-blog.d.ts +2 -0
- package/dist/smartfetch/providers/naver-blog.js +87 -45
- package/dist/smartfetch/providers/naver-blog.js.map +1 -1
- package/dist/smartfetch/providers/naver-cafe-native.d.ts +7 -0
- package/dist/smartfetch/providers/naver-cafe-native.js +188 -0
- package/dist/smartfetch/providers/naver-cafe-native.js.map +1 -0
- package/dist/smartfetch/providers/naver-cafe.js +165 -4
- package/dist/smartfetch/providers/naver-cafe.js.map +1 -1
- package/dist/smartfetch/providers/naver-map-search.js +1 -1
- package/dist/smartfetch/providers/naver-map-search.js.map +1 -1
- package/dist/smartfetch/providers/ppomppu.d.ts +2 -0
- package/dist/smartfetch/providers/ppomppu.js +289 -0
- package/dist/smartfetch/providers/ppomppu.js.map +1 -0
- package/dist/smartfetch/providers/reddit.js +24 -3
- package/dist/smartfetch/providers/reddit.js.map +1 -1
- package/dist/smartfetch/providers/threads.js +1 -1
- package/dist/smartfetch/providers/threads.js.map +1 -1
- package/dist/smartfetch/providers/wikipedia.js +138 -0
- package/dist/smartfetch/providers/wikipedia.js.map +1 -1
- package/dist/smartfetch.d.ts +11 -2
- package/dist/smartfetch.js +369 -78
- package/dist/smartfetch.js.map +1 -1
- package/dist/smartsearch-brave.d.ts +2 -0
- package/dist/smartsearch-brave.js +43 -0
- package/dist/smartsearch-brave.js.map +1 -0
- package/dist/smartsearch-browser.d.ts +5 -0
- package/dist/smartsearch-browser.js +116 -0
- package/dist/smartsearch-browser.js.map +1 -0
- package/dist/smartsearch-ddg.d.ts +2 -0
- package/dist/smartsearch-ddg.js +46 -0
- package/dist/smartsearch-ddg.js.map +1 -0
- package/dist/smartsearch-node.d.ts +6 -0
- package/dist/smartsearch-node.js +21 -0
- package/dist/smartsearch-node.js.map +1 -0
- package/dist/smartsearch-postgresql.d.ts +7 -0
- package/dist/smartsearch-postgresql.js +44 -0
- package/dist/smartsearch-postgresql.js.map +1 -0
- package/dist/smartsearch-python.d.ts +8 -0
- package/dist/smartsearch-python.js +87 -0
- package/dist/smartsearch-python.js.map +1 -0
- package/dist/smartsearch-quality.d.ts +6 -0
- package/dist/smartsearch-quality.js +47 -0
- package/dist/smartsearch-quality.js.map +1 -0
- package/dist/smartsearch-youtube.d.ts +7 -0
- package/dist/smartsearch-youtube.js +76 -0
- package/dist/smartsearch-youtube.js.map +1 -0
- package/dist/smartsearch.d.ts +3 -0
- package/dist/smartsearch.js +617 -132
- package/dist/smartsearch.js.map +1 -1
- package/package.json +8 -5
- package/python/requirements-undetected-chromedriver.txt +2 -2
|
@@ -1,4 +1,7 @@
|
|
|
1
|
+
import { parseHTML } from "linkedom";
|
|
1
2
|
import { asNumber, asString, dedupeUrls, extractMetaDescription, extractMetaProperty, extractTitleFromHtml, extractUrls, fetchJson, isNaverCafeUrl, stripTags } from "../../shared.js";
|
|
3
|
+
import { BrowserSessionToolError, looksBotBlockedContent } from "../../browser-session.js";
|
|
4
|
+
import { normalizeNaverCafeNative, naverCafeIdentity, naverCafeMobilePostUrl } from "./naver-cafe-native.js";
|
|
2
5
|
const USER_AGENT = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/134.0.0.0 Safari/537.36";
|
|
3
6
|
function decodeJwtPayload(value) {
|
|
4
7
|
const parts = String(value || "").split(".");
|
|
@@ -103,10 +106,164 @@ function looksLikeNaverCafeArticle(url) {
|
|
|
103
106
|
return false;
|
|
104
107
|
}
|
|
105
108
|
}
|
|
109
|
+
const articlePager = '.WebArticle #ct > .ArticleComment .comment_more .comment_more_bottom > a.more_next[data-nlog-area="comment_list.goto_next_comment"]';
|
|
110
|
+
const commentPager = '.ArticleComment.CommentView .comment_more .comment_more_bottom > a.more_next[data-nlog-area="comment_list.more_next_comment"]';
|
|
111
|
+
async function readCafeCommentPages(context, original, deadline) {
|
|
112
|
+
const source = naverCafeMobilePostUrl(context.resolvedUrl);
|
|
113
|
+
const expected = naverCafeIdentity(context.expectedPostUrl || context.url);
|
|
114
|
+
if (!source || !expected || naverCafeIdentity(source) !== expected)
|
|
115
|
+
throw new Error("Native article identity changed");
|
|
116
|
+
const first = parseHTML(context.active.content).document;
|
|
117
|
+
const reactions = first.querySelectorAll('.WebArticle #ct > ._cafeReactionModule[data-catgid][data-cid]');
|
|
118
|
+
if (reactions.length !== 1)
|
|
119
|
+
throw new Error("Native cafe identity is ambiguous");
|
|
120
|
+
const reaction = reactions[0];
|
|
121
|
+
const cafe = reaction?.getAttribute("data-catgid") || "";
|
|
122
|
+
const article = expected.split("/articles/")[1];
|
|
123
|
+
if (!/^[1-9]\d*$/.test(cafe) || reaction?.getAttribute("data-cid") !== `${cafe}_${new URL(expected).pathname.split("/cafes/")[1]?.split("/")[0]}_${article}`)
|
|
124
|
+
throw new Error("Native numeric cafe identity is unavailable");
|
|
125
|
+
const token = new URL(source).searchParams.get("art");
|
|
126
|
+
const initialIds = original.comments.map(row => row.id).filter((id) => typeof id === "number");
|
|
127
|
+
if (!token || new Set(initialIds).size !== initialIds.length)
|
|
128
|
+
throw new Error("Native comment identity is ambiguous");
|
|
129
|
+
let finalHtml = "";
|
|
130
|
+
let finalUrl = "";
|
|
131
|
+
let pages = 0;
|
|
132
|
+
let bytes = 0;
|
|
133
|
+
let priorIds = initialIds;
|
|
134
|
+
const session = await context.runBrowserSession({
|
|
135
|
+
...context.browserSessionOptions, url: source, timeoutMs: Math.min(context.timeoutMs, deadline - Date.now()),
|
|
136
|
+
operatorTask: async (page, remaining) => {
|
|
137
|
+
const requireReadable = async () => {
|
|
138
|
+
remaining();
|
|
139
|
+
const text = await page.mainFrame().evaluate(() => document.body?.innerText || "");
|
|
140
|
+
if (looksBotBlockedContent(text.slice(0, 4000)) || (text.length < 1000 && /로그인이 필요|sign in to continue|동의가 필요/i.test(text))
|
|
141
|
+
|| await page.locator('dialog[open]:visible, [role="dialog"]:visible, [aria-modal="true"]:visible, iframe[src*="recaptcha"]:visible, iframe[src*="hcaptcha"]:visible').count()) {
|
|
142
|
+
throw new BrowserSessionToolError({ category: "block", code: "operator_browser_user_required", message: "Comment reading requires user participation" });
|
|
143
|
+
}
|
|
144
|
+
};
|
|
145
|
+
await page.locator('.WebArticle #ct > .ArticleComment .comment_list').waitFor({ state: "visible", timeout: remaining() });
|
|
146
|
+
await requireReadable();
|
|
147
|
+
const fresh = normalizeNaverCafeNative({ ...context, resolvedUrl: page.url(), active: { ...context.active, content: await page.content() } });
|
|
148
|
+
if (!fresh || fresh.post?.text !== original.post?.text || fresh.post?.title !== original.post?.title
|
|
149
|
+
|| fresh.post?.comment_count !== original.post?.comment_count || initialIds.some(id => !fresh.comments.some(row => row.id === id))) {
|
|
150
|
+
throw new Error("Native article evidence changed before comment continuation");
|
|
151
|
+
}
|
|
152
|
+
for (let number = 1; number <= 5; number++) {
|
|
153
|
+
remaining();
|
|
154
|
+
await requireReadable();
|
|
155
|
+
const url = page.url();
|
|
156
|
+
const isArticle = number === 1;
|
|
157
|
+
const expectedComments = new URL(`https://m.cafe.naver.com/ca-fe/web/cafes/${cafe}/articles/${article}/comments`);
|
|
158
|
+
const parsedUrl = new URL(url);
|
|
159
|
+
if (isArticle ? naverCafeIdentity(url) !== expected : parsedUrl.origin !== expectedComments.origin || parsedUrl.pathname !== expectedComments.pathname || parsedUrl.searchParams.getAll("art").length !== 1 || parsedUrl.searchParams.get("art") !== token)
|
|
160
|
+
throw new Error("Native comment route changed identity");
|
|
161
|
+
const html = await page.content();
|
|
162
|
+
bytes += Buffer.byteLength(html);
|
|
163
|
+
if (bytes > 8 * 1024 * 1024)
|
|
164
|
+
throw new Error("Native comment snapshots exceed the 8 MiB bound");
|
|
165
|
+
const document = parseHTML(html).document;
|
|
166
|
+
const scope = isArticle ? document.querySelector('.WebArticle #ct > .ArticleComment') : document.querySelector('.ArticleComment.CommentView');
|
|
167
|
+
if (!scope || (isArticle ? document.querySelectorAll('.WebArticle #ct > .ArticleComment').length : document.querySelectorAll('.ArticleComment.CommentView').length) !== 1)
|
|
168
|
+
throw new Error("Native comment scope is ambiguous");
|
|
169
|
+
const lists = Array.from(scope.querySelectorAll('.comment_list')).filter(node => !node.closest('li'));
|
|
170
|
+
if (lists.length !== 1)
|
|
171
|
+
throw new Error("Native comment list is ambiguous");
|
|
172
|
+
const knownIds = Array.from(lists[0].children).flatMap(row => {
|
|
173
|
+
if (row.tagName !== "LI")
|
|
174
|
+
return [];
|
|
175
|
+
const controls = Array.from(row.querySelectorAll('.comment_item .comment_footer [data-nlog-area="comment_list.comment_reply"]')).filter(node => node.closest('li') === row && !node.closest('.comment_content'));
|
|
176
|
+
try {
|
|
177
|
+
const id = JSON.parse(controls.length === 1 ? controls[0].getAttribute('data-nlog-params') || 'null' : 'null')?.comment_id;
|
|
178
|
+
return typeof id === "number" && Number.isSafeInteger(id) && id > 0 ? [id] : [];
|
|
179
|
+
}
|
|
180
|
+
catch {
|
|
181
|
+
return [];
|
|
182
|
+
}
|
|
183
|
+
});
|
|
184
|
+
if (new Set(knownIds).size !== knownIds.length || priorIds.some(id => !knownIds.includes(id)) || (number > 1 && knownIds.length <= priorIds.length))
|
|
185
|
+
throw new Error("Native comment IDs did not advance or conflicted");
|
|
186
|
+
if (!isArticle) {
|
|
187
|
+
const heading = Array.from(document.querySelectorAll('.CommentViewWrap > header.HeaderWrap h1.main_title')).filter(node => node.closest('.CommentViewWrap')?.querySelector('.ArticleComment.CommentView') === scope);
|
|
188
|
+
if (heading.length !== 1 || heading[0].textContent?.replace(/\s+/g, " ").trim() !== `댓글 ${original.post?.comment_count}`)
|
|
189
|
+
throw new Error("Native comment count changed");
|
|
190
|
+
const titles = Array.from(scope.querySelectorAll('.go_post h2.tit')).filter(node => !node.closest('.comment_list'));
|
|
191
|
+
if (titles.length !== 1 || titles[0].textContent?.replace(/\s+/g, "") !== String(original.post?.title).replace(/\s+/g, ""))
|
|
192
|
+
throw new Error("Native comment article title changed");
|
|
193
|
+
}
|
|
194
|
+
priorIds = knownIds;
|
|
195
|
+
const next = isArticle ? articlePager : commentPager;
|
|
196
|
+
const controls = Array.from(scope.querySelectorAll(isArticle ? '.comment_more .comment_more_bottom > a.more_next[data-nlog-area="comment_list.goto_next_comment"]' : '.comment_more .comment_more_bottom > a.more_next[data-nlog-area="comment_list.more_next_comment"]'));
|
|
197
|
+
if (controls.length > 1)
|
|
198
|
+
throw new Error("Native next-comment control is ambiguous");
|
|
199
|
+
finalHtml = html;
|
|
200
|
+
finalUrl = url;
|
|
201
|
+
pages = number;
|
|
202
|
+
if (!controls.length || number === 5)
|
|
203
|
+
break;
|
|
204
|
+
if (controls[0].getAttribute("href") !== "#")
|
|
205
|
+
throw new Error("Native next-comment control changed");
|
|
206
|
+
const locator = page.locator(next);
|
|
207
|
+
if (await locator.count() !== 1 || await locator.getAttribute("href") !== "#")
|
|
208
|
+
throw new Error("Native next-comment control is unavailable");
|
|
209
|
+
await locator.click({ trial: true, timeout: remaining() });
|
|
210
|
+
await requireReadable();
|
|
211
|
+
if (page.url() !== url || await locator.getAttribute("href") !== "#")
|
|
212
|
+
throw new Error("Native next-comment control changed before dispatch");
|
|
213
|
+
await locator.click({ timeout: remaining() });
|
|
214
|
+
const changed = await page.waitForFunction(({ previous }) => {
|
|
215
|
+
const rows = document.querySelectorAll('.ArticleComment .comment_list > li');
|
|
216
|
+
return rows.length > previous;
|
|
217
|
+
}, { previous: lists[0].children.length }, { polling: 25, timeout: remaining() });
|
|
218
|
+
await changed.dispose();
|
|
219
|
+
}
|
|
220
|
+
},
|
|
221
|
+
});
|
|
222
|
+
if (!session.ok)
|
|
223
|
+
throw new BrowserSessionToolError(session.error);
|
|
224
|
+
if (Date.now() >= deadline || !finalHtml || !pages)
|
|
225
|
+
throw new Error("Native comment continuation exceeded the original deadline");
|
|
226
|
+
const after = parseHTML(finalHtml).document;
|
|
227
|
+
const comments = after.querySelector('.ArticleComment.CommentView .comment_list');
|
|
228
|
+
if (!comments || !finalUrl.includes("/comments"))
|
|
229
|
+
throw new Error("Native comments route did not yield a comment list");
|
|
230
|
+
const before = parseHTML(context.active.content).document;
|
|
231
|
+
const list = before.querySelector('.WebArticle #ct > .ArticleComment .comment_list');
|
|
232
|
+
const section = before.querySelector('.WebArticle #ct > .ArticleComment');
|
|
233
|
+
if (!list || !section)
|
|
234
|
+
throw new Error("Original native article changed");
|
|
235
|
+
list.innerHTML = comments.innerHTML;
|
|
236
|
+
const pending = after.querySelectorAll('.ArticleComment.CommentView .comment_more a, .ArticleComment.CommentView .comment_more button').length > 0;
|
|
237
|
+
if (!pending)
|
|
238
|
+
section.querySelector('.comment_more')?.remove();
|
|
239
|
+
const normalized = normalizeNaverCafeNative({ ...context, active: { ...context.active, content: before.toString() } });
|
|
240
|
+
if (!normalized || normalized.post?.text !== original.post?.text || normalized.post?.title !== original.post?.title || normalized.post?.comment_count !== original.post?.comment_count || normalized.comments.length < original.comments.length)
|
|
241
|
+
throw new Error("Native comment evidence could not be reconciled");
|
|
242
|
+
normalized.post.comment_pages = { collected_pages: pages, max_pages: 5 };
|
|
243
|
+
return normalized;
|
|
244
|
+
}
|
|
106
245
|
export const naverCafeProvider = {
|
|
107
246
|
id: "naver-cafe",
|
|
108
247
|
matches: (url, target) => target === "naver_cafe_post" || (target === "generic" && isNaverCafeUrl(url) && looksLikeNaverCafeArticle(url)),
|
|
109
248
|
async normalize(context) {
|
|
249
|
+
const native = normalizeNaverCafeNative(context);
|
|
250
|
+
if (native) {
|
|
251
|
+
const deadline = context.deadlineAt ?? Date.now() + context.timeoutMs;
|
|
252
|
+
if (native.post?.text && native.post?.comment_coverage && !native.post.comment_coverage.complete
|
|
253
|
+
&& context.active.content.includes('comment_list.goto_next_comment')
|
|
254
|
+
&& context.runBrowserSession && context.browserSessionOptions?.cdpUrl && !context.browserSessionOptions.profileDir
|
|
255
|
+
&& deadline - Date.now() >= 1000) {
|
|
256
|
+
try {
|
|
257
|
+
return await readCafeCommentPages(context, native, deadline);
|
|
258
|
+
}
|
|
259
|
+
catch (error) {
|
|
260
|
+
if (error instanceof BrowserSessionToolError)
|
|
261
|
+
native.errors.push(error.toolError);
|
|
262
|
+
native.errors.push({ category: "unavailable", code: "naver_cafe_comment_pages_incomplete", message: "Bounded native comment continuation failed; original evidence is preserved" });
|
|
263
|
+
}
|
|
264
|
+
}
|
|
265
|
+
return native;
|
|
266
|
+
}
|
|
110
267
|
const fallbackTitle = extractMetaProperty(context.active.content, "og:title") || asString(context.active.primary_content?.title) || extractTitleFromHtml(context.active.content);
|
|
111
268
|
const fallbackDescription = extractMetaProperty(context.active.content, "og:description") || extractMetaDescription(context.active.content);
|
|
112
269
|
const rawFallbackText = stripTags(context.active.content);
|
|
@@ -176,27 +333,31 @@ export const naverCafeProvider = {
|
|
|
176
333
|
method: result.ok ? "naver_cafe_article_json" : context.active.method,
|
|
177
334
|
};
|
|
178
335
|
}
|
|
336
|
+
const commentCount = typeof article?.commentCount === "number" && Number.isSafeInteger(article.commentCount) && article.commentCount >= 0 ? article.commentCount : null;
|
|
337
|
+
const commentsComplete = commentCount === 0;
|
|
179
338
|
return {
|
|
180
339
|
post: {
|
|
181
340
|
url: context.url,
|
|
182
341
|
canonical_url: apiUrl,
|
|
183
342
|
title: asString(article?.subject),
|
|
184
343
|
description: fallbackDescription,
|
|
185
|
-
text: body
|
|
344
|
+
text: body,
|
|
345
|
+
body_coverage: { collected_chars: body.length, complete: true },
|
|
186
346
|
author: asString(writer?.nick),
|
|
187
347
|
menu_name: asString(menu?.name),
|
|
188
348
|
cafe_name: asString(cafe?.name || cafe?.cafeName),
|
|
189
349
|
write_date: asString(article?.writeDate),
|
|
190
350
|
read_count: asNumber(article?.readCount),
|
|
191
|
-
comment_count:
|
|
351
|
+
comment_count: commentCount,
|
|
352
|
+
comment_coverage: { declared_count: commentCount, collected_count: 0, complete: commentsComplete },
|
|
192
353
|
extractor: "naver_cafe_article_json",
|
|
193
354
|
status: "ok",
|
|
194
355
|
},
|
|
195
356
|
thread: [],
|
|
196
357
|
comments: [],
|
|
197
358
|
outbound_links: dedupeUrls([...context.active.links, ...extractUrls(contentHtml)]),
|
|
198
|
-
partial:
|
|
199
|
-
errors: context.errors,
|
|
359
|
+
partial: !commentsComplete,
|
|
360
|
+
errors: [...context.errors, ...(!commentsComplete ? [{ category: "unavailable", code: "naver_cafe_comments_incomplete", message: "Article JSON does not include the declared or unknown comment list" }] : [])],
|
|
200
361
|
method: "naver_cafe_article_json",
|
|
201
362
|
};
|
|
202
363
|
},
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"naver-cafe.js","sourceRoot":"","sources":["../../../src/smartfetch/providers/naver-cafe.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"naver-cafe.js","sourceRoot":"","sources":["../../../src/smartfetch/providers/naver-cafe.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { dedupeUrls } from "../../shared.js";
|
|
2
2
|
function naverMapSearchGuidance() {
|
|
3
|
-
return "Naver Map search requires interactive browser access
|
|
3
|
+
return "Naver Map search requires interactive browser access: acquisition returned no verified place content. A shell or an action-required assessment is not a completed place lookup.";
|
|
4
4
|
}
|
|
5
5
|
function isSearchOrChromeLink(url) {
|
|
6
6
|
try {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"naver-map-search.js","sourceRoot":"","sources":["../../../src/smartfetch/providers/naver-map-search.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;AAG5C,SAAS,sBAAsB;IAC7B,OAAO,
|
|
1
|
+
{"version":3,"file":"naver-map-search.js","sourceRoot":"","sources":["../../../src/smartfetch/providers/naver-map-search.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,289 @@
|
|
|
1
|
+
import { Buffer } from "node:buffer";
|
|
2
|
+
import { parseHTML } from "linkedom";
|
|
3
|
+
import { dedupeUrls, extractAnchorHrefs, extractUrls, stripTags } from "../../shared.js";
|
|
4
|
+
import { BrowserSessionToolError, looksBotBlockedContent } from "../../browser-session.js";
|
|
5
|
+
function identity(url) {
|
|
6
|
+
try {
|
|
7
|
+
const parsed = new URL(url);
|
|
8
|
+
if (parsed.searchParams.getAll("id").length !== 1 || parsed.searchParams.getAll("no").length !== 1
|
|
9
|
+
|| Array.from(parsed.searchParams.keys()).some(key => /^(?:id|no)\[/.test(key)))
|
|
10
|
+
return null;
|
|
11
|
+
const board = parsed.searchParams.get("id") || "";
|
|
12
|
+
const no = parsed.searchParams.get("no") || "";
|
|
13
|
+
return ["www.ppomppu.co.kr", "ppomppu.co.kr"].includes(parsed.hostname)
|
|
14
|
+
&& parsed.pathname === "/zboard/view.php" && board && /^[1-9]\d*$/.test(no) ? { board, no } : null;
|
|
15
|
+
}
|
|
16
|
+
catch {
|
|
17
|
+
return null;
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
function samePost(url, expected) {
|
|
21
|
+
const actual = identity(url);
|
|
22
|
+
return actual?.board === expected.board && actual.no === expected.no;
|
|
23
|
+
}
|
|
24
|
+
function uniqueOutboundLinks(links, url) {
|
|
25
|
+
const expected = identity(url);
|
|
26
|
+
const unique = dedupeUrls(links);
|
|
27
|
+
if (!expected)
|
|
28
|
+
return unique;
|
|
29
|
+
const direct = new Set(unique);
|
|
30
|
+
return unique.filter(link => {
|
|
31
|
+
try {
|
|
32
|
+
const parsed = new URL(link);
|
|
33
|
+
if (parsed.hostname !== "s.ppomppu.co.kr" || parsed.protocol !== "https:" || parsed.pathname !== "/"
|
|
34
|
+
|| parsed.searchParams.getAll("idno").length !== 1 || parsed.searchParams.get("idno") !== `${expected.board}_${expected.no}`
|
|
35
|
+
|| parsed.searchParams.getAll("target").length !== 1 || parsed.searchParams.getAll("encode").length !== 1
|
|
36
|
+
|| parsed.searchParams.get("encode") !== "on")
|
|
37
|
+
return true;
|
|
38
|
+
const raw = /(?:^|&)target=([^&]*)/.exec(parsed.search.slice(1))?.[1];
|
|
39
|
+
if (!raw || raw.length > 4096)
|
|
40
|
+
return true;
|
|
41
|
+
const encoded = decodeURIComponent(raw);
|
|
42
|
+
const decoded = Buffer.from(encoded, "base64").toString("utf8");
|
|
43
|
+
if (Buffer.from(decoded, "utf8").toString("base64") !== encoded)
|
|
44
|
+
return true;
|
|
45
|
+
const destination = new URL(decoded);
|
|
46
|
+
return !(["http:", "https:"].includes(destination.protocol) && direct.has(decoded));
|
|
47
|
+
}
|
|
48
|
+
catch {
|
|
49
|
+
return true;
|
|
50
|
+
}
|
|
51
|
+
});
|
|
52
|
+
}
|
|
53
|
+
const userContent = '.board-contents, [id^="commentContent_"], textarea, template, [contenteditable]:not([contenteditable="false"]), [role="textbox"]';
|
|
54
|
+
function stripGeneratedPreviewThumbnails(root) {
|
|
55
|
+
for (const preview of root.querySelectorAll(".scrap_bx .scrap_img[style]"))
|
|
56
|
+
preview.removeAttribute("style");
|
|
57
|
+
}
|
|
58
|
+
function isHidden(node) {
|
|
59
|
+
return node.getAttribute("hidden") !== null || node.getAttribute("aria-hidden") === "true"
|
|
60
|
+
|| /(?:^|;)\s*(?:display\s*:\s*none|visibility\s*:\s*(?:hidden|collapse))\s*(?:!important\s*)?(?:;|$)/i.test(node.getAttribute("style") || "");
|
|
61
|
+
}
|
|
62
|
+
function stripHiddenDescendants(root) {
|
|
63
|
+
for (const node of root.querySelectorAll('[hidden], [aria-hidden="true"], [style]'))
|
|
64
|
+
if (isHidden(node))
|
|
65
|
+
node.remove();
|
|
66
|
+
}
|
|
67
|
+
function parsePost(html, url) {
|
|
68
|
+
const isDecorativeIcon = (src) => {
|
|
69
|
+
try {
|
|
70
|
+
const image = new URL(src, url);
|
|
71
|
+
return /^(?:www\.|cdn\d+\.)?ppomppu\.co\.kr$/.test(image.hostname) && image.pathname === "/images/icon_expand_img.png";
|
|
72
|
+
}
|
|
73
|
+
catch {
|
|
74
|
+
return false;
|
|
75
|
+
}
|
|
76
|
+
};
|
|
77
|
+
const { document } = parseHTML(html);
|
|
78
|
+
const heads = Array.from(document.querySelectorAll('[id="topTitle"]')).filter(node => !node.closest(`${userContent}, #quote`));
|
|
79
|
+
const heading = heads.length === 1 ? heads[0]?.querySelector("h1") : null;
|
|
80
|
+
const totals = Array.from(heading?.querySelectorAll('[id="comment"]') || []).filter(node => node.parentElement === heading);
|
|
81
|
+
const counts = totals.map(node => {
|
|
82
|
+
const value = stripTags(node.innerHTML);
|
|
83
|
+
return /^(?:\d+|\d{1,3}(?:,\d{3})+)$/.test(value) ? Number(value.replace(/,/g, "")) : null;
|
|
84
|
+
});
|
|
85
|
+
const firstCount = counts[0] ?? null;
|
|
86
|
+
const declared = firstCount !== null && Number.isSafeInteger(firstCount) && counts.every(value => value === firstCount) ? firstCount : null;
|
|
87
|
+
for (const count of totals)
|
|
88
|
+
count.remove();
|
|
89
|
+
const title = stripTags(heading?.innerHTML || "");
|
|
90
|
+
const bodies = Array.from(document.querySelectorAll(".board-contents")).filter(node => !isHidden(node) && !node.closest('[hidden], [aria-hidden="true"]') && !node.parentElement?.closest(`${userContent}, #quote`));
|
|
91
|
+
const body = bodies.length === 1 ? bodies[0] : null;
|
|
92
|
+
for (const node of body?.querySelectorAll("script, style, noscript, template, textarea") || [])
|
|
93
|
+
node.remove();
|
|
94
|
+
if (body)
|
|
95
|
+
stripHiddenDescendants(body);
|
|
96
|
+
for (const image of body?.querySelectorAll("img[src]") || [])
|
|
97
|
+
if (isDecorativeIcon(image.getAttribute("src") || ""))
|
|
98
|
+
image.remove();
|
|
99
|
+
if (body)
|
|
100
|
+
stripGeneratedPreviewThumbnails(body);
|
|
101
|
+
const bodyHtml = body?.innerHTML || "";
|
|
102
|
+
const text = stripTags(bodyHtml);
|
|
103
|
+
const quotes = Array.from(document.querySelectorAll('[id="quote"]')).filter(node => !node.closest(userContent) && !node.parentElement?.closest('[id="quote"]'));
|
|
104
|
+
const lists = quotes.length === 1 ? Array.from(quotes[0].querySelectorAll('[id="comment_list_area"]')).filter(node => node.parentElement === quotes[0]) : [];
|
|
105
|
+
const list = lists.length === 1 ? lists[0] : null;
|
|
106
|
+
const more = quotes.length === 1 ? Array.from(quotes[0].querySelectorAll('.next-cmt-btn-pc > a')).filter(node => !node.closest(userContent)) : [];
|
|
107
|
+
const pendingMore = more.some(node => !/display\s*:\s*none/i.test(node.parentElement?.getAttribute("style") || ""));
|
|
108
|
+
const nextMore = pendingMore && more.length === 1 && more[0].getAttribute("href") === "javascript:BbsCommentLoadMore.loadNext();";
|
|
109
|
+
const comments = [];
|
|
110
|
+
const assetHtml = [bodyHtml];
|
|
111
|
+
const links = [...extractUrls(bodyHtml), ...extractAnchorHrefs(bodyHtml)];
|
|
112
|
+
const seen = new Map();
|
|
113
|
+
const acceptedContainers = new Map();
|
|
114
|
+
let conflicting = false;
|
|
115
|
+
for (const row of list?.querySelectorAll(".comment_line") || []) {
|
|
116
|
+
if (row.closest('[id="comment_list_area"]') !== list || row.closest(userContent))
|
|
117
|
+
continue;
|
|
118
|
+
const container = row.parentElement;
|
|
119
|
+
const id = /^comment_([1-9]\d*)$/.exec(container?.id || "")?.[1];
|
|
120
|
+
const owner = container?.parentElement;
|
|
121
|
+
if (!id) {
|
|
122
|
+
if (owner?.parentElement === list && /^iC_[1-9]\d*$/.test(owner.id))
|
|
123
|
+
conflicting = true;
|
|
124
|
+
continue;
|
|
125
|
+
}
|
|
126
|
+
const parent = /^cC_([1-9]\d*)$/.exec(owner?.id || "")?.[1] || null;
|
|
127
|
+
if (parent ? !seen.has(parent) || owner?.parentElement !== acceptedContainers.get(parent) : owner?.id !== `iC_${id}` || owner.parentElement !== list)
|
|
128
|
+
continue;
|
|
129
|
+
const contents = Array.from(row.querySelectorAll(`[id="commentContent_${id}"]`)).filter(node => node.closest(".comment_line") === row);
|
|
130
|
+
const anchor = Array.from(row.querySelectorAll("a[name]")).find(node => node.getAttribute("name") === id && !node.closest(userContent) && node.closest(".comment_line") === row);
|
|
131
|
+
const copyIds = Array.from(row.querySelectorAll(".copyCmtUrlButton")).filter(node => !node.closest(userContent) && node.closest(".comment_line") === row).map(node => node.getAttribute("data-cno"));
|
|
132
|
+
if (contents.length !== 1 || !anchor || copyIds.some(value => value !== id)) {
|
|
133
|
+
conflicting = true;
|
|
134
|
+
continue;
|
|
135
|
+
}
|
|
136
|
+
const content = contents[0];
|
|
137
|
+
for (const node of content.querySelectorAll("script, style, noscript, template, textarea"))
|
|
138
|
+
node.remove();
|
|
139
|
+
stripHiddenDescendants(content);
|
|
140
|
+
for (const image of content.querySelectorAll("img[src]"))
|
|
141
|
+
if (isDecorativeIcon(image.getAttribute("src") || ""))
|
|
142
|
+
image.remove();
|
|
143
|
+
stripGeneratedPreviewThumbnails(content);
|
|
144
|
+
const commentText = stripTags(content.innerHTML);
|
|
145
|
+
const media = Array.from(content.querySelectorAll("img[src]")).flatMap(img => {
|
|
146
|
+
try {
|
|
147
|
+
const src = new URL(img.getAttribute("src") || "", url);
|
|
148
|
+
return ["http:", "https:"].includes(src.protocol) ? [src.toString()] : [];
|
|
149
|
+
}
|
|
150
|
+
catch {
|
|
151
|
+
return [];
|
|
152
|
+
}
|
|
153
|
+
});
|
|
154
|
+
if (!commentText && !media.length) {
|
|
155
|
+
conflicting = true;
|
|
156
|
+
continue;
|
|
157
|
+
}
|
|
158
|
+
const author = Array.from(row.querySelectorAll("b a")).find(node => !node.closest(userContent) && node.closest(".comment_line") === row)?.textContent?.trim() || "";
|
|
159
|
+
const createdAt = Array.from(row.querySelectorAll(".eng-day[title]")).find(node => !node.closest(userContent) && node.closest(".comment_line") === row)?.getAttribute("title") || null;
|
|
160
|
+
const signature = JSON.stringify([parent, author, commentText, media, createdAt]);
|
|
161
|
+
if (seen.has(id)) {
|
|
162
|
+
if (seen.get(id) !== signature)
|
|
163
|
+
conflicting = true;
|
|
164
|
+
continue;
|
|
165
|
+
}
|
|
166
|
+
seen.set(id, signature);
|
|
167
|
+
acceptedContainers.set(id, container);
|
|
168
|
+
comments.push({ id, parent_id: parent, author, text: commentText, created_at: createdAt, url: `${url.split("#")[0]}#${id}`, ...(media.length ? { media } : {}) });
|
|
169
|
+
assetHtml.push(content.innerHTML);
|
|
170
|
+
links.push(...extractUrls(content.innerHTML), ...extractAnchorHrefs(content.innerHTML));
|
|
171
|
+
}
|
|
172
|
+
return {
|
|
173
|
+
title, text, comments, links: uniqueOutboundLinks(links, url), assetHtml: assetHtml.join("\n"), declared,
|
|
174
|
+
ok: Boolean(title && (text || body?.querySelector("img, video"))),
|
|
175
|
+
nextMore,
|
|
176
|
+
complete: Boolean(list && !conflicting && !pendingMore && declared !== null && declared === comments.length),
|
|
177
|
+
};
|
|
178
|
+
}
|
|
179
|
+
async function readCommentMore(context, expected, baseline, deadline) {
|
|
180
|
+
const selector = '#quote .next-cmt-btn-pc > a[href="javascript:BbsCommentLoadMore.loadNext();"]';
|
|
181
|
+
let finalHtml = "";
|
|
182
|
+
let bytes = 0;
|
|
183
|
+
const session = await context.runBrowserSession({
|
|
184
|
+
...context.browserSessionOptions, url: context.url, timeoutMs: Math.min(context.timeoutMs, deadline - Date.now()), maxAnchors: 100,
|
|
185
|
+
operatorTask: async (page, remaining) => {
|
|
186
|
+
await page.locator('#quote > #comment_list_area .comment_line').first().waitFor({ state: "visible", timeout: remaining() });
|
|
187
|
+
let prior = baseline;
|
|
188
|
+
for (let step = 0; step < 5; step++) {
|
|
189
|
+
remaining();
|
|
190
|
+
if (!samePost(page.url(), expected))
|
|
191
|
+
throw new Error("Comment continuation changed post identity");
|
|
192
|
+
const body = await page.mainFrame().evaluate(() => document.body?.innerText || "");
|
|
193
|
+
if (looksBotBlockedContent(body.slice(0, 4000)) || await page.locator('dialog[open]:visible, [role="dialog"]:visible, [aria-modal="true"]:visible, iframe[src*="recaptcha"]:visible, iframe[src*="hcaptcha"]:visible').count()) {
|
|
194
|
+
throw new BrowserSessionToolError({ category: "block", code: "operator_browser_user_required", message: "Comment reading requires user participation" });
|
|
195
|
+
}
|
|
196
|
+
const html = await page.content();
|
|
197
|
+
bytes += Buffer.byteLength(html);
|
|
198
|
+
if (bytes > 8 * 1024 * 1024)
|
|
199
|
+
throw new Error("Comment snapshots exceed the 8 MiB bound");
|
|
200
|
+
const parsed = parsePost(html, context.url);
|
|
201
|
+
if (!parsed.ok || parsed.title !== baseline.title || parsed.text !== baseline.text || parsed.declared !== baseline.declared
|
|
202
|
+
|| prior.comments.some(row => !parsed.comments.some(other => JSON.stringify(other) === JSON.stringify(row)))
|
|
203
|
+
|| parsed.comments.length < prior.comments.length)
|
|
204
|
+
throw new Error("Native comment evidence changed");
|
|
205
|
+
finalHtml = html;
|
|
206
|
+
if (!parsed.nextMore || step === 4)
|
|
207
|
+
break;
|
|
208
|
+
const next = page.locator(selector);
|
|
209
|
+
if (await next.count() !== 1 || !await next.isVisible())
|
|
210
|
+
throw new Error("Native comment-more control is ambiguous");
|
|
211
|
+
await next.click({ trial: true, timeout: remaining() });
|
|
212
|
+
if (!samePost(page.url(), expected) || await next.count() !== 1 || !await next.isVisible())
|
|
213
|
+
throw new Error("Native comment-more control changed before dispatch");
|
|
214
|
+
await next.click({ timeout: remaining() });
|
|
215
|
+
const changed = await page.waitForFunction(previous => document.querySelectorAll('#quote > #comment_list_area .comment_line').length > previous, parsed.comments.length, { polling: 25, timeout: remaining() });
|
|
216
|
+
await changed.dispose();
|
|
217
|
+
prior = parsed;
|
|
218
|
+
}
|
|
219
|
+
},
|
|
220
|
+
});
|
|
221
|
+
if (!session.ok)
|
|
222
|
+
throw new BrowserSessionToolError(session.error);
|
|
223
|
+
if (Date.now() >= deadline || !samePost(session.final_url, expected) || !finalHtml)
|
|
224
|
+
throw new Error("Comment continuation exceeded deadline or identity");
|
|
225
|
+
const recovered = parsePost(finalHtml, context.url);
|
|
226
|
+
if (!recovered.ok || recovered.title !== baseline.title || recovered.text !== baseline.text || recovered.declared !== baseline.declared
|
|
227
|
+
|| baseline.comments.some(row => !recovered.comments.some(other => JSON.stringify(other) === JSON.stringify(row))) || recovered.comments.length <= baseline.comments.length)
|
|
228
|
+
throw new Error("Comment continuation did not advance");
|
|
229
|
+
return recovered;
|
|
230
|
+
}
|
|
231
|
+
export const ppomppuProvider = {
|
|
232
|
+
id: "ppomppu",
|
|
233
|
+
matches: (url, target) => target === "generic" && Boolean(identity(url)),
|
|
234
|
+
async normalize(context) {
|
|
235
|
+
const expected = identity(context.url);
|
|
236
|
+
const matched = expected && samePost(context.resolvedUrl, expected);
|
|
237
|
+
let parsed = parsePost(matched ? context.active.content : "", context.url);
|
|
238
|
+
let method = context.active.method;
|
|
239
|
+
const errors = [...context.errors];
|
|
240
|
+
if (!matched)
|
|
241
|
+
errors.push({ category: "parse_error", code: "ppomppu_identity_mismatch", message: "Retrieved page does not match the requested Ppomppu board/post identity" });
|
|
242
|
+
const deadline = context.deadlineAt ?? Date.now() + context.timeoutMs;
|
|
243
|
+
const remaining = Math.max(0, Math.min(context.timeoutMs, deadline - Date.now()));
|
|
244
|
+
const connected = context.browserSessionOptions?.cdpUrl && !context.browserSessionOptions.profileDir;
|
|
245
|
+
if (expected && parsed.ok && (parsed.declared || 0) > 0 && parsed.comments.length === 0 && context.runBrowserSession && connected && remaining >= 1000) {
|
|
246
|
+
try {
|
|
247
|
+
const session = await context.runBrowserSession({ ...context.browserSessionOptions, url: context.url, timeoutMs: remaining, maxAnchors: 100, waitForSelector: '#quote > #comment_list_area .comment_line [id^="commentContent_"]' });
|
|
248
|
+
if (Date.now() >= deadline)
|
|
249
|
+
errors.push({ category: "timeout", code: "ppomppu_comments_timeout", message: "Comment continuation exceeded the original retrieval deadline" });
|
|
250
|
+
else if (session.ok && samePost(session.final_url, expected)) {
|
|
251
|
+
const recovered = parsePost(session.html, context.url);
|
|
252
|
+
if (recovered.ok && recovered.comments.length > parsed.comments.length) {
|
|
253
|
+
parsed = recovered;
|
|
254
|
+
method = "ppomppu_browser_comments";
|
|
255
|
+
}
|
|
256
|
+
}
|
|
257
|
+
else if (!session.ok)
|
|
258
|
+
errors.push(session.error);
|
|
259
|
+
else
|
|
260
|
+
errors.push({ category: "parse_error", code: "ppomppu_identity_mismatch", message: "Comment continuation navigated to a different post" });
|
|
261
|
+
}
|
|
262
|
+
catch {
|
|
263
|
+
errors.push({ category: "unavailable", code: "ppomppu_comments_browser_failed", message: "Bounded comment continuation failed" });
|
|
264
|
+
}
|
|
265
|
+
}
|
|
266
|
+
if (expected && parsed.ok && parsed.nextMore && context.runBrowserSession && connected && deadline - Date.now() >= 1000) {
|
|
267
|
+
try {
|
|
268
|
+
parsed = await readCommentMore(context, expected, parsed, deadline);
|
|
269
|
+
method = "ppomppu_browser_comment_pages";
|
|
270
|
+
}
|
|
271
|
+
catch (error) {
|
|
272
|
+
if (error instanceof BrowserSessionToolError)
|
|
273
|
+
errors.push(error.toolError);
|
|
274
|
+
errors.push({ category: "unavailable", code: "ppomppu_comment_pages_incomplete", message: "Bounded native comment continuation failed; original evidence is preserved" });
|
|
275
|
+
}
|
|
276
|
+
}
|
|
277
|
+
if (!parsed.ok)
|
|
278
|
+
errors.push({ category: "parse_error", code: "ppomppu_parse_failed", message: "Could not parse the requested native title/body" });
|
|
279
|
+
else if (!parsed.complete)
|
|
280
|
+
errors.push({ category: "parse_error", code: "ppomppu_comments_incomplete", message: `Collected ${parsed.comments.length} comments; declared total ${parsed.declared ?? "unknown"}. Unloaded, hidden or unavailable comments are not claimed as retrieved.` });
|
|
281
|
+
return {
|
|
282
|
+
post: parsed.ok ? { url: context.url, title: parsed.title, text: parsed.text, status: "ok", comment_coverage: { declared_count: parsed.declared, collected_count: parsed.comments.length, complete: parsed.complete } } : null,
|
|
283
|
+
thread: [], comments: parsed.ok ? parsed.comments : [], outbound_links: parsed.ok ? parsed.links : [],
|
|
284
|
+
partial: !parsed.ok || !parsed.complete, errors, method,
|
|
285
|
+
assetHtml: parsed.ok ? parsed.assetHtml : "",
|
|
286
|
+
};
|
|
287
|
+
},
|
|
288
|
+
};
|
|
289
|
+
//# sourceMappingURL=ppomppu.js.map
|