@cogenta/import 0.1.4 → 0.2.2

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 (53) hide show
  1. package/dist/csv-import.d.ts +11 -0
  2. package/dist/csv-import.d.ts.map +1 -0
  3. package/dist/csv-import.js +14 -0
  4. package/dist/csv-import.js.map +1 -0
  5. package/dist/csv.d.ts +15 -0
  6. package/dist/csv.d.ts.map +1 -0
  7. package/dist/csv.js +100 -0
  8. package/dist/csv.js.map +1 -0
  9. package/dist/feed.d.ts +4 -0
  10. package/dist/feed.d.ts.map +1 -0
  11. package/dist/feed.js +50 -0
  12. package/dist/feed.js.map +1 -0
  13. package/dist/generic-import.d.ts +56 -0
  14. package/dist/generic-import.d.ts.map +1 -0
  15. package/dist/generic-import.js +64 -0
  16. package/dist/generic-import.js.map +1 -0
  17. package/dist/index.d.ts +17 -0
  18. package/dist/index.d.ts.map +1 -1
  19. package/dist/index.js +10 -0
  20. package/dist/index.js.map +1 -1
  21. package/dist/json-import.d.ts +52 -0
  22. package/dist/json-import.d.ts.map +1 -0
  23. package/dist/json-import.js +110 -0
  24. package/dist/json-import.js.map +1 -0
  25. package/dist/mapping.d.ts +23 -0
  26. package/dist/mapping.d.ts.map +1 -0
  27. package/dist/mapping.js +41 -0
  28. package/dist/mapping.js.map +1 -0
  29. package/dist/ssrf.d.ts +12 -0
  30. package/dist/ssrf.d.ts.map +1 -0
  31. package/dist/ssrf.js +106 -0
  32. package/dist/ssrf.js.map +1 -0
  33. package/dist/tracking.d.ts +82 -0
  34. package/dist/tracking.d.ts.map +1 -0
  35. package/dist/tracking.js +200 -0
  36. package/dist/tracking.js.map +1 -0
  37. package/dist/undo.d.ts +27 -0
  38. package/dist/undo.d.ts.map +1 -0
  39. package/dist/undo.js +47 -0
  40. package/dist/undo.js.map +1 -0
  41. package/dist/wordpress/analyze.d.ts +40 -0
  42. package/dist/wordpress/analyze.d.ts.map +1 -0
  43. package/dist/wordpress/analyze.js +111 -0
  44. package/dist/wordpress/analyze.js.map +1 -0
  45. package/dist/wordpress/import.d.ts +31 -0
  46. package/dist/wordpress/import.d.ts.map +1 -1
  47. package/dist/wordpress/import.js +199 -6
  48. package/dist/wordpress/import.js.map +1 -1
  49. package/dist/wordpress/media.d.ts +3 -0
  50. package/dist/wordpress/media.d.ts.map +1 -1
  51. package/dist/wordpress/media.js +39 -2
  52. package/dist/wordpress/media.js.map +1 -1
  53. package/package.json +6 -5
