diff --git a/src/aoWebWallet/Pages/ActionPage.razor b/src/aoWebWallet/Pages/ActionPage.razor index e8a8e68..c3eff3f 100644 --- a/src/aoWebWallet/Pages/ActionPage.razor +++ b/src/aoWebWallet/Pages/ActionPage.razor @@ -52,9 +52,6 @@
} - @* - Learn More - *@ } diff --git a/src/aoWebWallet/Services/TransactionService.cs b/src/aoWebWallet/Services/TransactionService.cs index e024610..034baf3 100644 --- a/src/aoWebWallet/Services/TransactionService.cs +++ b/src/aoWebWallet/Services/TransactionService.cs @@ -46,7 +46,8 @@ public void Reset() { Target = target, Owner = wallet.Address, - Tags = action.ToDryRunTags() + Tags = action.ToDryRunTags(), + Data = action.DataValue }; var result = await aODataClient.DryRun(target, druRunRequest); @@ -171,7 +172,7 @@ static string RemoveColorCodes(string? input) var transferTags = action.ToTags(); transferTags.Add(new ArweaveBlazor.Models.Tag() { Name = "X-Wallet", Value = "aoww" }); - var idResult = await arweaveService.SendAsync(jwk, action.Target.Value, null, null, transferTags); + var idResult = await arweaveService.SendAsync(jwk, action.Target.Value, null, action.DataValue, transferTags); return new Transaction { Id = idResult }; }, x => LastTransaction.Data = x); diff --git a/src/aoWebWallet/Shared/ActionEditor.razor b/src/aoWebWallet/Shared/ActionEditor.razor index b533066..3ab94a0 100644 --- a/src/aoWebWallet/Shared/ActionEditor.razor +++ b/src/aoWebWallet/Shared/ActionEditor.razor @@ -45,6 +45,11 @@ } } + @if(AoAction.HasData) + { + + } + diff --git a/src/aoWebWallet/Shared/Components/ActionList.razor b/src/aoWebWallet/Shared/Components/ActionList.razor index 64005a0..34ed49f 100644 --- a/src/aoWebWallet/Shared/Components/ActionList.razor +++ b/src/aoWebWallet/Shared/Components/ActionList.razor @@ -43,7 +43,15 @@ private void NavigateToActionBuilder(string? actionName = null) { string? action = actionName; - if (!string.IsNullOrEmpty(action)) + if(action == "Eval") + { + var aoAction = new AoAction() { HasData = true }; + aoAction.Params.Add(new ActionParam() { Key = "Target", Value = ProcessId, ParamType = ActionParamType.Target }); + aoAction.Params.Add(new ActionParam() { Key = "Action", Value = action, ParamType = ActionParamType.Filled }); + + NavigationManager.NavigateTo($"/action?{aoAction.ToQueryString()}"); + } + else if (!string.IsNullOrEmpty(action)) { NavigationManager.NavigateTo($"/action-builder?processId={ProcessId}&actionName={Uri.EscapeDataString(action)}"); } diff --git a/src/aoWebWallet/Shared/Components/HandlerList.razor b/src/aoWebWallet/Shared/Components/HandlerList.razor index 8e67f25..9679931 100644 --- a/src/aoWebWallet/Shared/Components/HandlerList.razor +++ b/src/aoWebWallet/Shared/Components/HandlerList.razor @@ -49,7 +49,16 @@ @foreach (var handler in handlers) { - @handler + if(handler == "_eval") + { + var aoAction = new AoAction() { HasData = true }; + aoAction.Params.Add(new ActionParam() { Key = "Target", Value = ProcessId, ParamType = ActionParamType.Target }); + aoAction.Params.Add(new ActionParam() { Key = "Action", Value = "Eval", ParamType = ActionParamType.Filled }); + @handler + } + else{ + @handler + } } } diff --git a/src/aoWebWallet/Shared/NavMenu.razor b/src/aoWebWallet/Shared/NavMenu.razor index 6d2a243..ad34922 100644 --- a/src/aoWebWallet/Shared/NavMenu.razor +++ b/src/aoWebWallet/Shared/NavMenu.razor @@ -28,7 +28,7 @@ Apps Meme Frames Action Builder - @* Create Token *@ + Create Token
diff --git a/src/aoWebWallet/aoWebWallet.csproj b/src/aoWebWallet/aoWebWallet.csproj index f643b5a..c7598e5 100644 --- a/src/aoWebWallet/aoWebWallet.csproj +++ b/src/aoWebWallet/aoWebWallet.csproj @@ -29,7 +29,7 @@ - + diff --git a/src/aoww.ProcesModels.Tests/SchemaProtocolClientTests.cs b/src/aoww.ProcesModels.Tests/SchemaProtocolClientTests.cs index 0c2bfaf..1bba7d1 100644 --- a/src/aoww.ProcesModels.Tests/SchemaProtocolClientTests.cs +++ b/src/aoww.ProcesModels.Tests/SchemaProtocolClientTests.cs @@ -21,6 +21,19 @@ public async Task GetActionsTests() Assert.IsTrue(result.Any()); } + [TestMethod] + public async Task GetExternalActionsTests() + { + var processId = "kPjfXLFyjJogxGRRRe2ErdYNiexolpHpK6wGkz-UPVA"; + + var client = new SchemaProtocolClient(new AODataClient(Options.Create(new()), new HttpClient())); + + var result = await client.GetSchemaProtocolActions(processId, schemaExternal: true); + + Assert.IsNotNull(result); + Assert.IsTrue(result.Any()); + } + [TestMethod] public async Task NoActionsTests() { diff --git a/src/aoww.ProcesModels/Action/ActionParam.cs b/src/aoww.ProcesModels/Action/ActionParam.cs index 4746b23..353fdde 100644 --- a/src/aoww.ProcesModels/Action/ActionParam.cs +++ b/src/aoww.ProcesModels/Action/ActionParam.cs @@ -5,6 +5,8 @@ namespace aoww.ProcesModels.Action public class AoAction { public List Params { get; set; } = new(); + public bool HasData { get; set; } = false; + public string? DataValue { get; set; } public ActionParam? Target => Params.Where(x => x.ParamType == ActionParamType.Target).FirstOrDefault(); public IEnumerable AllWithoutTarget => Params.Where(x => x.ParamType != ActionParamType.Target); @@ -54,6 +56,9 @@ public string ToQueryString() } } + if(HasData) + sb.Append($"X-HasData=1&"); + return sb.ToString().TrimEnd('&'); } @@ -83,6 +88,14 @@ public static AoAction CreateFromQueryString(string qstring) actionValue = actionValueSplit.First(); List args = actionValueSplit.Skip(1).ToList(); + if (key.Equals($"X-{nameof(HasData)}", StringComparison.InvariantCultureIgnoreCase)) + { + if (actionValue == "1" || actionValue == "true") + action.HasData = true; + + continue; + } + if (key.Equals("Target", StringComparison.InvariantCultureIgnoreCase)) actionParamType = ActionParamType.Target; if (key.Equals("X-Quantity", StringComparison.InvariantCultureIgnoreCase)) diff --git a/src/aoww.ProcesModels/SchemaProtocol/SchemaProtocolClient.cs b/src/aoww.ProcesModels/SchemaProtocol/SchemaProtocolClient.cs index 2c4f44b..f1fc68a 100644 --- a/src/aoww.ProcesModels/SchemaProtocol/SchemaProtocolClient.cs +++ b/src/aoww.ProcesModels/SchemaProtocol/SchemaProtocolClient.cs @@ -11,10 +11,16 @@ namespace aoww.ProcesModels.SchemaProtocol { + /// + /// https://github.com/elliotsayes/Reality/blob/main/docs/Schema.md + /// + /// public class SchemaProtocolClient(AODataClient aoDataClient) { - public async Task> GetSchemaProtocolActions(string processId) + public async Task> GetSchemaProtocolActions(string processId, bool schemaExternal = false) { + string actionValue = schemaExternal ? "SchemaExternal" : "Schema"; + try { var result = await aoDataClient.DryRun(processId, new ArweaveAO.Requests.DryRunRequest @@ -22,7 +28,7 @@ public async Task> GetSchemaProtocolActions(string processI Target = processId, Tags = new List { - new ArweaveAO.Models.Tag() { Name = "Action", Value = "Schema" } + new ArweaveAO.Models.Tag() { Name = "Action", Value = actionValue } } });