smart-web-mcp 0.7.12 → 0.7.13

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.
@@ -20,14 +20,22 @@ export declare function buildAcquireStage(input: {
20
20
  active: AdapterResult;
21
21
  usedBrowser: boolean;
22
22
  usedArchive: boolean;
23
+ initialPlannedLane?: string;
24
+ plannedLane?: string;
25
+ planReason?: string;
26
+ redirectUpgrade?: boolean;
23
27
  }): {
28
+ used_browser: boolean;
29
+ used_archive: boolean;
30
+ redirect_upgrade?: boolean;
31
+ plan_reason?: string;
32
+ planned_lane?: string;
33
+ initial_planned_lane?: string;
24
34
  status: "ok" | "failed" | "partial";
25
35
  strategy: string;
26
36
  attempts: string[];
27
37
  final_method: string;
28
38
  final_url: string;
29
- used_browser: boolean;
30
- used_archive: boolean;
31
39
  };
32
40
  export declare function buildNormalizeStage(input: {
33
41
  provider: ResolvedSmartfetchProvider;
@@ -35,7 +43,7 @@ export declare function buildNormalizeStage(input: {
35
43
  }): {
36
44
  status: "ok" | "partial";
37
45
  provider_id: string;
38
- provider_target: "generic" | "reddit_post" | "x_post" | "threads_post" | "instagram_post" | "telegram_post" | "dcinside_post" | "youtube_video" | "naver_blog" | "naver_cafe_post" | "tistory_post" | "velog_post" | "hackernews_post" | "linkedin_post" | "algumon_deal" | "namuwiki_article" | "wikipedia_article";
46
+ provider_target: "generic" | "reddit_post" | "x_post" | "threads_post" | "instagram_post" | "telegram_post" | "dcinside_post" | "youtube_video" | "naver_blog" | "naver_cafe_post" | "tistory_post" | "velog_post" | "hackernews_post" | "linkedin_post" | "algumon_deal" | "namuwiki_article" | "wikipedia_article" | "solvedac_problem";
39
47
  capabilities: import("./provider-types.js").SmartfetchCapability[];
40
48
  };
41
49
  export declare function assessSmartfetchOutput(input: {
@@ -24,6 +24,10 @@ export function buildAcquireStage(input) {
24
24
  attempts: methods,
25
25
  final_method: input.active.method,
26
26
  final_url: input.active.final_url || "",
27
+ ...(input.initialPlannedLane ? { initial_planned_lane: input.initialPlannedLane } : {}),
28
+ ...(input.plannedLane ? { planned_lane: input.plannedLane } : {}),
29
+ ...(input.planReason ? { plan_reason: input.planReason } : {}),
30
+ ...(input.redirectUpgrade ? { redirect_upgrade: true } : {}),
27
31
  used_browser: input.usedBrowser,
28
32
  used_archive: input.usedArchive,
29
33
  };
@@ -1 +1 @@
1
- {"version":3,"file":"pipeline.js","sourceRoot":"","sources":["../../src/smartfetch/pipeline.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,uBAAuB,EAAE,kBAAkB,EAAE,yBAAyB,EAAE,4BAA4B,EAAE,MAAM,kBAAkB,CAAA;AACzJ,OAAO,EAAE,iBAAiB,EAA+F,MAAM,cAAc,CAAA;AAG7I,SAAS,QAAQ,CAAC,KAAc;IAC9B,OAAO,MAAM,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAA;AACnC,CAAC;AAED,SAAS,eAAe,CAAC,QAAoC;IAC3D,OAAO,QAAQ,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,YAAY,IAAI,EAAE,CAAC,CAAA;AAChE,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,KAOjC;IACC,OAAO;QACL,MAAM,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,IAAa,CAAC,CAAC,CAAC,QAAiB;QAC3D,gBAAgB,EAAE,KAAK,CAAC,eAAe;QACvC,YAAY,EAAE,KAAK,CAAC,WAAW;QAC/B,aAAa,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE;QAC/C,SAAS,EAAE,KAAK,CAAC,QAAQ,IAAI,KAAK,CAAC,GAAG;QACtC,GAAG,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC,CAAC,EAAE,cAAc,EAAE,KAAK,CAAC,aAAa,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KACxE,CAAA;AACH,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,KAKjC;IACC,MAAM,OAAO,GAAG,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,OAAO,CAAC,CAAA;IAC9C,OAAO;QACL,MAAM,EAAE,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,IAAa,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,SAAkB,CAAC,CAAC,CAAC,QAAiB;QACrG,QAAQ,EAAE,OAAO,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,MAAM,IAAI,MAAM;QACrD,QAAQ,EAAE,OAAO;QACjB,YAAY,EAAE,KAAK,CAAC,MAAM,CAAC,MAAM;QACjC,SAAS,EAAE,KAAK,CAAC,MAAM,CAAC,SAAS,IAAI,EAAE;QACvC,YAAY,EAAE,KAAK,CAAC,WAAW;QAC/B,YAAY,EAAE,KAAK,CAAC,WAAW;KAChC,CAAA;AACH,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,KAGnC;IACC,OAAO;QACL,MAAM,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,SAAkB,CAAC,CAAC,CAAC,IAAa;QAC1D,WAAW,EAAE,KAAK,CAAC,QAAQ,CAAC,EAAE;QAC9B,eAAe,EAAE,KAAK,CAAC,QAAQ,CAAC,YAAY;QAC5C,YAAY,EAAE,KAAK,CAAC,QAAQ,CAAC,YAAY;KAC1C,CAAA;AACH,CAAC;AAED,MAAM,UAAU,sBAAsB,CAAC,KAOtC;IACC,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC,MAAqB,CAAA;IACjD,MAAM,IAAI,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,IAAI,EAAE,CAA4B,CAAA;IACjE,MAAM,UAAU,GAAG,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;IACxC,MAAM,QAAQ,GAAG,QAAQ,CAAC,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,KAAK,CAAC,CAAA;IACtE,MAAM,aAAa,GAAG,4BAA4B,CAAC;QACjD,GAAG,MAAM;QACT,UAAU,IAAI,UAAU,KAAK,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,SAAS;QAC1D,KAAK,CAAC,MAAM,CAAC,KAAK;KACnB,CAAC,CAAA;IACF,MAAM,oBAAoB,GAAG,OAAO,CAAC,QAAQ,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,cAAc,CAAC,MAAM,GAAG,CAAC,CAAA;IAC9J,MAAM,kBAAkB,GAAG,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,cAAc,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,OAAO,IAAI,CAAC,oBAAoB,CAAC,CAAC,CAAA;IACrJ,MAAM,kBAAkB,GAAG,OAAO,CAChC,kBAAkB;WACf,kBAAkB,CAAC,GAAG,aAAa,IAAI,UAAU,IAAI,QAAQ,EAAE,CAAC;WAChE,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,2BAA2B,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,CAC3F,CAAA;IACD,MAAM,qBAAqB,GAAG,OAAO,CACnC,CAAC,KAAK,CAAC,QAAQ,CAAC,YAAY,CAAC,QAAQ,CAAC,qBAAqB,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,IAAI,CAAC,oBAAoB,IAAI,OAAO,CAAC,aAAa,CAAC,CAAC,CAAC;WACvI,yBAAyB,CAAC,GAAG,aAAa,IAAI,QAAQ,IAAI,KAAK,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;WACjF,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,IAAI,CAAC,kBAAkB,CAAC;WACzC,CAAC,iBAAiB,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,WAAW,KAAK,SAAS,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,IAAI,CAAC,oBAAoB,CAAC,CAAC,CAC3H,CAAA;IACD,MAAM,UAAU,GAAG,kBAAkB,IAAI,CAAC,CAAC,oBAAoB,IAAI,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC;QACtF,CAAC,CAAC,KAAK;QACP,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,YAAY,CAAC,QAAQ,CAAC,kBAAkB,CAAC;YACrG,CAAC,CAAC,QAAQ;YACV,CAAC,CAAC,MAAM,CAAA;IAEZ,MAAM,OAAO,GAAG;QACd,GAAG,eAAe,CAAC,KAAK,CAAC,QAAQ,CAAC;QAClC,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,iBAAiB;QAC3D,oBAAoB,CAAC,CAAC,CAAC,iBAAiB,CAAC,CAAC,CAAC,gBAAgB;QAC3D,kBAAkB,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,eAAe;QACpD,qBAAqB,CAAC,CAAC,CAAC,oBAAoB,CAAC,CAAC,CAAC,sBAAsB;QACrE,aAAa,CAAC,CAAC,CAAC,WAAW,aAAa,EAAE,CAAC,CAAC,CAAC,EAAE;KAChD,CAAA;IAED,MAAM,YAAY,GAAG,UAAU,KAAK,KAAK,IAAI,kBAAkB,IAAI,qBAAqB,CAAA;IACxF,MAAM,kBAAkB,GAAG,YAAY;QACrC,CAAC,CAAC,uBAAuB,CAAC;YACtB,IAAI,EAAE,UAAU;YAChB,IAAI,EAAE,MAAM;YACZ,GAAG,EAAE,KAAK,CAAC,GAAG;YACd,MAAM,EAAE,kBAAkB;gBACxB,CAAC,CAAC,8DAA8D;gBAChE,CAAC,CAAC,qBAAqB;oBACrB,CAAC,CAAC,gEAAgE;oBAClE,CAAC,CAAC,wDAAwD;YAC9D,IAAI,EAAE,QAAQ,KAAK,CAAC,GAAG,8GAA8G;SACtI,CAAC;QACJ,CAAC,CAAC,IAAI,CAAA;IAER,OAAO,gBAAgB,CAAC;QACtB,UAAU;QACV,cAAc,EAAE,aAAa;QAC7B,oBAAoB,EAAE,kBAAkB;QACxC,uBAAuB,EAAE,qBAAqB;QAC9C,OAAO;QACP,mBAAmB,EAAE,kBAAkB;KACxC,CAAC,CAAA;AACJ,CAAC"}
1
+ {"version":3,"file":"pipeline.js","sourceRoot":"","sources":["../../src/smartfetch/pipeline.ts"],"names":[],"mappings":"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"}
@@ -12,6 +12,7 @@ import { naverCafeProvider } from "./naver-cafe.js";
12
12
  import { namuwikiProvider } from "./namuwiki.js";
13
13
  import { redditProvider } from "./reddit.js";
14
14
  import { sciencedirectProvider } from "./sciencedirect.js";
15
+ import { solvedacProvider } from "./solvedac.js";
15
16
  import { telegramProvider } from "./telegram.js";
16
17
  import { threadsProvider } from "./threads.js";
17
18
  import { tistoryProvider } from "./tistory.js";
@@ -19,7 +20,7 @@ import { velogProvider } from "./velog.js";
19
20
  import { wikipediaProvider } from "./wikipedia.js";
20
21
  import { xProvider } from "./x.js";
21
22
  import { youtubeProvider } from "./youtube.js";
22
- const providers = [hackernewsProvider, redditProvider, xProvider, threadsProvider, instagramProvider, telegramProvider, dcinsideProvider, youtubeProvider, naverBlogProvider, naverCafeProvider, tistoryProvider, velogProvider, linkedinProvider, algumonProvider, namuwikiProvider, wikipediaProvider, arxivProvider, archiveProvider, sciencedirectProvider, commerceProvider, genericProvider];
23
+ const providers = [hackernewsProvider, redditProvider, xProvider, threadsProvider, instagramProvider, telegramProvider, dcinsideProvider, youtubeProvider, naverBlogProvider, naverCafeProvider, tistoryProvider, velogProvider, linkedinProvider, algumonProvider, namuwikiProvider, wikipediaProvider, solvedacProvider, arxivProvider, archiveProvider, sciencedirectProvider, commerceProvider, genericProvider];
23
24
  const providerDefaults = {
24
25
  hackernews: { targetFamily: "hackernews_post", priority: 90, capabilities: ["community_post", "supports_assets"], policy: { crossOriginMode: "allow" } },
25
26
  reddit: { targetFamily: "reddit_post", priority: 90, capabilities: ["community_post", "supports_assets", "canonical_url"], policy: { crossOriginMode: "allow", preserveCanonicalUrl: true } },
@@ -37,6 +38,7 @@ const providerDefaults = {
37
38
  algumon: { targetFamily: "algumon_deal", priority: 90, capabilities: ["community_post", "canonical_url"], policy: { preserveCanonicalUrl: true } },
38
39
  namuwiki: { targetFamily: "namuwiki_article", priority: 85, capabilities: ["article_extract", "canonical_url"], policy: { preserveCanonicalUrl: true } },
39
40
  wikipedia: { targetFamily: "wikipedia_article", priority: 85, capabilities: ["article_extract", "canonical_url"], policy: { preserveCanonicalUrl: true } },
41
+ solvedac: { targetFamily: "solvedac_problem", priority: 90, capabilities: ["seed_metadata", "canonical_url"], policy: { preserveCanonicalUrl: true } },
40
42
  arxiv: { targetFamily: "generic", priority: 84, capabilities: ["article_extract", "supports_assets", "canonical_url"], policy: { preserveCanonicalUrl: true } },
41
43
  archive: { targetFamily: "generic", priority: 84, capabilities: ["article_extract", "canonical_url"], policy: { preserveCanonicalUrl: true } },
42
44
  sciencedirect: { targetFamily: "generic", priority: 84, capabilities: ["article_extract", "supports_assets", "canonical_url"], policy: { preserveCanonicalUrl: true } },
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/smartfetch/providers/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/smartfetch/providers/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ import type { SmartfetchProvider } from "../provider-types.js";
2
+ export declare const solvedacProvider: SmartfetchProvider;
@@ -0,0 +1,515 @@
1
+ import { asNumber, asString, dedupeUrls, extractTitleFromHtml, extractUrls, stripTags, } from "../../shared.js";
2
+ import { fetchProviderJson } from "../provider-policy.js";
3
+ const allowedSearchSorts = new Set(["id", "level", "title", "solved", "average_try", "random"]);
4
+ function isSolvedacHost(hostname) {
5
+ const normalized = String(hostname || "").toLowerCase();
6
+ return normalized === "solved.ac" || normalized.endsWith(".solved.ac");
7
+ }
8
+ function looksLikeSolvedacRoute(url) {
9
+ try {
10
+ const parsed = new URL(url);
11
+ if (!isSolvedacHost(parsed.hostname))
12
+ return false;
13
+ if (/^\/api\/v3\/(?:problem\/show|problem\/lookup|search\/problem)$/i.test(parsed.pathname))
14
+ return true;
15
+ if ((parsed.pathname === "/search" || parsed.pathname === "/problems") && parsed.searchParams.has("query"))
16
+ return true;
17
+ if (/^\/problems\/level\/\d+\/?$/i.test(parsed.pathname))
18
+ return true;
19
+ if (/^\/problems\/tags\/[^/]+\/?$/i.test(parsed.pathname))
20
+ return true;
21
+ }
22
+ catch {
23
+ return false;
24
+ }
25
+ return false;
26
+ }
27
+ function asRecord(value) {
28
+ return value && typeof value === "object" && !Array.isArray(value)
29
+ ? value
30
+ : null;
31
+ }
32
+ function asRecordList(value) {
33
+ return Array.isArray(value)
34
+ ? value.map((item) => asRecord(item)).filter((item) => item !== null)
35
+ : [];
36
+ }
37
+ function normalizeDirection(value) {
38
+ return String(value || "").toLowerCase() === "desc" ? "desc" : "asc";
39
+ }
40
+ function normalizeSort(value) {
41
+ const normalized = String(value || "").trim().toLowerCase();
42
+ return allowedSearchSorts.has(normalized) ? normalized : "id";
43
+ }
44
+ function normalizePage(value) {
45
+ const page = Math.max(1, Math.floor(asNumber(value)));
46
+ return page || 1;
47
+ }
48
+ function buildSearchApiUrl(origin, query, options) {
49
+ const url = new URL("/api/v3/search/problem", origin);
50
+ url.searchParams.set("query", query);
51
+ url.searchParams.set("sort", normalizeSort(options?.sort || "id"));
52
+ url.searchParams.set("direction", normalizeDirection(options?.direction || "asc"));
53
+ url.searchParams.set("page", String(normalizePage(String(options?.page || 1))));
54
+ return url.toString();
55
+ }
56
+ function buildProblemShowApiUrl(origin, problemId) {
57
+ const url = new URL("/api/v3/problem/show", origin);
58
+ url.searchParams.set("problemId", String(problemId));
59
+ return url.toString();
60
+ }
61
+ function buildProblemLookupApiUrl(origin, problemIds) {
62
+ const url = new URL("/api/v3/problem/lookup", origin);
63
+ url.searchParams.set("problemIds", problemIds.join(","));
64
+ return url.toString();
65
+ }
66
+ function parseProblemIds(value) {
67
+ return String(value || "")
68
+ .split(",")
69
+ .map((item) => Math.floor(asNumber(item.trim())))
70
+ .filter((item) => item > 0);
71
+ }
72
+ function resolveSolvedacRoute(url) {
73
+ try {
74
+ const parsed = new URL(url);
75
+ if (!isSolvedacHost(parsed.hostname))
76
+ return { kind: "unsupported", reason: "URL is not a solved.ac route" };
77
+ const origin = parsed.origin;
78
+ const path = parsed.pathname;
79
+ if (/^\/api\/v3\/problem\/show$/i.test(path)) {
80
+ const problemId = Math.floor(asNumber(parsed.searchParams.get("problemId")));
81
+ return problemId > 0
82
+ ? { kind: "problem", apiUrl: buildProblemShowApiUrl(origin, problemId), originalUrl: url, problemId }
83
+ : { kind: "unsupported", reason: "solved.ac problem/show URL is missing a valid problemId" };
84
+ }
85
+ if (/^\/api\/v3\/problem\/lookup$/i.test(path)) {
86
+ const problemIds = parseProblemIds(parsed.searchParams.get("problemIds") || "");
87
+ return problemIds.length > 0
88
+ ? { kind: "lookup", apiUrl: buildProblemLookupApiUrl(origin, problemIds), originalUrl: url, problemIds }
89
+ : { kind: "unsupported", reason: "solved.ac problem/lookup URL is missing valid problemIds" };
90
+ }
91
+ if (/^\/api\/v3\/search\/problem$/i.test(path)) {
92
+ const query = String(parsed.searchParams.get("query") || "").trim();
93
+ return query
94
+ ? {
95
+ kind: "search",
96
+ apiUrl: buildSearchApiUrl(origin, query, {
97
+ sort: parsed.searchParams.get("sort") || "id",
98
+ direction: parsed.searchParams.get("direction") || "asc",
99
+ page: normalizePage(parsed.searchParams.get("page") || "1"),
100
+ }),
101
+ originalUrl: url,
102
+ query,
103
+ sort: normalizeSort(parsed.searchParams.get("sort") || "id"),
104
+ direction: normalizeDirection(parsed.searchParams.get("direction") || "asc"),
105
+ page: normalizePage(parsed.searchParams.get("page") || "1"),
106
+ title: `solved.ac problem search: ${query}`,
107
+ }
108
+ : { kind: "unsupported", reason: "solved.ac search/problem URL is missing a query" };
109
+ }
110
+ if ((path === "/search" || path === "/problems") && parsed.searchParams.has("query")) {
111
+ const query = String(parsed.searchParams.get("query") || "").trim();
112
+ if (!query)
113
+ return { kind: "unsupported", reason: "solved.ac search page is missing a query" };
114
+ return {
115
+ kind: "search",
116
+ apiUrl: buildSearchApiUrl(origin, query, {
117
+ sort: parsed.searchParams.get("sort") || parsed.searchParams.get("sortby") || "id",
118
+ direction: parsed.searchParams.get("direction") || "asc",
119
+ page: normalizePage(parsed.searchParams.get("page") || "1"),
120
+ }),
121
+ originalUrl: url,
122
+ query,
123
+ sort: normalizeSort(parsed.searchParams.get("sort") || parsed.searchParams.get("sortby") || "id"),
124
+ direction: normalizeDirection(parsed.searchParams.get("direction") || "asc"),
125
+ page: normalizePage(parsed.searchParams.get("page") || "1"),
126
+ title: `solved.ac problem search: ${query}`,
127
+ };
128
+ }
129
+ const levelMatch = path.match(/^\/problems\/level\/(\d+)\/?$/i);
130
+ if (levelMatch?.[1]) {
131
+ const level = Math.floor(asNumber(levelMatch[1]));
132
+ if (level > 0 || level === 0) {
133
+ return {
134
+ kind: "search",
135
+ apiUrl: buildSearchApiUrl(origin, `*${level}`, {
136
+ sort: parsed.searchParams.get("sort") || parsed.searchParams.get("sortby") || "id",
137
+ direction: parsed.searchParams.get("direction") || "asc",
138
+ page: normalizePage(parsed.searchParams.get("page") || "1"),
139
+ }),
140
+ originalUrl: url,
141
+ query: `*${level}`,
142
+ sort: normalizeSort(parsed.searchParams.get("sort") || parsed.searchParams.get("sortby") || "id"),
143
+ direction: normalizeDirection(parsed.searchParams.get("direction") || "asc"),
144
+ page: normalizePage(parsed.searchParams.get("page") || "1"),
145
+ title: `solved.ac level ${level} problems`,
146
+ };
147
+ }
148
+ }
149
+ const tagMatch = path.match(/^\/problems\/tags\/([^/]+)\/?$/i);
150
+ if (tagMatch?.[1]) {
151
+ const tag = decodeURIComponent(tagMatch[1]).trim();
152
+ if (!tag)
153
+ return { kind: "unsupported", reason: "solved.ac tag page is missing a tag key" };
154
+ return {
155
+ kind: "search",
156
+ apiUrl: buildSearchApiUrl(origin, `#${tag}`, {
157
+ sort: parsed.searchParams.get("sort") || parsed.searchParams.get("sortby") || "id",
158
+ direction: parsed.searchParams.get("direction") || "asc",
159
+ page: normalizePage(parsed.searchParams.get("page") || "1"),
160
+ }),
161
+ originalUrl: url,
162
+ query: `#${tag}`,
163
+ sort: normalizeSort(parsed.searchParams.get("sort") || parsed.searchParams.get("sortby") || "id"),
164
+ direction: normalizeDirection(parsed.searchParams.get("direction") || "asc"),
165
+ page: normalizePage(parsed.searchParams.get("page") || "1"),
166
+ title: `solved.ac problems tagged #${tag}`,
167
+ };
168
+ }
169
+ }
170
+ catch {
171
+ return { kind: "unsupported", reason: "Invalid solved.ac URL" };
172
+ }
173
+ return { kind: "unsupported", reason: "solved.ac URL is not a supported problem/search route" };
174
+ }
175
+ function parseTitles(value) {
176
+ return asRecordList(value)
177
+ .map((item) => ({
178
+ language: asString(item.language),
179
+ title: asString(item.title),
180
+ isOriginal: Boolean(item.isOriginal),
181
+ }))
182
+ .filter((item) => item.title);
183
+ }
184
+ function parseTags(value) {
185
+ return asRecordList(value)
186
+ .map((item) => {
187
+ const key = asString(item.key);
188
+ const displayNames = asRecordList(item.displayNames);
189
+ const english = displayNames.find((name) => asString(name.language) === "en");
190
+ const first = displayNames[0];
191
+ const displayName = asString((english || first)?.name) || key;
192
+ return { key, displayName };
193
+ })
194
+ .filter((item) => item.key);
195
+ }
196
+ function parseProblem(value) {
197
+ const record = asRecord(value);
198
+ if (!record)
199
+ return null;
200
+ const problemId = Math.floor(asNumber(record.problemId));
201
+ if (problemId <= 0)
202
+ return null;
203
+ return {
204
+ problemId,
205
+ titleKo: asString(record.titleKo),
206
+ titles: parseTitles(record.titles),
207
+ isSolvable: Boolean(record.isSolvable),
208
+ isPartial: Boolean(record.isPartial),
209
+ acceptedUserCount: asNumber(record.acceptedUserCount),
210
+ level: asNumber(record.level),
211
+ votedUserCount: asNumber(record.votedUserCount),
212
+ sprout: Boolean(record.sprout),
213
+ givesNoRating: Boolean(record.givesNoRating),
214
+ isLevelLocked: Boolean(record.isLevelLocked),
215
+ averageTries: asNumber(record.averageTries),
216
+ official: Boolean(record.official),
217
+ tags: parseTags(record.tags),
218
+ };
219
+ }
220
+ function parseProblemArray(value) {
221
+ return Array.isArray(value)
222
+ ? value.map((item) => parseProblem(item)).filter((item) => item !== null)
223
+ : [];
224
+ }
225
+ function parseSearchResponse(value) {
226
+ const record = asRecord(value);
227
+ if (!record)
228
+ return { count: 0, items: [] };
229
+ return {
230
+ count: asNumber(record.count),
231
+ items: parseProblemArray(record.items),
232
+ };
233
+ }
234
+ function problemDisplayTitle(problem) {
235
+ return problem.titleKo || problem.titles[0]?.title || `Problem ${problem.problemId}`;
236
+ }
237
+ function problemBojUrl(problemId) {
238
+ return `https://www.acmicpc.net/problem/${problemId}`;
239
+ }
240
+ function formatCount(value) {
241
+ return Number.isFinite(value) ? value.toLocaleString("en-US") : "0";
242
+ }
243
+ function formatFloat(value) {
244
+ if (!Number.isFinite(value))
245
+ return "0";
246
+ return value.toFixed(4).replace(/0+$/g, "").replace(/\.$/g, "");
247
+ }
248
+ function problemSnippet(problem) {
249
+ const tags = problem.tags.slice(0, 4).map((item) => item.key).join(", ");
250
+ const parts = [
251
+ `level=${problem.level}`,
252
+ `solved=${formatCount(problem.acceptedUserCount)}`,
253
+ `average tries=${formatFloat(problem.averageTries)}`,
254
+ problem.official ? "official" : "unofficial",
255
+ tags ? `tags=${tags}` : "",
256
+ ].filter(Boolean);
257
+ return parts.join(" · ");
258
+ }
259
+ function problemSummary(problem) {
260
+ const titles = problem.titles.map((item) => `${item.language || "unknown"}:${item.title}`).join(", ");
261
+ const tags = problem.tags.map((item) => item.key).join(", ");
262
+ return [
263
+ `Problem ID: ${problem.problemId}`,
264
+ `BOJ problem: ${problemBojUrl(problem.problemId)}`,
265
+ `Level: ${problem.level}`,
266
+ `Solved by: ${formatCount(problem.acceptedUserCount)}`,
267
+ `Average tries: ${formatFloat(problem.averageTries)}`,
268
+ `Official: ${problem.official ? "yes" : "no"}`,
269
+ `Solvable: ${problem.isSolvable ? "yes" : "no"}`,
270
+ `Partial/problemset flag: ${problem.isPartial ? "yes" : "no"}`,
271
+ problem.sprout ? "Sprout: yes" : "",
272
+ problem.givesNoRating ? "No rating: yes" : "",
273
+ problem.isLevelLocked ? "Level locked: yes" : "",
274
+ titles ? `Titles: ${titles}` : "",
275
+ tags ? `Tags: ${tags}` : "",
276
+ ].filter(Boolean).join("\n");
277
+ }
278
+ function lookupSummary(problems) {
279
+ if (problems.length === 0)
280
+ return "No solved.ac problems matched the lookup request.";
281
+ return problems.slice(0, 12).map((problem, index) => `${index + 1}. #${problem.problemId} ${problemDisplayTitle(problem)} — ${problemSnippet(problem)}`).join("\n");
282
+ }
283
+ function searchSummary(route, count, problems) {
284
+ const lines = [
285
+ `Query: ${route.query}`,
286
+ `Sort: ${route.sort}`,
287
+ `Direction: ${route.direction}`,
288
+ `Page: ${route.page}`,
289
+ `Total matches: ${formatCount(count)}`,
290
+ ];
291
+ if (problems.length === 0) {
292
+ lines.push("No solved.ac problems matched the current query.");
293
+ return lines.join("\n");
294
+ }
295
+ lines.push("", ...problems.slice(0, 12).map((problem, index) => `${index + 1}. #${problem.problemId} ${problemDisplayTitle(problem)} — ${problemSnippet(problem)}`));
296
+ return lines.join("\n");
297
+ }
298
+ function threadItems(problems, origin) {
299
+ return problems.map((problem) => ({
300
+ title: `#${problem.problemId} ${problemDisplayTitle(problem)}`,
301
+ url: problemBojUrl(problem.problemId),
302
+ snippet: problemSnippet(problem),
303
+ canonical_url: buildProblemShowApiUrl(origin, problem.problemId),
304
+ level: problem.level,
305
+ accepted_user_count: problem.acceptedUserCount,
306
+ average_tries: problem.averageTries,
307
+ tags: problem.tags.map((item) => item.key),
308
+ }));
309
+ }
310
+ async function loadSolvedacData(route, context) {
311
+ const result = await fetchProviderJson(route.apiUrl, context.timeoutMs, {
312
+ headers: {
313
+ accept: "application/json,text/plain,*/*",
314
+ },
315
+ }, {
316
+ mode: "same-origin",
317
+ sourceUrl: context.url,
318
+ });
319
+ return result.ok
320
+ ? { ok: true, data: result.data }
321
+ : { ok: false, status: result.status, error: result.error };
322
+ }
323
+ function fallbackSolvedacPage(context, reason) {
324
+ const fallbackText = stripTags(context.active.content).slice(0, 20000);
325
+ return {
326
+ post: {
327
+ url: context.url,
328
+ title: extractTitleFromHtml(context.active.content) || "solved.ac page",
329
+ text: fallbackText || reason,
330
+ site: "solved.ac",
331
+ status: fallbackText ? "partial_text_only" : "blocked_or_unavailable",
332
+ extractor: context.active.method,
333
+ },
334
+ thread: [],
335
+ comments: [],
336
+ outbound_links: dedupeUrls([...context.active.links, ...extractUrls(context.active.content)]),
337
+ partial: true,
338
+ errors: [...context.errors, { category: "parse_error", code: "solvedac_route_unsupported", message: reason }],
339
+ method: context.active.method,
340
+ };
341
+ }
342
+ export const solvedacProvider = {
343
+ id: "solvedac",
344
+ targetFamily: "solvedac_problem",
345
+ priority: 90,
346
+ capabilities: ["seed_metadata", "canonical_url"],
347
+ policy: { preserveCanonicalUrl: true },
348
+ matches: (url, target) => target === "solvedac_problem" || (target === "generic" && looksLikeSolvedacRoute(url)),
349
+ async normalize(context) {
350
+ const route = resolveSolvedacRoute(context.url);
351
+ if (route.kind === "unsupported")
352
+ return fallbackSolvedacPage(context, route.reason);
353
+ const loaded = await loadSolvedacData(route, context);
354
+ const method = route.kind === "problem"
355
+ ? "solvedac_api_v3_problem_show"
356
+ : route.kind === "lookup"
357
+ ? "solvedac_api_v3_problem_lookup"
358
+ : "solvedac_api_v3_search_problem";
359
+ if (!loaded.ok) {
360
+ return {
361
+ post: {
362
+ url: context.url,
363
+ canonical_url: route.apiUrl,
364
+ title: route.kind === "problem"
365
+ ? `solved.ac problem ${route.problemId}`
366
+ : route.kind === "lookup"
367
+ ? "solved.ac problem lookup"
368
+ : route.title,
369
+ text: `Failed to load solved.ac API metadata for ${context.url}`,
370
+ site: "solved.ac",
371
+ status: "blocked_or_unavailable",
372
+ extractor: method,
373
+ },
374
+ thread: [],
375
+ comments: [],
376
+ outbound_links: dedupeUrls([context.url, route.apiUrl, ...context.active.links]),
377
+ partial: true,
378
+ errors: [...context.errors, loaded.error],
379
+ method,
380
+ };
381
+ }
382
+ const origin = new URL(route.apiUrl).origin;
383
+ if (route.kind === "problem") {
384
+ const problem = parseProblem(loaded.data);
385
+ if (!problem) {
386
+ return {
387
+ post: {
388
+ url: context.url,
389
+ canonical_url: route.apiUrl,
390
+ title: `solved.ac problem ${route.problemId}`,
391
+ text: `solved.ac returned an unreadable problem payload for problem ${route.problemId}`,
392
+ site: "solved.ac",
393
+ status: "blocked_or_unavailable",
394
+ extractor: method,
395
+ },
396
+ thread: [],
397
+ comments: [],
398
+ outbound_links: dedupeUrls([context.url, route.apiUrl, ...context.active.links]),
399
+ partial: true,
400
+ errors: [...context.errors, { category: "parse_error", code: "solvedac_problem_parse_failed", message: "solved.ac problem/show payload did not include a readable problem object" }],
401
+ method,
402
+ };
403
+ }
404
+ return {
405
+ post: {
406
+ url: context.url,
407
+ canonical_url: route.apiUrl,
408
+ problem_url: problemBojUrl(problem.problemId),
409
+ title: problemDisplayTitle(problem),
410
+ text: problemSummary(problem),
411
+ site: "solved.ac",
412
+ kind: "problem_metadata",
413
+ problem_id: problem.problemId,
414
+ title_ko: problem.titleKo,
415
+ titles: problem.titles,
416
+ level: problem.level,
417
+ accepted_user_count: problem.acceptedUserCount,
418
+ voted_user_count: problem.votedUserCount,
419
+ average_tries: problem.averageTries,
420
+ official: problem.official,
421
+ is_solvable: problem.isSolvable,
422
+ is_partial: problem.isPartial,
423
+ sprout: problem.sprout,
424
+ gives_no_rating: problem.givesNoRating,
425
+ is_level_locked: problem.isLevelLocked,
426
+ tags: problem.tags.map((item) => item.key),
427
+ extractor: method,
428
+ status: "ok",
429
+ },
430
+ thread: [],
431
+ comments: [],
432
+ outbound_links: dedupeUrls([context.url, route.apiUrl, problemBojUrl(problem.problemId), buildProblemShowApiUrl(origin, problem.problemId)]),
433
+ partial: false,
434
+ errors: context.errors,
435
+ method,
436
+ };
437
+ }
438
+ if (route.kind === "lookup") {
439
+ const problems = parseProblemArray(loaded.data);
440
+ if (problems.length === 1) {
441
+ const problem = problems[0];
442
+ return {
443
+ post: {
444
+ url: context.url,
445
+ canonical_url: route.apiUrl,
446
+ problem_url: problemBojUrl(problem.problemId),
447
+ title: problemDisplayTitle(problem),
448
+ text: problemSummary(problem),
449
+ site: "solved.ac",
450
+ kind: "problem_metadata",
451
+ problem_id: problem.problemId,
452
+ level: problem.level,
453
+ accepted_user_count: problem.acceptedUserCount,
454
+ average_tries: problem.averageTries,
455
+ tags: problem.tags.map((item) => item.key),
456
+ extractor: method,
457
+ status: "ok",
458
+ },
459
+ thread: [],
460
+ comments: [],
461
+ outbound_links: dedupeUrls([context.url, route.apiUrl, problemBojUrl(problem.problemId), buildProblemShowApiUrl(origin, problem.problemId)]),
462
+ partial: false,
463
+ errors: context.errors,
464
+ method,
465
+ };
466
+ }
467
+ return {
468
+ post: {
469
+ url: context.url,
470
+ canonical_url: route.apiUrl,
471
+ title: "solved.ac problem lookup",
472
+ text: lookupSummary(problems),
473
+ site: "solved.ac",
474
+ kind: "problem_lookup",
475
+ problem_ids: route.problemIds,
476
+ extractor: method,
477
+ status: problems.length > 0 ? "ok" : "blocked_or_unavailable",
478
+ },
479
+ thread: threadItems(problems, origin),
480
+ comments: [],
481
+ outbound_links: dedupeUrls([context.url, route.apiUrl, ...problems.flatMap((problem) => [problemBojUrl(problem.problemId), buildProblemShowApiUrl(origin, problem.problemId)])]),
482
+ partial: problems.length === 0,
483
+ errors: problems.length > 0
484
+ ? context.errors
485
+ : [...context.errors, { category: "parse_error", code: "solvedac_lookup_empty", message: "solved.ac lookup did not return any matching problems" }],
486
+ method,
487
+ };
488
+ }
489
+ const response = parseSearchResponse(loaded.data);
490
+ return {
491
+ post: {
492
+ url: route.originalUrl,
493
+ canonical_url: route.apiUrl,
494
+ title: route.title,
495
+ text: searchSummary(route, response.count, response.items),
496
+ site: "solved.ac",
497
+ kind: "problem_search",
498
+ query: route.query,
499
+ total_count: response.count,
500
+ sort: route.sort,
501
+ direction: route.direction,
502
+ page: route.page,
503
+ extractor: method,
504
+ status: "ok",
505
+ },
506
+ thread: threadItems(response.items, origin),
507
+ comments: [],
508
+ outbound_links: dedupeUrls([route.originalUrl, route.apiUrl, ...response.items.flatMap((problem) => [problemBojUrl(problem.problemId), buildProblemShowApiUrl(origin, problem.problemId)])]),
509
+ partial: false,
510
+ errors: context.errors,
511
+ method,
512
+ };
513
+ },
514
+ };
515
+ //# sourceMappingURL=solvedac.js.map