@@ -0,0 +1,111 @@
1
+ import { convertContent, mediaUrlsOf } from './content-convert.js';
2
+ import { parseWxr } from './parse.js';
3
+ /**
4
+ * The "analyze" phase of a WordPress import (fiche 25 task 1): everything an
5
+ * apply would do, without a database, a storage driver, or a single write.
6
+ *
7
+ * This deliberately duplicates the *counting* logic of `importWordPress`
8
+ * (which post is importable, which is skipped, which media it references)
9
+ * rather than the *writing* logic — the parts that touch `db`/`storage` are
10
+ * the only parts absent, on purpose, per the pièges connus note: "la
11
+ * prévisualisation doit venir du paquet, pas d'une deuxième analyse [de
12
+ * moteur de rendu]". `convertContent` — the actual Gutenberg/HTML → block
13
+ * conversion — runs for real, so the block/media counts here are exact, not
14
+ * estimated.
15
+ */
16
+ const IMPORTABLE_STATUSES = new Set(['publish', 'draft', 'pending', 'private', 'future']);
17
+ function slugConflictsOf(items, kind) {
18
+ const bySlug = new Map();
19
+ for (const item of items) {
20
+ if (!IMPORTABLE_STATUSES.has(item.status))
21
+ continue;
22
+ const slug = item.postName || item.postId;
23
+ const list = bySlug.get(slug) ?? [];
24
+ list.push(item.postId);
25
+ bySlug.set(slug, list);
26
+ }
27
+ return [...bySlug.entries()]
28
+ .filter(([, ids]) => ids.length > 1)
29
+ .map(([slug, wpIds]) => ({ kind, slug, wpIds }));
30
+ }
31
+ export function analyzeWordPress(xml) {
32
+ const parsed = parseWxr(xml);
33
+ const posts = parsed.items.filter((item) => item.postType === 'post');
34
+ const pages = parsed.items.filter((item) => item.postType === 'page');
35
+ const attachments = parsed.items.filter((item) => item.postType === 'attachment');
36
+ const ignored = [];
37
+ const warnings = [];
38
+ const allMediaUrls = new Set();
39
+ const attachmentUrlById = new Map(attachments
40
+ .filter((item) => item.attachmentUrl !== null)
41
+ .map((item) => [item.postId, item.attachmentUrl]));
42
+ for (const url of attachmentUrlById.values())
43
+ allMediaUrls.add(url);
44
+ let commentCount = 0;
45
+ for (const item of [...posts, ...pages]) {
46
+ const kind = item.postType === 'post' ? 'post' : 'page';
47
+ if (item.status === 'trash') {
48
+ ignored.push({
49
+ type: kind,
50
+ wpId: item.postId,
51
+ title: item.title,
52
+ reason: 'Trashed in WordPress.',
53
+ });
54
+ continue;
55
+ }
56
+ if (!IMPORTABLE_STATUSES.has(item.status)) {
57
+ ignored.push({
58
+ type: kind,
59
+ wpId: item.postId,
60
+ title: item.title,
61
+ reason: `Unrecognised WordPress status "${item.status}".`,
62
+ });
63
+ continue;
64
+ }
65
+ const { blocks, notes } = convertContent(item.contentEncoded);
66
+ for (const url of mediaUrlsOf(blocks))
67
+ allMediaUrls.add(url);
68
+ const thumbnail = item.thumbnailId === null ? undefined : attachmentUrlById.get(item.thumbnailId);
69
+ if (thumbnail !== undefined)
70
+ allMediaUrls.add(thumbnail);
71
+ for (const note of notes) {
72
+ warnings.push(`"${item.title || item.postId}" — ${note.source}: ${note.reason} (kept as plain text).`);
73
+ }
74
+ for (const comment of item.comments) {
75
+ if (comment.approved === '1') {
76
+ commentCount += 1;
77
+ }
78
+ else {
79
+ ignored.push({
80
+ type: 'comment',
81
+ wpId: comment.id,
82
+ title: `Comment on "${item.title}"`,
83
+ reason: comment.approved === 'spam'
84
+ ? 'Marked as spam in WordPress.'
85
+ : 'Not yet approved in WordPress.',
86
+ });
87
+ }
88
+ }
89
+ }
90
+ if (parsed.authors.some((author) => author.email.trim().length === 0)) {
91
+ warnings.push('At least one author has no email in the export; a placeholder will be used.');
92
+ }
93
+ return {
94
+ counts: {
95
+ posts: posts.length,
96
+ pages: pages.length,
97
+ categories: parsed.categories.length,
98
+ tags: parsed.tags.length,
99
+ comments: commentCount,
100
+ attachments: attachments.length,
101
+ },
102
+ collectionMapping: { post: 'post', page: 'page' },
103
+ authors: parsed.authors.map((author) => ({ login: author.login, email: author.email })),
104
+ mediaUrls: [...allMediaUrls],
105
+ mediaCount: allMediaUrls.size,
106
+ slugConflicts: [...slugConflictsOf(posts, 'post'), ...slugConflictsOf(pages, 'page')],
107
+ ignored,
108
+ warnings,
109
+ };
110
+ }
111
+ //# sourceMappingURL=analyze.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"analyze.js","sourceRoot":"","sources":["../../src/wordpress/analyze.ts"],"names":[],"mappings":"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"}
@@ -1,10 +1,41 @@
1
+ import type { CommentStore } from '@cogenta/comments';
1
2
  import { type DatabaseHandle, type StorageDriver } from '@cogenta/core';
3
+ import type { ImportTrackingStore } from '../tracking.js';
2
4
  import { type ConversionReport } from './report.js';
