type === 'reddit'; } public function publish(Post $post): PublishResult { if (! $post->title) { return PublishResult::rejected("Post {$post->id} has no title, required for a Reddit post."); } if (! $post->target) { return PublishResult::rejected("Post {$post->id} has no target subreddit set."); } $account = $post->socialAccount; if (! $account || $account->network !== 'reddit') { return PublishResult::rejected("Post {$post->id} has no linked Reddit social account."); } $result = Process::timeout(120)->run([ base_path('sidecars/reddit-post/run.sh'), "--username={$account->username}", "--password={$account->password}", "--subreddit={$post->target}", "--title={$post->title}", "--body={$post->body}", ]); $data = json_decode(trim($result->output()), true); if (! is_array($data) || ! array_key_exists('success', $data)) { Log::error('reddit sidecar returned unparseable output', [ 'post_id' => $post->id, 'output' => $result->output(), 'stderr' => $result->errorOutput(), ]); return PublishResult::failed('Reddit sidecar returned unparseable output — check logs.'); } if (! $data['success']) { return PublishResult::failed($data['error'] ?? 'unknown Reddit sidecar failure'); } return PublishResult::success($data['url']); } }