using Elsa.Extensions; using Elsa.Http.Models; using Elsa.JavaScript.Notifications; using Elsa.JavaScript.TypeDefinitions.Contracts; using Elsa.JavaScript.TypeDefinitions.Models; using Elsa.Mediator.Contracts; using JetBrains.Annotations; namespace Elsa.Http.Scripting.JavaScript; /// /// Configures the JavaScript engine with additional .NET types that can be instantiated. /// [PublicAPI] public class HttpJavaScriptHandler : INotificationHandler, ITypeDefinitionProvider { private readonly ITypeDescriber _typeDescriber; /// /// Initializes a new instance of the class. /// public HttpJavaScriptHandler(ITypeDescriber typeDescriber) { _typeDescriber = typeDescriber; } /// public Task HandleAsync(EvaluatingJavaScript notification, CancellationToken cancellationToken) { var engine = notification.Engine; engine.RegisterType(); engine.RegisterType(); return Task.CompletedTask; } /// public ValueTask> GetTypeDefinitionsAsync(TypeDefinitionContext context) { var definitions = GetTypeDefinitions(context); return new(definitions); } private IEnumerable GetTypeDefinitions(TypeDefinitionContext context) { yield return _typeDescriber.DescribeType(typeof(HttpRequestHeaders)); yield return _typeDescriber.DescribeType(typeof(Downloadable)); } }