3
5
  export interface ImportWordPressOptions {
4
6
  readonly db: DatabaseHandle;
5
7
  readonly storage: StorageDriver;
6
8
  /** Injected for tests — real `fetch` by default. */
7
9
  readonly fetchImpl?: typeof fetch;
10
+ /**
11
+ * Fiche 25 tasks 3-4: when both are given, every post/page/comment this
12
+ * apply writes is recorded against `runId` — what makes a second call with
13
+ * the same `runId` a **resume** (already-recorded WordPress ids are
14
+ * skipped rather than re-created) and what `undoImport` reads to trash
15
+ * everything a run produced. Categories, tags, media and authors are
16
+ * deliberately not tracked here: they are reference data a second import
17
+ * or the site's own editors may already depend on, so undo leaves them in
18
+ * place — the same choice WordPress's own "remove imported posts" tools
19
+ * make.
20
+ */
21
+ readonly tracking?: ImportTrackingStore;
22
+ readonly runId?: string;
23
+ /**
24
+ * Fiche 15 task 7 (ADR-0025): when given, every importable WordPress
25
+ * comment is written through contract F's own store — real status
26
+ * (approved/pending/spam/trash, from `wp:comment_approved`, not just the
27
+ * `'1'` this importer used to keep), real threading (`wp:comment_parent`),
28
+ * on both posts *and* pages (pages were silently skipped entirely before
29
+ * this option existed — a real, independent bug, not something this
30
+ * fiche introduced).
31
+ *
32
+ * Absent keeps the pre-fiche-15 behaviour: only approved (`'1'`) comments,
33
+ * only on posts, written into the synthetic `comment` collection
34
+ * (`collections.ts`'s `wpComment`) — kept for a caller that has not wired
35
+ * `@cogenta/comments` yet. A caller SHOULD pass this; `cogenta import
36
+ * wordpress` (the CLI) always does.
37
+ */
38
+ readonly comments?: CommentStore;
8
39
  }
