mcp-scraper 0.40.2 → 0.41.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.
Files changed (62) hide show
  1. package/README.md +2 -2
  2. package/dist/bin/api-server.cjs +2264 -337
  3. package/dist/bin/api-server.cjs.map +1 -1
  4. package/dist/bin/api-server.js +3 -3
  5. package/dist/bin/mcp-scraper-cli.cjs +1 -1
  6. package/dist/bin/mcp-scraper-cli.cjs.map +1 -1
  7. package/dist/bin/mcp-scraper-cli.js +1 -1
  8. package/dist/bin/mcp-scraper-install.cjs +1 -1
  9. package/dist/bin/mcp-scraper-install.cjs.map +1 -1
  10. package/dist/bin/mcp-scraper-install.js +1 -1
  11. package/dist/bin/mcp-stdio-server.cjs +180 -92
  12. package/dist/bin/mcp-stdio-server.cjs.map +1 -1
  13. package/dist/bin/mcp-stdio-server.js +6 -5
  14. package/dist/bin/mcp-stdio-server.js.map +1 -1
  15. package/dist/bin/paa-harvest.cjs +31 -9
  16. package/dist/bin/paa-harvest.cjs.map +1 -1
  17. package/dist/bin/paa-harvest.js +4 -4
  18. package/dist/{chunk-XORPNO3Z.js → chunk-27DUCRAZ.js} +2 -2
  19. package/dist/{chunk-44HZLHDV.js → chunk-5UN33CGU.js} +38 -1
  20. package/dist/chunk-5UN33CGU.js.map +1 -0
  21. package/dist/{chunk-X2LKCX6H.js → chunk-6J57U6HA.js} +3 -3
  22. package/dist/chunk-BBI7RGOT.js +99 -0
  23. package/dist/chunk-BBI7RGOT.js.map +1 -0
  24. package/dist/{chunk-NVXNEOUQ.js → chunk-CS4HE6QY.js} +47 -11
  25. package/dist/chunk-CS4HE6QY.js.map +1 -0
  26. package/dist/{chunk-3PIWJS6Y.js → chunk-EHES33KB.js} +2 -2
  27. package/dist/{chunk-GUVKHCKE.js → chunk-IQTT7CAB.js} +94 -3
  28. package/dist/chunk-IQTT7CAB.js.map +1 -0
  29. package/dist/{chunk-7XBBFBYY.js → chunk-JVIW4GK2.js} +44 -12
  30. package/dist/chunk-JVIW4GK2.js.map +1 -0
  31. package/dist/chunk-OOB35KFT.js +7 -0
  32. package/dist/chunk-OOB35KFT.js.map +1 -0
  33. package/dist/{chunk-LP6E462I.js → chunk-SIE5LZ2V.js} +74 -106
  34. package/dist/chunk-SIE5LZ2V.js.map +1 -0
  35. package/dist/{db-W3CP562I.js → db-LVVU6NOK.js} +16 -2
  36. package/dist/{extract-bundle-K4PG3RZJ.js → extract-bundle-SKXEDG4Z.js} +4 -4
  37. package/dist/index.cjs +31 -9
  38. package/dist/index.cjs.map +1 -1
  39. package/dist/index.js +4 -4
  40. package/dist/{location-data-repository-RLQX6SNM.js → location-data-repository-NBTCOA7B.js} +3 -3
  41. package/dist/{server-KM3CFWCF.js → server-2JJPCZH4.js} +1812 -162
  42. package/dist/server-2JJPCZH4.js.map +1 -0
  43. package/dist/{site-extract-repository-2SMMFKKL.js → site-extract-repository-6GX72U4N.js} +4 -4
  44. package/dist/{worker-FXAGFYOE.js → worker-5RWLFSAJ.js} +27 -28
  45. package/dist/worker-5RWLFSAJ.js.map +1 -0
  46. package/package.json +1 -1
  47. package/dist/chunk-44HZLHDV.js.map +0 -1
  48. package/dist/chunk-7XBBFBYY.js.map +0 -1
  49. package/dist/chunk-GUVKHCKE.js.map +0 -1
  50. package/dist/chunk-LP6E462I.js.map +0 -1
  51. package/dist/chunk-NVXNEOUQ.js.map +0 -1
  52. package/dist/chunk-ZUJLSICT.js +0 -7
  53. package/dist/chunk-ZUJLSICT.js.map +0 -1
  54. package/dist/server-KM3CFWCF.js.map +0 -1
  55. package/dist/worker-FXAGFYOE.js.map +0 -1
  56. /package/dist/{chunk-XORPNO3Z.js.map → chunk-27DUCRAZ.js.map} +0 -0
  57. /package/dist/{chunk-X2LKCX6H.js.map → chunk-6J57U6HA.js.map} +0 -0
  58. /package/dist/{chunk-3PIWJS6Y.js.map → chunk-EHES33KB.js.map} +0 -0
  59. /package/dist/{db-W3CP562I.js.map → db-LVVU6NOK.js.map} +0 -0
  60. /package/dist/{extract-bundle-K4PG3RZJ.js.map → extract-bundle-SKXEDG4Z.js.map} +0 -0
  61. /package/dist/{location-data-repository-RLQX6SNM.js.map → location-data-repository-NBTCOA7B.js.map} +0 -0
  62. /package/dist/{site-extract-repository-2SMMFKKL.js.map → site-extract-repository-6GX72U4N.js.map} +0 -0
