gitroomhq/postiz-app · error · BadBody

'checkPostStatus is not implemented for this provider'

Error message

'checkPostStatus is not implemented for this provider'

What it means

Base-method stub on the social integration abstract class: checkPostStatus is an optional provider capability (polling an async publish, e.g. uploading to a channel that returns a pending id). Providers that don't override it throw BadBody with this message.

Source

Thrown at libraries/nestjs-libraries/src/integrations/social.abstract.ts:186

    return true;
  }

  /**
   * Providers that return a `pending` PostResponse from `post` / `comment` must
   * override this with a single, read-only status check (no loops, no timers) -
   * the polling loop lives in the post workflow, where a retry is harmless.
   *
   * The defaults throw so a provider that returns `pending` without overriding
   * fails loudly on the first test post instead of silently completing with a
   * bogus releaseURL. They are unreachable for providers that never return
   * `pending`.
   */
  public async checkPostStatus(
    accessToken: string,
    pendingData: any,
    integration: Integration
  ): Promise<PendingCheckResponse> {
    throw new BadBody(
      this.identifier,
      '{}',
      '{}',
      'checkPostStatus is not implemented for this provider'
    );
  }

  /** Runs the mutations left after `checkPostStatus` returns `ready`. Same contract as `checkPostStatus`. */
  public async finalizePost(
    accessToken: string,
    pendingData: any,
    integration: Integration
  ): Promise<PendingCheckResponse> {
    throw new BadBody(
      this.identifier,
      '{}',
      '{}',
      'finalizePost is not implemented for this provider'

View on GitHub (pinned to 0f1647f749)

Solutions

  1. In the provider's integration class, override checkPostStatus(accessToken, pendingData, integration) returning a PendingCheckResponse ({ state, data })
  2. If the provider publishes synchronously, ensure the publisher does not mark the post PENDING so polling is never triggered
  3. Update the calling workflow/activity to skip polling for providers without this capability

Example fix

// before
class FooProvider extends SocialAbstract {
  // no checkPostStatus
}
// after
class FooProvider extends SocialAbstract {
  public async checkPostStatus(accessToken: string, pendingData: any, integration: Integration): Promise<PendingCheckResponse> {
    const res = await fetch(`https://api.foo.com/status/${pendingData.id}`, { headers: { Authorization: `Bearer ${accessToken}` } });
    const json = await res.json();
    return { state: json.ready ? 'ready' : 'pending', data: json };
  }
}
Defensive patterns

Strategy: type-guard

Validate before calling

if (!('checkPostStatus' in providerInstance) || providerInstance.checkPostStatus === SocialAbstract.prototype.checkPostStatus) {
  // provider does not support pending polling; avoid marking post PENDING
}

Type guard

const supportsPendingCheck = (p: SocialAbstract): boolean =>
  p.checkPostStatus !== SocialAbstract.prototype.checkPostStatus;

Try / catch

try {
  await provider.checkPostStatus(token, pendingData, integration);
} catch (e) {
  if (/checkPostStatus is not implemented/.test(String(e?.message ?? e))) {
    // treat as publish-complete or skip polling for this provider
  } else throw e;
}

Prevention

When it happens

Trigger: The generic pending-post polling flow calling checkPostStatus on a provider whose integration class never implemented the method — e.g. a newly added provider or one with synchronous publishing only.

Common situations: See trigger scenarios.

Related errors


AI-assisted analysis of gitroomhq/postiz-app@0f1647f749 (2026-08-27). Data as JSON: /api/errors/ae8c7d3c7ef25bc3. Report an issue: GitHub.