settings = $settings; } public function register(): void { \add_action( 'wp_enqueue_scripts', [ $this, 'enqueue' ], 100 ); \add_filter( 'script_loader_tag', [ $this, 'addDataAttributes' ], 10, 2 ); } public function enqueue(): void { if ( \is_admin() || \get_option( Onboarding::OPTION, '' ) !== 'complete' ) { return; } $token = $this->settings->selectedAgentEmbedToken(); if ( $token === '' || ! $this->settings->selectedAgentIsActive() ) { return; } if ( ! \apply_filters( 'agent001_render_widget', true ) ) { return; } $loaderUrl = $this->settings->widgetLoaderUrl(); if ( ! $this->isLoaderUrlAllowed( $loaderUrl ) ) { return; } $version = \defined( 'AGENT001_VERSION' ) ? \AGENT001_VERSION : '1.0.0'; \wp_enqueue_script( self::HANDLE, $loaderUrl, [], $version, true ); } private function isLoaderUrlAllowed( string $loaderUrl ): bool { if ( $loaderUrl === '' ) { return false; } $loaderHost = \wp_parse_url( $loaderUrl, PHP_URL_HOST ); if ( ! is_string( $loaderHost ) || $loaderHost === '' ) { return false; } $loaderScheme = \wp_parse_url( $loaderUrl, PHP_URL_SCHEME ); if ( $loaderScheme !== 'https' ) { return false; } $backendHost = \wp_parse_url( $this->settings->backendBaseUrl(), PHP_URL_HOST ); if ( ! is_string( $backendHost ) || $backendHost === '' ) { return false; } if ( strcasecmp( $loaderHost, $backendHost ) === 0 ) { return true; } $allowed = \apply_filters( 'agent001_allowed_widget_hosts', [], $loaderUrl ); if ( is_array( $allowed ) ) { foreach ( $allowed as $candidate ) { if ( is_string( $candidate ) && strcasecmp( $candidate, $loaderHost ) === 0 ) { return true; } } } return false; } public function addDataAttributes( string $tag, string $handle ): string { if ( $handle !== self::HANDLE ) { return $tag; } $token = $this->settings->selectedAgentEmbedToken(); $widgetKey = $this->settings->widgetKey(); $pluginUrl = \rest_url( 'agent001/v1' ); $attrs = sprintf( ' data-token="%s" data-plugin-key="%s" data-plugin-rest="%s"', \esc_attr( $token ), \esc_attr( $widgetKey ), \esc_url( $pluginUrl ) ); return preg_replace( '/(