diff --git a/extra/admin-api/Models/Spacebar.Models.Api/CreateChannelRequest.cs b/extra/admin-api/Models/Spacebar.Models.Api/CreateChannelRequest.cs
new file mode 100644
index 00000000..abd280c1
--- /dev/null
+++ b/extra/admin-api/Models/Spacebar.Models.Api/CreateChannelRequest.cs
@@ -0,0 +1,19 @@
+using System.Text.Json.Serialization;
+
+namespace Spacebar.Models.Api;
+
+public class CreateChannelRequest {
+ [JsonPropertyName("name")]
+ public required string Name { get; set; }
+
+ [JsonPropertyName("position")]
+ public int? Position { get; set; }
+
+ [JsonPropertyName("type")]
+ public int? Type { get; set; } // TODO enum
+
+ //
+ [JsonPropertyName("parent_id"), JsonNumberHandling(JsonNumberHandling.AllowReadingFromString | JsonNumberHandling.WriteAsString)]
+ public long? ParentId { get; set; }
+ // TODO: rest of schema
+}
\ No newline at end of file
diff --git a/extra/admin-api/Models/Spacebar.Models.Api/CreateGuildRequest.cs b/extra/admin-api/Models/Spacebar.Models.Api/CreateGuildRequest.cs
new file mode 100644
index 00000000..1bb8079a
--- /dev/null
+++ b/extra/admin-api/Models/Spacebar.Models.Api/CreateGuildRequest.cs
@@ -0,0 +1,54 @@
+using System.Text.Json.Nodes;
+using System.Text.Json.Serialization;
+
+namespace Spacebar.Models.Api;
+
+public class CreateGuildRequest {
+ [JsonPropertyName("name")]
+ public string? Name { get; set; }
+
+ [JsonPropertyName("description")]
+ public string? Description { get; set; }
+
+ [JsonPropertyName("region")]
+ public string? Region { get; set; } // deprecated?
+
+ [JsonPropertyName("icon")]
+ public string? IconData { get; set; }
+
+ [JsonPropertyName("verification_level")]
+ public int? VerificationLevel { get; set; } // TODO enum
+
+ [JsonPropertyName("default_message_notifications")]
+ public int? DefaultMessageNotifications { get; set; } // TODO enum
+
+ [JsonPropertyName("explicit_content_filter")]
+ public int? ExplicitContentFilter { get; set; } // TODO enum
+
+ [JsonPropertyName("preferred_locale")]
+ public string? PreferredLocale { get; set; }
+
+ [JsonPropertyName("roles")]
+ public List<JsonObject> Roles { get; set; } // TODO type
+
+ [JsonPropertyName("channels")]
+ public List<JsonObject> Channels { get; set; } // TODO type
+
+ [JsonPropertyName("afk_channel_id"), JsonNumberHandling(JsonNumberHandling.AllowReadingFromString | JsonNumberHandling.WriteAsString)]
+ public long? AfkChannelId { get; set; }
+
+ [JsonPropertyName("afk_timeout")]
+ public int? AfkTimeout { get; set; }
+
+ [JsonPropertyName("system_channel_id"), JsonNumberHandling(JsonNumberHandling.AllowReadingFromString | JsonNumberHandling.WriteAsString)]
+ public long? SystemChannelId { get; set; }
+
+ [JsonPropertyName("system_channel_flags")]
+ public int? SystemChannelFlags { get; set; } // TODO enum
+
+ [JsonPropertyName("guild_template_code")]
+ public string? GuildTemplateCode { get; set; }
+
+ [JsonPropertyName("staff_only")]
+ public bool? StaffOnly { get; set; }
+}
\ No newline at end of file
diff --git a/extra/admin-api/Models/Spacebar.Models.Api/RegisterRequest.cs b/extra/admin-api/Models/Spacebar.Models.Api/RegisterRequest.cs
new file mode 100644
index 00000000..232f5f83
--- /dev/null
+++ b/extra/admin-api/Models/Spacebar.Models.Api/RegisterRequest.cs
@@ -0,0 +1,46 @@
+using System.Text.Json.Serialization;
+
+namespace Spacebar.Models.Api;
+
+public class RegisterRequest {
+ [JsonPropertyName("username")]
+ public string Username { get; set; }
+
+ [JsonPropertyName("password")]
+ public string? Password { get; set; }
+
+ [JsonPropertyName("consent")]
+ public bool Consent { get; set; }
+
+ [JsonPropertyName("email")]
+ public string? Email { get; set; }
+
+ [JsonPropertyName("fingerprint")]
+ public string? Fingerprint { get; set; }
+
+ [JsonPropertyName("invite")]
+ public string? Invite { get; set; }
+
+ [JsonPropertyName("date_of_birth")]
+ public DateTimeOffset? DateOfBirth { get; set; }
+
+ [JsonPropertyName("gift_code_sku_id")]
+ public string? GiftCodeSkuId { get; set; }
+
+ [JsonPropertyName("promotional_email_opt_in")]
+ public bool? PromotionalEmailOptIn { get; set; }
+
+ [JsonPropertyName("unique_username_registration")]
+ public bool? UniqueUsernameRegistration { get; set; }
+
+ [JsonPropertyName("global_name")]
+ public bool? GlobalName { get; set; }
+}
+
+public class RegisterResponse {
+ [JsonPropertyName("token")]
+ public string Token { get; set; }
+
+ [JsonPropertyName("show_verification_form")]
+ public bool? ShowVerificationForm { get; set; }
+}
\ No newline at end of file
diff --git a/extra/admin-api/Models/Spacebar.Models.Api/SpacebarApiError.cs b/extra/admin-api/Models/Spacebar.Models.Api/SpacebarApiError.cs
index 03bf9264..27ef7d14 100644
--- a/extra/admin-api/Models/Spacebar.Models.Api/SpacebarApiError.cs
+++ b/extra/admin-api/Models/Spacebar.Models.Api/SpacebarApiError.cs
@@ -1,29 +1,51 @@
+using System.Text.Json;
using System.Text.Json.Nodes;
namespace Spacebar.Models.Api;
public class SpacebarApiException : Exception {
public int Code { get; set; }
+
+ public string ErrorMessage { get; set; }
+
public string? Request { get; set; } // Spacebar extension
+
// public Dictionary<string, FieldErrorList> Errors { get; set; }
public JsonObject? Errors { get; set; }
+
+ public JsonObject?[]? AjvErrors { get; set; }
public class FieldErrorList {
// public
}
- public SpacebarApiException(string? message) : base(message) {
-
- }
+ public SpacebarApiException(string? message) : base(message) { }
// TODO: abstract out to HTTP layer
public static SpacebarApiException FromJson(JsonObject resp) {
- var ex = new SpacebarApiException(resp["message"]!.GetValue<string>()) {
+ var msg = resp["code"]!.GetValue<int>() + " " + resp["message"]!.GetValue<string>();
+
+ if (resp.ContainsKey("_ajvErrors") && resp["_ajvErrors"]!.AsArray().Any()) {
+ msg = msg + " " + resp["_ajvErrors"]!.ToJsonString(new() { WriteIndented = true });
+ } else if (resp.ContainsKey("errors") && resp["errors"]!.AsObject().Any()) {
+ msg = msg + " " + resp["errors"]!.ToJsonString(new() { WriteIndented = true });
+ }
+
+ var ex = new SpacebarApiException(msg) {
Code = resp["code"]!.GetValue<int>(),
+ ErrorMessage = resp["message"]!.GetValue<string>(),
Request = resp["request"]?.GetValue<string>(),
- Errors = resp["errors"]?.AsObject()
+ Errors = resp["errors"]?.AsObject(),
+ AjvErrors = resp["_ajvErrors"]?.Deserialize<JsonObject?[]>(),
};
return ex;
}
+
+ public JsonObject AsJsonObject() => new() {
+ { "message", Message },
+ { "code", Code },
+ { "request", Request },
+ { "errors", Errors }
+ };
}
\ No newline at end of file
diff --git a/extra/admin-api/SpacebarAdminAPI.slnx b/extra/admin-api/SpacebarAdminAPI.slnx
index 9a6115ee..44498b0f 100644
--- a/extra/admin-api/SpacebarAdminAPI.slnx
+++ b/extra/admin-api/SpacebarAdminAPI.slnx
@@ -35,6 +35,7 @@
<Project Path="Utilities/Spacebar.Cdn.Migration/Spacebar.Cdn.Migration.csproj" />
<Project Path="Utilities/Spacebar.CleanSettingsRows/Spacebar.CleanSettingsRows.csproj" />
<Project Path="Utilities/Spacebar.Client/Spacebar.Client.csproj" />
+ <Project Path="Utilities/Spacebar.Sdk/Spacebar.Sdk.csproj" />
</Folder>
<Project Path="Spacebar.AdminApi/Spacebar.AdminApi.csproj" />
<Project Path="Spacebar.Cdn.Worker/Spacebar.Cdn.Worker.Q16-HDRI.x86_64.csproj" />
diff --git a/extra/admin-api/Utilities/Spacebar.Client/Components/ChannelMessageList.razor b/extra/admin-api/Utilities/Spacebar.Client/Components/ChannelMessageList.razor
index 6ac95c62..7fb0024a 100644
--- a/extra/admin-api/Utilities/Spacebar.Client/Components/ChannelMessageList.razor
+++ b/extra/admin-api/Utilities/Spacebar.Client/Components/ChannelMessageList.razor
@@ -3,8 +3,8 @@
@using System.Text.RegularExpressions
@using ArcaneLibs.Blazor.Components.Services
@using ArcaneLibs.Extensions
-@using Spacebar.Client.Core
@using Spacebar.Models.Generic
+@using Spacebar.Sdk.Core
@inject JsConsoleService jsConsole
@foreach (var message in Messages) {
diff --git a/extra/admin-api/Utilities/Spacebar.Client/Components/ClientManager.razor b/extra/admin-api/Utilities/Spacebar.Client/Components/ClientManager.razor
index 353d8637..2021b8d2 100644
--- a/extra/admin-api/Utilities/Spacebar.Client/Components/ClientManager.razor
+++ b/extra/admin-api/Utilities/Spacebar.Client/Components/ClientManager.razor
@@ -1,9 +1,9 @@
@using ArcaneLibs.Blazor.Components.Services
@using ArcaneLibs.Extensions
-@using Spacebar.Client.Core
@using Spacebar.Client.WebCore
@using Spacebar.Client.WebCore.Client
@using Spacebar.Models.Gateway
+@using Spacebar.Sdk.Core
@inject SessionStore sessionStore
@inject SpacebarClientProviderService clientProvider
@inject JsConsoleService jsConsole
diff --git a/extra/admin-api/Utilities/Spacebar.Client/Pages/Auth/Login.razor b/extra/admin-api/Utilities/Spacebar.Client/Pages/Auth/Login.razor
index a7ab1828..63b0c0c7 100644
--- a/extra/admin-api/Utilities/Spacebar.Client/Pages/Auth/Login.razor
+++ b/extra/admin-api/Utilities/Spacebar.Client/Pages/Auth/Login.razor
@@ -1,8 +1,7 @@
@page "/login"
@using ArcaneLibs.Blazor.Components
-@using ArcaneLibs.Extensions
-@using Spacebar.Client.Core
@using Spacebar.Client.WebCore
+@using Spacebar.Sdk.Core
@inject SpacebarClientWellKnownResolverService clientWellKnownResolver
@inject SessionStore sessionStore
@inject SpacebarClientProviderService clientProvider
diff --git a/extra/admin-api/Utilities/Spacebar.Client/Pages/Channels/@me.razor b/extra/admin-api/Utilities/Spacebar.Client/Pages/Channels/@me.razor
index 3a47c7bf..1939eda9 100644
--- a/extra/admin-api/Utilities/Spacebar.Client/Pages/Channels/@me.razor
+++ b/extra/admin-api/Utilities/Spacebar.Client/Pages/Channels/@me.razor
@@ -1,7 +1,7 @@
@* Workaround for Rider "Bad compile constant value" bug *@
@attribute [Route(PageUri)]
@using ArcaneLibs.Blazor.Components.Services
-@using Spacebar.Client.Core
+@using Spacebar.Sdk.Core
@inject JsConsoleService jsConsole
<h3>@@me</h3>
diff --git a/extra/admin-api/Utilities/Spacebar.Client/Pages/Home.razor b/extra/admin-api/Utilities/Spacebar.Client/Pages/Home.razor
index fd39d3fc..84ab85a3 100644
--- a/extra/admin-api/Utilities/Spacebar.Client/Pages/Home.razor
+++ b/extra/admin-api/Utilities/Spacebar.Client/Pages/Home.razor
@@ -2,8 +2,8 @@
@page "/app"
@using ArcaneLibs.Blazor.Components
@using ArcaneLibs.Extensions
-@using Spacebar.Client.Core
@using Spacebar.Client.WebCore
+@using Spacebar.Sdk.Core
@inject SpacebarClientWellKnownResolverService cswkrs
@inject SessionStore sessionStore
diff --git a/extra/admin-api/Utilities/Spacebar.Client/Program.cs b/extra/admin-api/Utilities/Spacebar.Client/Program.cs
index 7d7d88e1..6a435b88 100644
--- a/extra/admin-api/Utilities/Spacebar.Client/Program.cs
+++ b/extra/admin-api/Utilities/Spacebar.Client/Program.cs
@@ -2,8 +2,8 @@ using ArcaneLibs.Blazor.Components.Services;
using Microsoft.AspNetCore.Components.Web;
using Microsoft.AspNetCore.Components.WebAssembly.Hosting;
using Spacebar.Client;
-using Spacebar.Client.Core;
using Spacebar.Client.WebCore;
+using Spacebar.Sdk.Core;
var builder = WebAssemblyHostBuilder.CreateDefault(args);
builder.RootComponents.Add<App>("#app");
diff --git a/extra/admin-api/Utilities/Spacebar.Client/Spacebar.Client.csproj b/extra/admin-api/Utilities/Spacebar.Client/Spacebar.Client.csproj
index 1df6e636..95953aca 100644
--- a/extra/admin-api/Utilities/Spacebar.Client/Spacebar.Client.csproj
+++ b/extra/admin-api/Utilities/Spacebar.Client/Spacebar.Client.csproj
@@ -28,14 +28,15 @@
</ItemGroup>
<ItemGroup>
- <ServiceWorker Include="wwwroot\service-worker.js" PublishedContent="wwwroot\service-worker.published.js"/>
- </ItemGroup>
-
- <ItemGroup>
<ProjectReference Include="..\..\Models\Spacebar.Models.AdminApi\Spacebar.Models.AdminApi.csproj"/>
<ProjectReference Include="..\..\Models\Spacebar.Models.Api\Spacebar.Models.Api.csproj"/>
<ProjectReference Include="..\..\Models\Spacebar.Models.Gateway\Spacebar.Models.Gateway.csproj"/>
<ProjectReference Include="..\..\Models\Spacebar.Models.Generic\Spacebar.Models.Generic.csproj"/>
+ <ProjectReference Include="..\Spacebar.Sdk\Spacebar.Sdk.csproj" />
+ </ItemGroup>
+
+ <ItemGroup>
+ <ServiceWorker Include="wwwroot\service-worker.js" PublishedContent="wwwroot\service-worker.published.js"/>
</ItemGroup>
</Project>
diff --git a/extra/admin-api/Utilities/Spacebar.Client/Core/MarkdownEnumerator.cs b/extra/admin-api/Utilities/Spacebar.Sdk/Core/MarkdownEnumerator.cs
index 60068135..041d7156 100644
--- a/extra/admin-api/Utilities/Spacebar.Client/Core/MarkdownEnumerator.cs
+++ b/extra/admin-api/Utilities/Spacebar.Sdk/Core/MarkdownEnumerator.cs
@@ -1,4 +1,4 @@
-namespace Spacebar.Client.Core;
+namespace Spacebar.Sdk.Core;
public class MarkdownEnumerator {
public IEnumerable<BaseMarkdownNode> EnumerateMarkdownComponents(string text) {
diff --git a/extra/admin-api/Utilities/Spacebar.Client/Core/SpacebarClient.cs b/extra/admin-api/Utilities/Spacebar.Sdk/Core/SpacebarClient.cs
index cd624e5d..5843b271 100644
--- a/extra/admin-api/Utilities/Spacebar.Client/Core/SpacebarClient.cs
+++ b/extra/admin-api/Utilities/Spacebar.Sdk/Core/SpacebarClient.cs
@@ -1,15 +1,17 @@
-using System.Data.Common;
using System.Diagnostics;
using System.Net.Http.Json;
using System.Net.WebSockets;
using System.Text.Json;
using System.Text.Json.Nodes;
+using System.Text.Json.Serialization;
using ArcaneLibs.Extensions;
+using Microsoft.Extensions.DependencyInjection;
+using Microsoft.Extensions.Logging;
using Spacebar.Models.Api;
using Spacebar.Models.Gateway;
using Spacebar.Models.Generic;
-namespace Spacebar.Client.Core;
+namespace Spacebar.Sdk.Core;
public class UnauthenticatedSpacebarClient(ILogger<UnauthenticatedSpacebarClient> logger, SpacebarClientWellKnown wellKnown) {
public async Task<LoginResponse> LoginAsync(LoginRequest request) {
@@ -20,6 +22,15 @@ public class UnauthenticatedSpacebarClient(ILogger<UnauthenticatedSpacebarClient
if (!resp.IsSuccessStatusCode) throw SpacebarApiException.FromJson((await resp.Content.ReadFromJsonAsync<JsonObject>())!);
return (await resp.Content.ReadFromJsonAsync<LoginResponse>())!;
}
+
+ public async Task<RegisterResponse> RegisterAsync(RegisterRequest request) {
+ // TODO: rebase
+ using var hc = new HttpClient();
+ var resp = await hc.PostAsJsonAsync(new Uri(wellKnown.Api.GetApiBaseUrl(), "auth/register"), request);
+ // TODO: abstract out
+ if (!resp.IsSuccessStatusCode) throw SpacebarApiException.FromJson((await resp.Content.ReadFromJsonAsync<JsonObject>())!);
+ return (await resp.Content.ReadFromJsonAsync<RegisterResponse>())!;
+ }
}
public class AuthenticatedSpacebarClient {
@@ -51,8 +62,16 @@ public class AuthenticatedSpacebarClient {
ApiHttpClient.Dispose();
}
- public SpacebarClientChannel GetChannel(long channelId) {
- return new(this, channelId);
+ public SpacebarClientChannel GetChannel(long channelId) => new(this, channelId);
+ public SpacebarClientGuild GetGuild(long guildId) => new(this, guildId);
+
+ public async Task<Guild> CreateGuild(CreateGuildRequest req) {
+ var resp = await ApiHttpClient.PostAsJsonAsync("guilds", req, new JsonSerializerOptions() {
+ DefaultIgnoreCondition = JsonIgnoreCondition.WhenWritingNull
+ });
+ // TODO: abstract out
+ if (!resp.IsSuccessStatusCode) throw SpacebarApiException.FromJson((await resp.Content.ReadFromJsonAsync<JsonObject>())!);
+ return (await resp.Content.ReadFromJsonAsync<Guild>())!;
}
}
@@ -74,6 +93,30 @@ public class SpacebarClientChannel(AuthenticatedSpacebarClient client, long chan
}
}
+public class SpacebarClientGuild(AuthenticatedSpacebarClient client, long guildId) {
+ public long Id => guildId;
+
+ public async Task<List<Channel>> GetChannelsAsync() {
+ var uri = $"guilds/{guildId}/channels";
+
+ var resp = await client.ApiHttpClient.GetAsync(uri);
+ // TODO: abstract out
+ if (!resp.IsSuccessStatusCode) throw SpacebarApiException.FromJson((await resp.Content.ReadFromJsonAsync<JsonObject>())!);
+ var data = await resp.Content.ReadFromJsonAsync<List<JsonObject>>();
+ Console.WriteLine(data.ToJson(indent: false, ignoreNull: true));
+ return data.Select(x => x.Deserialize<Channel>()).ToList();
+ }
+
+ public async Task<Channel> CreateChannelAsync(CreateChannelRequest req) {
+ var resp = await client.ApiHttpClient.PostAsJsonAsync($"guilds/{guildId}/channels", req, new JsonSerializerOptions() {
+ DefaultIgnoreCondition = JsonIgnoreCondition.WhenWritingNull
+ });
+ // TODO: abstract out
+ if (!resp.IsSuccessStatusCode) throw SpacebarApiException.FromJson((await resp.Content.ReadFromJsonAsync<JsonObject>())!);
+ return (await resp.Content.ReadFromJsonAsync<Channel>())!;
+ }
+}
+
public class AuthenticatedSpacebarGatewayClient(ILogger<AuthenticatedSpacebarGatewayClient> logger, SpacebarClientWellKnown wellKnown, string token) {
public ClientWebSocket RawClientWebSocket = new();
public int Sequence;
diff --git a/extra/admin-api/Utilities/Spacebar.Client/Core/SpacebarClientProviderService.cs b/extra/admin-api/Utilities/Spacebar.Sdk/Core/SpacebarClientProviderService.cs
index a732c9a5..5f6ab094 100644
--- a/extra/admin-api/Utilities/Spacebar.Client/Core/SpacebarClientProviderService.cs
+++ b/extra/admin-api/Utilities/Spacebar.Sdk/Core/SpacebarClientProviderService.cs
@@ -1,6 +1,8 @@
using ArcaneLibs.Collections;
+using Microsoft.Extensions.DependencyInjection;
+using Microsoft.Extensions.Logging;
-namespace Spacebar.Client.Core;
+namespace Spacebar.Sdk.Core;
public class SpacebarClientProviderService(ILogger<SpacebarClientProviderService> logger, IServiceProvider serviceProvider, SpacebarClientWellKnownResolverService clientWellKnownResolver) {
private static readonly SemaphoreCache<UnauthenticatedSpacebarClient> UnauthenticatedClientCache = new();
diff --git a/extra/admin-api/Utilities/Spacebar.Client/Core/SpacebarClientWellKnownResolver.cs b/extra/admin-api/Utilities/Spacebar.Sdk/Core/SpacebarClientWellKnownResolver.cs
index a106435b..1530f922 100644
--- a/extra/admin-api/Utilities/Spacebar.Client/Core/SpacebarClientWellKnownResolver.cs
+++ b/extra/admin-api/Utilities/Spacebar.Sdk/Core/SpacebarClientWellKnownResolver.cs
@@ -1,13 +1,21 @@
using System.Net.Http.Json;
using System.Text.Json.Serialization;
+using ArcaneLibs.Extensions;
+using Microsoft.Extensions.Logging;
-namespace Spacebar.Client.Core;
+namespace Spacebar.Sdk.Core;
public class SpacebarClientWellKnownResolverService(ILogger<SpacebarClientWellKnownResolverService> logger) {
+ private static string _getBaseUrl(string input) {
+ if (input.StartsWithAnyOf("https://", "http://")) return input;
+ return "https://" + input;
+ }
+
public async Task<SpacebarClientWellKnown> ResolveClientWellKnown(string serverName) {
using var hc = new HttpClient();
- logger.LogInformation("Resolving .well-known for {serverName}", serverName);
- return await hc.GetFromJsonAsync<SpacebarClientWellKnown>($"https://{serverName}/.well-known/spacebar/client")!;
+ var filtered = _getBaseUrl(serverName);
+ logger.LogInformation("Resolving .well-known for {serverName} ({filtered})", serverName, filtered);
+ return await hc.GetFromJsonAsync<SpacebarClientWellKnown>($"{filtered}/.well-known/spacebar/client")!;
}
}
@@ -23,7 +31,7 @@ public class SpacebarClientWellKnown {
[JsonPropertyName("gateway")]
public required GatewayWellKnownData Gateway { get; set; }
-
+
public class GenericUrlWellKnownData {
[JsonPropertyName("baseUrl")]
public required string BaseUrl { get; set; }
@@ -32,7 +40,7 @@ public class SpacebarClientWellKnown {
public class ApiWellKnownData : GenericUrlWellKnownData {
[JsonPropertyName("apiVersions")]
public required ApiVersionsData ApiVersions { get; set; }
-
+
// Utility methods
public Uri GetApiBaseUrl(string? version = null) {
return new Uri(BaseUrl + "/api/v" + (version ?? ApiVersions.Default));
diff --git a/extra/admin-api/Utilities/Spacebar.Sdk/Spacebar.Sdk.csproj b/extra/admin-api/Utilities/Spacebar.Sdk/Spacebar.Sdk.csproj
new file mode 100644
index 00000000..859f42ef
--- /dev/null
+++ b/extra/admin-api/Utilities/Spacebar.Sdk/Spacebar.Sdk.csproj
@@ -0,0 +1,19 @@
+<Project Sdk="Microsoft.NET.Sdk">
+
+ <PropertyGroup>
+ <TargetFramework>net10.0</TargetFramework>
+ <ImplicitUsings>enable</ImplicitUsings>
+ <Nullable>enable</Nullable>
+ </PropertyGroup>
+
+ <ItemGroup>
+ <PackageReference Include="ArcaneLibs.Blazor.Components" Version="1.0.1-preview.20260505-124817"/>
+ </ItemGroup>
+
+ <ItemGroup>
+ <ProjectReference Include="..\..\Models\Spacebar.Models.AdminApi\Spacebar.Models.AdminApi.csproj"/>
+ <ProjectReference Include="..\..\Models\Spacebar.Models.Api\Spacebar.Models.Api.csproj"/>
+ <ProjectReference Include="..\..\Models\Spacebar.Models.Gateway\Spacebar.Models.Gateway.csproj"/>
+ <ProjectReference Include="..\..\Models\Spacebar.Models.Generic\Spacebar.Models.Generic.csproj"/>
+ </ItemGroup>
+</Project>
|