# frozen_string_literal: true module PlatformSdk module Bynder class Client attr_reader :access_token, :base_url, :conn INTEGRATION_ID = "b242c16d-70f4-4101-8df5-87b35bbe56f0" # Wordpress integration id def initialize(base_url, access_token, conn: nil) @access_token = access_token @base_url = base_url @conn = conn || build_connection end def assets(query_params = {}) resource_path = "/api/v4/media" response = get(resource_path, query_params) response.body end def asset(asset_id) resource_path = "/api/v4/media" response = get(resource_path, { id: asset_id }) response.body end def create_asset_usage(asset_id, uri, integration_id: INTEGRATION_ID) resource_path = "/api/media/usage" body = { integration_id:, asset_id:, uri: } response = post(resource_path, body.to_json) response.body end def remove_asset_usage(asset_id, uri, integration_id: INTEGRATION_ID) resource_path = "/api/media/usage" response = delete(resource_path, { integration_id:, asset_id:, uri: }) response.body end private def build_connection Faraday.new(@base_url) do |faraday| faraday.request(:retry, retry_options) faraday.headers = default_headers faraday.adapter Faraday.default_adapter faraday.response :json, content_type: /\bjson$/, parser_options: { symbolize_names: true } faraday.response :raise_error end end def retry_options { max: 3, interval: 0.05, interval_randomness: 0.5, backoff_factor: 2, exceptions: [Faraday::ServerError] } end def default_headers { "Content-Type" => "application/json", "Authorization" => "Bearer #{access_token}" } end def get(path, params = {}) @conn.get(path, params) end def post(path, body) @conn.post(path, body) end def delete(path, params = {}) @conn.delete(path, params) end end end end