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 }
}
});