{"record":{"id":"ae8c7d3c7ef25bc3","repo":"gitroomhq/postiz-app","slug":"checkpoststatus-is-not-implemented-for-this-provi","errorCode":null,"errorMessage":"'checkPostStatus is not implemented for this provider'","messagePattern":"'checkPostStatus is not implemented for this provider'","errorType":"exception","errorClass":"BadBody","httpStatus":null,"severity":"error","filePath":"libraries/nestjs-libraries/src/integrations/social.abstract.ts","lineNumber":186,"sourceCode":"    return true;\n  }\n\n  /**\n   * Providers that return a `pending` PostResponse from `post` / `comment` must\n   * override this with a single, read-only status check (no loops, no timers) -\n   * the polling loop lives in the post workflow, where a retry is harmless.\n   *\n   * The defaults throw so a provider that returns `pending` without overriding\n   * fails loudly on the first test post instead of silently completing with a\n   * bogus releaseURL. They are unreachable for providers that never return\n   * `pending`.\n   */\n  public async checkPostStatus(\n    accessToken: string,\n    pendingData: any,\n    integration: Integration\n  ): Promise<PendingCheckResponse> {\n    throw new BadBody(\n      this.identifier,\n      '{}',\n      '{}',\n      'checkPostStatus is not implemented for this provider'\n    );\n  }\n\n  /** Runs the mutations left after `checkPostStatus` returns `ready`. Same contract as `checkPostStatus`. */\n  public async finalizePost(\n    accessToken: string,\n    pendingData: any,\n    integration: Integration\n  ): Promise<PendingCheckResponse> {\n    throw new BadBody(\n      this.identifier,\n      '{}',\n      '{}',\n      'finalizePost is not implemented for this provider'","sourceCodeStart":168,"sourceCodeEnd":204,"githubUrl":"https://github.com/gitroomhq/postiz-app/blob/0f1647f7491a217d43eb5ae7a480484bdf0aff3e/libraries/nestjs-libraries/src/integrations/social.abstract.ts#L168-L204","documentation":"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.","triggerScenarios":"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.","commonSituations":"See trigger scenarios.","solutions":["In the provider's integration class, override checkPostStatus(accessToken, pendingData, integration) returning a PendingCheckResponse ({ state, data })","If the provider publishes synchronously, ensure the publisher does not mark the post PENDING so polling is never triggered","Update the calling workflow/activity to skip polling for providers without this capability"],"exampleFix":"// before\nclass FooProvider extends SocialAbstract {\n  // no checkPostStatus\n}\n// after\nclass FooProvider extends SocialAbstract {\n  public async checkPostStatus(accessToken: string, pendingData: any, integration: Integration): Promise<PendingCheckResponse> {\n    const res = await fetch(`https://api.foo.com/status/${pendingData.id}`, { headers: { Authorization: `Bearer ${accessToken}` } });\n    const json = await res.json();\n    return { state: json.ready ? 'ready' : 'pending', data: json };\n  }\n}","handlingStrategy":"type-guard","validationCode":"if (!('checkPostStatus' in providerInstance) || providerInstance.checkPostStatus === SocialAbstract.prototype.checkPostStatus) {\n  // provider does not support pending polling; avoid marking post PENDING\n}","typeGuard":"const supportsPendingCheck = (p: SocialAbstract): boolean =>\n  p.checkPostStatus !== SocialAbstract.prototype.checkPostStatus;","tryCatchPattern":"try {\n  await provider.checkPostStatus(token, pendingData, integration);\n} catch (e) {\n  if (/checkPostStatus is not implemented/.test(String(e?.message ?? e))) {\n    // treat as publish-complete or skip polling for this provider\n  } else throw e;\n}","preventionTips":["Implement checkPostStatus whenever a provider publish can return a pending id","In generic workflows, gate polling on the provider capability check"],"tags":["integrations","provider","not-implemented","polling","abstract-method"],"backgroundTag":"unimplemented-abstract-method","analyzedSha":"0f1647f7491a217d43eb5ae7a480484bdf0aff3e","analyzedAt":"2026-08-27T12:09:55.020Z","schemaVersion":2},"datasetVersion":"2026-08-27T13:17:12.746Z"}