api_key = $api_key; $this->did = $did; } public function create_post($post_data) { $headers = array( 'Authorization' => 'Bearer ' . $this->api_key, 'Content-Type' => 'application/json', ); $response = wp_remote_post($this->api_url . '/com.atproto.repo.createRecord', array( 'headers' => $headers, 'body' => json_encode(array( 'repo' => $this->did, 'collection' => 'app.bsky.feed.post', 'record' => $post_data, )), )); if (is_wp_error($response)) { return array('error' => $response->get_error_message()); } return json_decode(wp_remote_retrieve_body($response), true); } public function resolve_handle($handle) { $response = wp_remote_get($this->api_url . '/com.atproto.identity.resolveHandle', array( 'query' => array( 'handle' => $handle, ), )); if (is_wp_error($response)) { return array('error' => $response->get_error_message()); } return json_decode(wp_remote_retrieve_body($response), true); } public function upload_blob($file_path, $mime_type) { $headers = array( 'Authorization' => 'Bearer ' . $this->api_key, 'Content-Type' => $mime_type, ); $file_contents = file_get_contents($file_path); if ($file_contents === false) { return array('error' => 'Failed to read file.'); } $response = wp_remote_post($this->api_url . '/com.atproto.repo.uploadBlob', array( 'headers' => $headers, 'body' => $file_contents, )); if (is_wp_error($response)) { return array('error' => $response->get_error_message()); } return json_decode(wp_remote_retrieve_body($response), true); } }