File: /home/globfdxw/public_html/wp-content/plugins/wpforms-pdf/src/API/Http/Request.php
<?php
// phpcs:ignore Generic.Commenting.DocComment.MissingShort
/** @noinspection PhpUnusedAliasInspection */
namespace WPFormsPDF\API\Http;
use WPFormsPDF\API\Http\Response;
/**
* Request class.
*
* @since 1.0.0
*/
class Request {
/**
* API base URL.
*
* @since 1.0.0
*/
private const BASE_URL = 'https://wpformsapi.com/pdf/v1';
/**
* Request timeout.
*
* @since 1.0.0
*/
public const TIMEOUT = 30;
/**
* Send a POST request.
*
* @since 1.0.0
*
* @param string $endpoint Endpoint to request.
* @param array $args Request arguments.
*
* @return Response Response from the API.
*/
public function post( string $endpoint, array $args = [] ): Response {
return $this->request( 'POST', $endpoint, $args );
}
/**
* Make a request to the API.
*
* @since 1.0.0
*
* @param string $method Request method.
* @param string $endpoint Endpoint to request.
* @param array $args Arguments to send.
*
* @return Response Response from the API.
* @noinspection PhpSameParameterValueInspection
*/
private function request( string $method, string $endpoint, array $args ): Response {
$options = [
'method' => $method,
'headers' => $this->get_headers(),
'timeout' => $this->get_timeout(),
'body' => wp_json_encode( $args ),
];
$url = $this->get_request_base_url() . $endpoint;
// Log API request in debug mode.
wpforms_pdf()->helpers->log(
[
'message' => 'API request',
'url' => $url,
'options' => $options,
'args' => $args,
],
'debug'
);
return new Response( wp_safe_remote_request( $url, $options ) );
}
/**
* Get PDF API request URL.
*
* @since 1.0.0
*
* @return string
*/
public function get_request_base_url(): string {
/**
* Filter PDF API request base URL.
*
* @since 1.0.0
*
* @param string $url API request URL.
*/
return (string) apply_filters( 'wpforms_pdfapi_http_request_base_url', self::BASE_URL );
}
/**
* Retrieve request headers.
*
* @since 1.0.0
*
* @return array
* @noinspection PhpCastIsUnnecessaryInspection
*/
private function get_headers(): array {
return [
'Content-Type' => 'application/json',
'X-License-Key' => (string) wpforms_get_license_key(),
'X-Site-Url' => site_url(),
];
}
/**
* Retrieve request timeout.
*
* @since 1.0.0
*
* @return int
*/
private function get_timeout(): int {
/**
* Filter the API request timeout.
*
* @since 1.0.0
*
* @param int $timeout Request timeout.
*/
return (int) apply_filters( 'wpforms_pdfapi_http_request_timeout', self::TIMEOUT );
}
}