Integrate YARP to forward all /api/** requests from the browser to the backend EnvelopeGenerator.API service. Add Yarp.ReverseProxy package, configure proxy routes and clusters in appsettings.json, and register YARP in Program.cs. Add API base URL configuration and register ReceiverApiClient, LocalizationService, and ReceiverAuthState as scoped services to support both server and client scenarios. This improves API/UI separation and authentication handling.
Added signature-pad.js: a minimal, dependency-free signature pad with attach, clear, toDataUrl, and detach methods, supporting mouse and touch events and high-DPI displays. Updated error-space.js to draw a visor shape and animate a cord using bezier curves for a dynamic visual effect.
Added multiple custom CSS files for receiver UI enhancements, integrated Bootstrap Icons via CDN, and included signature-pad.js to support signature capture functionality. These changes improve UI styling and add new interactive features.
Introduced new CSS files for the Blazor receiver UI, including card layouts, logo styles, and a custom error/404 page with illustrations. Added responsive and modernized styles for buttons, footers, language dropdowns, and signature pad. These changes enhance the UI without affecting legacy MVC CSS.
Port legacy MVC views to Blazor components for the receiver UI, including Home, envelope routing, locked/auth flows, document signing, signature pad dialog, and all terminal/confirmation pages (signed, rejected, expired, not found, 404).
Implements DevExpress Blazor controls for UI consistency and accessibility.
Signature flow uses a side-panel UX for capturing signatures.
Includes localization, robust error handling, state management, and JS interop for signature capture and 404 animation.
Legacy routes are redirected for backward compatibility.
- Update NavMenu to show "Samples" instead of "Home"
- Add ReceiverLayout.razor for receiver-facing pages:
- Includes main content, sticky footer, and privacy link
- Implements cookie consent banner using localStorage
- Adds language switcher with LocalizationService integration
- Handles event disposal and JS interop for SSR/client scenarios
Introduced the ReceiverAuthState class to encapsulate and manage the authentication state for receivers within an envelope. This class tracks the current authentication response and envelope key, provides methods to update or clear the state, and exposes a Changed event to notify UI components of state transitions, enabling reactive UI updates during the authentication flow.
Introduces a LocalizationService that loads all localized strings from the API and exposes them via an indexer, emulating IStringLocalizer behavior. The service supports language switching, formatting, and notifies consumers on language changes. Supported languages are provided as a static list for UI use. Designed for scoped DI in Blazor components.
Added Microsoft.Extensions.Http (v8.0.1) to EnvelopeGenerator.ReceiverUI.Web.Client.csproj to enhance HTTP client capabilities in the application. This enables improved HTTP request handling and integration with .NET's dependency injection.
Added EnvelopeGenerator.ReceiverUI.Web.Client.Api, Api.Models, and Services namespaces to _Imports.razor for easier access to shared types across components. This reduces the need for repetitive using statements in individual files.
The NotFound route now renders Pages.Receiver.Error404 inside ReceiverLayout instead of a message in MainLayout. Added a comment to clarify this mirrors the HomeController.Error404 fallback behavior from EnvelopeGenerator.Web.
Introduced HttpClient for ReceiverApiClient to enable BFF-proxied API calls with authentication cookie forwarding. Registered LocalizationService and ReceiverAuthState as scoped services for localization and authentication state management. Updated using statements to support these additions. Added explanatory comments for the new setup.
Introduced ReceiverApiClient.cs, a typed HTTP client for the EnvelopeGenerator receiver API. It provides strongly-typed methods for authentication, envelope and document retrieval, annotation/signature actions, read-only sharing, logout, and localization. The client uses dependency injection, handles error logging, and ensures authentication cookies are attached via same-origin requests.
Introduced EnvelopeDtos.cs and ReceiverAuthDtos.cs under EnvelopeGenerator.ReceiverUI.Web.Client.Api.Models. These files define client-side DTOs that mirror server-side models, exposing only the fields required by the receiver UI. EnvelopeDtos.cs covers envelopes, documents, receivers, and signature elements, while ReceiverAuthDtos.cs handles authentication responses and requests. All DTOs are documented and structured for camelCase JSON serialization, improving maintainability and clarity for API interactions in the receiver UI.
Added two endpoints for Blazor-based signature flows:
- GET /elements: Returns signature placeholders for the receiver to render overlays in the Blazor UI.
- POST /blazor: Accepts Blazor-friendly signature payloads, builds annotation DTOs, and triggers the signing/notification pipeline. Signs out the user after signing.
Both endpoints are protected by the Receiver authorization policy and expose only necessary data for the client UI.
Introduced BlazorSignaturePayload and BlazorSignatureEntry classes in EnvelopeGenerator.API.Models. These DTOs provide a transport-neutral format for submitting signature data from the Blazor receiver UI, including image, metadata, and timestamp. Added detailed XML documentation describing their usage and relation to legacy formats.
Added documentation in the project file explaining the need to statically link SkiaSharp and HarfBuzzSharp native assets for DevExpress PDF SkiaRenderer support in WASM. Included guidance on the "wasm-tools" workload and the <WasmBuildNative> property. No functional changes made.
Added SkiaSharp.NativeAssets.WebAssembly and HarfBuzzSharp.NativeAssets.WebAssembly package references to EnvelopeGenerator.ReceiverUI.Web.csproj. These provide native support for rendering and text shaping in WebAssembly, improving PDF and font handling in the web application.
Added a new solution folder named "receiverUI" to the Visual Studio solution. Updated the project structure and nesting to include this folder for better organization. No code or project files were added to the folder at this stage.
Major project cleanup and refactor:
- Removed placeholder and unused .razor components and models.
- Deleted obsolete client-side (WASM) project files and custom auth logic.
- Improved layout and styling for a more professional, responsive UI.
- Consolidated state management and API service patterns.
- Removed favicon and Bootstrap Icons font files; cleaned up static assets.
- Updated solution file to remove references to deleted projects.
- Prepared codebase for a server-side or hybrid Blazor architecture with a maintainable, focused structure.
Replaced _mediator.ReadEnvelopeReceiverAsync with a light query (ReadEnvelopeReceiverLightQuery) that excludes Documents and Elements, improving performance by fetching only essential data.
Introduced ReadEnvelopeReceiverLightQuery and its handler to efficiently load only Envelope (with Histories and User) and Receiver data, omitting Documents/Elements. This is intended for status-check scenarios to improve performance by reducing unnecessary data loading.
All references to IEnvelopeMailService have been removed from ReceiverAuthController. The controller no longer sends access code emails; this responsibility is now handled by the Web project when generating the link. Updated comments clarify the new flow, and related redundant code has been cleaned up. Authentication and TFA logic remain unchanged.
Added server-side DI registrations for authentication and app-specific services to support Blazor InteractiveAuto prerendering. Registered a scoped HttpClient with base URI for correct API routing. Switched ApiBaseUrl in appsettings.json to https://localhost:8088. Added necessary using statements for new services and providers.
- Introduce IReceiverAuthService and ReceiverAuthService for all envelope receiver authentication and status API calls
- Add ReceiverAuthModel as a client-side DTO for API responses
- Refactor EnvelopeState to store all relevant fields and update via ApplyApiResponse
- Overhaul EnvelopePage.razor to use new service and state, with improved status handling and UI
- Enhance ApiResponse and ApiServiceBase to support structured error deserialization
- Register IReceiverAuthService in DI container
Introduces ReceiverAuthController with REST endpoints for envelope receiver authentication, replacing the previous web-based flow with a JSON API suitable for Blazor clients. Implements endpoints for status checking, access code validation, and TFA (SMS or authenticator) verification. Adds unified ReceiverAuthResponse and request models for consistent API responses. Includes detailed documentation and error handling, providing a modern, client-friendly authentication flow.
Refactored HandleAccessCodeSubmit to accept a (string Code, bool PreferSms) tuple, enabling support for SMS preference in two-factor authentication. Added explanatory comments and cleaned up outdated comments in LoadEnvelopeAsync for clarity.
- Introduce ActionPanel, EnvelopeInfoCard, TfaForm, ConfirmDialog, StatusPage, and Toast components for modular, presentational UI
- Add ToastService for pub/sub toast notifications; register in DI
- Refactor AccessCodeForm for improved UX and parameterization
- Enhance MainLayout with Toast integration and better error handling
- Standardize and extend app.css for new components and responsive design
- All new components are "dumb" (no service/API knowledge), using EventCallbacks for parent interaction
- ConfirmDialog supports awaitable user confirmation via TaskCompletionSource
Integrated Bootstrap Icons by adding CSS and font assets, updated the project to track static asset folders, and referenced the icon styles in App.razor. Introduced a new app.css with comprehensive base styles, consolidating previous stylesheets for a consistent and modern UI. Ensured Bootstrap CSS is included as a foundational style framework. No code changes were made to the font or CSS asset files themselves.
Added DocumentReceiverElementAnnotations (ElementAnnotation) and DocumentStatus DbSet properties to EGDbContextBase to support database operations for these entities.
Added import for EnvelopeGenerator.Domain.Interfaces. Updated logic to send final emails to receivers only if the envelope requires "Read and Sign," adding an extra check to the email dispatch condition.
Updated EnvelopeGenerator.Web.csproj to increment <Version>, <AssemblyVersion>, and <FileVersion> from 3.12.2 to 3.12.3, preparing for a new release. No other changes included.
Switched all audit and creation timestamps from UTC to local time
by replacing DateTime.UtcNow with DateTime.Now across the codebase.
This affects audit fields, object creation, and default values for
date/time properties.
Introduced a new Reject endpoint for users with the ReceiverFull role to reject annotations, with optional reason support. Marked the endpoint as obsolete for future exception handling updates. Also standardized the Unauthorized response to remove the custom error message.
Updated EnvelopeGenerator.Web.csproj to increment <Version>, <AssemblyVersion>, and <FileVersion> from 3.12.1 to 3.12.2, reflecting the new release. No other changes were made.
Clarified and streamlined the handling of rejected envelopes:
- Moved retrieval of rejecting receivers for clarity.
- Signed out users when any rejecting receivers are present.
- Improved determination of "external" users.
- Updated condition for showing the EnvelopeRejected view.
- Temporarily hardcoded ViewBag.IsExt with a TODO for future fix.
- Removed redundant code for better maintainability.
Updated <Version>, <AssemblyVersion>, and <FileVersion> in EnvelopeGenerator.Web.csproj from 3.12.0 to 3.12.1 to reflect a new patch release. No other changes were made.
Previously, rejection logic was applied to all envelopes. Now, the check for rejected receivers and the "EnvelopeRejected" view are only executed if the envelope is of the "ReadAndSign" type, preventing unnecessary rejection handling for other envelope types.
Added net7.0 to TargetFrameworks in EnvelopeGenerator.Web.csproj and introduced a conditional ItemGroup with required package references for .NET 7.0 compatibility. Also removed clipboard2.svg from the list of included static files.