post([$this, 'handleAction']) ->args([ 'service' => 'string|required|enum:'.implode(',',JVB()->getAvailableServices()), 'action' => 'string|required', 'user_id' => 'int', 'context' => 'string|enum:admin,user', 'data' => 'array' ]) ->auth('user') ->rateLimit(20) ->register(); Route::for('oath/connect') ->post([$this, 'initiateOAuth']) ->auth('user') ->rateLimit(20) ->args([ 'service' => 'string|required', 'user_id' => 'int', 'return_url'=> 'url' ]) ->register(); } /** * Handle integration actions */ public function handleAction(WP_REST_Request $request): WP_REST_Response { error_log('[IntegrationsRoutes] handleAction request:'.print_r($request->get_params(), true)); $service = $request->get_param('service'); $action = $request->get_param('action'); $theUserID = (user_can($request->get_param('user'), 'manage_options')) ? null : $request->get_param('user'); $integration = JVB()->connect($service, $theUserID); if (!$integration) { return $this->validationError(['message'=>'Invalid service']); } $integration->getCredentials(); // Handle the action try { $data = $request->get_param('data'); if (!is_array($data) && empty($data)) { $data = null; } error_log('[IntegrationsRoutes] Calling processAction with data: ' . print_r($data, true)); $result = $integration->processAction($action, $data); return $this->success($result); } catch (Exception $e) { return $this->error($e->getMessage()); } } public function initiateOAuth(WP_REST_Request $request): WP_REST_Response { $service = $request->get_param('service'); $user_id = $request->get_param('user_id'); $return_url = $request->get_param('return_url'); $integration = JVB()->connect($service, $user_id); if (!$integration || !$integration->isOAuthService) { return $this->validationError(['message'=>'Invalid service']); } $auth_url = $integration->getOAuthUrl($return_url); if ($auth_url) { return $this->success($auth_url); } return $this->error('Failed to generate authorization URL'); } }