Migration API: Cannot find repository

I'm migrating a bunch of documents to Prismic. It's running great until a certain point. It keeps getting stuck at the 12th document with the error:

Prismic repository not found. Check that "https://ingenuity-group.cdn.prismic.io/api/v2" is pointing to the correct repository.

Up to that point everything is fine and I can see the documents in the Migration release section on the Prismic dashboard. Attached is the server output from the migrate reporter which is updated every ~1 second as per the throttling on the migration endpoint.

I'm using Nuxt 3.15.4 on Node 20 and carrying out the migration via a POST request to a Nuxt server endpoint (using Nitro/H3) at /api/prismic/migrate. I'm using @nuxtjs/prismic v4.0.1

Below is the current state of my migration script:

import * as prismic from "@prismicio/client";

const communitiesUids = [
  "the-pr-link",
  "cmo-of-the-future",
  "partnerships-connected",
  "the-marketing-procurement-club",
];

export default defineEventHandler(async (event) => {
  console.log("Prismic migration endpoint");

  const { prismicWriteToken } = useRuntimeConfig();

  const contentHubClient = prismic.createClient("ingenuity-london-content-hub");

  const groupClient = prismic.createWriteClient("ingenuity-group", {
    writeToken: prismicWriteToken,
  });

  const migration = prismic.createMigration();

  const communityCategoryResponse = await contentHubClient.getAllByType(
    "category",
    {
      filters: [prismic.filter.any("my.category.uid", communitiesUids)],
    },
  );

  const communityCategoryIds = communityCategoryResponse.map(
    (category) => category.id,
  );

  // 78 documents returned
  const documentsFromPrismic = await contentHubClient.getAllByType("article", {
    filters: [prismic.filter.any("my.article.category", communityCategoryIds)],
  });

  console.log(
    documentsFromPrismic.length + " community articles being migrated...",
  );

  let i = 0;

  documentsFromPrismic.forEach((documentFromPrismic, index) => {
    if (index === 18) {
      console.log("This one fails:", documentFromPrismic.uid);
    }

    // Currently the 19th document asset upload fails so cutting it here for now
    if (index > 17) return;

    const articleImageUrl = new URL(documentFromPrismic.data.article_image.url);
    const articleImage = migration.createAsset(
      articleImageUrl.origin + "/" + articleImageUrl.pathname,
      articleImageUrl.pathname,
      {
        alt: documentFromPrismic.data.article_image.alt as string | undefined,
        credits: documentFromPrismic.data.article_image.copyright as
          | string
          | undefined,
        tags: ["Content Hub"],
      },
    );

    migration.createDocument(
      {
        type: "article",
        uid: documentFromPrismic.uid,
        lang: documentFromPrismic.lang,
        tags: ["Content Hub"],
        data: {
          article_title: documentFromPrismic.data.article_title,
          article_type: documentFromPrismic.data.article_type,
          article_summary: documentFromPrismic.data.article_summary,
          displayed_publish_date:
            documentFromPrismic.data.displayed_publish_date,
          article_video: documentFromPrismic.data.article_video,
          requires_subscription: documentFromPrismic.data.requires_subscription,
          locked_content: documentFromPrismic.data.locked_content,
          article_image: {
            id: articleImage,
            card_image: articleImage,
            main_high_res: articleImage,
            social_image: articleImage,
          },
          category: async () => {
            if (
              !documentFromPrismic.data.category.uid ||
              communitiesUids.includes(documentFromPrismic.data.category.uid)
            )
              return;

            return await groupClient.getByUID(
              "category",
              documentFromPrismic.data.category.uid,
            );
          },
          community: async () => {
            if (
              !documentFromPrismic.data.category.uid ||
              !communitiesUids.includes(documentFromPrismic.data.category.uid)
            )
              return;

            return await groupClient.getByUID(
              "community",
              documentFromPrismic.data.category.uid,
            );
          },
          slices: documentFromPrismic.data.body
            .map((slice) => {
              if (slice.slice_type === "content_block") {
                return {
                  slice_type: "content_block",
                  variation: "default",
                  primary: {
                    content: slice.primary.content,
                  },
                  items: [],
                };
              }
            })
            .filter(Boolean),
        },
      },
      documentFromPrismic.data.article_title,
    );

    i++;
  });

  console.log(i + " articles prepped for migration.");

  let migratedDocs = 0;

  try {
    const result = await groupClient.migrate(migration, {
      reporter: (event) => {
        console.log(event);
        migratedDocs++;
      },
    });

    console.log("result", result);
  } catch (e) {
    console.log("e", e);
    return e;
  }

  return migratedDocs + " articles migrated.";
});

I managed to find the source of this issue being that there were 'Featured images' nested within rich text areas from documents I was migrating from one Prismic repo to another that didn't have a migrated asset created for them which triggered the error.

Visibility on the issue was only obvious after deploying to Vercel and checking the server logs there which logged more useful information with the following:

RepositoryNotFoundError: Prismic repository not found. Check that "https://ingenuity-group.cdn.prismic.io/api/v2" is pointing to the correct repository.
    at WriteClient.fetch (file:///var/task/node_modules/@prismicio/client/dist/Client.js:1221:17)
    at process.processTicksAndRejections (node:internal/process/task_queues:105:5)
    at async WriteClient.updateDocument (file:///var/task/node_modules/@prismicio/client/dist/WriteClient.js:437:5)
    at async WriteClient.migrateUpdateDocuments (file:///var/task/node_modules/@prismicio/client/dist/WriteClient.js:224:7)
    at async WriteClient.migrate (file:///var/task/node_modules/@prismicio/client/dist/WriteClient.js:76:5)
    at async Object.handler (file:///var/task/chunks/routes/api/prismic/migrate.post.mjs:145:20)
    at async Object.handler (file:///var/task/chunks/nitro/nitro.mjs:3149:19)
    at async toNodeHandle (file:///var/task/chunks/nitro/nitro.mjs:3420:7)
    at async Server.<anonymous> (/opt/rust/nodejs.js:16:5674) {
  **url: 'https://migration.prismic.io/documents/Z77vWxEAACYArxGG',**
**  response: 'Assets with following ids not found: Za5LHhYAADEAe-NW,Za5LHhYAADEAe-NX'**
}

I removed the rich text featured images from the Prismic document I was migrating as current documentation has solutions for parsing HTML into Rich text and assigning images that way rather than documentation for parsing rich text to rich text and creating assets that way. Docs for that here. I'm going to have to add those back in manually it seems for now though.

1 Like

Hi @gpk,

Thanks for posting the resolution to your problem and well done on figuring it out, I'm sure it'll help other users running into this issue and helps with our documentation :slight_smile:

1 Like