9
40
  /**
10
41
  * Imports a WordPress "Export All Content" WXR file into Cogenta.
@@ -1 +1 @@
1
- {"version":3,"file":"import.d.ts","sourceRoot":"","sources":["../../src/wordpress/import.ts"],"names":[],"mappings":"AACA,OAAO,EAA4B,KAAK,cAAc,EAAE,KAAK,aAAa,EAAE,MAAM,eAAe,CAAA;AAwBjG,OAAO,EAAE,KAAK,gBAAgB,EAAqC,MAAM,aAAa,CAAA;AAGtF,MAAM,WAAW,sBAAsB;IACrC,QAAQ,CAAC,EAAE,EAAE,cAAc,CAAA;IAC3B,QAAQ,CAAC,OAAO,EAAE,aAAa,CAAA;IAC/B,oDAAoD;IACpD,QAAQ,CAAC,SAAS,CAAC,EAAE,OAAO,KAAK,CAAA;CAClC;AAyCD;;;;;;;;GAQG;AACH,wBAAsB,eAAe,CACnC,GAAG,EAAE,MAAM,EACX,OAAO,EAAE,sBAAsB,GAC9B,OAAO,CAAC,gBAAgB,CAAC,CA6O3B"}
1
+ {"version":3,"file":"import.d.ts","sourceRoot":"","sources":["../../src/wordpress/import.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAiB,YAAY,EAAE,MAAM,mBAAmB,CAAA;AACpE,OAAO,EAA4B,KAAK,cAAc,EAAE,KAAK,aAAa,EAAE,MAAM,eAAe,CAAA;AAOjG,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAA;AAkBzD,OAAO,EAAE,KAAK,gBAAgB,EAAqC,MAAM,aAAa,CAAA;AAGtF,MAAM,WAAW,sBAAsB;IACrC,QAAQ,CAAC,EAAE,EAAE,cAAc,CAAA;IAC3B,QAAQ,CAAC,OAAO,EAAE,aAAa,CAAA;IAC/B,oDAAoD;IACpD,QAAQ,CAAC,SAAS,CAAC,EAAE,OAAO,KAAK,CAAA;IACjC;;;;;;;;;;OAUG;IACH,QAAQ,CAAC,QAAQ,CAAC,EAAE,mBAAmB,CAAA;IACvC,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAA;IACvB;;;;;;;;;;;;;;OAcG;IACH,QAAQ,CAAC,QAAQ,CAAC,EAAE,YAAY,CAAA;CACjC;AAuED;;;;;;;;GAQG;AACH,wBAAsB,eAAe,CACnC,GAAG,EAAE,MAAM,EACX,OAAO,EAAE,sBAAsB,GAC9B,OAAO,CAAC,gBAAgB,CAAC,CAkb3B"}
@@ -6,6 +6,37 @@ import { convertContent, mediaUrlsOf, resolveMediaReferences, } from './content-
6
6
  import { downloadAndStoreMedia } from './media.js';
7
7
  import { parseWxr } from './parse.js';
8
8
  import { emptyReport } from './report.js';
9
+ /** `wp:comment_approved`'s four real values, mapped to contract F's own vocabulary. Anything else (WordPress has used `'hold'` too) degrades to `pending` rather than being silently dropped. */
10
+ function wpApprovedToStatus(approved) {
11
+ if (approved === '1')
12
+ return 'approved';
13
+ if (approved === 'spam')
14
+ return 'spam';
15
+ if (approved === 'trash')
16
+ return 'trash';
17
+ return 'pending';
18
+ }
19
+ /**
20
+ * WordPress's classic comment form allowed a small set of inline tags
21
+ * (`<a>`, `<em>`, `<strong>`, …) that contract F refuses outright (R3, first
22
+ * line of defense against stored XSS — `CommentStore.create` has no
23
+ * escape hatch for "a little HTML is fine"). Rather than drop such a
24
+ * comment, its markup is stripped to plain text and the loss is reported —
25
+ * the same "degrade and report, never lose silently" contract every other
26
+ * step of this importer already follows.
27
+ */
28
+ function stripHtmlToPlainText(html) {
29
+ return html
30
+ .replace(/<[^>]*>/gu, '')
31
+ .replace(/&nbsp;/giu, ' ')
32
+ .replace(/&amp;/giu, '&')
33
+ .replace(/&lt;/giu, '<')
34
+ .replace(/&gt;/giu, '>')
35
+ .replace(/&quot;/giu, '"')
36
+ .replace(/&#0?39;/giu, "'")
37
+ .replace(/\s+/gu, ' ')
38
+ .trim();
39
+ }
9
40
  const APPROVED = '1';
10
41
  const IMPORTABLE_STATUSES = new Set(['publish', 'draft', 'pending', 'private', 'future']);
11
42
  function wpDateToIso(wpDate) {
@@ -77,10 +108,22 @@ export async function importWordPress(xml, options) {
77
108
  }
78
109
  }
79
110
  // ---- Categories & tags ----------------------------------------------
111
+ // A resumed apply (task 3) re-parses the same WXR and reaches this loop
112
+ // again: `slug` is `unique`, so re-creating an already-imported category or
113
+ // tag would throw rather than silently duplicate. Looking it up by slug
114
+ // first makes this idempotent, the same property `recordItem` gives posts
115
+ // and pages via the tracking table — categories/tags have no source id of
116
+ // their own to track against, but their slug already is one.
80
117
  const categoryByNiceName = new Map();
81
118
  for (const category of parsed.categories) {
119
+ const slug = category.niceName;
120
+ const existing = await categoryStore.list({ where: { slug }, limit: 1 });
121
+ if (existing.items[0] !== undefined) {
122
+ categoryByNiceName.set(category.niceName, existing.items[0].id);
123
+ continue;
124
+ }
82
125
  const entry = await categoryStore.create({
83
- values: { name: category.name || category.niceName, slug: category.niceName },
126
+ values: { name: category.name || category.niceName, slug },
84
127
  status: 'published',
85
128
  });
86
129
  categoryByNiceName.set(category.niceName, entry.id);
@@ -88,16 +131,36 @@ export async function importWordPress(xml, options) {
88
131
  }
89
132
  const tagByNiceName = new Map();
90
133
  for (const tag of parsed.tags) {
134
+ const slug = tag.slug;
135
+ const existing = await tagStore.list({ where: { slug }, limit: 1 });
136
+ if (existing.items[0] !== undefined) {
137
+ tagByNiceName.set(tag.slug, existing.items[0].id);
138
+ continue;
139
+ }
91
140
  const entry = await tagStore.create({
92
- values: { name: tag.name || tag.slug, slug: tag.slug },
141
+ values: { name: tag.name || tag.slug, slug },
93
142
  status: 'published',
94
143
  });
95
144
  tagByNiceName.set(tag.slug, entry.id);
96
145
  acc.imported.tags += 1;
97
146
  }
147
+ // ---- Resume (task 3) -------------------------------------------------
148
+ // Entry ids are deterministic (`store.create({ id: item.postId, … })`
149
+ // below), so a WordPress id already recorded for this run was already
150
+ // written by an earlier, interrupted attempt. Filtering it out here — not
151
+ // merely skipping the write — is what also keeps its comments from being
152
+ // re-created: `commentStore.create` has no id of its own to dedupe on, so
153
+ // reaching that loop a second time for the same post would duplicate them.
154
+ const done = options.tracking !== undefined && options.runId !== undefined
155
+ ? await options.tracking.doneSourceIds(options.runId)
156
+ : new Set();
98
157
  // ---- Media --------------------------------------------------------
99
- const posts = parsed.items.filter((item) => item.postType === 'post');
100
- const pages = parsed.items.filter((item) => item.postType === 'page');
158
+ const posts = parsed.items
159
+ .filter((item) => item.postType === 'post')
160
+ .filter((item) => !done.has(item.postId));
161
+ const pages = parsed.items
162
+ .filter((item) => item.postType === 'page')
163
+ .filter((item) => !done.has(item.postId));
101
164
  const attachments = parsed.items.filter((item) => item.postType === 'attachment');
102
165
  const attachmentUrlById = new Map(attachments
103
166
  .filter((item) => item.attachmentUrl !== null)
@@ -203,14 +266,121 @@ export async function importWordPress(xml, options) {
203
266
  }
204
267
  return entry.id;
205
268
  }
269
+ // Posts and pages are recorded under their bare WordPress id, matching
270
+ // `done` above (which the resume filter checks the same id against);
271
+ // comments get a prefixed id since a comment id and a post id share the
272
+ // same small-integer namespace in a WXR export and would otherwise collide
273
+ // in the tracking table's `(run_id, source_id)` uniqueness.
274
+ async function record(kind, wpId, entryId) {
275
+ if (options.tracking === undefined || options.runId === undefined)
276
+ return;
277
+ await options.tracking.recordItem({
278
+ runId: options.runId,
279
+ sourceId: kind === 'comment' ? `comment:${wpId}` : wpId,
280
+ collection: kind === 'comment' ? wpComment.name : kind === 'post' ? wpPost.name : wpPage.name,
281
+ entryId,
282
+ });
283
+ }
284
+ /**
285
+ * All of one item's comments, real threading resolved before a reply is
286
+ * written (a reply needs its parent's *new* id, not its WordPress one).
287
+ * Processed in waves — every comment whose parent is already resolved (or
288
+ * top-level) goes this pass, repeat until nothing is left or nothing
289
+ * progressed. A WXR's own comments are almost always one level deep, so
290
+ * this is normally one or two waves; a comment whose parent never
291
+ * resolves (a broken export) is reported and imported top-level rather
292
+ * than dropped.
293
+ */
294
+ async function importCommentsForEntry(comments, entryCollection, entryId, itemTitle) {
295
+ const store = options.comments;
296
+ if (store === undefined || comments.length === 0)
297
+ return;
298
+ const byWpId = new Map(comments.map((comment) => [comment.id, comment]));
299
+ const resolvedId = new Map();
300
+ const pending = new Set(comments.map((comment) => comment.id));
301
+ while (pending.size > 0) {
302
+ let progressed = false;
303
+ for (const wpId of [...pending]) {
304
+ const comment = byWpId.get(wpId);
305
+ if (comment === undefined) {
306
+ pending.delete(wpId);
307
+ continue;
308
+ }
309
+ const wpParent = comment.parentId;
310
+ const topLevel = wpParent === '' || wpParent === '0';
311
+ const parentStillPending = !topLevel && !resolvedId.has(wpParent) && byWpId.has(wpParent);
312
+ if (parentStillPending) {
313
+ // Its parent is still in this same wave — try again next pass.
314
+ continue;
315
+ }
316
+ // A parent id that names no comment anywhere in this export (a
317
+ // broken export, or one the parser skipped) — imported top-level
318
+ // rather than dropped, and reported so the loss is visible.
319
+ const parentTrulyMissing = !topLevel && !resolvedId.has(wpParent) && !byWpId.has(wpParent);
320
+ if (parentTrulyMissing) {
321
+ acc.warnings.push(`Comment ${comment.id} on "${itemTitle}" replies to parent comment ${wpParent}, which does not exist in this export; imported as top-level instead.`);
322
+ }
323
+ const plainText = stripHtmlToPlainText(comment.content);
324
+ if (plainText !== comment.content.trim()) {
325
+ acc.warnings.push(`Comment ${comment.id} on "${itemTitle}" contained HTML, which contract F does not store (R3); it was reduced to plain text.`);
326
+ }
327
+ if (plainText.length === 0) {
328
+ acc.warnings.push(`Comment ${comment.id} on "${itemTitle}" had no text content once stripped; skipped.`);
329
+ pending.delete(wpId);
330
+ progressed = true;
331
+ continue;
332
+ }
333
+ const email = comment.authorEmail.trim().length > 0
334
+ ? comment.authorEmail.trim()
335
+ : `${(comment.author || 'anonymous')
336
+ .toLowerCase()
337
+ .replace(/[^a-z0-9]+/gu, '.')
338
+ .replace(/^\.+|\.+$/gu, '') || 'anonymous'}@imported.invalid`;
339
+ try {
340
+ const created = await store.create({
341
+ collection: entryCollection,
342
+ entryId,
343
+ parentId: topLevel ? null : (resolvedId.get(wpParent) ?? null),
344
+ author: { name: comment.author || 'Anonymous', email },
345
+ body: plainText,
346
+ status: wpApprovedToStatus(comment.approved),
347
+ provenance: 'human',
348
+ });
349
+ resolvedId.set(wpId, created.id);
350
+ acc.imported.comments += 1;
351
+ await record('comment', wpId, created.id);
352
+ }
353
+ catch (error) {
354
+ acc.warnings.push(`Comment ${comment.id} on "${itemTitle}" could not be imported: ${error instanceof Error ? error.message : String(error)}`);
355
+ }
356
+ pending.delete(wpId);
357
+ progressed = true;
358
+ }
359
+ if (!progressed)
360
+ break;
361
+ }
362
+ // Reachable only by a genuine cycle (A replies to B, B replies to A) —
363
+ // every other case above already resolved or reported its comment and
364
+ // removed it from `pending`. Skipped rather than imported top-level:
365
+ // unlike a missing parent, there is no honest single choice for which
366
+ // one to break the cycle at.
367
+ for (const wpId of pending) {
368
+ acc.warnings.push(`Comment ${wpId} on "${itemTitle}" is part of a reply cycle in the export and was skipped.`);
369
+ }
370
+ }
206
371
  for (const item of posts) {
207
372
  const id = await writeEntry(item, postStore, 'post');
208
373
  if (id !== null) {
209
374
  acc.imported.posts += 1;
375
+ await record('post', item.postId, id);
376
+ if (options.comments !== undefined) {
377
+ await importCommentsForEntry(item.comments, wpPost.name, id, item.title);
378
+ continue;
379
+ }
210
380
  for (const comment of item.comments) {
211
381
  if (comment.approved !== APPROVED)
212
382
  continue;
213
- await commentStore.create({
383
+ const createdComment = await commentStore.create({
214
384
  status: 'published',
215
385
  values: {
216
386
  post: id,
@@ -221,13 +391,36 @@ export async function importWordPress(xml, options) {
221
391
  },
222
392
  });
223
393
  acc.imported.comments += 1;
394
+ await record('comment', comment.id, createdComment.id);
224
395
  }
225
396
  }
226
397
  }
227
398
  for (const item of pages) {
228
399
  const id = await writeEntry(item, pageStore, 'page');
229
- if (id !== null)
400
+ if (id !== null) {
230
401
  acc.imported.pages += 1;
402
+ await record('page', item.postId, id);
403
+ // A real, independent bug (fiche 15 task 7's own instruction to check
404
+ // what this importer does today): WordPress allows comments on a
405
+ // page exactly as it does on a post, and this loop never imported a
406
+ // single one. Fixed here for the real store path. The legacy
407
+ // synthetic `comment` collection (`collections.ts`'s `wpComment`)
408
+ // cannot be fixed the same way: its `post` field is a hard `relation`
409
+ // to the `post` collection specifically (contract A, `onDelete:
410
+ // 'cascade'`), so writing a page's id there is not a bug fix, it is a
411
+ // foreign-key violation waiting to happen — the real reason to prefer
412
+ // the `comments` option instead of extending a model that was never
413
+ // built to hold this.
414
+ if (options.comments !== undefined) {
415
+ await importCommentsForEntry(item.comments, wpPage.name, id, item.title);
416
+ }
417
+ else if (item.comments.length > 0) {
418
+ acc.warnings.push(`"${item.title}" has ${item.comments.length} comment(s) that were not imported: the legacy comment model only supports comments on posts. Pass a \`comments\` store to import them.`);
419
+ }
420
+ }
421
+ }
422
+ if (options.tracking !== undefined && options.runId !== undefined && done.size > 0) {
423
+ acc.warnings.push(`Resumed: ${done.size} item(s) already imported by an earlier attempt of this run were not re-created.`);
231
424
  }
232
425
  const skipped = acc.skipped;
233
426
  return {
@@ -1 +1 @@
1
- {"version":3,"file":"import.js","sourceRoot":"","sources":["../../src/wordpress/import.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"import.js","sourceRoot":"","sources":["../../src/wordpress/import.ts"],"names":[],"mappings":"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"}
@@ -1,3 +1,4 @@
1
+ import { lookup } from 'node:dns/promises';
1
2
  import type { MediaAsset, MediaStore, StorageDriver } from '@cogenta/core';
2
3
  export interface MediaDownloadFailure {
3
4
  readonly url: string;
@@ -14,6 +15,8 @@ export interface DownloadAndStoreMediaOptions {
14
15
  readonly createdBy: string | null;
15
16
  /** Injected for tests — real `fetch` by default. */
16
17
  readonly fetchImpl?: typeof fetch;
18
+ /** Injected for tests — real `dns.lookup` by default. */
19
+ readonly lookupImpl?: typeof lookup;
17
20
  }
18
21
  /**
19
22
  * Downloads every distinct media URL a WXR import references and stores it
@@ -1 +1 @@
1
- {"version":3,"file":"media.d.ts","sourceRoot":"","sources":["../../src/wordpress/media.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAoB,UAAU,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,eAAe,CAAA;AAE5F,MAAM,WAAW,oBAAoB;IACnC,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAA;IACpB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;CACxB;AAED,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,YAAY,EAAE,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAClD,QAAQ,CAAC,QAAQ,EAAE,SAAS,UAAU,EAAE,CAAA;IACxC,QAAQ,CAAC,MAAM,EAAE,SAAS,oBAAoB,EAAE,CAAA;CACjD;AAED,MAAM,WAAW,4BAA4B;IAC3C,QAAQ,CAAC,UAAU,EAAE,UAAU,CAAA;IAC/B,QAAQ,CAAC,OAAO,EAAE,aAAa,CAAA;IAC/B,QAAQ,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAAA;IACjC,oDAAoD;IACpD,QAAQ,CAAC,SAAS,CAAC,EAAE,OAAO,KAAK,CAAA;CAClC;AAmBD;;;;;;;GAOG;AACH,wBAAsB,qBAAqB,CACzC,IAAI,EAAE,SAAS,MAAM,EAAE,EACvB,OAAO,EAAE,4BAA4B,GACpC,OAAO,CAAC,iBAAiB,CAAC,CA2C5B"}
1
+ {"version":3,"file":"media.d.ts","sourceRoot":"","sources":["../../src/wordpress/media.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAA;AAE1C,OAAO,KAAK,EAAoB,UAAU,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,eAAe,CAAA;AAG5F,MAAM,WAAW,oBAAoB;IACnC,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAA;IACpB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;CACxB;AAED,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,YAAY,EAAE,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAClD,QAAQ,CAAC,QAAQ,EAAE,SAAS,UAAU,EAAE,CAAA;IACxC,QAAQ,CAAC,MAAM,EAAE,SAAS,oBAAoB,EAAE,CAAA;CACjD;AAYD,MAAM,WAAW,4BAA4B;IAC3C,QAAQ,CAAC,UAAU,EAAE,UAAU,CAAA;IAC/B,QAAQ,CAAC,OAAO,EAAE,aAAa,CAAA;IAC/B,QAAQ,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAAA;IACjC,oDAAoD;IACpD,QAAQ,CAAC,SAAS,CAAC,EAAE,OAAO,KAAK,CAAA;IACjC,yDAAyD;IACzD,QAAQ,CAAC,UAAU,CAAC,EAAE,OAAO,MAAM,CAAA;CACpC;AAmBD;;;;;;;GAOG;AACH,wBAAsB,qBAAqB,CACzC,IAAI,EAAE,SAAS,MAAM,EAAE,EACvB,OAAO,EAAE,4BAA4B,GACpC,OAAO,CAAC,iBAAiB,CAAC,CAwE5B"}
@@ -1,4 +1,15 @@
1
+ import { lookup } from 'node:dns/promises';
1
2
  import { basename } from 'node:path';
3
+ import { assertPublicUrl } from '../ssrf.js';
4
+ /**
5
+ * Caps on the outbound side of an import (pièges connus: SSRF, and a
6
+ * multi-gigabyte "media" response tying up the process). Both are limits a
7
+ * real WordPress export can comfortably stay under; a file or count beyond
8
+ * them is reported as a failure per item, never a reason to abort the run.
9
+ */
10
+ const MAX_MEDIA_BYTES = 50 * 1024 * 1024;
11
+ const MAX_MEDIA_ITEMS = 5000;
12
+ const FETCH_TIMEOUT_MS = 15_000;
2
13
  function filenameFrom(url) {
3
14
  try {
4
15
  const path = new URL(url).pathname;
@@ -31,15 +42,41 @@ export async function downloadAndStoreMedia(urls, options) {
31
42
  const urlToMediaId = new Map();
32
43
  const imported = [];
33
44
  const failed = [];
34
- for (const url of new Set(urls)) {
45
+ const distinct = [...new Set(urls)];
46
+ const overflow = distinct.slice(MAX_MEDIA_ITEMS);
47
+ for (const url of overflow) {
48
+ failed.push({
49
+ url,
50
+ reason: `More than ${MAX_MEDIA_ITEMS} distinct media URLs; this one was not fetched.`,
51
+ });
52
+ }
53
+ for (const url of distinct.slice(0, MAX_MEDIA_ITEMS)) {
35
54
  try {
36
- const response = await doFetch(url);
55
+ await assertPublicUrl(url, { lookupImpl: options.lookupImpl ?? lookup });
56
+ const controller = new AbortController();
57
+ const timeout = setTimeout(() => controller.abort(), FETCH_TIMEOUT_MS);
58
+ let response;
59
+ try {
60
+ response = await doFetch(url, { signal: controller.signal });
61
+ }
62
+ finally {
63
+ clearTimeout(timeout);
64
+ }
37
65
  if (!response.ok) {
38
66
  failed.push({ url, reason: `HTTP ${response.status}` });
39
67
  continue;
40
68
  }
69
+ const declaredLength = Number(response.headers.get('content-length') ?? '');
70
+ if (Number.isFinite(declaredLength) && declaredLength > MAX_MEDIA_BYTES) {
71
+ failed.push({ url, reason: `Larger than the ${MAX_MEDIA_BYTES} byte limit.` });
72
+ continue;
73
+ }
41
74
  const mimeType = response.headers.get('content-type')?.split(';')[0]?.trim() ?? 'application/octet-stream';
42
75
  const buffer = Buffer.from(await response.arrayBuffer());
76
+ if (buffer.byteLength > MAX_MEDIA_BYTES) {
77
+ failed.push({ url, reason: `Larger than the ${MAX_MEDIA_BYTES} byte limit.` });
78
+ continue;
79
+ }
43
80
  const filename = filenameFrom(url);
44
81
  const storageKey = `imports/wordpress/${Date.now()}-${Math.random().toString(36).slice(2)}-${filename}`;
45
82
  await options.storage.put(storageKey, buffer, { contentType: mimeType });
@@ -1 +1 @@
1
- {"version":3,"file":"media.js","sourceRoot":"","sources":["../../src/wordpress/media.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"media.js","sourceRoot":"","sources":["../../src/wordpress/media.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@cogenta/import",
3
- "version": "0.1.4",
3
+ "version": "0.2.2",
4
4
  "description": "Importers that bring content from another CMS into Cogenta, starting with WordPress WXR.",
5
5
  "license": "MPL-2.0",
6
6
  "type": "module",
@@ -27,10 +27,11 @@
27
27
  "directory": "packages/import"
28
28
  },
29
29
  "dependencies": {
30
- "@cogenta/core": "0.4.0",
31
- "@cogenta/schema": "0.3.0",
32
- "@cogenta/auth": "0.3.0",
33
- "@cogenta/blocks": "0.1.4"
30
+ "@cogenta/blocks": "1.0.2",
31
+ "@cogenta/core": "0.7.0",
32
+ "@cogenta/auth": "0.5.1",
33
+ "@cogenta/schema": "0.5.0",
34
+ "@cogenta/comments": "0.2.2"
34
35
  },
35
36
  "devDependencies": {
36
37
  "typescript": "^7.0.2",