HEX
Server: LiteSpeed
System: Linux server315.web-hosting.com 4.18.0-553.54.1.lve.el8.x86_64 #1 SMP Wed Jun 4 13:01:13 UTC 2025 x86_64
User: globfdxw (6114)
PHP: 8.1.34
Disabled: NONE
Upload Files
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 );
	}
}