@@ -8,6 +8,8 @@ import {
8
8
  appendWorkflowArtifacts,
9
9
  cancelJob,
10
10
  checkRateLimit,
11
+ checkpointJob,
12
+ claimInngestPaaJob,
11
13
  claimMonthlyFreeRefresh,
12
14
  claimPendingJob,
13
15
  claimPendingKpoJob,
@@ -21,6 +23,7 @@ import {
21
23
  countActiveJobsForUser,
22
24
  countActiveUsers,
23
25
  createJob,
26
+ createJobWithId,
24
27
  createKpoJob,
25
28
  createPasswordResetToken,
26
29
  createRunningJob,
@@ -74,7 +77,10 @@ import {
74
77
  listInboxMessages,
75
78
  listJobs,
76
79
  listKpoJobs,
80
+ listPendingInngestPaaJobs,
81
+ listRecentTerminalInngestPaaJobs,
77
82
  listRequestEvents,
83
+ listStaleRunningInngestPaaJobs,
78
84
  listUsers,
79
85
  listUsersDueForConnectedAccountBillingReconciliation,
80
86
  listWorkflowArtifacts,
@@ -83,6 +89,7 @@ import {
83
89
  logKpoPhaseComplete,
84
90
  logRequestEvent,
85
91
  markInboxMessageOpened,
92
+ markJobBillingSettled,
86
93
  markWorkflowRunRunning,
87
94
  markWorkflowScheduleRan,
88
95
  migrate,
@@ -116,7 +123,7 @@ import {
116
123
  updateKpoJobState,
117
124
  upsertPageSnapshot,
118
125
  verifyPassword
119
- } from "./chunk-GUVKHCKE.js";
126
+ } from "./chunk-IQTT7CAB.js";
120
127
  export {
121
128
  CORE_SCHEMA_VERSION,
122
129
  CREDIT_LOTS_EPOCH,
@@ -127,6 +134,8 @@ export {
127
134
  appendWorkflowArtifacts,
128
135
  cancelJob,
129
136
  checkRateLimit,
137
+ checkpointJob,
138
+ claimInngestPaaJob,
130
139
  claimMonthlyFreeRefresh,
131
140
  claimPendingJob,
132
141
  claimPendingKpoJob,
@@ -140,6 +149,7 @@ export {
140
149
  countActiveJobsForUser,
141
150
  countActiveUsers,
142
151
  createJob,
152
+ createJobWithId,
143
153
  createKpoJob,
144
154
  createPasswordResetToken,
145
155
  createRunningJob,
@@ -193,7 +203,10 @@ export {
193
203
  listInboxMessages,
194
204
  listJobs,
195
205
  listKpoJobs,
206
+ listPendingInngestPaaJobs,
207
+ listRecentTerminalInngestPaaJobs,
196
208
  listRequestEvents,
209
+ listStaleRunningInngestPaaJobs,
197
210
  listUsers,
198
211
  listUsersDueForConnectedAccountBillingReconciliation,
199
212
  listWorkflowArtifacts,
@@ -202,6 +215,7 @@ export {
202
215
  logKpoPhaseComplete,
203
216
  logRequestEvent,
204
217
  markInboxMessageOpened,
218
+ markJobBillingSettled,
205
219
  markWorkflowRunRunning,
206
220
  markWorkflowScheduleRan,
207
221
  migrate,
@@ -236,4 +250,4 @@ export {
236
250
  upsertPageSnapshot,
237
251
  verifyPassword
238
252
  };
239
- //# sourceMappingURL=db-W3CP562I.js.map
253
+ //# sourceMappingURL=db-LVVU6NOK.js.map
@@ -10,12 +10,12 @@ import {
10
10
  } from "./chunk-345BQXZH.js";
11
11
  import {
12
12
  extractJobLimitInfo
13
- } from "./chunk-X2LKCX6H.js";
13
+ } from "./chunk-6J57U6HA.js";
14
14
  import "./chunk-SBLGBZZB.js";
15
- import "./chunk-44HZLHDV.js";
15
+ import "./chunk-5UN33CGU.js";
16
16
  import {
17
17
  getDb
18
- } from "./chunk-GUVKHCKE.js";
18
+ } from "./chunk-IQTT7CAB.js";
19
19
 
20
20
  // src/api/extract-bundle.ts
21
21
  import { createWriteStream, mkdirSync, readdirSync, rmSync, statSync, writeFileSync } from "fs";
@@ -565,4 +565,4 @@ export {
565
565
  SITE_EXTRACT_PAGE_CHUNK,
566
566
  assembleExtractArtifacts
567
567
  };
568
- //# sourceMappingURL=extract-bundle-K4PG3RZJ.js.map
568
+ //# sourceMappingURL=extract-bundle-SKXEDG4Z.js.map
package/dist/index.cjs CHANGED
@@ -181,6 +181,9 @@ var PAASelectors = {
181
181
  itemDataInitQ: "data-initq",
182
182
  itemQuestionEl: ".JlqpRe",
183
183
  answerContainer: ".bCOlv, .hgKElc, .wDYxhc, .LGOjhe, .fo7IQd, .fmW3u",
184
+ aiAnswerBody: ".pWvJNd",
185
+ aiCitation: "a.PMDqCb[href]",
186
+ aiSourceCard: "a.vIWmYe[href], a.Zbfntb[href]",
184
187
  sourceTitle: "h3",
185
188
  sourceSite: ".VuuXrf",
186
189
  sourceCite: "cite",
@@ -1773,14 +1776,28 @@ var PAAExtractor = class {
1773
1776
  }
1774
1777
  return parts.join(" ").replace(/\s+/g, " ").trim();
1775
1778
  }
1779
+ function cleanSourceLabel(value) {
1780
+ return (value ?? "").replace(/\s*\(\+\d+\)\s*-\s*View related links.*$/i, "").replace(/\s*-\s*Opens in new tab.*$/i, "").trim();
1781
+ }
1776
1782
  return Array.from(document.querySelectorAll(selectors.item)).map((pair) => {
1777
- let sourceTitle = pair.querySelector(selectors.sourceTitle)?.innerText?.trim() || void 0;
1778
- let sourceSite = pair.querySelector(selectors.sourceSite)?.innerText?.trim() || void 0;
1779
- let sourceCite = pair.querySelector(selectors.sourceCite)?.innerText?.trim() || void 0;
1780
- if (!sourceCite) {
1783
+ const clickTarget = pair.querySelector(selectors.clickTarget);
1784
+ const expanded = pair.classList.contains(selectors.expandedClass) || clickTarget?.getAttribute("aria-expanded") === "true";
1785
+ const answerContainer = expanded ? pair.querySelector(selectors.answerContainer) : null;
1786
+ const aiAnswerBody = answerContainer?.querySelector(selectors.aiAnswerBody);
1787
+ const answerElement = aiAnswerBody ?? answerContainer;
1788
+ let sourceTitle = expanded ? pair.querySelector(selectors.sourceTitle)?.innerText?.trim() || void 0 : void 0;
1789
+ let sourceSite = expanded ? pair.querySelector(selectors.sourceSite)?.innerText?.trim() || void 0 : void 0;
1790
+ let sourceCite = expanded ? pair.querySelector(selectors.sourceCite)?.innerText?.trim() || void 0 : void 0;
1791
+ if (expanded && !sourceCite) {
1781
1792
  const seenHrefs = /* @__PURE__ */ new Set();
1782
1793
  const anchors = [];
1783
- for (const a of Array.from(pair.querySelectorAll("a[href]"))) {
1794
+ const anchorRoot = answerElement ?? pair;
1795
+ const prioritized = [
1796
+ ...Array.from(anchorRoot.querySelectorAll(selectors.aiCitation)),
1797
+ ...Array.from(anchorRoot.querySelectorAll(selectors.aiSourceCard)),
1798
+ ...Array.from(anchorRoot.querySelectorAll("a[href]"))
1799
+ ];
1800
+ for (const a of prioritized) {
1784
1801
  const href = a.href;
1785
1802
  if (!/^https?:\/\//.test(href) || seenHrefs.has(href)) continue;
1786
1803
  let host = "";
@@ -1791,18 +1808,23 @@ var PAAExtractor = class {
1791
1808
  }
1792
1809
  if (/(^|\.)google(usercontent)?\.[a-z.]+$/.test(host)) continue;
1793
1810
  seenHrefs.add(href);
1794
- anchors.push({ text: (a.textContent || "").trim(), href, host });
1811
+ anchors.push({
1812
+ text: (a.textContent || "").trim(),
1813
+ label: cleanSourceLabel(a.getAttribute("aria-label")),
1814
+ href,
1815
+ host
1816
+ });
1795
1817
  }
1796
- const primary = anchors.find((x) => x.text.length > 2) ?? anchors[0];
1818
+ const primary = anchors.find((x) => x.label.length > 2 || x.text.length > 2) ?? anchors[0];
1797
1819
  if (primary) {
1798
- sourceTitle = sourceTitle || primary.text || void 0;
1820
+ sourceTitle = sourceTitle || primary.label || primary.text || void 0;
1799
1821
  sourceSite = sourceSite || primary.host.replace(/^www\./, "");
1800
1822
  sourceCite = primary.href;
1801
1823
  }
1802
1824
  }
1803
1825
  return {
1804
1826
  question: pair.getAttribute(selectors.itemDataQ) || pair.getAttribute(selectors.itemDataInitQ) || pair.querySelector(selectors.itemQuestionEl)?.innerText?.trim() || "",
1805
- answer: cleanText(pair.querySelector(selectors.answerContainer)) || void 0,
1827
+ answer: cleanText(answerElement) || void 0,
1806
1828
  sourceTitle,
1807
1829
  sourceSite,
1808
1830
  sourceCite