jackwener/OpenCLI · error · CommandExecutionError

Instagram reel share confirmation did not appear

Error message

Instagram reel share confirmation did not appear

What it means

After sharing, waitForPublishSuccess polls the page for up to 120 seconds looking for the success state (post URL or confirmation) via buildReelPublishStatusProbeJs(). If no failure is detected but the success/settled confirmation never appears within the timeout, the library throws this error — the share outcome is unknown/unfinished.

Source

Thrown at clis/instagram/reel.js:628

        const result = await page.evaluate(buildReelPublishStatusProbeJs());
        if (result?.failed) {
            throw new CommandExecutionError('Instagram reel share failed');
        }
        if (result?.ok) {
            return result.url || '';
        }
        if (result?.settled) {
            settledStreak += 1;
            if (settledStreak >= 3)
                return '';
        }
        else {
            settledStreak = 0;
        }
        if (attempt < 119)
            await page.wait({ time: 1 });
    }
    throw new CommandExecutionError('Instagram reel share confirmation did not appear');
}
async function resolveProfileUrl(page, currentUserId = '') {
    if (currentUserId) {
        const runtimeInfo = await resolveInstagramRuntimeInfo(page);
        const apiResult = await page.evaluate(`
      (async () => {
        const userId = ${JSON.stringify(currentUserId)};
        const appId = ${JSON.stringify(runtimeInfo.appId || '')};
        try {
          const res = await fetch(
            'https://www.instagram.com/api/v1/users/' + encodeURIComponent(userId) + '/info/',
            {
              credentials: 'include',
              headers: appId ? { 'X-IG-App-ID': appId } : {},
            },
          );
          if (!res.ok) return { ok: false };
          const data = await res.json();

View on GitHub (pinned to 49907e53dc)

Solutions

  1. Simply check the profile in the Instagram app/web — the reel often did publish and only the confirmation detection timed out.
  2. Retry after confirming the reel is not a duplicate, since a blind retry can post it twice.
  3. Increase headroom: use a smaller/faster-encoded video so processing finishes within the 120s poll window.
  4. Update the library if Instagram changed the success-confirmation markup so the probe can detect it again.

Example fix

// before
// 250MB 3-minute video -> publish exceeds 120s poll window
// after
// re-encode to <100MB, <=90s, 1080x1920 so Instagram processing finishes well inside the timeout
Defensive patterns

Strategy: try-catch

Validate before calling

// keep uploads small enough that Instagram processing fits the confirmation window
import { statSync } from 'node:fs';
if (statSync(videoPath).size > 100 * 1024 * 1024) {
  throw new Error('Re-encode: file too large to publish within confirmation window');
}

Type guard

null

Try / catch

try {
  await client.shareReel({ videoPath, caption });
} catch (err) {
  if (String(err.message).includes('confirmation did not appear')) {
    // outcome unknown: verify on the profile before retrying to avoid duplicates
    const published = await checkProfileForRecentReel(client);
    if (!published) await client.shareReel({ videoPath, caption });
  } else throw err;
}

Prevention

When it happens

Trigger: 120 probe attempts pass with result neither ok, failed, nor persistently settled — e.g. the dialog stays in a processing state forever, the page navigated somewhere the probe doesn't understand, or the success UI never rendered.

Common situations: Very large/slow uploads exceeding the 2-minute window, Instagram stuck 'Processing...' spinner, a DOM change so the probe no longer recognizes the success confirmation, or the tab navigated away mid-publish (probe evaluates against a different document).

Related errors


AI-assisted analysis of jackwener/OpenCLI@49907e53dc (2026-08-29). Data as JSON: /api/errors/79837977d37da1b1. Report an issue: GitHub.