245 lines
7.6 KiB
Markdown
245 lines
7.6 KiB
Markdown
# ViewEngine.Client - Project Summary
|
|
|
|
## Overview
|
|
|
|
The **ViewEngine.Client** is a production-ready .NET 9 NuGet package that provides a clean, type-safe client library for consuming the ViewEngine REST API. It enables developers to easily retrieve web pages, extract content, and manage distributed web scraping operations.
|
|
|
|
## Project Structure
|
|
|
|
```
|
|
ViewEngine.Client/
|
|
├── Configuration/
|
|
│ └── ViewEngineOptions.cs # Configuration options for the client
|
|
├── Extensions/
|
|
│ └── ServiceCollectionExtensions.cs # Dependency injection helpers
|
|
├── Models/
|
|
│ ├── ClientManagementModels.cs # DTOs for client management API
|
|
│ └── RetrievalModels.cs # DTOs for retrieval API
|
|
├── ViewEngineClient.cs # Main client implementation
|
|
├── ViewEngine.Client.csproj # Project file with NuGet metadata
|
|
├── README.md # Comprehensive documentation
|
|
├── QUICKSTART.md # Quick reference guide
|
|
├── Examples.md # Detailed usage examples
|
|
└── PROJECT_SUMMARY.md # This file
|
|
```
|
|
|
|
## Key Features
|
|
|
|
### Core Functionality
|
|
- ✅ Submit web page retrieval requests via MCP API
|
|
- ✅ Poll for job status and retrieve results
|
|
- ✅ Download decrypted page content with full text extraction
|
|
- ✅ Access screenshots, thumbnails, and artifacts
|
|
- ✅ Manage clients and route jobs to specific feeders
|
|
- ✅ Built-in retry logic with exponential backoff
|
|
- ✅ Full support for API key authentication
|
|
- ✅ Type-safe request/response models
|
|
- ✅ Async/await support throughout
|
|
- ✅ Dependency injection integration
|
|
|
|
### Advanced Features
|
|
- ✅ Rate limit handling with retry-after support
|
|
- ✅ Exponential backoff for transient failures
|
|
- ✅ Server error retry logic
|
|
- ✅ Platform-specific retrieval (Android, iOS, Windows)
|
|
- ✅ Priority-based job scheduling
|
|
- ✅ Client routing with ClientId or CustomUserId
|
|
- ✅ Force refresh option to bypass cache
|
|
- ✅ Configurable timeouts and polling intervals
|
|
|
|
### Client Management
|
|
- ✅ Add clients programmatically
|
|
- ✅ List and filter clients
|
|
- ✅ Update client settings
|
|
- ✅ Suspend/activate clients
|
|
- ✅ Delete clients
|
|
- ✅ Get detailed client statistics
|
|
- ✅ Monitor feeder online status
|
|
- ✅ Track job processing metrics
|
|
|
|
## API Coverage
|
|
|
|
### MCP Retrieval API (/mcp/*)
|
|
- `POST /mcp/retrieve` - Submit retrieval request
|
|
- `GET /mcp/retrieve/{requestId}` - Get retrieval status
|
|
- `GET /mcp/retrieve/{requestId}/content` - Download page content
|
|
- `GET /mcp/tools` - List available tools
|
|
|
|
### Client Management API (/v1/clients/*)
|
|
- `POST /v1/clients` - Add client
|
|
- `GET /v1/clients` - List clients
|
|
- `PUT /v1/clients/{id}` - Update client
|
|
- `PUT /v1/clients/{id}/suspend` - Suspend client
|
|
- `PUT /v1/clients/{id}/activate` - Activate client
|
|
- `DELETE /v1/clients/{id}` - Delete client
|
|
- `GET /v1/clients/{id}/stats` - Get client stats
|
|
|
|
## NuGet Package Details
|
|
|
|
### Package Metadata
|
|
- **Package ID**: `ViewEngine.Client`
|
|
- **Version**: 1.0.0
|
|
- **Target Framework**: .NET 9.0
|
|
- **Authors**: David H Friedel Jr
|
|
- **License**: MIT
|
|
- **Output Path**: `C:\Users\logik\Dropbox\Nugets\ViewEngine.Client.1.0.0.nupkg`
|
|
|
|
### Dependencies
|
|
- `Microsoft.Extensions.Http` (9.0.0)
|
|
- `Microsoft.Extensions.Options` (9.0.0)
|
|
- `Microsoft.Extensions.Options.ConfigurationExtensions` (9.0.0)
|
|
|
|
### Package Contents
|
|
- Compiled DLL with XML documentation
|
|
- README.md for NuGet.org package page
|
|
- Full IntelliSense support
|
|
- Source link support (future)
|
|
|
|
## Usage Patterns
|
|
|
|
### 1. Simple Usage (No DI)
|
|
```csharp
|
|
var client = new ViewEngineClient("ak_your-api-key-here");
|
|
var page = await client.RetrieveAndWaitAsync(new SubmitRetrievalRequest
|
|
{
|
|
Url = "https://example.com"
|
|
});
|
|
```
|
|
|
|
### 2. Dependency Injection (Recommended)
|
|
```csharp
|
|
// Program.cs
|
|
builder.Services.AddViewEngineClient(builder.Configuration);
|
|
|
|
// Controller
|
|
public class MyController : ControllerBase
|
|
{
|
|
private readonly ViewEngineClient _client;
|
|
public MyController(ViewEngineClient client) => _client = client;
|
|
}
|
|
```
|
|
|
|
### 3. Options Pattern
|
|
```csharp
|
|
var options = new ViewEngineOptions
|
|
{
|
|
ApiKey = "ak_your-api-key-here",
|
|
TimeoutSeconds = 120,
|
|
MaxRetries = 3
|
|
};
|
|
var client = new ViewEngineClient(options);
|
|
```
|
|
|
|
## Architecture Decisions
|
|
|
|
### 1. Multiple Constructors
|
|
- Simple constructor with API key only
|
|
- IOptions constructor for DI
|
|
- HttpClient constructor for advanced DI scenarios
|
|
- Flexible and supports various usage patterns
|
|
|
|
### 2. Retry Logic
|
|
- Automatic retry for rate limits (429)
|
|
- Automatic retry for server errors (500-599)
|
|
- Automatic retry for network timeouts
|
|
- Respects Retry-After headers
|
|
- Exponential backoff with configurable base delay
|
|
|
|
### 3. Error Handling
|
|
- Throws HttpRequestException for HTTP errors
|
|
- Throws InvalidOperationException for failed retrievals
|
|
- Throws OperationCanceledException for canceled requests
|
|
- All errors include meaningful messages
|
|
|
|
### 4. Resource Management
|
|
- Implements IDisposable
|
|
- Properly disposes HttpClient when not injected
|
|
- Does not dispose injected HttpClient (DI container manages it)
|
|
|
|
### 5. Type Safety
|
|
- Strongly-typed DTOs for all requests/responses
|
|
- Nullable reference types enabled
|
|
- XML documentation for all public APIs
|
|
- IntelliSense support
|
|
|
|
## Testing Recommendations
|
|
|
|
### Unit Testing
|
|
```csharp
|
|
// Mock HttpClient for unit tests
|
|
var mockHandler = new MockHttpMessageHandler();
|
|
var httpClient = new HttpClient(mockHandler);
|
|
var options = Options.Create(new ViewEngineOptions { ApiKey = "test" });
|
|
var client = new ViewEngineClient(httpClient, options);
|
|
```
|
|
|
|
### Integration Testing
|
|
```csharp
|
|
// Use real API with test API key
|
|
var client = new ViewEngineClient("ak_test_key");
|
|
var page = await client.RetrieveAndWaitAsync(new SubmitRetrievalRequest
|
|
{
|
|
Url = "https://example.com"
|
|
});
|
|
Assert.NotNull(page.Title);
|
|
```
|
|
|
|
## Build Information
|
|
|
|
- **Status**: ✅ Build succeeded (0 warnings, 0 errors)
|
|
- **Package Created**: ✅ ViewEngine.Client.1.0.0.nupkg (30,151 bytes)
|
|
- **Documentation**: ✅ XML documentation generated
|
|
- **Target Framework**: .NET 9.0
|
|
- **Language Version**: Latest
|
|
|
|
## Next Steps
|
|
|
|
### For Developers Using This Package
|
|
1. Install via NuGet: `dotnet add package ViewEngine.Client`
|
|
2. Get API key from https://www.viewengine.io
|
|
3. Follow QUICKSTART.md for immediate use
|
|
4. See Examples.md for advanced scenarios
|
|
|
|
### For Package Maintainers
|
|
1. ✅ Initial release complete
|
|
2. 🔄 Publish to NuGet.org (manual step)
|
|
3. 🔄 Add source link support
|
|
4. 🔄 Add unit tests project
|
|
5. 🔄 Add integration tests
|
|
6. 🔄 Set up CI/CD pipeline
|
|
7. 🔄 Add code coverage reporting
|
|
|
|
### Future Enhancements
|
|
- [ ] Add webhook support for job completion notifications
|
|
- [ ] Add bulk retrieval helper methods
|
|
- [ ] Add caching layer for frequently accessed pages
|
|
- [ ] Add telemetry and diagnostics
|
|
- [ ] Add support for .NET Standard 2.0 (broader compatibility)
|
|
- [ ] Add rate limit awareness (track limits client-side)
|
|
- [ ] Add health check endpoint support
|
|
- [ ] Add billing/usage API support
|
|
|
|
## Documentation
|
|
|
|
- **README.md**: Main documentation with installation, configuration, and usage
|
|
- **QUICKSTART.md**: Quick reference for common tasks
|
|
- **Examples.md**: Comprehensive examples for all scenarios
|
|
- **XML Docs**: IntelliSense documentation in code
|
|
- **API Docs**: https://www.viewengine.io/docs
|
|
|
|
## Support
|
|
|
|
- GitHub: https://github.com/marketally/viewengine
|
|
- Issues: https://github.com/marketally/viewengine/issues
|
|
- Website: https://www.viewengine.io
|
|
|
|
## License
|
|
|
|
MIT License - Copyright © 2025 ViewEngine
|
|
|
|
---
|
|
|
|
**Package Created**: November 22, 2025
|
|
**Build Status**: ✅ Ready for distribution
|
|
**Quality**: Production-ready
|