settings = $settings; $this->actionName = $actionName; } public function throwMissingKeyException(string $key): never { throw XrpcException::missingParam($this->actionName, $key); } /** * @param array $body */ protected function requireString(array $body, string $key): string { $value = $body[$key] ?? null; if (!is_string($value) || trim($value) === '') { $this->throwMissingKeyException($key); } return $value; } /** * @param array $body */ protected function optionalString(array $body, string $key): ?string { $value = $body[$key] ?? null; if ($value === null || (is_string($value) && trim($value) === '')) { return null; } if (!is_string($value)) { throw XrpcException::invalidParam($this->actionName, "{$key} must be a string", ''); } return $value; } }