BR.Workflow.Contracts
1.0.24
See the version list below for details.
dotnet add package BR.Workflow.Contracts --version 1.0.24
NuGet\Install-Package BR.Workflow.Contracts -Version 1.0.24
<PackageReference Include="BR.Workflow.Contracts" Version="1.0.24" />
<PackageVersion Include="BR.Workflow.Contracts" Version="1.0.24" />
<PackageReference Include="BR.Workflow.Contracts" />
paket add BR.Workflow.Contracts --version 1.0.24
#r "nuget: BR.Workflow.Contracts, 1.0.24"
#:package BR.Workflow.Contracts@1.0.24
#addin nuget:?package=BR.Workflow.Contracts&version=1.0.24
#tool nuget:?package=BR.Workflow.Contracts&version=1.0.24
BR.Workflow.Contracts
A comprehensive .NET 8 library containing Temporal workflow and activity contracts for distributed workflow processing systems. Built with Clean Architecture principles and clear separation of concerns across service domains.
๐ฏ What This Package Provides
BR.Workflow.Contracts is the foundation for building distributed, scalable workflow systems using Temporal.io and .NET 8. It provides:
- ๐๏ธ Workflow Contracts - Define workflow orchestration patterns
- โก Activity Contracts - Define individual processing steps
- ๐ Data Models - Immutable, validated data contracts
- ๐ง Utility Extensions - Helper methods for common operations
- ๐จ Clean Architecture - Well-organized, maintainable code structure
๐๏ธ Architecture Overview
This package implements Clean Architecture with clear separation by service domains:
Service Domains
Domain | Purpose | Key Responsibilities |
---|---|---|
REI (Real Estate Ingestor) | Event validation and blob operations | Event validation, blob downloads, status updates |
REP (Real Estate Processor) | Order processing and business logic | Order management, schema validation, client communication |
PT (Payload Transformer) | Data transformation for external services | Data mapping, format conversion, schema validation |
Architecture Principles
- โ Separation of Concerns - Clear boundaries between domains
- โ Dependency Inversion - Interfaces depend on abstractions
- โ Single Responsibility - Each contract has one purpose
- โ Open/Closed - Extensible without modification
- โ Interface Segregation - Clients only depend on what they use
โจ Key Features
Core Features
- ๐ .NET 8 Compatible - Latest language features and performance improvements
- ๐ Nullable Reference Types - Full nullable annotations for better code safety
- ๐ Data Annotations - Comprehensive validation attributes
- ๐ XML Documentation - Complete API documentation
- ๐งต Immutable Records - Thread-safe, immutable data contracts
- ๐ง Extension Methods - Utility extensions for common operations
Temporal Integration
- โฐ Native Temporal Support - Built for Temporal.io workflows
- ๐ Workflow Orchestration - Define complex workflow patterns
- โก Activity Contracts - Define individual processing steps
- ๐ฏ Task Queue Management - Organized by service domain
Production Ready
- ๐งช Comprehensive Testing - Full test coverage
- ๐ Performance Optimized - Minimal allocations and async patterns
- ๐ Security Focused - Input validation and secure defaults
- ๐ Monitoring Ready - Built-in audit and error tracking
๐ฆ Installation
NuGet Package
dotnet add package BR.Workflow.Contracts
Package Manager Console
Install-Package BR.Workflow.Contracts
Direct Reference
<PackageReference Include="BR.Workflow.Contracts" Version="1.0.17" />
๐๏ธ Project Structure
BR.Workflow.Contracts/
โโโ ๐ Workflows/ # Workflow orchestration contracts
โ โโโ IStartRealEstateWorkflow.cs # Main workflow interface
โ โโโ Models/
โ โโโ RealEstateWorkflowOutput.cs
โ
โโโ ๐ Activities/ # Activity contracts by service domain
โ โโโ ๐ REI/ # Real Estate Ingestor (3 activities)
โ โ โโโ IValidateEventActivity.cs
โ โ โโโ IDownloadBlobActivity.cs
โ โ โโโ IUpdateOrderStatusInBlobActivity.cs
โ โ
โ โโโ โ๏ธ REP/ # Real Estate Processor (9 activities)
โ โ โโโ IValidateSchemaTemplateActivity.cs
โ โ โโโ IDetermineActionTypeActivity.cs
โ โ โโโ ICreateOrderActivity.cs
โ โ โโโ IUpdateOrderActivity.cs
โ โ โโโ IApproveOrderActivity.cs
โ โ โโโ IRejectOrderActivity.cs
โ โ โโโ INotifyClientActivity.cs
โ โ โโโ IUpdateDbActivity.cs
โ โ โโโ ICallApiGatewayActivity.cs
โ โ
โ โโโ ๐ PT/ # Payload Transformer (1 activity)
โ โโโ ITransformPayloadActivity.cs
โ
โโโ ๐ Models/ # Data models organized by domain
โ โโโ ๐ Common/ # Shared models across all services
โ โ โโโ AuditInfo.cs # Workflow execution audit
โ โ โโโ ErrorInfo.cs # Error details and tracking
โ โ โโโ ValidationError.cs # Validation failure details
โ โ โโโ ValidationResult.cs # Validation operation results
โ โ โโโ StatusUpdate.cs # Status change notifications
โ โ โโโ ApiGatewayResponse.cs # External API responses
โ โ โโโ BlobMetadata.cs # Blob storage metadata
โ โ โโโ DownloadInfo.cs # Download operation details
โ โ โโโ DuplicateCheck.cs # Duplicate detection results
โ โ
โ โโโ ๐จ Kafka/ # Kafka payload and workflow input
โ โ โโโ RealEstateWorkflowInput.cs # Main workflow input
โ โ โโโ EventInfo.cs # Event metadata and correlation
โ โ โโโ ClientInfo.cs # Client identification
โ โ โโโ BlobInfo.cs # Blob storage information
โ โ โโโ DeadLetterEvent.cs # DLQ event handling
โ โ โโโ DlqDetails.cs # DLQ failure details
โ โ
โ โโโ ๐ REI/ # Real Estate Ingestor models
โ โ โโโ ValidateEventInput.cs # Event validation input
โ โ โโโ ValidateEventOutput.cs # Event validation results
โ โ โโโ DownloadBlobInput.cs # Blob download parameters
โ โ โโโ DownloadBlobOutput.cs # Blob download results
โ โ โโโ UpdateOrderStatusInput.cs # Status update input
โ โ โโโ UpdateOrderStatusOutput.cs # Status update results
โ โ
โ โโโ โ๏ธ REP/ # Real Estate Processor models
โ โ โโโ ValidateSchemaInput.cs # Schema validation input
โ โ โโโ ValidateSchemaOutput.cs # Schema validation results
โ โ โโโ DetermineActionInput.cs # Action determination input
โ โ โโโ DetermineActionOutput.cs # Action determination results
โ โ โโโ CreateOrderInput.cs # Order creation input
โ โ โโโ CreateOrderOutput.cs # Order creation results
โ โ โโโ UpdateOrderInput.cs # Order update input
โ โ โโโ UpdateOrderOutput.cs # Order update results
โ โ โโโ ApproveOrderInput.cs # Order approval input
โ โ โโโ ApproveOrderOutput.cs # Order approval results
โ โ โโโ RejectOrderInput.cs # Order rejection input
โ โ โโโ RejectOrderOutput.cs # Order rejection results
โ โ โโโ NotifyClientInput.cs # Client notification input
โ โ โโโ NotifyClientOutput.cs # Client notification results
โ โ โโโ UpdateDbInput.cs # Database update input
โ โ โโโ UpdateDbOutput.cs # Database update results
โ โ โโโ CallApiGatewayInput.cs # API Gateway call input
โ โ โโโ CallApiGatewayOutput.cs # API Gateway call results
โ โ
โ โโโ ๐ PT/ # Payload Transformer models
โ โโโ TransformPayloadInput.cs # Transformation input
โ โโโ TransformPayloadOutput.cs # Transformation results
โ โโโ TransformationRules.cs # Transformation configuration
โ
โโโ ๐ Enums/ # Type-safe enumerations
โ โโโ ActionType.cs # Order processing actions
โ โโโ BrightRiverStatus.cs # Bright River specific statuses
โ โโโ DeliveryStatus.cs # Delivery operation statuses
โ โโโ HttpMethod.cs # HTTP method constants
โ โโโ NotificationType.cs # Notification type definitions
โ โโโ OrderStatus.cs # Order lifecycle statuses
โ โโโ ValidationSeverity.cs # Validation error severity levels
โ
โโโ ๐ Extensions/ # Utility extension methods
โ โโโ TemporalExtensions.cs # Workflow result helpers
โ โโโ ContractExtensions.cs # Contract utility methods
โ โโโ ValidationExtensions.cs # Validation helper methods
โ
โโโ ๐ Constants/ # Configuration constants
โ โโโ ActivityNames.cs # Activity naming constants
โ โโโ ConfigurationKeys.cs # Configuration key constants
โ โโโ TaskQueues.cs # Task queue names
โ โโโ WorkflowNames.cs # Workflow naming constants
โ โโโ WorkflowTypes.cs # Workflow type definitions
โ
โโโ ๐ Scripts/ # Build and deployment automation
โโโ build-and-publish.ps1 # PowerShell build & publish script
โโโ build-and-publish.cmd # Windows batch build & publish script
โโโ build.ps1 # Comprehensive build script
โโโ build.cmd # Windows build script
โโโ publish.ps1 # NuGet publishing script
๐ Quick Start Guide
1. Basic Workflow Implementation
using BR.Workflow.Contracts.Workflows;
using BR.Workflow.Contracts.Models.Kafka;
using BR.Workflow.Contracts.Workflows.Models;
public class StartRealEstateWorkflow : IStartRealEstateWorkflow
{
public async Task<RealEstateWorkflowOutput> ExecuteAsync(RealEstateWorkflowInput input)
{
try
{
// Your workflow logic here
return new RealEstateWorkflowOutput
{
WorkflowId = Guid.NewGuid(),
Status = "Completed",
ClientId = input.ClientInfo.Id,
OrderId = Guid.NewGuid(),
ActionType = ActionType.Create,
ApiGatewayResponse = new ApiGatewayResponse
{
Success = true,
StatusCode = 200,
Message = "Order created successfully"
},
AuditInfo = new AuditInfo
{
CompletedAt = DateTime.UtcNow,
ErrorInfo = Array.Empty<ErrorInfo>()
}
};
}
catch (Exception ex)
{
return new RealEstateWorkflowOutput
{
WorkflowId = Guid.NewGuid(),
Status = "Failed",
ClientId = input.ClientInfo.Id,
OrderId = Guid.Empty,
ActionType = ActionType.Create,
ApiGatewayResponse = new ApiGatewayResponse
{
Success = false,
StatusCode = 500,
Message = ex.Message
},
AuditInfo = new AuditInfo
{
CompletedAt = DateTime.UtcNow,
ErrorInfo = new[] { new ErrorInfo { Message = ex.Message, Severity = ValidationSeverity.Error } }
}
};
}
}
}
2. Activity Implementation
using BR.Workflow.Contracts.Activities.REI;
using BR.Workflow.Contracts.Models.REI;
using BR.Workflow.Contracts.Models.Common;
public class ValidateEventActivity : IValidateEventActivity
{
public async Task<ValidateEventOutput> ValidateAsync(ValidateEventInput input)
{
var validationErrors = new List<ValidationError>();
// Validate correlation ID
if (string.IsNullOrEmpty(input.CorrelationId))
{
validationErrors.Add(new ValidationError
{
Field = nameof(input.CorrelationId),
Message = "Correlation ID is required",
Severity = ValidationSeverity.Error
});
}
// Validate client ID
if (input.ClientId == Guid.Empty)
{
validationErrors.Add(new ValidationError
{
Field = nameof(input.ClientId),
Message = "Valid Client ID is required",
Severity = ValidationSeverity.Error
});
}
// Check for duplicates
var duplicateCheck = await CheckForDuplicatesAsync(input.CorrelationId, input.ClientId);
return new ValidateEventOutput
{
CanProceed = validationErrors.Count == 0,
DuplicateCheck = duplicateCheck,
ValidationErrors = validationErrors.ToArray()
};
}
private async Task<DuplicateCheck> CheckForDuplicatesAsync(string correlationId, Guid clientId)
{
// Your duplicate checking logic here
return new DuplicateCheck
{
RecentlyDownloaded = false,
DownloadCount = 0
};
}
}
3. Using Extension Methods
using BR.Workflow.Contracts.Extensions;
// Create workflow results easily
var successResult = TemporalExtensions.CreateSuccessResult(
workflowId: Guid.NewGuid(),
status: "Completed",
clientId: clientId,
orderId: orderId,
actionType: ActionType.Create
);
// Validate contract inputs
if (!input.IsValid())
{
var errors = input.GetValidationErrors();
foreach (var error in errors)
{
Console.WriteLine($"Validation Error: {error.Field} - {error.Message}");
}
}
// Create error results
var errorResult = TemporalExtensions.CreateErrorResult(
workflowId: Guid.NewGuid(),
status: "Failed",
clientId: clientId,
orderId: orderId,
actionType: ActionType.Create,
errorMessage: "Processing failed"
);
๐ง Service Domain Deep Dive
๐ REI (Real Estate Ingestor)
Purpose: Handle incoming events and manage blob storage operations
Key Activities:
IValidateEventActivity
- Validate incoming events and check for duplicatesIDownloadBlobActivity
- Download blob content from Azure StorageIUpdateOrderStatusInBlobActivity
- Update order status in blob storage
Use Cases:
- Event deduplication and validation
- Blob content retrieval for processing
- Status tracking in blob storage
โ๏ธ REP (Real Estate Processor)
Purpose: Core business logic for order processing and client communication
Key Activities:
IValidateSchemaTemplateActivity
- Validate data against business schemasIDetermineActionTypeActivity
- Determine processing action typeICreateOrderActivity
- Create new ordersIUpdateOrderActivity
- Update existing ordersIApproveOrderActivity
- Approve ordersIRejectOrderActivity
- Reject ordersINotifyClientActivity
- Notify clients of status changesIUpdateDbActivity
- Update processing status in databaseICallApiGatewayActivity
- Communicate with external services
Use Cases:
- Order lifecycle management
- Business rule validation
- Client communication
- External service integration
๐ PT (Property Transformer)
Purpose: Transform data between different service formats
Key Activities:
ITransformPayloadActivity
- Transform data between formats
Use Cases:
- Data format conversion
- Schema mapping
- External service compatibility
๐จ Kafka Integration
The library provides dual-purpose models that serve both Kafka messaging and workflow processing:
Kafka Payload Models
Model | Purpose | Key Properties |
---|---|---|
RealEstateWorkflowInput |
Main workflow input from Kafka | EventInfo, ClientInfo, BlobInfo |
EventInfo |
Event metadata and correlation | Name, CorrelationId, Timestamp |
ClientInfo |
Client identification | Id, Name, Reference |
BlobInfo |
Azure Blob Storage information | Url, Container, BlobName |
Key Features
- JSON Serialization -
JsonPropertyName
attributes for camelCase JSON - Kafka Compatibility - Optimized for message serialization/deserialization
- Workflow Integration - Seamless integration with Temporal workflows
- Type Safety - Full nullable reference type support
- Validation - Comprehensive data validation attributes
Usage Pattern
// Kafka message processing
var kafkaPayload = JsonSerializer.Deserialize<RealEstateWorkflowInput>(kafkaMessage);
// Validate the payload
if (!kafkaPayload.IsValid())
{
var errors = kafkaPayload.GetValidationErrors();
// Handle validation errors...
}
// Workflow execution
var result = await workflow.ExecuteAsync(kafkaPayload);
๐ Complete Contract Reference
Workflows
Interface | Purpose | Output |
---|---|---|
IStartRealEstateWorkflow |
Main workflow orchestration | RealEstateWorkflowOutput |
Activities (13 Total)
REI Activities (3)
Activity | Purpose | Input | Output |
---|---|---|---|
IValidateEventActivity |
Validate incoming events | ValidateEventInput |
ValidateEventOutput |
IDownloadBlobActivity |
Download blob content | DownloadBlobInput |
DownloadBlobOutput |
IUpdateOrderStatusInBlobActivity |
Update blob status | UpdateOrderStatusInput |
UpdateOrderStatusOutput |
REP Activities (9)
Activity | Purpose | Input | Output |
---|---|---|---|
IValidateSchemaTemplateActivity |
Validate business schemas | ValidateSchemaInput |
ValidateSchemaOutput |
IDetermineActionTypeActivity |
Determine processing action | DetermineActionInput |
DetermineActionOutput |
ICreateOrderActivity |
Create new orders | CreateOrderInput |
CreateOrderOutput |
IUpdateOrderActivity |
Update existing orders | UpdateOrderInput |
UpdateOrderOutput |
IApproveOrderActivity |
Approve orders | ApproveOrderInput |
ApproveOrderOutput |
IRejectOrderActivity |
Reject orders | RejectOrderInput |
RejectOrderOutput |
INotifyClientActivity |
Notify clients | NotifyClientInput |
NotifyClientOutput |
IUpdateDbActivity |
Update database | UpdateDbInput |
UpdateDbOutput |
ICallApiGatewayActivity |
Call external APIs | CallApiGatewayInput |
CallApiGatewayOutput |
PT Activities (1)
Activity | Purpose | Input | Output |
---|---|---|---|
ITransformPayloadActivity |
Transform data formats | TransformPayloadInput |
TransformPayloadOutput |
Enums
Enum | Values | Purpose |
---|---|---|
ActionType |
Create, Update, Approve, Reject | Order processing actions |
BrightRiverStatus |
Pending, Processing, Completed, Failed | Bright River specific statuses |
OrderStatus |
Draft, Submitted, Approved, Rejected | Order lifecycle statuses |
ValidationSeverity |
Info, Warning, Error, Critical | Validation error severity |
DeliveryStatus |
Pending, Delivered, Failed | Delivery operation statuses |
HttpMethod |
GET, POST, PUT, DELETE | HTTP method constants |
NotificationType |
Email, SMS, Push | Notification type definitions |
๐ฏ Clean Architecture Benefits
Design Principles
- Separation of Concerns - Clear boundaries between service domains
- Dependency Inversion - Interfaces depend on abstractions, not concretions
- Single Responsibility - Each contract has a single, well-defined purpose
- Open/Closed Principle - Easy to extend without modifying existing contracts
- Interface Segregation - Clients only depend on interfaces they use
Implementation Benefits
- Maintainability - Clear structure makes code easy to understand and modify
- Testability - Interfaces make unit testing straightforward
- Extensibility - New features can be added without breaking existing code
- Reusability - Contracts can be used across different implementations
- Documentation - Clear interfaces serve as living documentation
๐ Production Readiness
The project follows all specified C# .NET development guidelines:
Code Quality
- โ PascalCase naming conventions for all public members
- โ Async/await patterns for I/O operations
- โ Comprehensive error handling with custom exceptions
- โ Dependency injection principles for loose coupling
- โ Modern C# features (records, pattern matching, nullable references)
Performance & Security
- โ Thread-safe immutable data contracts using records
- โ Minimal allocations and optimized async patterns
- โ Input validation and secure defaults
- โ Comprehensive XML documentation for all public APIs
- โ Nullable reference types for better type safety
Testing & Monitoring
- โ Full test coverage for all contracts and extensions
- โ Built-in audit tracking for workflow execution
- โ Error tracking with detailed error information
- โ Validation results for debugging and monitoring
๐ง Build and Deployment
Single Command Build & Publish
# PowerShell (Recommended)
.\scripts\build-and-publish.ps1 -ApiKey "your-nuget-api-key"
# Windows Batch
.\scripts\build-and-publish.cmd "your-nuget-api-key"
# Dry run (test without publishing)
.\scripts\build-and-publish.ps1 -ApiKey "your-nuget-api-key" -DryRun
Manual Build Process
# Restore packages
dotnet restore
# Build project
dotnet build --configuration Release
# Create NuGet package
dotnet pack --configuration Release --output nupkg
# Publish to NuGet
dotnet nuget push "nupkg\BR.Workflow.Contracts.1.0.17.nupkg" --source "https://api.nuget.org/v3/index.json" --api-key "your-api-key"
CI/CD Integration
The package includes scripts for:
- Azure DevOps - Build and release pipelines
- GitHub Actions - Automated workflows
- Jenkins - Build automation
- Local Development - Quick build and test
๐ Documentation
API Documentation
- XML Documentation - Complete API documentation for all public members
- IntelliSense Support - Full IntelliSense in Visual Studio and VS Code
- Code Examples - Comprehensive usage examples in this README
Architecture Documentation
- Clean Architecture - Well-organized structure following SOLID principles
- Service Domain Separation - Clear boundaries between REI, REP, and PT services
- Data Flow Diagrams - Understanding of how data flows through the system
Development Guides
- Getting Started - Quick start guide for new developers
- Best Practices - Guidelines for implementing contracts
- Testing Strategies - Approaches for testing workflow contracts
๐ค Contributing
When extending these contracts:
Code Standards
- Follow naming conventions (PascalCase for public members)
- Add comprehensive XML documentation for all public APIs
- Use nullable reference types appropriately
- Include data validation attributes where needed
- Ensure immutability using records
- Maintain service domain separation
- Add unit tests for complex validation logic
Pull Request Process
- Create feature branch from main
- Implement changes following existing patterns
- Add tests for new functionality
- Update documentation as needed
- Submit pull request with clear description
Testing Requirements
- Unit tests for all new contracts
- Integration tests for workflow patterns
- Validation tests for data models
- Performance tests for critical paths
๐ License
This project is licensed under the MIT License - see the LICENSE file for details.
๐ Support
Getting Help
- Documentation - Start with this README and XML documentation
- Issues - Report bugs or request features via GitLab issues
- Team Contact - Contact the RealEstate Platform team for direct support
Community
- GitLab Repository - workflow-platform
- NuGet Package - BR.Workflow.Contracts
- Project URL - GitLab Project
๐ Version History
Current Version: 1.0.17
- Latest Release - September 2024
- .NET Version - 8.0
- Temporal Version - 1.7.0
- Key Features - Complete workflow contracts, activity interfaces, data models
Previous Versions
- 1.0.16 - Initial release with basic contracts
- 1.0.15 - Development version
Built with โค๏ธ by the Bright River RealEstate Platform Team
Product | Versions Compatible and additional computed target framework versions. |
---|---|
.NET | net8.0 is compatible. net8.0-android was computed. net8.0-browser was computed. net8.0-ios was computed. net8.0-maccatalyst was computed. net8.0-macos was computed. net8.0-tvos was computed. net8.0-windows was computed. net9.0 was computed. net9.0-android was computed. net9.0-browser was computed. net9.0-ios was computed. net9.0-maccatalyst was computed. net9.0-macos was computed. net9.0-tvos was computed. net9.0-windows was computed. net10.0 was computed. net10.0-android was computed. net10.0-browser was computed. net10.0-ios was computed. net10.0-maccatalyst was computed. net10.0-macos was computed. net10.0-tvos was computed. net10.0-windows was computed. |
-
net8.0
- FastEndpoints (>= 5.25.0)
- Microsoft.AspNetCore.Mvc.Core (>= 2.3.0)
- System.Text.Json (>= 8.0.5)
- Temporalio (>= 1.7.0)
- Temporalio.Extensions.Hosting (>= 1.7.0)
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.
Version | Downloads | Last Updated |
---|---|---|
1.0.42 | 47 | 9/16/2025 |
1.0.41 | 49 | 9/15/2025 |
1.0.40 | 49 | 9/15/2025 |
1.0.39 | 111 | 9/12/2025 |
1.0.38 | 97 | 9/12/2025 |
1.0.37 | 94 | 9/12/2025 |
1.0.36 | 129 | 9/11/2025 |
1.0.35 | 127 | 9/11/2025 |
1.0.34 | 157 | 9/10/2025 |
1.0.33 | 123 | 9/10/2025 |
1.0.32 | 152 | 9/9/2025 |
1.0.31 | 137 | 9/9/2025 |
1.0.30 | 128 | 9/9/2025 |
1.0.29 | 128 | 9/9/2025 |
1.0.28 | 144 | 9/7/2025 |
1.0.27 | 93 | 9/5/2025 |
1.0.24 | 103 | 9/5/2025 |
1.0.23 | 121 | 9/5/2025 |
1.0.22 | 124 | 9/5/2025 |
1.0.21 | 130 | 9/5/2025 |
1.0.20 | 128 | 9/5/2025 |
1.0.19 | 138 | 9/4/2025 |
1.0.18 | 136 | 9/3/2025 |
1.0.17 | 135 | 9/3/2025 |
1.0.16 | 137 | 9/3/2025 |
1.0.15 | 149 | 8/31/2025 |
1.0.14 | 143 | 8/31/2025 |
1.0.13 | 145 | 8/31/2025 |
1.0.12 | 150 | 8/31/2025 |
1.0.11 | 116 | 8/31/2025 |
1.0.10 | 219 | 8/30/2025 |