Automattic\WooCommerce\Internal\AddressProvider

AbstractAutomatticAddressProvider::load_jwtpublicWC 1.0

Loads up a JWT from cache or from the implementor side.

Method of the class: AbstractAutomatticAddressProvider{}

No Hooks.

Returns

``null

phpcs:ignore``. Squiz.Commenting.FunctionCommentThrowTag.Missing -- As we wrap the throw in a try/catch.

Usage

$AbstractAutomatticAddressProvider = new AbstractAutomatticAddressProvider();
$AbstractAutomatticAddressProvider->load_jwt();

AbstractAutomatticAddressProvider::load_jwt() code WC 10.3.3

public function load_jwt() {

	// If we already have a loaded, valid token, we return early.
	if ( $this->jwt && is_string( $this->jwt ) && JsonWebToken::shallow_validate( $this->jwt ) ) {
		return;
	}

	$cached_jwt = $this->get_cached_option( 'address_autocomplete_jwt' );
	// If we have a cached, valid token, we load it to class and return early.
	if ( $cached_jwt && is_string( $cached_jwt ) && JsonWebToken::shallow_validate( $cached_jwt ) ) {
		$this->jwt = $cached_jwt;
		return;
	}

	$retry_data = $this->get_cached_option( 'jwt_retry_data' );

	if ( $retry_data && isset( $retry_data['try_after'] ) && $retry_data['try_after'] > time() ) {
		return;
	}

	try {
		$fresh_jwt = $this->get_address_service_jwt();
		if ( $fresh_jwt && is_string( $fresh_jwt ) && JsonWebToken::shallow_validate( $fresh_jwt ) ) {
			$this->set_jwt( $fresh_jwt );
			// Clear retry data on success.
			$this->delete_cached_option( 'jwt_retry_data' );
			return;
		} else {
			throw new \Exception( 'Invalid JWT received from address service.' );
		}
	} catch ( \Exception $e ) {
		$retry_data['attempts'] = isset( $retry_data['attempts'] ) ? $retry_data['attempts'] + 1 : 1;
		wc_get_logger()->error(
			sprintf(
				'Failed loading JWT for %1$s address autocomplete service (attempt %2$d) with error %3$s.',
				$this->name,
				$retry_data['attempts'],
				$e->getMessage()
			),
			'address-autocomplete'
		);
		$backoff_hours           = pow( 2, $retry_data['attempts'] - 1 ); // 1, 2, 4, 8 hours.
		$retry_data['try_after'] = time() + ( $backoff_hours * HOUR_IN_SECONDS );
		$this->update_cached_option( 'jwt_retry_data', $retry_data, DAY_IN_SECONDS );
	}
}