@cogitator-ai/rag 0.1.10 → 0.2.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 (75) hide show
  1. package/README.md +66 -31
  2. package/dist/chunkers/create-chunker.js.map +1 -1
  3. package/dist/chunkers/index.d.ts.map +1 -1
  4. package/dist/chunkers/index.js.map +1 -1
  5. package/dist/chunkers/recursive-chunker.d.ts +1 -2
  6. package/dist/chunkers/recursive-chunker.d.ts.map +1 -1
  7. package/dist/chunkers/recursive-chunker.js +68 -58
  8. package/dist/chunkers/recursive-chunker.js.map +1 -1
  9. package/dist/chunkers/semantic-chunker.d.ts.map +1 -1
  10. package/dist/chunkers/semantic-chunker.js +4 -1
  11. package/dist/chunkers/semantic-chunker.js.map +1 -1
  12. package/dist/index.d.ts +2 -2
  13. package/dist/index.d.ts.map +1 -1
  14. package/dist/index.js +4 -2
  15. package/dist/index.js.map +1 -1
  16. package/dist/loaders/csv-loader.d.ts.map +1 -1
  17. package/dist/loaders/csv-loader.js +9 -4
  18. package/dist/loaders/csv-loader.js.map +1 -1
  19. package/dist/loaders/html-loader.d.ts +4 -0
  20. package/dist/loaders/html-loader.d.ts.map +1 -1
  21. package/dist/loaders/html-loader.js +26 -2
  22. package/dist/loaders/html-loader.js.map +1 -1
  23. package/dist/loaders/index.d.ts.map +1 -1
  24. package/dist/loaders/index.js.map +1 -1
  25. package/dist/loaders/markdown-loader.d.ts.map +1 -1
  26. package/dist/loaders/markdown-loader.js +7 -3
  27. package/dist/loaders/markdown-loader.js.map +1 -1
  28. package/dist/loaders/text-loader.js +1 -1
  29. package/dist/loaders/text-loader.js.map +1 -1
  30. package/dist/loaders/web-loader.d.ts +29 -1
  31. package/dist/loaders/web-loader.d.ts.map +1 -1
  32. package/dist/loaders/web-loader.js +227 -92
  33. package/dist/loaders/web-loader.js.map +1 -1
  34. package/dist/rag-builder.d.ts +10 -1
  35. package/dist/rag-builder.d.ts.map +1 -1
  36. package/dist/rag-builder.js +70 -7
  37. package/dist/rag-builder.js.map +1 -1
  38. package/dist/rag-pipeline.d.ts +1 -0
  39. package/dist/rag-pipeline.d.ts.map +1 -1
  40. package/dist/rag-pipeline.js +55 -19
  41. package/dist/rag-pipeline.js.map +1 -1
  42. package/dist/rerankers/index.d.ts.map +1 -1
  43. package/dist/rerankers/index.js.map +1 -1
  44. package/dist/retrievers/chunk-indexer.d.ts +19 -0
  45. package/dist/retrievers/chunk-indexer.d.ts.map +1 -0
  46. package/dist/retrievers/chunk-indexer.js +8 -0
  47. package/dist/retrievers/chunk-indexer.js.map +1 -0
  48. package/dist/retrievers/create-retriever.d.ts +1 -0
  49. package/dist/retrievers/create-retriever.d.ts.map +1 -1
  50. package/dist/retrievers/create-retriever.js +1 -0
  51. package/dist/retrievers/create-retriever.js.map +1 -1
  52. package/dist/retrievers/hybrid-retriever.d.ts +8 -1
  53. package/dist/retrievers/hybrid-retriever.d.ts.map +1 -1
  54. package/dist/retrievers/hybrid-retriever.js +18 -5
  55. package/dist/retrievers/hybrid-retriever.js.map +1 -1
  56. package/dist/retrievers/index.d.ts +2 -0
  57. package/dist/retrievers/index.d.ts.map +1 -1
  58. package/dist/retrievers/index.js +1 -0
  59. package/dist/retrievers/index.js.map +1 -1
  60. package/dist/retrievers/mmr-retriever.d.ts +5 -0
  61. package/dist/retrievers/mmr-retriever.d.ts.map +1 -1
  62. package/dist/retrievers/mmr-retriever.js +24 -2
  63. package/dist/retrievers/mmr-retriever.js.map +1 -1
  64. package/dist/retrievers/multi-query-retriever.d.ts +12 -1
  65. package/dist/retrievers/multi-query-retriever.d.ts.map +1 -1
  66. package/dist/retrievers/multi-query-retriever.js +46 -7
  67. package/dist/retrievers/multi-query-retriever.js.map +1 -1
  68. package/dist/retrievers/similarity-retriever.d.ts.map +1 -1
  69. package/dist/retrievers/similarity-retriever.js +2 -1
  70. package/dist/retrievers/similarity-retriever.js.map +1 -1
  71. package/dist/tools.d.ts +11 -2
  72. package/dist/tools.d.ts.map +1 -1
  73. package/dist/tools.js +39 -7
  74. package/dist/tools.js.map +1 -1
  75. package/package.json +5 -5
@@ -9,6 +9,21 @@ async function loadCheerio() {
9
9
  throw new Error('cheerio is required for HTMLLoader. Install it: pnpm add cheerio');
10
10
  }
11
11
  }
