class ActiveStorage::Service::GCSService

def url_for_direct_upload(key, expires_in:, checksum:, custom_metadata: {}, **)

def url_for_direct_upload(key, expires_in:, checksum:, custom_metadata: {}, **)
  instrument :url, key: key do |payload|
    headers = {}
    version = :v2
    if @config[:cache_control].present?
      headers["Cache-Control"] = @config[:cache_control]
      # v2 signing doesn't support non `x-goog-` headers. Only switch to v4 signing
      # if necessary for back-compat; v4 limits the expiration of the URL to 7 days
      # whereas v2 has no limit
      version = :v4
    end
    headers.merge!(custom_metadata_headers(custom_metadata))
    args = {
      content_md5: checksum,
      expires: expires_in,
      headers: headers,
      method: "PUT",
      version: version,
    }
    if @config[:iam]
      args[:issuer] = issuer
      args[:signer] = signer
    end
    generated_url = bucket.signed_url(key, **args)
    payload[:url] = generated_url
    generated_url
  end
end