12
+ const NON_CONTENT_SELECTOR = 'script, style, noscript, template, svg, iframe, object, head';
13
+ const BLOCK_SELECTOR = 'address, article, aside, blockquote, dd, div, dl, dt, fieldset, figcaption, figure, footer, ' +
14
+ 'form, h1, h2, h3, h4, h5, h6, header, hr, li, main, nav, ol, p, pre, section, table, tr, ul';
15
+ function normalizeWhitespace(text) {
16
+ return text
17
+ .replace(/\r\n?/g, '\n')
18
+ .replace(/[^\S\n]+/g, ' ')
19
+ .replace(/ *\n */g, '\n')
20
+ .replace(/\n{3,}/g, '\n\n')
21
+ .trim();
22
+ }
23
+ /**
24
+ * Extracts readable text from HTML: scripts, styles and other non-content elements are
25
+ * dropped, block elements become line breaks and whitespace is normalized.
26
+ */
12
27
  export class HTMLLoader {
13
28
  supportedTypes = ['html', 'htm'];
14
29
  selector;
@@ -23,8 +38,17 @@ export class HTMLLoader {
23
38
  async parseHTML(html, source, sourceType) {
24
39
  const cheerio = await loadCheerio();
25
40
  const $ = cheerio.load(html);
26
- const content = $(this.selector).text().trim();
27
- const title = $('title').text().trim() || undefined;
41
+ const title = $('title').first().text().trim() || undefined;
42
+ $(NON_CONTENT_SELECTOR).remove();
43
+ $('br').replaceWith('\n');
44
+ $(BLOCK_SELECTOR).each((_, element) => {
45
+ $(element).before('\n').after('\n');
46
+ });
47
+ $('td, th').after(' ');
48
+ const content = normalizeWhitespace($(this.selector)
49
+ .map((_, element) => $(element).text())
50
+ .get()
51
+ .join('\n\n'));
28
52
  const metadata = {};
29
53
  if (title)
30
54
  metadata.title = title;
@@ -1 +1 @@
1
- {"version":3,"file":"html-loader.js","sourceRoot":"","sources":["../../src/loaders/html-loader.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAGhC,KAAK,UAAU,WAAW;IACxB,IAAI,CAAC;QACH,OAAO,MAAM,MAAM,CAAC,SAAS,CAAC,CAAC;IACjC,CAAC;IAAC,MAAM,CAAC;QACP,MAAM,IAAI,KAAK,CAAC,kEAAkE,CAAC,CAAC;IACtF,CAAC;AACH,CAAC;AAMD,MAAM,OAAO,UAAU;IACZ,cAAc,GAAG,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;IACjC,QAAQ,CAAS;IAE1B,YAAY,OAA2B;QACrC,IAAI,CAAC,QAAQ,GAAG,OAAO,EAAE,QAAQ,IAAI,MAAM,CAAC;IAC9C,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,MAAc;QACvB,MAAM,QAAQ,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;QACjC,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;QAC/C,OAAO,CAAC,MAAM,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC,CAAC;IACxD,CAAC;IAED,KAAK,CAAC,SAAS,CAAC,IAAY,EAAE,MAAc,EAAE,UAA0B;QACtE,MAAM,OAAO,GAAG,MAAM,WAAW,EAAE,CAAC;QACpC,MAAM,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAE7B,MAAM,OAAO,GAAG,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC;QAC/C,MAAM,KAAK,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,SAAS,CAAC;QAEpD,MAAM,QAAQ,GAA4B,EAAE,CAAC;QAC7C,IAAI,KAAK;YAAE,QAAQ,CAAC,KAAK,GAAG,KAAK,CAAC;QAElC,OAAO;YACL,EAAE,EAAE,MAAM,EAAE;YACZ,OAAO;YACP,MAAM;YACN,UAAU;YACV,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,MAAM,GAAG,CAAC,IAAI,EAAE,QAAQ,EAAE,CAAC;SACtD,CAAC;IACJ,CAAC;CACF"}
1
+ {"version":3,"file":"html-loader.js","sourceRoot":"","sources":["../../src/loaders/html-loader.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAGhC,KAAK,UAAU,WAAW;IACxB,IAAI,CAAC;QACH,OAAO,MAAM,MAAM,CAAC,SAAS,CAAC,CAAC;IACjC,CAAC;IAAC,MAAM,CAAC;QACP,MAAM,IAAI,KAAK,CAAC,kEAAkE,CAAC,CAAC;IACtF,CAAC;AACH,CAAC;AAMD,MAAM,oBAAoB,GAAG,8DAA8D,CAAC;AAC5F,MAAM,cAAc,GAClB,8FAA8F;IAC9F,6FAA6F,CAAC;AAEhG,SAAS,mBAAmB,CAAC,IAAY;IACvC,OAAO,IAAI;SACR,OAAO,CAAC,QAAQ,EAAE,IAAI,CAAC;SACvB,OAAO,CAAC,WAAW,EAAE,GAAG,CAAC;SACzB,OAAO,CAAC,SAAS,EAAE,IAAI,CAAC;SACxB,OAAO,CAAC,SAAS,EAAE,MAAM,CAAC;SAC1B,IAAI,EAAE,CAAC;AACZ,CAAC;AAED;;;GAGG;AACH,MAAM,OAAO,UAAU;IACZ,cAAc,GAAG,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;IACjC,QAAQ,CAAS;IAE1B,YAAY,OAA2B;QACrC,IAAI,CAAC,QAAQ,GAAG,OAAO,EAAE,QAAQ,IAAI,MAAM,CAAC;IAC9C,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,MAAc;QACvB,MAAM,QAAQ,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;QACjC,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;QAC/C,OAAO,CAAC,MAAM,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC,CAAC;IACxD,CAAC;IAED,KAAK,CAAC,SAAS,CAAC,IAAY,EAAE,MAAc,EAAE,UAA0B;QACtE,MAAM,OAAO,GAAG,MAAM,WAAW,EAAE,CAAC;QACpC,MAAM,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAE7B,MAAM,KAAK,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,SAAS,CAAC;QAE5D,CAAC,CAAC,oBAAoB,CAAC,CAAC,MAAM,EAAE,CAAC;QACjC,CAAC,CAAC,IAAI,CAAC,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;QAC1B,CAAC,CAAC,cAAc,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,EAAE;YACpC,CAAC,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QACtC,CAAC,CAAC,CAAC;QACH,CAAC,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAEvB,MAAM,OAAO,GAAG,mBAAmB,CACjC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC;aACb,GAAG,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,CAAC;aACtC,GAAG,EAAE;aACL,IAAI,CAAC,MAAM,CAAC,CAChB,CAAC;QAEF,MAAM,QAAQ,GAA4B,EAAE,CAAC;QAC7C,IAAI,KAAK;YAAE,QAAQ,CAAC,KAAK,GAAG,KAAK,CAAC;QAElC,OAAO;YACL,EAAE,EAAE,MAAM,EAAE;YACZ,OAAO;YACP,MAAM;YACN,UAAU;YACV,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,MAAM,GAAG,CAAC,IAAI,EAAE,QAAQ,EAAE,CAAC;SACtD,CAAC;IACJ,CAAC;CACF"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/loaders/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAC3C,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACnD,YAAY,EAAE,qBAAqB,EAAE,MAAM,mBAAmB,CAAC;AAC/D,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAC3C,YAAY,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AACvD,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AACzC,YAAY,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AACrD,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAC3C,YAAY,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AACvD,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AACzC,YAAY,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AACrD,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AACzC,YAAY,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/loaders/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,YAAY,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAClE,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,YAAY,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAC1D,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,YAAY,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AACxD,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,YAAY,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAC1D,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,YAAY,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AACxD,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,YAAY,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/loaders/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAC3C,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAEnD,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAE3C,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAEzC,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAE3C,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAEzC,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/loaders/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAEtD,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAE9C,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAE5C,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAE9C,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAE5C,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"markdown-loader.d.ts","sourceRoot":"","sources":["../../src/loaders/markdown-loader.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAMvE,MAAM,WAAW,qBAAqB;IACpC,gBAAgB,CAAC,EAAE,OAAO,CAAC;CAC5B;AAED,qBAAa,cAAe,YAAW,cAAc;IACnD,QAAQ,CAAC,cAAc,WAAiB;IACxC,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAU;gBAE/B,OAAO,CAAC,EAAE,qBAAqB;IAIrC,IAAI,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;YAWpC,QAAQ;IAsBtB,OAAO,CAAC,gBAAgB;YAWV,aAAa;CAiB5B"}
1
+ {"version":3,"file":"markdown-loader.d.ts","sourceRoot":"","sources":["../../src/loaders/markdown-loader.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAWvE,MAAM,WAAW,qBAAqB;IACpC,gBAAgB,CAAC,EAAE,OAAO,CAAC;CAC5B;AAED,qBAAa,cAAe,YAAW,cAAc;IACnD,QAAQ,CAAC,cAAc,WAAiB;IACxC,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAU;gBAE/B,OAAO,CAAC,EAAE,qBAAqB;IAIrC,IAAI,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;YAWpC,QAAQ;IAsBtB,OAAO,CAAC,gBAAgB;YAWV,aAAa;CAiB5B"}
@@ -3,6 +3,10 @@ import { join, resolve } from 'node:path';
3
3
  import { nanoid } from 'nanoid';
4
4
  const MD_EXTENSIONS = new Set(['md', 'mdx']);
5
5
  const FRONTMATTER_RE = /^---\r?\n([\s\S]*?)\r?\n---(?:\r?\n|$)/;
6
+ function unquote(value) {
7
+ const quoted = /^(['"])(.*)\1$/.exec(value);
8
+ return quoted ? quoted[2] : value;
9
+ }
6
10
  export class MarkdownLoader {
7
11
  supportedTypes = ['md', 'mdx'];
8
12
  stripFrontmatter;
@@ -38,16 +42,16 @@ export class MarkdownLoader {
38
42
  }
39
43
  parseFrontmatter(raw) {
40
44
  const result = {};
41
- for (const line of raw.split('\n')) {
45
+ for (const line of raw.split(/\r?\n/)) {
42
46
  const match = /^(\w[\w\s-]*?):\s*(.+)$/.exec(line);
43
47
  if (match) {
44
- result[match[1].trim()] = match[2].trim();
48
+ result[match[1].trim()] = unquote(match[2].trim());
45
49
  }
46
50
  }
47
51
  return result;
48
52
  }
49
53
  async loadDirectory(dirPath) {
50
- const entries = await readdir(dirPath);
54
+ const entries = (await readdir(dirPath)).sort();
51
55
  const docs = [];
52
56
  for (const entry of entries) {
53
57
  const ext = entry.split('.').pop()?.toLowerCase() ?? '';
@@ -1 +1 @@
1
- {"version":3,"file":"markdown-loader.js","sourceRoot":"","sources":["../../src/loaders/markdown-loader.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AAC3D,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAGhC,MAAM,aAAa,GAAG,IAAI,GAAG,CAAC,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC;AAE7C,MAAM,cAAc,GAAG,wCAAwC,CAAC;AAMhE,MAAM,OAAO,cAAc;IAChB,cAAc,GAAG,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IACvB,gBAAgB,CAAU;IAE3C,YAAY,OAA+B;QACzC,IAAI,CAAC,gBAAgB,GAAG,OAAO,EAAE,gBAAgB,IAAI,KAAK,CAAC;IAC7D,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,MAAc;QACvB,MAAM,QAAQ,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;QACjC,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,CAAC;QAElC,IAAI,IAAI,CAAC,WAAW,EAAE,EAAE,CAAC;YACvB,OAAO,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;QACtC,CAAC;QAED,OAAO,CAAC,MAAM,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC;IACzC,CAAC;IAEO,KAAK,CAAC,QAAQ,CAAC,QAAgB;QACrC,MAAM,GAAG,GAAG,MAAM,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;QAC9C,IAAI,OAAO,GAAG,GAAG,CAAC;QAClB,IAAI,QAA6C,CAAC;QAElD,IAAI,IAAI,CAAC,gBAAgB,EAAE,CAAC;YAC1B,MAAM,KAAK,GAAG,cAAc,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YACvC,IAAI,KAAK,EAAE,CAAC;gBACV,QAAQ,GAAG,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;gBAC3C,OAAO,GAAG,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;YACvC,CAAC;QACH,CAAC;QAED,OAAO;YACL,EAAE,EAAE,MAAM,EAAE;YACZ,OAAO;YACP,MAAM,EAAE,QAAQ;YAChB,UAAU,EAAE,UAAU;YACtB,GAAG,CAAC,QAAQ,IAAI,EAAE,QAAQ,EAAE,CAAC;SAC9B,CAAC;IACJ,CAAC;IAEO,gBAAgB,CAAC,GAAW;QAClC,MAAM,MAAM,GAA4B,EAAE,CAAC;QAC3C,KAAK,MAAM,IAAI,IAAI,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;YACnC,MAAM,KAAK,GAAG,yBAAyB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACnD,IAAI,KAAK,EAAE,CAAC;gBACV,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;YAC5C,CAAC;QACH,CAAC;QACD,OAAO,MAAM,CAAC;IAChB,CAAC;IAEO,KAAK,CAAC,aAAa,CAAC,OAAe;QACzC,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,OAAO,CAAC,CAAC;QACvC,MAAM,IAAI,GAAkB,EAAE,CAAC;QAE/B,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;YAC5B,MAAM,GAAG,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC;YACxD,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,GAAG,CAAC;gBAAE,SAAS;YAEtC,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;YACtC,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,CAAC;YAClC,IAAI,IAAI,CAAC,MAAM,EAAE,EAAE,CAAC;gBAClB,IAAI,CAAC,IAAI,CAAC,MAAM,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC;YAC3C,CAAC;QACH,CAAC;QAED,OAAO,IAAI,CAAC;IACd,CAAC;CACF"}
1
+ {"version":3,"file":"markdown-loader.js","sourceRoot":"","sources":["../../src/loaders/markdown-loader.ts"],"names":[],"mappings":"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"}
@@ -22,7 +22,7 @@ export class TextLoader {
22
22
  };
23
23
  }
24
24
  async loadDirectory(dirPath) {
25
- const entries = await readdir(dirPath);
25
+ const entries = (await readdir(dirPath)).sort();
26
26
  const docs = [];
27
27
  for (const entry of entries) {
28
28
  const ext = entry.split('.').pop()?.toLowerCase() ?? '';
@@ -1 +1 @@
1
- {"version":3,"file":"text-loader.js","sourceRoot":"","sources":["../../src/loaders/text-loader.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AAC3D,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAGhC,MAAM,eAAe,GAAG,IAAI,GAAG,CAAC,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC;AAEjD,MAAM,OAAO,UAAU;IACZ,cAAc,GAAG,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;IAE1C,KAAK,CAAC,IAAI,CAAC,MAAc;QACvB,MAAM,QAAQ,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;QACjC,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,CAAC;QAElC,IAAI,IAAI,CAAC,WAAW,EAAE,EAAE,CAAC;YACvB,OAAO,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;QACtC,CAAC;QAED,OAAO,CAAC,MAAM,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC;IACzC,CAAC;IAEO,KAAK,CAAC,QAAQ,CAAC,QAAgB;QACrC,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;QAClD,OAAO;YACL,EAAE,EAAE,MAAM,EAAE;YACZ,OAAO;YACP,MAAM,EAAE,QAAQ;YAChB,UAAU,EAAE,MAAM;SACnB,CAAC;IACJ,CAAC;IAEO,KAAK,CAAC,aAAa,CAAC,OAAe;QACzC,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,OAAO,CAAC,CAAC;QACvC,MAAM,IAAI,GAAkB,EAAE,CAAC;QAE/B,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;YAC5B,MAAM,GAAG,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC;YACxD,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,GAAG,CAAC;gBAAE,SAAS;YAExC,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;YACtC,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,CAAC;YAClC,IAAI,IAAI,CAAC,MAAM,EAAE,EAAE,CAAC;gBAClB,IAAI,CAAC,IAAI,CAAC,MAAM,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC;YAC3C,CAAC;QACH,CAAC;QAED,OAAO,IAAI,CAAC;IACd,CAAC;CACF"}
1
+ {"version":3,"file":"text-loader.js","sourceRoot":"","sources":["../../src/loaders/text-loader.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AAC3D,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAGhC,MAAM,eAAe,GAAG,IAAI,GAAG,CAAC,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC;AAEjD,MAAM,OAAO,UAAU;IACZ,cAAc,GAAG,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;IAE1C,KAAK,CAAC,IAAI,CAAC,MAAc;QACvB,MAAM,QAAQ,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;QACjC,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,CAAC;QAElC,IAAI,IAAI,CAAC,WAAW,EAAE,EAAE,CAAC;YACvB,OAAO,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;QACtC,CAAC;QAED,OAAO,CAAC,MAAM,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC;IACzC,CAAC;IAEO,KAAK,CAAC,QAAQ,CAAC,QAAgB;QACrC,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;QAClD,OAAO;YACL,EAAE,EAAE,MAAM,EAAE;YACZ,OAAO;YACP,MAAM,EAAE,QAAQ;YAChB,UAAU,EAAE,MAAM;SACnB,CAAC;IACJ,CAAC;IAEO,KAAK,CAAC,aAAa,CAAC,OAAe;QACzC,MAAM,OAAO,GAAG,CAAC,MAAM,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;QAChD,MAAM,IAAI,GAAkB,EAAE,CAAC;QAE/B,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;YAC5B,MAAM,GAAG,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC;YACxD,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,GAAG,CAAC;gBAAE,SAAS;YAExC,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;YACtC,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,CAAC;YAClC,IAAI,IAAI,CAAC,MAAM,EAAE,EAAE,CAAC;gBAClB,IAAI,CAAC,IAAI,CAAC,MAAM,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC;YAC3C,CAAC;QACH,CAAC;QAED,OAAO,IAAI,CAAC;IACd,CAAC;CACF"}
@@ -1,18 +1,46 @@
1
+ import { type LookupAddress, type LookupOptions } from 'node:dns';
1
2
  import type { DocumentLoader, RAGDocument } from '@cogitator-ai/types';
3
+ /**
4
+ * Whether an IP address points to a loopback, private, link-local, CGNAT, multicast or
5
+ * otherwise non-public network (including IPv4-mapped / NAT64 IPv6 forms).
6
+ */
7
+ export declare function isBlockedAddress(address: string): boolean;
8
+ type LookupCallback = (err: NodeJS.ErrnoException | null, address: string | LookupAddress[], family?: number) => void;
9
+ type Resolver = (hostname: string, callback: (err: NodeJS.ErrnoException | null, addresses: LookupAddress[]) => void) => void;
10
+ /**
11
+ * DNS lookup for `http.request` that rejects private addresses at connect time,
12
+ * which also defeats DNS-rebinding between validation and connection.
13
+ */
14
+ export declare function createGuardedLookup(resolver?: Resolver): (hostname: string, options: LookupOptions, callback: LookupCallback) => void;
2
15
  export interface WebLoaderOptions {
3
16
  selector?: string;
4
17
  headers?: Record<string, string>;
5
18
  timeoutMs?: number;
6
19
  maxResponseBytes?: number;
20
+ /**
21
+ * Allow fetching loopback / private-network hosts (e.g. an intranet wiki).
22
+ * Disabled by default to prevent SSRF when URLs come from untrusted input.
23
+ */
24
+ allowPrivateNetwork?: boolean;
7
25
  }
26
+ /**
27
+ * Loads a web page over http(s). HTML is converted to text (scripts and styles removed);
28
+ * plain-text and JSON responses are kept as-is. Redirects are followed (max 5) and every
29
+ * hop — including DNS resolution at connect time — is checked against private networks.
30
+ */
8
31
  export declare class WebLoader implements DocumentLoader {
9
32
  readonly supportedTypes: string[];
10
33
  private readonly htmlLoader;
11
34
  private readonly headers?;
12
35
  private readonly timeoutMs;
13
36
  private readonly maxResponseBytes;
37
+ private readonly allowPrivateNetwork;
38
+ private readonly lookup;
14
39
  constructor(options?: WebLoaderOptions);
15
40
  load(source: string): Promise<RAGDocument[]>;
16
- private readBodyWithLimit;
41
+ private fetchPage;
42
+ private request;
43
+ private readBody;
17
44
  }
45
+ export {};
18
46
  //# sourceMappingURL=web-loader.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"web-loader.d.ts","sourceRoot":"","sources":["../../src/loaders/web-loader.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAoEvE,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC3B;AAKD,qBAAa,SAAU,YAAW,cAAc;IAC9C,QAAQ,CAAC,cAAc,WAAqB;IAC5C,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAa;IACxC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAyB;IAClD,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAS;IACnC,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAS;gBAE9B,OAAO,CAAC,EAAE,gBAAgB;IAOhC,IAAI,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;YAqCpC,iBAAiB;CA0ChC"}
1
+ {"version":3,"file":"web-loader.d.ts","sourceRoot":"","sources":["../../src/loaders/web-loader.ts"],"names":[],"mappings":"AAAA,OAAO,EAAuB,KAAK,aAAa,EAAE,KAAK,aAAa,EAAE,MAAM,UAAU,CAAC;AAMvF,OAAO,KAAK,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAqDvE;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAUzD;AAED,KAAK,cAAc,GAAG,CACpB,GAAG,EAAE,MAAM,CAAC,cAAc,GAAG,IAAI,EACjC,OAAO,EAAE,MAAM,GAAG,aAAa,EAAE,EACjC,MAAM,CAAC,EAAE,MAAM,KACZ,IAAI,CAAC;AAEV,KAAK,QAAQ,GAAG,CACd,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,CAAC,GAAG,EAAE,MAAM,CAAC,cAAc,GAAG,IAAI,EAAE,SAAS,EAAE,aAAa,EAAE,KAAK,IAAI,KAC9E,IAAI,CAAC;AAMV;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,QAAQ,GAAE,QAAyB,IAC7D,UAAU,MAAM,EAAE,SAAS,aAAa,EAAE,UAAU,cAAc,KAAG,IAAI,CAsClF;AA2DD,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B;;;OAGG;IACH,mBAAmB,CAAC,EAAE,OAAO,CAAC;CAC/B;AAQD;;;;GAIG;AACH,qBAAa,SAAU,YAAW,cAAc;IAC9C,QAAQ,CAAC,cAAc,WAAqB;IAC5C,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAa;IACxC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAyB;IAClD,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAS;IACnC,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAS;IAC1C,OAAO,CAAC,QAAQ,CAAC,mBAAmB,CAAU;IAC9C,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAyB;gBAEpC,OAAO,CAAC,EAAE,gBAAgB;IAQhC,IAAI,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;YA0BpC,SAAS;IAkCvB,OAAO,CAAC,OAAO;IA4Bf,OAAO,CAAC,QAAQ;CA4BjB"}
@@ -1,36 +1,110 @@
1
- import { lookup } from 'node:dns/promises';
2
- import { isIP } from 'node:net';
1
+ import { lookup as dnsLookup } from 'node:dns';
2
+ import http from 'node:http';
3
+ import https from 'node:https';
4
+ import { BlockList, isIP } from 'node:net';
5
+ import { createBrotliDecompress, createGunzip, createInflate } from 'node:zlib';
6
+ import { nanoid } from 'nanoid';
3
7
  import { HTMLLoader } from './html-loader.js';
4
- const BLOCKED_HOSTNAMES = new Set([
5
- 'localhost',
6
- '127.0.0.1',
7
- '::1',
8
- '[::1]',
9
- '0.0.0.0',
10
- '169.254.169.254',
11
- 'metadata.google.internal',
12
- ]);
13
8
  const MAX_REDIRECTS = 5;
14
- function isPrivateIP(ip) {
15
- if (ip.startsWith('10.'))
16
- return true;
17
- if (ip.startsWith('192.168.'))
18
- return true;
19
- if (ip === '0.0.0.0' || ip === '127.0.0.1' || ip === '::1')
20
- return true;
21
- if (ip.startsWith('169.254.'))
22
- return true;
23
- if (ip.startsWith('fc') || ip.startsWith('fd') || ip.startsWith('fe80'))
24
- return true;
25
- const match172 = /^172\.(\d+)\./.exec(ip);
26
- if (match172) {
27
- const second = parseInt(match172[1], 10);
28
- if (second >= 16 && second <= 31)
29
- return true;
9
+ const DEFAULT_TIMEOUT_MS = 30_000;
10
+ const DEFAULT_MAX_RESPONSE_BYTES = 50 * 1024 * 1024;
11
+ const BLOCKED_HOSTNAMES = new Set(['localhost', 'metadata.google.internal', 'metadata']);
12
+ const PRIVATE_RANGES = new BlockList();
13
+ for (const [network, prefix] of [
14
+ ['0.0.0.0', 8],
15
+ ['10.0.0.0', 8],
16
+ ['100.64.0.0', 10],
17
+ ['127.0.0.0', 8],
18
+ ['169.254.0.0', 16],
19
+ ['172.16.0.0', 12],
20
+ ['192.0.0.0', 24],
21
+ ['192.168.0.0', 16],
22
+ ['198.18.0.0', 15],
23
+ ['224.0.0.0', 4],
24
+ ['240.0.0.0', 4],
25
+ ]) {
26
+ PRIVATE_RANGES.addSubnet(network, prefix, 'ipv4');
27
+ }
28
+ for (const [network, prefix] of [
29
+ ['::', 128],
30
+ ['::1', 128],
31
+ ['fc00::', 7],
32
+ ['fe80::', 10],
33
+ ['ff00::', 8],
34
+ ]) {
35
+ PRIVATE_RANGES.addSubnet(network, prefix, 'ipv6');
36
+ }
37
+ function embeddedIPv4(ipv6) {
38
+ const lower = ipv6.toLowerCase();
39
+ const prefixes = ['::ffff:', '64:ff9b::', '::'];
40
+ for (const prefix of prefixes) {
41
+ if (!lower.startsWith(prefix))
42
+ continue;
43
+ const rest = lower.slice(prefix.length);
44
+ if (isIP(rest) === 4)
45
+ return rest;
46
+ const hex = /^([0-9a-f]{1,4}):([0-9a-f]{1,4})$/.exec(rest);
47
+ if (hex) {
48
+ const high = parseInt(hex[1], 16);
49
+ const low = parseInt(hex[2], 16);
50
+ return [high >> 8, high & 0xff, low >> 8, low & 0xff].join('.');
51
+ }
52
+ }
53
+ return null;
54
+ }
55
+ /**
56
+ * Whether an IP address points to a loopback, private, link-local, CGNAT, multicast or
57
+ * otherwise non-public network (including IPv4-mapped / NAT64 IPv6 forms).
58
+ */
59
+ export function isBlockedAddress(address) {
60
+ const ip = address.replace(/^\[|\]$/g, '');
61
+ const family = isIP(ip);
62
+ if (family === 4)
63
+ return PRIVATE_RANGES.check(ip, 'ipv4');
64
+ if (family === 6) {
65
+ const v4 = embeddedIPv4(ip);
66
+ if (v4)
67
+ return PRIVATE_RANGES.check(v4, 'ipv4');
68
+ return PRIVATE_RANGES.check(ip, 'ipv6');
30
69
  }
31
70
  return false;
32
71
  }
33
- async function validateUrl(urlString) {
72
+ const systemResolver = (hostname, callback) => {
73
+ dnsLookup(hostname, { all: true, verbatim: true }, callback);
74
+ };
75
+ /**
76
+ * DNS lookup for `http.request` that rejects private addresses at connect time,
77
+ * which also defeats DNS-rebinding between validation and connection.
78
+ */
79
+ export function createGuardedLookup(resolver = systemResolver) {
80
+ return (hostname, options, callback) => {
81
+ resolver(hostname, (err, addresses) => {
82
+ if (err) {
83
+ callback(err, []);
84
+ return;
85
+ }
86
+ const candidates = addresses.filter((entry) => !options.family || entry.family === options.family);
87
+ const blocked = candidates.find((entry) => isBlockedAddress(entry.address));
88
+ if (blocked) {
89
+ callback(Object.assign(new Error(`WebLoader: "${hostname}" resolves to private IP ${blocked.address} — blocked`), { code: 'EBLOCKED' }), []);
90
+ return;
91
+ }
92
+ if (candidates.length === 0) {
93
+ callback(Object.assign(new Error(`WebLoader: no addresses found for "${hostname}"`), {
94
+ code: 'ENOTFOUND',
95
+ }), []);
96
+ return;
97
+ }
98
+ if (options.all) {
99
+ callback(null, candidates);
100
+ }
101
+ else {
102
+ callback(null, candidates[0].address, candidates[0].family);
103
+ }
104
+ });
105
+ };
106
+ }
107
+ function parseUrl(urlString, allowPrivateNetwork) {
34
108
  let url;
35
109
  try {
36
110
  url = new URL(urlString);
@@ -41,101 +115,162 @@ async function validateUrl(urlString) {
41
115
  if (url.protocol !== 'http:' && url.protocol !== 'https:') {
42
116
  throw new Error(`WebLoader: unsupported protocol "${url.protocol}" — only http and https are allowed`);
43
117
  }
44
- const hostname = url.hostname.toLowerCase();
45
- if (BLOCKED_HOSTNAMES.has(hostname)) {
118
+ if (allowPrivateNetwork)
119
+ return url;
120
+ const hostname = url.hostname
121
+ .toLowerCase()
122
+ .replace(/^\[|\]$/g, '')
123
+ .replace(/\.$/, '');
124
+ if (BLOCKED_HOSTNAMES.has(hostname) || hostname.endsWith('.localhost')) {
46
125
  throw new Error(`WebLoader: access to "${hostname}" is blocked (loopback / metadata endpoint)`);
47
126
  }
48
- if (isIP(hostname) && isPrivateIP(hostname)) {
127
+ if (isIP(hostname) && isBlockedAddress(hostname)) {
49
128
  throw new Error(`WebLoader: access to private IP "${hostname}" is blocked`);
50
129
  }
51
- if (!isIP(hostname)) {
130
+ return url;
131
+ }
132
+ function decodeBody(body, contentType) {
133
+ const charset = /charset\s*=\s*"?([\w.:-]+)"?/i.exec(contentType)?.[1];
134
+ if (charset) {
52
135
  try {
53
- const { address } = await lookup(hostname);
54
- if (isPrivateIP(address)) {
55
- throw new Error(`WebLoader: "${hostname}" resolves to private IP ${address} — blocked`);
56
- }
136
+ return new TextDecoder(charset).decode(body);
57
137
  }
58
- catch (err) {
59
- if (err instanceof Error && err.message.startsWith('WebLoader:'))
60
- throw err;
138
+ catch {
139
+ return new TextDecoder('utf-8').decode(body);
61
140
  }
62
141
  }
63
- return url;
142
+ return new TextDecoder('utf-8').decode(body);
64
143
  }
65
- const DEFAULT_TIMEOUT_MS = 30_000;
66
- const DEFAULT_MAX_RESPONSE_BYTES = 50 * 1024 * 1024;
144
+ function decompress(response) {
145
+ const encoding = (response.headers['content-encoding'] ?? '').toLowerCase().trim();
146
+ switch (encoding) {
147
+ case 'gzip':
148
+ case 'x-gzip':
149
+ return response.pipe(createGunzip());
150
+ case 'deflate':
151
+ return response.pipe(createInflate());
152
+ case 'br':
153
+ return response.pipe(createBrotliDecompress());
154
+ default:
155
+ return response;
156
+ }
157
+ }
158
+ /**
159
+ * Loads a web page over http(s). HTML is converted to text (scripts and styles removed);
160
+ * plain-text and JSON responses are kept as-is. Redirects are followed (max 5) and every
161
+ * hop — including DNS resolution at connect time — is checked against private networks.
162
+ */
67
163
  export class WebLoader {
68
164
  supportedTypes = ['http', 'https'];
69
165
  htmlLoader;
70
166
  headers;
71
167
  timeoutMs;
72
168
  maxResponseBytes;
169
+ allowPrivateNetwork;
170
+ lookup = createGuardedLookup();
73
171
  constructor(options) {
74
172
  this.htmlLoader = new HTMLLoader({ selector: options?.selector });
75
173
  this.headers = options?.headers;
76
174
  this.timeoutMs = options?.timeoutMs ?? DEFAULT_TIMEOUT_MS;
77
175
  this.maxResponseBytes = options?.maxResponseBytes ?? DEFAULT_MAX_RESPONSE_BYTES;
176
+ this.allowPrivateNetwork = options?.allowPrivateNetwork ?? false;
78
177
  }
79
178
  async load(source) {
80
- let currentUrl = source;
81
- for (let redirectCount = 0; redirectCount <= MAX_REDIRECTS; redirectCount++) {
82
- await validateUrl(currentUrl);
83
- const response = await fetch(currentUrl, {
84
- headers: this.headers ?? {},
85
- redirect: 'manual',
86
- signal: AbortSignal.timeout(this.timeoutMs),
87
- });
88
- if (response.status >= 300 && response.status < 400) {
89
- const location = response.headers.get('location');
179
+ const page = await this.fetchPage(source);
180
+ const mime = page.contentType.split(';')[0].trim().toLowerCase();
181
+ if (mime === '' || mime.includes('html') || mime.endsWith('/xml') || mime.endsWith('+xml')) {
182
+ const doc = await this.htmlLoader.parseHTML(page.body, source, 'web');
183
+ return [
184
+ { ...doc, metadata: { ...doc.metadata, url: page.url, contentType: mime || 'text/html' } },
185
+ ];
186
+ }
187
+ if (mime.startsWith('text/') || mime === 'application/json' || mime.endsWith('+json')) {
188
+ return [
189
+ {
190
+ id: nanoid(),
191
+ content: page.body,
192
+ source,
193
+ sourceType: 'web',
194
+ metadata: { url: page.url, contentType: mime },
195
+ },
196
+ ];
197
+ }
198
+ throw new Error(`WebLoader: unsupported content type "${mime}" from ${page.url}`);
199
+ }
200
+ async fetchPage(source) {
201
+ let current = parseUrl(source, this.allowPrivateNetwork);
202
+ for (let redirects = 0; redirects <= MAX_REDIRECTS; redirects++) {
203
+ const response = await this.request(current);
204
+ const status = response.statusCode ?? 0;
205
+ if (status >= 300 && status < 400) {
206
+ response.resume();
207
+ const location = response.headers.location;
90
208
  if (!location) {
91
- throw new Error(`WebLoader: redirect ${response.status} without Location header from ${currentUrl}`);
209
+ throw new Error(`WebLoader: redirect ${status} without Location header from ${current.href}`);
92
210
  }
93
- currentUrl = new URL(location, currentUrl).href;
211
+ current = parseUrl(new URL(location, current).href, this.allowPrivateNetwork);
94
212
  continue;
95
213
  }
96
- if (!response.ok) {
97
- throw new Error(`WebLoader: failed to fetch ${currentUrl}: ${response.status} ${response.statusText}`);
214
+ if (status < 200 || status >= 300) {
215
+ response.resume();
216
+ throw new Error(`WebLoader: failed to fetch ${current.href}: ${status} ${response.statusMessage ?? ''}`.trim());
98
217
  }
99
- const html = await this.readBodyWithLimit(response, currentUrl);
100
- const doc = await this.htmlLoader.parseHTML(html, source, 'web');
101
- return [doc];
218
+ const contentType = response.headers['content-type'] ?? '';
219
+ const body = await this.readBody(response, current.href);
220
+ return { url: current.href, contentType, body: decodeBody(body, contentType) };
102
221
  }
103
222
  throw new Error(`WebLoader: too many redirects (max ${MAX_REDIRECTS}) for ${source}`);
104
223
  }
105
- async readBodyWithLimit(response, url) {
106
- const body = response.body;
107
- if (!body) {
108
- const text = await response.text();
109
- if (text.length > this.maxResponseBytes) {
110
- throw new Error(`WebLoader: response from ${url} exceeds ${this.maxResponseBytes} bytes limit`);
111
- }
112
- return text;
113
- }
114
- const reader = body.getReader();
115
- const chunks = [];
116
- let totalBytes = 0;
117
- try {
118
- for (;;) {
119
- const { done, value } = await reader.read();
120
- if (done)
121
- break;
122
- totalBytes += value.byteLength;
123
- if (totalBytes > this.maxResponseBytes) {
124
- throw new Error(`WebLoader: response from ${url} exceeds ${this.maxResponseBytes} bytes limit`);
224
+ request(url) {
225
+ const transport = url.protocol === 'https:' ? https : http;
226
+ return new Promise((resolve, reject) => {
227
+ const req = transport.get(url, {
228
+ headers: {
229
+ 'user-agent': 'cogitator-rag-webloader',
230
+ accept: 'text/html,application/xhtml+xml,text/plain;q=0.9,*/*;q=0.5',
231
+ 'accept-encoding': 'gzip, deflate, br',
232
+ ...this.headers,
233
+ },
234
+ signal: AbortSignal.timeout(this.timeoutMs),
235
+ ...(!this.allowPrivateNetwork && { lookup: this.lookup }),
236
+ });
237
+ req.once('response', resolve);
238
+ req.once('error', (err) => {
239
+ if (err.message.startsWith('WebLoader:')) {
240
+ reject(err);
125
241
  }
126
- chunks.push(value);
127
- }
128
- }
129
- finally {
130
- reader.releaseLock();
131
- }
132
- const merged = new Uint8Array(totalBytes);
133
- let offset = 0;
134
- for (const chunk of chunks) {
135
- merged.set(chunk, offset);
136
- offset += chunk.byteLength;
137
- }
138
- return new TextDecoder('utf-8').decode(merged);
242
+ else if (err.name === 'AbortError' || err.code === 'ABORT_ERR') {
243
+ reject(new Error(`WebLoader: request to ${url.href} timed out after ${this.timeoutMs}ms`));
244
+ }
245
+ else {
246
+ reject(new Error(`WebLoader: request to ${url.href} failed: ${err.message}`));
247
+ }
248
+ });
249
+ });
250
+ }
251
+ readBody(response, url) {
252
+ const stream = decompress(response);
253
+ return new Promise((resolve, reject) => {
254
+ const chunks = [];
255
+ let total = 0;
256
+ stream.on('data', (chunk) => {
257
+ total += chunk.length;
258
+ if (total > this.maxResponseBytes) {
259
+ response.destroy();
260
+ stream.destroy();
261
+ reject(new Error(`WebLoader: response from ${url} exceeds ${this.maxResponseBytes} bytes limit`));
262
+ return;
263
+ }
264
+ chunks.push(chunk);
265
+ });
266
+ stream.once('end', () => resolve(Buffer.concat(chunks)));
267
+ stream.once('error', (err) => {
268
+ reject(new Error(`WebLoader: failed to read response from ${url}: ${err.message}`));
269
+ });
270
+ response.once('error', (err) => {
271
+ reject(new Error(`WebLoader: failed to read response from ${url}: ${err.message}`));
272
+ });
273
+ });
139
274
  }
140
275
  }
141
276
  //# sourceMappingURL=web-loader.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"web-loader.js","sourceRoot":"","sources":["../../src/loaders/web-loader.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"web-loader.js","sourceRoot":"","sources":["../../src/loaders/web-loader.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,5 @@
1
- import type { DocumentLoader, Chunker, AsyncChunker, EmbeddingService, EmbeddingAdapter, Retriever, Reranker } from '@cogitator-ai/types';
1
+ import type { DocumentLoader, Chunker, AsyncChunker, EmbeddingService, EmbeddingAdapter, Retriever, Reranker, HybridSearchWeights } from '@cogitator-ai/types';
2
+ import type { HybridSearch } from '@cogitator-ai/memory';
2
3
  import { type RAGPipelineConfigInput } from './schema.js';
3
4
  import { RAGPipeline } from './rag-pipeline.js';
4
5
  export declare class RAGPipelineBuilder {
@@ -9,14 +10,22 @@ export declare class RAGPipelineBuilder {
9
10
  private retriever?;
10
11
  private reranker?;
11
12
  private configInput?;
13
+ private hybridSearch?;
14
+ private hybridWeights?;
15
+ private queryExpander?;
12
16
  withLoader(loader: DocumentLoader): this;
13
17
  withChunker(chunker: Chunker | AsyncChunker): this;
14
18
  withEmbeddingService(service: EmbeddingService): this;
15
19
  withEmbeddingAdapter(adapter: EmbeddingAdapter): this;
16
20
  withRetriever(retriever: Retriever): this;
17
21
  withReranker(reranker: Reranker): this;
22
+ /** HybridSearch used by the `hybrid` strategy (and as the multi-query base when set). */
23
+ withHybridSearch(hybridSearch: HybridSearch, weights?: HybridSearchWeights): this;
24
+ /** Query expansion function used by the `multi-query` strategy. */
25
+ withQueryExpander(expandQuery: (query: string) => Promise<string[]>): this;
18
26
  withConfig(config: RAGPipelineConfigInput): this;
19
27
  build(): RAGPipeline;
28
+ private createRetriever;
20
29
  private resolveConfig;
21
30
  }
22
31
  //# sourceMappingURL=rag-builder.d.ts.map