Compare commits

..

4 Commits

Author SHA1 Message Date
Jedd Morgan c517dead03 Internal 2026-03-24 10:24:43 +00:00
Jedd Morgan 2b61ab7d2e fallback mechanism 2026-03-24 10:04:44 +00:00
Jedd Morgan 4b319499c3 Fix mistake 2026-03-23 16:10:44 +00:00
Jedd Morgan d4055c6ff1 Avoid deprecated fields 2026-03-23 16:03:20 +00:00
152 changed files with 2656 additions and 3665 deletions
+2 -2
View File
@@ -3,11 +3,11 @@
"isRoot": true, "isRoot": true,
"tools": { "tools": {
"csharpier": { "csharpier": {
"version": "1.2.6", "version": "1.1.2",
"commands": [ "commands": [
"csharpier" "csharpier"
], ],
"rollForward": false "rollForward": false
} }
} }
} }
+2 -7
View File
@@ -241,7 +241,6 @@ dotnet_diagnostic.ide0037.severity = suggestion # Use inferred member names: Som
dotnet_diagnostic.ide0301.severity = suggestion # Use collection expression for empty: Subjective, intent dotnet_diagnostic.ide0301.severity = suggestion # Use collection expression for empty: Subjective, intent
dotnet_diagnostic.ide0021.severity = suggestion # Use expression body for constructors : Subjective dotnet_diagnostic.ide0021.severity = suggestion # Use expression body for constructors : Subjective
dotnet_diagnostic.ide0090.severity = suggestion # Simplify new expression : Subjective dotnet_diagnostic.ide0090.severity = suggestion # Simplify new expression : Subjective
dotnet_diagnostic.ide0057.severity = suggestion # Use range operator : Subjective style
dotnet_diagnostic.ide0047.severity = suggestion # Parentheses preferences: IDEs don't properly pick it up dotnet_diagnostic.ide0047.severity = suggestion # Parentheses preferences: IDEs don't properly pick it up
dotnet_diagnostic.ide0130.severity = suggestion # Namespace does not match folder structure : Aspirational dotnet_diagnostic.ide0130.severity = suggestion # Namespace does not match folder structure : Aspirational
@@ -317,7 +316,7 @@ indent_style = space
indent_size = 2 indent_size = 2
tab_width = 2 tab_width = 2
# Verify settings # Verify
[*.{received,verified}.{json}] [*.{received,verified}.{json}]
charset = utf-8-bom charset = utf-8-bom
end_of_line = lf end_of_line = lf
@@ -325,8 +324,4 @@ indent_size = unset
indent_style = unset indent_style = unset
insert_final_newline = false insert_final_newline = false
tab_width = unset tab_width = unset
trim_trailing_whitespace = false trim_trailing_whitespace = false
[*.{received,verified}.{json}]
indent_size = 2
indent_style = space
+3 -3
View File
@@ -15,7 +15,7 @@ on:
jobs: jobs:
integration-test: integration-test:
env: env:
Solution: "Speckle.Sdk.slnx" Solution: "Speckle.Sdk.sln"
runs-on: ubuntu-latest runs-on: ubuntu-latest
steps: steps:
- name: Checkout - name: Checkout
@@ -24,7 +24,7 @@ jobs:
- name: Setup .NET - name: Setup .NET
uses: actions/setup-dotnet@v5 uses: actions/setup-dotnet@v5
with: with:
dotnet-version: 10.x.x dotnet-version: 8.x.x
cache: true cache: true
cache-dependency-path: "**/packages.lock.json" cache-dependency-path: "**/packages.lock.json"
@@ -54,7 +54,7 @@ jobs:
run: dotnet test ${{ env.Solution }} --filter "(Category=Integration)&(Server!=Public)" --configuration Release --no-build --no-restore --verbosity=normal /p:AltCover=true /p:AltCoverAttributeFilter=ExcludeFromCodeCoverage run: dotnet test ${{ env.Solution }} --filter "(Category=Integration)&(Server!=Public)" --configuration Release --no-build --no-restore --verbosity=normal /p:AltCover=true /p:AltCoverAttributeFilter=ExcludeFromCodeCoverage
- name: Upload coverage reports to Codecov with GitHub Action - name: Upload coverage reports to Codecov with GitHub Action
uses: codecov/codecov-action@v6 uses: codecov/codecov-action@v5
continue-on-error: true continue-on-error: true
with: with:
fail_ci_if_error: true fail_ci_if_error: true
+3 -3
View File
@@ -10,7 +10,7 @@ on:
jobs: jobs:
build: build:
env: env:
Solution: "Speckle.Sdk.slnx" Solution: "Speckle.Sdk.sln"
runs-on: ubuntu-latest runs-on: ubuntu-latest
steps: steps:
- name: Checkout - name: Checkout
@@ -19,7 +19,7 @@ jobs:
- name: Setup .NET - name: Setup .NET
uses: actions/setup-dotnet@v5 uses: actions/setup-dotnet@v5
with: with:
dotnet-version: 10.x.x dotnet-version: 8.x.x
cache: true cache: true
cache-dependency-path: "**/packages.lock.json" cache-dependency-path: "**/packages.lock.json"
@@ -42,7 +42,7 @@ jobs:
run: dotnet pack ${{ env.Solution }} --configuration Release --no-build run: dotnet pack ${{ env.Solution }} --configuration Release --no-build
- name: Upload coverage reports to Codecov with GitHub Action - name: Upload coverage reports to Codecov with GitHub Action
uses: codecov/codecov-action@v6 uses: codecov/codecov-action@v5
continue-on-error: true continue-on-error: true
with: with:
fail_ci_if_error: true fail_ci_if_error: true
+1 -1
View File
@@ -19,7 +19,7 @@ jobs:
- name: Setup .NET - name: Setup .NET
uses: actions/setup-dotnet@v5 uses: actions/setup-dotnet@v5
with: with:
dotnet-version: 10.x.x dotnet-version: 8.x.x
cache: true cache: true
cache-dependency-path: "**/packages.lock.json" cache-dependency-path: "**/packages.lock.json"
+1 -3
View File
@@ -46,7 +46,7 @@
<!-- Globalization rules --> <!-- Globalization rules -->
CA1303;CA1304;CA1305;CA1307;CA1308;CA1309;CA1310;CA1311; CA1303;CA1304;CA1305;CA1307;CA1308;CA1309;CA1310;CA1311;
<!-- Logging --> <!-- Logging -->
CA1848;CA1727;CA1873; CA1848;CA1727;
<!-- Others we don't want --> <!-- Others we don't want -->
CA1815;CA1725; CA1815;CA1725;
<!-- Naming things is hard enough --> <!-- Naming things is hard enough -->
@@ -60,8 +60,6 @@
<PropertyGroup> <PropertyGroup>
<!-- Expose the repository root to all projects --> <!-- Expose the repository root to all projects -->
<RepositoryRoot>$(MSBuildThisFileDirectory)</RepositoryRoot> <RepositoryRoot>$(MSBuildThisFileDirectory)</RepositoryRoot>
<!-- Since we have many projects in this repo, some ILRepacked, others not, it's hard to keep track of transient dependencies enough -->
<CentralPackageTransitivePinningEnabled>false</CentralPackageTransitivePinningEnabled>
</PropertyGroup> </PropertyGroup>
<ItemGroup> <ItemGroup>
<None Include="..\..\README.md" Pack="true" PackagePath="\" /> <None Include="..\..\README.md" Pack="true" PackagePath="\" />
+2 -2
View File
@@ -2,10 +2,10 @@
<PropertyGroup Condition="'$(IsTestProject)' == 'true' or '$(TestProjectAnalyserRules)' == 'true' "> <PropertyGroup Condition="'$(IsTestProject)' == 'true' or '$(TestProjectAnalyserRules)' == 'true' ">
<NoWarn> <NoWarn>
<!-- Things we need to test --> <!-- Things we need to test -->
CS0618;CA1034;CA2201;CA1051;CA1040;CA1724;CA1065;CA2022;CA1835; CS0618;CA1034;CA2201;CA1051;CA1040;CA1724;CA1065;
IDE0044;IDE0130;CA1508; IDE0044;IDE0130;CA1508;
<!-- Analysers that provide no tangeable value to a test project --> <!-- Analysers that provide no tangeable value to a test project -->
CA5394;CA2007;CA1852;CA1819;CA1711;CA1063;CA1816;CA2234;CS8618;CA1054;CA1810;CA2208;CA1019;CA1831;CA1515; CA5394;CA2007;CA1852;CA1819;CA1711;CA1063;CA1816;CA2234;CS8618;CA1054;CA1810;CA2208;CA1019;CA1831;
$(NoWarn); $(NoWarn);
</NoWarn> </NoWarn>
</PropertyGroup> </PropertyGroup>
+20 -53
View File
@@ -1,75 +1,42 @@
<Project> <Project>
<!--
NOTICE ABOUT PACKAGE VERSIONS:
- For our SDK nugets: Be very careful introducing new dependencies, or bumping existing ones.
We must consider dll conflicts in connector host apps, and other third-party plugins!
- Check lockfiles after making a change, ensure your changes only affect the projects you intended to change.
- Any dependency that uses the "Version=[x.x.x,)" or "Version=[x.x.x]` syntax is pinned for a good reason, and hopfully includes a comment saying why
see https://learn.microsoft.com/en-us/nuget/concepts/package-versioning?tabs=semver20sort#version-ranges
and https://learn.microsoft.com/en-us/nuget/concepts/package-versioning?tabs=semver20sort#best-practice
for best practices.
- Dependencies where "latest and greatest" is generally preferred should use this syntax `Version="x.x.x"`
and bumped manually as needed; no dependency bump is safe so each change must be tested.
- Try and keep versions of dependencies of the .NET Standard 2.0 targets lower or equal to the
versions used by the lowest .NET Core target.
- For nugets that are released alongside dotnet, try and keep the .NET targets aligned with their .NET version
(e.g. 8.x.x for .NET8, 10.x.x for .NET10).
Exceptions can be made when we genuinely need features from higher versions, for `Microsoft.BCL.*` packages,
or where ILRepack affords us extra flexibility.
- Avoid having production versions of our SDKs depend on pre-release packages
If you must suppress NU5104, do so inline e.g. `<PackageReference Include="System.CommandLine" NoWarn="NU5104" />`.
-->
<ItemGroup> <ItemGroup>
<PackageVersion Include="altcover" Version="9.0.102" /> <PackageVersion Include="altcover" Version="9.0.1" />
<PackageVersion Include="AwesomeAssertions" Version="9.4.0" /> <PackageVersion Include="AwesomeAssertions" Version="8.1.0" />
<PackageVersion Include="BenchmarkDotNet" Version="0.14.0" /> <PackageVersion Include="BenchmarkDotNet" Version="0.14.0" />
<PackageVersion Include="Bullseye" Version="6.1.0" /> <PackageVersion Include="Bullseye" Version="6.0.0" />
<PackageVersion Include="GraphQL.Client" Version="6.1.0" /> <PackageVersion Include="GraphQL.Client" Version="6.0.0" />
<PackageVersion Include="Glob" Version="1.1.9" /> <PackageVersion Include="Glob" Version="1.1.9" />
<PackageVersion Include="HttpMultipartParser" Version="10.0.0" /> <PackageVersion Include="HttpMultipartParser" Version="9.0.0" />
<PackageVersion Include="ILRepack.FullAuto" Version="1.6.0" /> <PackageVersion Include="ILRepack.FullAuto" Version="1.6.0" />
<!-- Keep aligned with channels --> <PackageVersion Include="Microsoft.CSharp" Version="4.7.0" />
<PackageVersion Include="Microsoft.Bcl.AsyncInterfaces" Version="[9.0.4,)" />
<!-- Keep version aligned with the lowest .NET framework we need to support (e.g. lowest non-eol) -->
<PackageVersion Include="Microsoft.CSharp" Version="[4.7.0,)" />
<!-- Keep at exactly 7.0.5 for side by side with V2 --> <!-- Keep at exactly 7.0.5 for side by side with V2 -->
<PackageVersion Include="Microsoft.Data.Sqlite" Version="[7.0.5,)" /> <PackageVersion Include="Microsoft.Data.Sqlite" Version="[7.0.5,)" />
<PackageVersion Include="Microsoft.Extensions.ObjectPool" Version="9.0.4" /> <PackageVersion Include="Microsoft.Extensions.ObjectPool" Version="9.0.4" />
<PackageVersion Include="Microsoft.NET.Test.Sdk" Version="18.3.0" /> <PackageVersion Include="Microsoft.NET.Test.Sdk" Version="17.13.0" />
<PackageVersion Include="Microsoft.Extensions.DependencyInjection" Version="10.0.6" /> <PackageVersion Include="Microsoft.Extensions.DependencyInjection" Version="[2.2.0,)" />
<PackageVersion Include="Microsoft.Extensions.Logging" Version="10.0.6" /> <PackageVersion Include="Microsoft.Extensions.DependencyInjection.Abstractions" Version="[2.2.0,)" />
<PackageVersion Include="Microsoft.Bcl.AsyncInterfaces" Version="[9.0.4,)" />
<PackageVersion Include="Microsoft.Extensions.Logging" Version="[2.2.0,)" />
<PackageVersion Include="Moq" Version="4.20.72" /> <PackageVersion Include="Moq" Version="4.20.72" />
<PackageVersion Include="Newtonsoft.Json.Schema" Version="4.0.1" /> <PackageVersion Include="Newtonsoft.Json.Schema" Version="4.0.1" />
<PackageVersion Include="Open.ChannelExtensions" Version="9.1.0" /> <PackageVersion Include="Open.ChannelExtensions" Version="9.1.0" />
<!-- Pinned due to breaking changes in newer versions --> <PackageVersion Include="Polly" Version="7.2.3" />
<PackageVersion Include="Polly" Version="[7.2.3,8.0.0]" /> <PackageVersion Include="Polly.Contrib.WaitAndRetry" Version="1.1.1" />
<PackageVersion Include="Polly.Contrib.WaitAndRetry" Version="[1.1.1,]" /> <PackageVersion Include="Polly.Extensions.Http" Version="3.0.0" />
<PackageVersion Include="Polly.Extensions.Http" Version="[3.0.0,]" />
<PackageVersion Include="RichardSzalay.MockHttp" Version="7.0.0" /> <PackageVersion Include="RichardSzalay.MockHttp" Version="7.0.0" />
<PackageVersion Include="Speckle.Newtonsoft.Json" Version="13.0.2" /> <PackageVersion Include="Speckle.Newtonsoft.Json" Version="13.0.2" />
<PackageVersion Include="Speckle.DoubleNumerics" Version="4.1.0" /> <PackageVersion Include="Speckle.DoubleNumerics" Version="4.1.0" />
<PackageVersion Include="SimpleExec" Version="13.0.0" /> <PackageVersion Include="SimpleExec" Version="12.0.0" />
<!-- Pinned due to breaking changes in newer versions --> <PackageVersion Include="System.CommandLine" Version="2.0.0-beta4.22272.1" />
<PackageVersion Include="System.CommandLine" Version="[2.0.0-beta4.22272.1]" /> <PackageVersion Include="System.Threading.Channels" Version="9.0.4" />
<!-- 9.0.4 is minimum version for .net standard2.0 because it's the first version to include async enumerables in the .NET standard target -->
<PackageVersion Include="System.Threading.Channels" Version="[9.0.4,]" />
<PackageVersion Include="Verify.Quibble" Version="2.1.1" /> <PackageVersion Include="Verify.Quibble" Version="2.1.1" />
<PackageVersion Include="Verify.Xunit" Version="31.12.5" /> <PackageVersion Include="Verify.Xunit" Version="29.4.0" />
<PackageVersion Include="System.Text.Json" Version="8.0.5" /> <PackageVersion Include="System.Text.Json" Version="8.0.5" />
<PackageVersion Include="xunit" Version="2.9.3" /> <PackageVersion Include="xunit" Version="2.9.3" />
<PackageVersion Include="xunit.assert" Version="2.9.3" /> <PackageVersion Include="xunit.assert" Version="2.9.3" />
<PackageVersion Include="xunit.runner.visualstudio" Version="3.1.5" /> <PackageVersion Include="xunit.runner.visualstudio" Version="3.0.2" />
<GlobalPackageReference Include="PolySharp" Version="1.15.0" /> <GlobalPackageReference Include="PolySharp" Version="1.15.0" />
<!-- Will need to test how 10 behaves... --> <GlobalPackageReference Include="Microsoft.SourceLink.GitHub" Version="8.0.0" />
<GlobalPackageReference Include="Microsoft.SourceLink.GitHub" Version="[8.0.0,]" />
<GlobalPackageReference Include="Speckle.InterfaceGenerator" Version="0.9.6" /> <GlobalPackageReference Include="Speckle.InterfaceGenerator" Version="0.9.6" />
</ItemGroup> </ItemGroup>
</Project> </Project>
+13 -16
View File
@@ -18,7 +18,7 @@ Speckle | Sharp | SDK
# Repo structure # Repo structure
This repo is the home of our Speckle .NET SDK. This repo is the home of our next-generation Speckle .NET SDK. It uses .NET Standard 2.0 and has been tested on Windows and MacOS.
- **SDK** - **SDK**
- [`Speckle.Sdk`](https://github.com/specklesystems/speckle-sharp-sdk/tree/dev/src/Speckle.Sdk): Send/Receive operations, Serialization, API wrappers, and more!. - [`Speckle.Sdk`](https://github.com/specklesystems/speckle-sharp-sdk/tree/dev/src/Speckle.Sdk): Send/Receive operations, Serialization, API wrappers, and more!.
@@ -42,27 +42,25 @@ Make sure to also check and ⭐️ these other repositories:
## Documentation ## Documentation
Developer docs are a bit patchy. See our [📚 Speckle Docs website](https://docs.speckle.systems/developers/introduction) Comprehensive developer and user documentation can be found in our:
### 📚 [Speckle Docs website](https://speckle.guide/dev/)
# Developing and Debugging # Developing and Debugging
### Building
To build solutions in this repo, version [10.0.2xx of the .NET SDK](https://dotnet.microsoft.com/en-us/download/dotnet/10.0) is required. Ensure you're using a [8.0.4xx](https://dotnet.microsoft.com/en-us/download/dotnet/8.0) .NET SDK.
After cloning this repository, just restore all the NuGet packages and hit Build!
It is recommended to use JetBrains Rider (version 2025.3 or greater) or Microsoft Visual Studio 2026 (version 18.4 or greater) ### Developing
From there you can open the main `Speckle.Sdk.slnx` solution and build the project. It is highly recommended you use
- Either Jetbrains Rider or Visual Studio 2022
### Formatting - Ensure your IDE is set to use [the correct .NET SDK version](https://github.com/specklesystems/speckle-sharp-sdk/blob/main/global.json) (newer major versions may work, but may incorrectly run analysers we haven't configured)
We're using [CSharpier](https://github.com/belav/csharpier) to format our code. You can use Csharpier in a few ways: - You should install the cshapier plugin ([Rider](https://plugins.jetbrains.com/plugin/18243-csharpier), [VS](https://marketplace.visualstudio.com/items?itemName=csharpier.CSharpier)) and configure it to run on save
- Install CSharpier and reformat from CLI
```
dotnet tool restore
dotnet csharpier format ./
```
- Install the CSharpier extension for [Rider](https://plugins.jetbrains.com/plugin/18243-csharpier) or [Visual Studio](https://marketplace.visualstudio.com/items?itemName=csharpier.CSharpier)<br/>
For best DX, we recommend turning on CSharpier's `reformat on save` setting if you've installed it in your IDE.
Docs are a bit patchy [https://docs.speckle.systems/developers/looking-for-developer-docs](https://docs.speckle.systems/developers/looking-for-developer-docs)
### Tests ### Tests
@@ -73,7 +71,6 @@ You must have docker installed. Then you can run `docker compose up` from the ro
In CI, they will be run against both the public and private versions of the server. In CI, they will be run against both the public and private versions of the server.
It is important that we remain compatible with both server versions. It is important that we remain compatible with both server versions.
## Contributing ## Contributing
Before embarking on submitting a patch, please make sure you read: Before embarking on submitting a patch, please make sure you read:
+141
View File
@@ -0,0 +1,141 @@
Microsoft Visual Studio Solution File, Format Version 12.00
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Speckle.Sdk", "src\Speckle.Sdk\Speckle.Sdk.csproj", "{A413E196-3696-4F48-B635-04B5F76BF9C9}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Speckle.Sdk.Tests.Unit", "tests\Speckle.Sdk.Tests.Unit\Speckle.Sdk.Tests.Unit.csproj", "{99AE2273-12C5-4A9D-9FDD-19F8B394B5E2}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Speckle.Objects", "src\Speckle.Objects\Speckle.Objects.csproj", "{181F50AA-DD2A-4541-98EF-B868E2D06B9A}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Speckle.Objects.Tests.Unit", "tests\Speckle.Objects.Tests.Unit\Speckle.Objects.Tests.Unit.csproj", "{A0338FC0-3011-498F-AD09-01230FABD3ED}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "src", "src", "{5CB96C27-FC5B-4A41-86B6-951AF99B8116}"
ProjectSection(SolutionItems) = preProject
src\graphql.config.yml = src\graphql.config.yml
EndProjectSection
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "tests", "tests", "{35047EE7-AD1D-4741-80A7-8F0E874718E9}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "config", "config", "{DA2AED52-58F9-471E-8AD8-102FD36129E3}"
ProjectSection(SolutionItems) = preProject
.csharpierrc.yaml = .csharpierrc.yaml
.editorconfig = .editorconfig
Directory.Build.props = Directory.Build.props
Directory.Packages.props = Directory.Packages.props
global.json = global.json
README.md = README.md
docker-compose.yml = docker-compose.yml
CodeMetricsConfig.txt = CodeMetricsConfig.txt
Directory.Build.Targets = Directory.Build.Targets
.config\dotnet-tools.json = .config\dotnet-tools.json
docker-compose-internal.yml = docker-compose-internal.yml
EndProjectSection
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "build", "build", "{58D37DA9-F948-48CA-9A73-F5BBBD533DBF}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "build", "build\build.csproj", "{9B8DDEB5-37C7-49B5-984D-C65DE5FCB7B7}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Speckle.Sdk.Serialization.Tests", "tests\Speckle.Sdk.Serialization.Tests\Speckle.Sdk.Serialization.Tests.csproj", "{AA1E1E51-49AE-4F71-84B1-938E19695BE0}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Speckle.Sdk.Tests.Integration", "tests\Speckle.Sdk.Tests.Integration\Speckle.Sdk.Tests.Integration.csproj", "{4FB41A6D-D139-4111-8115-E3F9F6BEAF24}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "workflows", "workflows", "{B623BD21-5CAA-43F9-A539-1835276C220E}"
ProjectSection(SolutionItems) = preProject
.github\workflows\pr.yml = .github\workflows\pr.yml
.github\workflows\release.yml = .github\workflows\release.yml
.github\workflows\integration-test.yml = .github\workflows\integration-test.yml
EndProjectSection
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Speckle.Sdk.Tests.Performance", "tests\Speckle.Sdk.Tests.Performance\Speckle.Sdk.Tests.Performance.csproj", "{870E3396-E6F7-43AE-B120-E651FA4F46BD}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Speckle.Sdk.Serialization.Testing", "tests\Speckle.Sdk.Serialization.Testing\Speckle.Sdk.Serialization.Testing.csproj", "{FF922B6D-D416-4348-8CB8-0C8B28691070}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Speckle.Sdk.Dependencies", "src\Speckle.Sdk.Dependencies\Speckle.Sdk.Dependencies.csproj", "{27584AB4-8ACD-4850-8CC2-7E5BC739FB78}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Speckle.Sdk.Testing", "tests\Speckle.Sdk.Testing\Speckle.Sdk.Testing.csproj", "{7B617C0D-2354-415C-993C-5071D4113E27}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "performance", "performance", "{FFB07238-87E8-463A-AA39-3B38AAAA94C1}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Speckle.Automate.Sdk", "src\Speckle.Automate.Sdk\Speckle.Automate.Sdk.csproj", "{4EB20EFA-5A38-415E-B3FD-29CA3ACD1EF5}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Speckle.Automate.Sdk.Integration", "tests\Speckle.Automate.Sdk.Integration\Speckle.Automate.Sdk.Integration.csproj", "{B6129DC3-F285-4E5F-85E2-6D2533A4005E}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
Release|Any CPU = Release|Any CPU
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{8781B61F-0308-488A-BEB2-1939E7CEEBE9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{8781B61F-0308-488A-BEB2-1939E7CEEBE9}.Debug|Any CPU.Build.0 = Debug|Any CPU
{8781B61F-0308-488A-BEB2-1939E7CEEBE9}.Release|Any CPU.ActiveCfg = Release|Any CPU
{8781B61F-0308-488A-BEB2-1939E7CEEBE9}.Release|Any CPU.Build.0 = Release|Any CPU
{A413E196-3696-4F48-B635-04B5F76BF9C9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{A413E196-3696-4F48-B635-04B5F76BF9C9}.Debug|Any CPU.Build.0 = Debug|Any CPU
{A413E196-3696-4F48-B635-04B5F76BF9C9}.Release|Any CPU.ActiveCfg = Release|Any CPU
{A413E196-3696-4F48-B635-04B5F76BF9C9}.Release|Any CPU.Build.0 = Release|Any CPU
{99AE2273-12C5-4A9D-9FDD-19F8B394B5E2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{99AE2273-12C5-4A9D-9FDD-19F8B394B5E2}.Debug|Any CPU.Build.0 = Debug|Any CPU
{99AE2273-12C5-4A9D-9FDD-19F8B394B5E2}.Release|Any CPU.ActiveCfg = Release|Any CPU
{99AE2273-12C5-4A9D-9FDD-19F8B394B5E2}.Release|Any CPU.Build.0 = Release|Any CPU
{181F50AA-DD2A-4541-98EF-B868E2D06B9A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{181F50AA-DD2A-4541-98EF-B868E2D06B9A}.Debug|Any CPU.Build.0 = Debug|Any CPU
{181F50AA-DD2A-4541-98EF-B868E2D06B9A}.Release|Any CPU.ActiveCfg = Release|Any CPU
{181F50AA-DD2A-4541-98EF-B868E2D06B9A}.Release|Any CPU.Build.0 = Release|Any CPU
{A0338FC0-3011-498F-AD09-01230FABD3ED}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{A0338FC0-3011-498F-AD09-01230FABD3ED}.Debug|Any CPU.Build.0 = Debug|Any CPU
{A0338FC0-3011-498F-AD09-01230FABD3ED}.Release|Any CPU.ActiveCfg = Release|Any CPU
{A0338FC0-3011-498F-AD09-01230FABD3ED}.Release|Any CPU.Build.0 = Release|Any CPU
{9B8DDEB5-37C7-49B5-984D-C65DE5FCB7B7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{9B8DDEB5-37C7-49B5-984D-C65DE5FCB7B7}.Debug|Any CPU.Build.0 = Debug|Any CPU
{9B8DDEB5-37C7-49B5-984D-C65DE5FCB7B7}.Release|Any CPU.ActiveCfg = Release|Any CPU
{9B8DDEB5-37C7-49B5-984D-C65DE5FCB7B7}.Release|Any CPU.Build.0 = Release|Any CPU
{AA1E1E51-49AE-4F71-84B1-938E19695BE0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{AA1E1E51-49AE-4F71-84B1-938E19695BE0}.Debug|Any CPU.Build.0 = Debug|Any CPU
{AA1E1E51-49AE-4F71-84B1-938E19695BE0}.Release|Any CPU.ActiveCfg = Release|Any CPU
{AA1E1E51-49AE-4F71-84B1-938E19695BE0}.Release|Any CPU.Build.0 = Release|Any CPU
{4FB41A6D-D139-4111-8115-E3F9F6BEAF24}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{4FB41A6D-D139-4111-8115-E3F9F6BEAF24}.Debug|Any CPU.Build.0 = Debug|Any CPU
{4FB41A6D-D139-4111-8115-E3F9F6BEAF24}.Release|Any CPU.ActiveCfg = Release|Any CPU
{4FB41A6D-D139-4111-8115-E3F9F6BEAF24}.Release|Any CPU.Build.0 = Release|Any CPU
{870E3396-E6F7-43AE-B120-E651FA4F46BD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{870E3396-E6F7-43AE-B120-E651FA4F46BD}.Debug|Any CPU.Build.0 = Debug|Any CPU
{870E3396-E6F7-43AE-B120-E651FA4F46BD}.Release|Any CPU.ActiveCfg = Release|Any CPU
{870E3396-E6F7-43AE-B120-E651FA4F46BD}.Release|Any CPU.Build.0 = Release|Any CPU
{FF922B6D-D416-4348-8CB8-0C8B28691070}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{FF922B6D-D416-4348-8CB8-0C8B28691070}.Debug|Any CPU.Build.0 = Debug|Any CPU
{FF922B6D-D416-4348-8CB8-0C8B28691070}.Release|Any CPU.ActiveCfg = Release|Any CPU
{FF922B6D-D416-4348-8CB8-0C8B28691070}.Release|Any CPU.Build.0 = Release|Any CPU
{27584AB4-8ACD-4850-8CC2-7E5BC739FB78}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{27584AB4-8ACD-4850-8CC2-7E5BC739FB78}.Debug|Any CPU.Build.0 = Debug|Any CPU
{27584AB4-8ACD-4850-8CC2-7E5BC739FB78}.Release|Any CPU.ActiveCfg = Release|Any CPU
{27584AB4-8ACD-4850-8CC2-7E5BC739FB78}.Release|Any CPU.Build.0 = Release|Any CPU
{7B617C0D-2354-415C-993C-5071D4113E27}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{7B617C0D-2354-415C-993C-5071D4113E27}.Debug|Any CPU.Build.0 = Debug|Any CPU
{7B617C0D-2354-415C-993C-5071D4113E27}.Release|Any CPU.ActiveCfg = Release|Any CPU
{7B617C0D-2354-415C-993C-5071D4113E27}.Release|Any CPU.Build.0 = Release|Any CPU
{4EB20EFA-5A38-415E-B3FD-29CA3ACD1EF5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{4EB20EFA-5A38-415E-B3FD-29CA3ACD1EF5}.Debug|Any CPU.Build.0 = Debug|Any CPU
{4EB20EFA-5A38-415E-B3FD-29CA3ACD1EF5}.Release|Any CPU.ActiveCfg = Release|Any CPU
{4EB20EFA-5A38-415E-B3FD-29CA3ACD1EF5}.Release|Any CPU.Build.0 = Release|Any CPU
{B6129DC3-F285-4E5F-85E2-6D2533A4005E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{B6129DC3-F285-4E5F-85E2-6D2533A4005E}.Debug|Any CPU.Build.0 = Debug|Any CPU
{B6129DC3-F285-4E5F-85E2-6D2533A4005E}.Release|Any CPU.ActiveCfg = Release|Any CPU
{B6129DC3-F285-4E5F-85E2-6D2533A4005E}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(NestedProjects) = preSolution
{A413E196-3696-4F48-B635-04B5F76BF9C9} = {5CB96C27-FC5B-4A41-86B6-951AF99B8116}
{181F50AA-DD2A-4541-98EF-B868E2D06B9A} = {5CB96C27-FC5B-4A41-86B6-951AF99B8116}
{99AE2273-12C5-4A9D-9FDD-19F8B394B5E2} = {35047EE7-AD1D-4741-80A7-8F0E874718E9}
{A0338FC0-3011-498F-AD09-01230FABD3ED} = {35047EE7-AD1D-4741-80A7-8F0E874718E9}
{9B8DDEB5-37C7-49B5-984D-C65DE5FCB7B7} = {58D37DA9-F948-48CA-9A73-F5BBBD533DBF}
{AA1E1E51-49AE-4F71-84B1-938E19695BE0} = {35047EE7-AD1D-4741-80A7-8F0E874718E9}
{4FB41A6D-D139-4111-8115-E3F9F6BEAF24} = {35047EE7-AD1D-4741-80A7-8F0E874718E9}
{B623BD21-5CAA-43F9-A539-1835276C220E} = {DA2AED52-58F9-471E-8AD8-102FD36129E3}
{27584AB4-8ACD-4850-8CC2-7E5BC739FB78} = {5CB96C27-FC5B-4A41-86B6-951AF99B8116}
{7B617C0D-2354-415C-993C-5071D4113E27} = {35047EE7-AD1D-4741-80A7-8F0E874718E9}
{FF922B6D-D416-4348-8CB8-0C8B28691070} = {FFB07238-87E8-463A-AA39-3B38AAAA94C1}
{870E3396-E6F7-43AE-B120-E651FA4F46BD} = {FFB07238-87E8-463A-AA39-3B38AAAA94C1}
{4EB20EFA-5A38-415E-B3FD-29CA3ACD1EF5} = {5CB96C27-FC5B-4A41-86B6-951AF99B8116}
{B6129DC3-F285-4E5F-85E2-6D2533A4005E} = {35047EE7-AD1D-4741-80A7-8F0E874718E9}
EndGlobalSection
EndGlobal
+3
View File
@@ -0,0 +1,3 @@
<wpf:ResourceDictionary xml:space="preserve" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:s="clr-namespace:System;assembly=mscorlib" xmlns:ss="urn:shemas-jetbrains-com:settings-storage-xaml" xmlns:wpf="http://schemas.microsoft.com/winfx/2006/xaml/presentation">
<s:String x:Key="/Default/CodeStyle/Naming/CSharpNaming/Abbreviations/=QL/@EntryIndexedValue">QL</s:String>
<s:String x:Key="/Default/CodeStyle/Naming/CSharpNaming/Abbreviations/=XYZ/@EntryIndexedValue">XYZ</s:String></wpf:ResourceDictionary>
+5 -6
View File
@@ -15,7 +15,6 @@ const string CLEAN_LOCKS = "clean-locks";
const string PERF = "perf"; const string PERF = "perf";
const string DEEP_CLEAN = "deep-clean"; const string DEEP_CLEAN = "deep-clean";
const string SOLUTION = "Speckle.Sdk.slnx";
static (string semver, string fileVerison) GetVersions() static (string semver, string fileVerison) GetVersions()
{ {
string semver = string semver =
@@ -35,7 +34,7 @@ Target(
File.Delete(f); File.Delete(f);
} }
Console.WriteLine("Running restore now."); Console.WriteLine("Running restore now.");
Run("dotnet", $@"restore .\{SOLUTION}"); Run("dotnet", "restore .\\Speckle.Sdk.sln");
} }
); );
@@ -69,7 +68,7 @@ Target(RESTORE_TOOLS, () => RunAsync("dotnet", "tool restore"));
Target(FORMAT, dependsOn: [RESTORE_TOOLS], () => RunAsync("dotnet", "csharpier check .")); Target(FORMAT, dependsOn: [RESTORE_TOOLS], () => RunAsync("dotnet", "csharpier check ."));
Target(RESTORE, dependsOn: [FORMAT], () => RunAsync("dotnet", $"restore {SOLUTION} --locked-mode")); Target(RESTORE, dependsOn: [FORMAT], () => RunAsync("dotnet", "restore Speckle.Sdk.sln --locked-mode"));
Target( Target(
BUILD, BUILD,
@@ -80,7 +79,7 @@ Target(
Console.WriteLine($"Version: {version} & {fileVersion}"); Console.WriteLine($"Version: {version} & {fileVersion}");
await RunAsync( await RunAsync(
"dotnet", "dotnet",
$"build {SOLUTION} -c Release --no-restore -warnaserror -p:Version={version} -p:FileVersion={fileVersion}" $"build Speckle.Sdk.sln -c Release --no-restore -warnaserror -p:Version={version} -p:FileVersion={fileVersion}"
) )
.ConfigureAwait(false); .ConfigureAwait(false);
} }
@@ -163,7 +162,7 @@ Target(
Directory.Delete(f, true); Directory.Delete(f, true);
} }
Console.WriteLine("Running restore now."); Console.WriteLine("Running restore now.");
Run("dotnet", $@"restore .\{SOLUTION} --no-cache"); Run("dotnet", "restore .\\Speckle.Sdk.sln --no-cache");
} }
); );
@@ -175,7 +174,7 @@ Target(
{ {
var (version, fileVersion) = GetVersions(); var (version, fileVersion) = GetVersions();
Console.WriteLine($"Version: {version} & {fileVersion}"); Console.WriteLine($"Version: {version} & {fileVersion}");
await RunAsync("dotnet", $"pack {SOLUTION} -c Release -o output --no-build -p:Version={version}") await RunAsync("dotnet", $"pack Speckle.Sdk.sln -c Release -o output --no-build -p:Version={version}")
.ConfigureAwait(false); .ConfigureAwait(false);
} }
} }
+6 -6
View File
@@ -4,9 +4,9 @@
"net8.0": { "net8.0": {
"Bullseye": { "Bullseye": {
"type": "Direct", "type": "Direct",
"requested": "[6.1.0, )", "requested": "[6.0.0, )",
"resolved": "6.1.0", "resolved": "6.0.0",
"contentHash": "fltnAJDe0BEX5eymXGUq+il2rSUA0pHqUonNDRH2TrvRu8SkU17mYG0IVpdmG2ibtfhdjNrv4CuTCxHOwcozCA==" "contentHash": "vgwwXfzs7jJrskWH7saHRMgPzziq/e86QZNWY1MnMxd7e+De7E7EX4K3C7yrvaK9y02SJoLxNxcLG/q5qUAghw=="
}, },
"Glob": { "Glob": {
"type": "Direct", "type": "Direct",
@@ -32,9 +32,9 @@
}, },
"SimpleExec": { "SimpleExec": {
"type": "Direct", "type": "Direct",
"requested": "[13.0.0, )", "requested": "[12.0.0, )",
"resolved": "13.0.0", "resolved": "12.0.0",
"contentHash": "zcCR1pupa1wI1VqBULRiQKeHKKZOuJhi/K+4V5oO+rHJZlaOD53ViFo1c3PavDoMAfSn/FAXGAWpPoF57rwhYg==" "contentHash": "ptxlWtxC8vM6Y6e3h9ZTxBBkOWnWrm/Sa1HT+2i1xcXY3Hx2hmKDZP5RShPf8Xr9D+ivlrXNy57ktzyH8kyt+Q=="
}, },
"Speckle.InterfaceGenerator": { "Speckle.InterfaceGenerator": {
"type": "Direct", "type": "Direct",
+1 -1
View File
@@ -1,6 +1,6 @@
{ {
"sdk": { "sdk": {
"version": "10.0.200", "version": "8.0.400",
"rollForward": "latestMinor" "rollForward": "latestMinor"
} }
} }
@@ -1,6 +1,6 @@
<Project Sdk="Microsoft.NET.Sdk"> <Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup Label="Compiler Properties"> <PropertyGroup Label="Compiler Properties">
<TargetFrameworks>netstandard2.0;net8.0;net10.0</TargetFrameworks> <TargetFrameworks>netstandard2.0;net8.0</TargetFrameworks>
</PropertyGroup> </PropertyGroup>
<PropertyGroup Label="Nugetspec Package Properties"> <PropertyGroup Label="Nugetspec Package Properties">
<PackageId>Speckle.Automate.Sdk</PackageId> <PackageId>Speckle.Automate.Sdk</PackageId>
+94 -265
View File
@@ -44,7 +44,7 @@
}, },
"System.CommandLine": { "System.CommandLine": {
"type": "Direct", "type": "Direct",
"requested": "[2.0.0-beta4.22272.1, 2.0.0-beta4.22272.1]", "requested": "[2.0.0-beta4.22272.1, )",
"resolved": "2.0.0-beta4.22272.1", "resolved": "2.0.0-beta4.22272.1",
"contentHash": "1uqED/q2H0kKoLJ4+hI2iPSBSEdTuhfCYADeJrAqERmiGQ2NNacYKRNEQ+gFbU4glgVyK8rxI+ZOe1onEtr/Pg==", "contentHash": "1uqED/q2H0kKoLJ4+hI2iPSBSEdTuhfCYADeJrAqERmiGQ2NNacYKRNEQ+gFbU4glgVyK8rxI+ZOe1onEtr/Pg==",
"dependencies": { "dependencies": {
@@ -123,11 +123,6 @@
"Microsoft.Extensions.Configuration": "2.2.0" "Microsoft.Extensions.Configuration": "2.2.0"
} }
}, },
"Microsoft.Extensions.DependencyInjection.Abstractions": {
"type": "Transitive",
"resolved": "2.2.0",
"contentHash": "f9hstgjVmr6rmrfGSpfsVOl2irKAgr1QjrSi3FgnS7kulxband50f2brRLwySAQTADPZeTdow0mpSMcoAdadCw=="
},
"Microsoft.Extensions.Logging.Abstractions": { "Microsoft.Extensions.Logging.Abstractions": {
"type": "Transitive", "type": "Transitive",
"resolved": "2.2.0", "resolved": "2.2.0",
@@ -157,6 +152,11 @@
"resolved": "1.1.0", "resolved": "1.1.0",
"contentHash": "kz0PEW2lhqygehI/d6XsPCQzD7ff7gUJaVGPVETX611eadGsA3A877GdSlU0LRVMCTH/+P3o2iDTak+S08V2+A==" "contentHash": "kz0PEW2lhqygehI/d6XsPCQzD7ff7gUJaVGPVETX611eadGsA3A877GdSlU0LRVMCTH/+P3o2iDTak+S08V2+A=="
}, },
"Microsoft.NETCore.Targets": {
"type": "Transitive",
"resolved": "1.1.0",
"contentHash": "aOZA3BWfz9RXjpzt0sRJJMjAscAUm3Hoa4UWAfceV9UTYxgwZ1lZt5nO2myFf+/jetYQo4uTP7zS8sJY67BBxg=="
},
"Microsoft.SourceLink.Common": { "Microsoft.SourceLink.Common": {
"type": "Transitive", "type": "Transitive",
"resolved": "8.0.0", "resolved": "8.0.0",
@@ -231,6 +231,15 @@
"System.Threading.Tasks.Extensions": "4.5.4" "System.Threading.Tasks.Extensions": "4.5.4"
} }
}, },
"System.Runtime": {
"type": "Transitive",
"resolved": "4.3.0",
"contentHash": "JufQi0vPQ0xGnAczR13AUFglDyVYt4Kqnz1AZaiKZ5+GICq0/1MH/mO/eAJHt/mHW1zjKBJd7kV26SrxddAhiw==",
"dependencies": {
"Microsoft.NETCore.Platforms": "1.1.0",
"Microsoft.NETCore.Targets": "1.1.0"
}
},
"System.Runtime.CompilerServices.Unsafe": { "System.Runtime.CompilerServices.Unsafe": {
"type": "Transitive", "type": "Transitive",
"resolved": "6.0.0", "resolved": "6.0.0",
@@ -239,7 +248,10 @@
"System.Runtime.InteropServices.WindowsRuntime": { "System.Runtime.InteropServices.WindowsRuntime": {
"type": "Transitive", "type": "Transitive",
"resolved": "4.3.0", "resolved": "4.3.0",
"contentHash": "J4GUi3xZQLUBasNwZnjrffN8i5wpHrBtZoLG+OhRyGo/+YunMRWWtwoMDlUAIdmX0uRfpHIBDSV6zyr3yf00TA==" "contentHash": "J4GUi3xZQLUBasNwZnjrffN8i5wpHrBtZoLG+OhRyGo/+YunMRWWtwoMDlUAIdmX0uRfpHIBDSV6zyr3yf00TA==",
"dependencies": {
"System.Runtime": "4.3.0"
}
}, },
"System.Text.Encodings.Web": { "System.Text.Encodings.Web": {
"type": "Transitive", "type": "Transitive",
@@ -271,7 +283,7 @@
"GraphQL.Client": "[6.0.0, )", "GraphQL.Client": "[6.0.0, )",
"Microsoft.CSharp": "[4.7.0, )", "Microsoft.CSharp": "[4.7.0, )",
"Microsoft.Data.Sqlite": "[7.0.5, )", "Microsoft.Data.Sqlite": "[7.0.5, )",
"Microsoft.Extensions.DependencyInjection": "[2.2.0, )", "Microsoft.Extensions.DependencyInjection.Abstractions": "[2.2.0, )",
"Microsoft.Extensions.Logging": "[2.2.0, )", "Microsoft.Extensions.Logging": "[2.2.0, )",
"Speckle.DoubleNumerics": "[4.1.0, )", "Speckle.DoubleNumerics": "[4.1.0, )",
"Speckle.Newtonsoft.Json": "[13.0.2, )", "Speckle.Newtonsoft.Json": "[13.0.2, )",
@@ -286,7 +298,7 @@
}, },
"GraphQL.Client": { "GraphQL.Client": {
"type": "CentralTransitive", "type": "CentralTransitive",
"requested": "[6.1.0, )", "requested": "[6.0.0, )",
"resolved": "6.0.0", "resolved": "6.0.0",
"contentHash": "8yPNBbuVBpTptivyAlak4GZvbwbUcjeQTL4vN1HKHRuOykZ4r7l5fcLS6vpyPyLn0x8FsL31xbOIKyxbmR9rbA==", "contentHash": "8yPNBbuVBpTptivyAlak4GZvbwbUcjeQTL4vN1HKHRuOykZ4r7l5fcLS6vpyPyLn0x8FsL31xbOIKyxbmR9rbA==",
"dependencies": { "dependencies": {
@@ -320,18 +332,15 @@
"SQLitePCLRaw.bundle_e_sqlite3": "2.1.4" "SQLitePCLRaw.bundle_e_sqlite3": "2.1.4"
} }
}, },
"Microsoft.Extensions.DependencyInjection": { "Microsoft.Extensions.DependencyInjection.Abstractions": {
"type": "CentralTransitive", "type": "CentralTransitive",
"requested": "[10.0.6, )", "requested": "[2.2.0, )",
"resolved": "2.2.0", "resolved": "2.2.0",
"contentHash": "MZtBIwfDFork5vfjpJdG5g8wuJFt7d/y3LOSVVtDK/76wlbtz6cjltfKHqLx2TKVqTj5/c41t77m1+h20zqtPA==", "contentHash": "f9hstgjVmr6rmrfGSpfsVOl2irKAgr1QjrSi3FgnS7kulxband50f2brRLwySAQTADPZeTdow0mpSMcoAdadCw=="
"dependencies": {
"Microsoft.Extensions.DependencyInjection.Abstractions": "2.2.0"
}
}, },
"Microsoft.Extensions.Logging": { "Microsoft.Extensions.Logging": {
"type": "CentralTransitive", "type": "CentralTransitive",
"requested": "[10.0.6, )", "requested": "[2.2.0, )",
"resolved": "2.2.0", "resolved": "2.2.0",
"contentHash": "Nxqhadc9FCmFHzU+fz3oc8sFlE6IadViYg8dfUdGzJZ2JUxnCsRghBhhOWdM4B2zSZqEc+0BjliBh/oNdRZuig==", "contentHash": "Nxqhadc9FCmFHzU+fz3oc8sFlE6IadViYg8dfUdGzJZ2JUxnCsRghBhhOWdM4B2zSZqEc+0BjliBh/oNdRZuig==",
"dependencies": { "dependencies": {
@@ -354,223 +363,6 @@
"contentHash": "g1BejUZwax5PRfL6xHgLEK23sqHWOgOj9hE7RvfRRlN00AGt8GnPYt8HedSK7UB3HiRW8zCA9Pn0iiYxCK24BA==" "contentHash": "g1BejUZwax5PRfL6xHgLEK23sqHWOgOj9hE7RvfRRlN00AGt8GnPYt8HedSK7UB3HiRW8zCA9Pn0iiYxCK24BA=="
} }
}, },
"net10.0": {
"Microsoft.SourceLink.GitHub": {
"type": "Direct",
"requested": "[8.0.0, )",
"resolved": "8.0.0",
"contentHash": "G5q7OqtwIyGTkeIOAc3u2ZuV/kicQaec5EaRnc0pIeSnh9LUjj+PYQrJYBURvDt7twGl2PKA7nSN0kz1Zw5bnQ==",
"dependencies": {
"Microsoft.Build.Tasks.Git": "8.0.0",
"Microsoft.SourceLink.Common": "8.0.0"
}
},
"Newtonsoft.Json.Schema": {
"type": "Direct",
"requested": "[4.0.1, )",
"resolved": "4.0.1",
"contentHash": "rbHUKp5WTIbqmLEeJ21nTTDGcfR0LA7bVMzm0bYc3yx6NFKiCIHzzvYbwA4Sqgs7+wNldc5nBlkbithWj8IZig==",
"dependencies": {
"Newtonsoft.Json": "13.0.3"
}
},
"PolySharp": {
"type": "Direct",
"requested": "[1.15.0, )",
"resolved": "1.15.0",
"contentHash": "FbU0El+EEjdpuIX4iDbeS7ki1uzpJPx8vbqOzEtqnl1GZeAGJfq+jCbxeJL2y0EPnUNk8dRnnqR2xnYXg9Tf+g=="
},
"Speckle.InterfaceGenerator": {
"type": "Direct",
"requested": "[0.9.6, )",
"resolved": "0.9.6",
"contentHash": "HKH7tYrYYlCK1ct483hgxERAdVdMtl7gUKW9ijWXxA1UsYR4Z+TrRHYmzZ9qmpu1NnTycSrp005NYM78GDKV1w=="
},
"System.CommandLine": {
"type": "Direct",
"requested": "[2.0.0-beta4.22272.1, 2.0.0-beta4.22272.1]",
"resolved": "2.0.0-beta4.22272.1",
"contentHash": "1uqED/q2H0kKoLJ4+hI2iPSBSEdTuhfCYADeJrAqERmiGQ2NNacYKRNEQ+gFbU4glgVyK8rxI+ZOe1onEtr/Pg=="
},
"GraphQL.Client.Abstractions": {
"type": "Transitive",
"resolved": "6.1.0",
"contentHash": "Za31wjKLEeROZYJmp0Lmj/TLQ1Yw6x6QM0JHABcuyMC3OSopr34ufayrtdxtbL1a3129FTVFKOFC0hcooSQoJQ==",
"dependencies": {
"GraphQL.Primitives": "6.1.0"
}
},
"GraphQL.Client.Abstractions.Websocket": {
"type": "Transitive",
"resolved": "6.1.0",
"contentHash": "PjdG3q4MzPsa5NiBOBhuIRMRTo59der5bFmX2r1gSS3RIjytwpooxF2RffFCBh16sqbwuH1/dllDcNG+EJt1qA==",
"dependencies": {
"GraphQL.Client.Abstractions": "6.1.0"
}
},
"GraphQL.Primitives": {
"type": "Transitive",
"resolved": "6.1.0",
"contentHash": "L8yQ70Wd9p8hMJvnmpgyZfr2R6Q7S0/lPyEBI1tacJa5XzsoJSVtHdmfsMaHyufwk03hlUsBXgNerAs66kxHdA=="
},
"Microsoft.Build.Tasks.Git": {
"type": "Transitive",
"resolved": "8.0.0",
"contentHash": "bZKfSIKJRXLTuSzLudMFte/8CempWjVamNUR5eHJizsy+iuOuO/k2gnh7W0dHJmYY0tBf+gUErfluCv5mySAOQ=="
},
"Microsoft.Data.Sqlite.Core": {
"type": "Transitive",
"resolved": "10.0.0",
"contentHash": "wPKG/Ym6tSMCo06UOZXzVfeFGzawnOZrTba/R3PfK+RhNuNELZ9I7nFns4WGTtv2kKlrlmmErgJ+kgTXHaNdHg==",
"dependencies": {
"SQLitePCLRaw.core": "2.1.11"
}
},
"Microsoft.Extensions.DependencyInjection.Abstractions": {
"type": "Transitive",
"resolved": "10.0.0",
"contentHash": "L3AdmZ1WOK4XXT5YFPEwyt0ep6l8lGIPs7F5OOBZc77Zqeo01Of7XXICy47628sdVl0v/owxYJTe86DTgFwKCA=="
},
"Microsoft.Extensions.Logging.Abstractions": {
"type": "Transitive",
"resolved": "10.0.0",
"contentHash": "FU/IfjDfwaMuKr414SSQNTIti/69bHEMb+QKrskRb26oVqpx3lNFXMjs/RC9ZUuhBhcwDM2BwOgoMw+PZ+beqQ==",
"dependencies": {
"Microsoft.Extensions.DependencyInjection.Abstractions": "10.0.0"
}
},
"Microsoft.Extensions.Options": {
"type": "Transitive",
"resolved": "10.0.0",
"contentHash": "8oCAgXOow5XDrY9HaXX1QmH3ORsyZO/ANVHBlhLyCeWTH5Sg4UuqZeOTWJi6484M+LqSx0RqQXDJtdYy2BNiLQ==",
"dependencies": {
"Microsoft.Extensions.DependencyInjection.Abstractions": "10.0.0",
"Microsoft.Extensions.Primitives": "10.0.0"
}
},
"Microsoft.Extensions.Primitives": {
"type": "Transitive",
"resolved": "10.0.0",
"contentHash": "inRnbpCS0nwO/RuoZIAqxQUuyjaknOOnCEZB55KSMMjRhl0RQDttSmLSGsUJN3RQ3ocf5NDLFd2mOQViHqMK5w=="
},
"Microsoft.SourceLink.Common": {
"type": "Transitive",
"resolved": "8.0.0",
"contentHash": "dk9JPxTCIevS75HyEQ0E4OVAFhB2N+V9ShCXf8Q6FkUQZDkgLI12y679Nym1YqsiSysuQskT7Z+6nUf3yab6Vw=="
},
"Newtonsoft.Json": {
"type": "Transitive",
"resolved": "13.0.3",
"contentHash": "HrC5BXdl00IP9zeV+0Z848QWPAoCr9P3bDEZguI+gkLcBKAOxix/tLEAAHC+UvDNPv4a2d18lOReHMOagPa+zQ=="
},
"SQLitePCLRaw.bundle_e_sqlite3": {
"type": "Transitive",
"resolved": "2.1.11",
"contentHash": "DC4nA7yWnf4UZdgJDF+9Mus4/cb0Y3Sfgi3gDnAoKNAIBwzkskNAbNbyu+u4atT0ruVlZNJfwZmwiEwE5oz9LQ==",
"dependencies": {
"SQLitePCLRaw.lib.e_sqlite3": "2.1.11",
"SQLitePCLRaw.provider.e_sqlite3": "2.1.11"
}
},
"SQLitePCLRaw.core": {
"type": "Transitive",
"resolved": "2.1.11",
"contentHash": "PK0GLFkfhZzLQeR3PJf71FmhtHox+U3vcY6ZtswoMjrefkB9k6ErNJEnwXqc5KgXDSjige2XXrezqS39gkpQKA=="
},
"SQLitePCLRaw.lib.e_sqlite3": {
"type": "Transitive",
"resolved": "2.1.11",
"contentHash": "Ev2ytaXiOlWZ4b3R67GZBsemTINslLD1DCJr2xiacpn4tbapu0Q4dHEzSvZSMnVWeE5nlObU3VZN2p81q3XOYQ=="
},
"SQLitePCLRaw.provider.e_sqlite3": {
"type": "Transitive",
"resolved": "2.1.11",
"contentHash": "Y/0ZkR+r0Cg3DQFuCl1RBnv/tmxpIZRU3HUvelPw6MVaKHwYYR8YNvgs0vuNuXCMvlyJ+Fh88U1D4tah1tt6qw==",
"dependencies": {
"SQLitePCLRaw.core": "2.1.11"
}
},
"System.Reactive": {
"type": "Transitive",
"resolved": "6.0.0",
"contentHash": "31kfaW4ZupZzPsI5PVe77VhnvFF55qgma7KZr/E0iFTs6fmdhhG8j0mgEx620iLTey1EynOkEfnyTjtNEpJzGw=="
},
"speckle.objects": {
"type": "Project",
"dependencies": {
"Speckle.Sdk": "[1.0.0, )"
}
},
"speckle.sdk": {
"type": "Project",
"dependencies": {
"GraphQL.Client": "[6.1.0, )",
"Microsoft.Data.Sqlite": "[10.0.0, )",
"Microsoft.Extensions.DependencyInjection": "[10.0.0, )",
"Microsoft.Extensions.Logging": "[10.0.0, )",
"Speckle.DoubleNumerics": "[4.1.0, )",
"Speckle.Newtonsoft.Json": "[13.0.2, )",
"Speckle.Sdk.Dependencies": "[1.0.0, )"
}
},
"speckle.sdk.dependencies": {
"type": "Project"
},
"GraphQL.Client": {
"type": "CentralTransitive",
"requested": "[6.1.0, )",
"resolved": "6.1.0",
"contentHash": "oKliAxtNuZDMxO9079mjSbwA0YwhjXBzVnVPuNZ3HI4OllO++CcOLT30l90mM/fxCAMaa8GU4ZYMwD9YjLkyiw==",
"dependencies": {
"GraphQL.Client.Abstractions": "6.1.0",
"GraphQL.Client.Abstractions.Websocket": "6.1.0",
"System.Reactive": "6.0.0"
}
},
"Microsoft.Data.Sqlite": {
"type": "CentralTransitive",
"requested": "[7.0.5, )",
"resolved": "10.0.0",
"contentHash": "I/azQ5WjwoLvSlTyDydkhARPSjYJN8jkXRjR5D92OeyTLbTrQ1K93rgf6XU+HYWHZA6lBI9SUOfl69OqEHb4ow==",
"dependencies": {
"Microsoft.Data.Sqlite.Core": "10.0.0",
"SQLitePCLRaw.bundle_e_sqlite3": "2.1.11",
"SQLitePCLRaw.core": "2.1.11"
}
},
"Microsoft.Extensions.DependencyInjection": {
"type": "CentralTransitive",
"requested": "[10.0.6, )",
"resolved": "10.0.0",
"contentHash": "f0RBabswJq+gRu5a+hWIobrLWiUYPKMhCD9WO3sYBAdSy3FFH14LMvLVFZc2kPSCimBLxSuitUhsd6tb0TAY6A==",
"dependencies": {
"Microsoft.Extensions.DependencyInjection.Abstractions": "10.0.0"
}
},
"Microsoft.Extensions.Logging": {
"type": "CentralTransitive",
"requested": "[10.0.6, )",
"resolved": "10.0.0",
"contentHash": "BStFkd5CcnEtarlcgYDBcFzGYCuuNMzPs02wN3WBsOFoYIEmYoUdAiU+au6opzoqfTYJsMTW00AeqDdnXH2CvA==",
"dependencies": {
"Microsoft.Extensions.DependencyInjection": "10.0.0",
"Microsoft.Extensions.Logging.Abstractions": "10.0.0",
"Microsoft.Extensions.Options": "10.0.0"
}
},
"Speckle.DoubleNumerics": {
"type": "CentralTransitive",
"requested": "[4.1.0, )",
"resolved": "4.1.0",
"contentHash": "20DtS+FsDRsOD9+AU3TwNFZ0qrKo5f6f7B5ZR9wStsIHHHC9k7DpjbCvuNtmnSjx54MD+TJC7wV2f5iyGVPj1A=="
},
"Speckle.Newtonsoft.Json": {
"type": "CentralTransitive",
"requested": "[13.0.2, )",
"resolved": "13.0.2",
"contentHash": "g1BejUZwax5PRfL6xHgLEK23sqHWOgOj9hE7RvfRRlN00AGt8GnPYt8HedSK7UB3HiRW8zCA9Pn0iiYxCK24BA=="
}
},
"net8.0": { "net8.0": {
"Microsoft.SourceLink.GitHub": { "Microsoft.SourceLink.GitHub": {
"type": "Direct", "type": "Direct",
@@ -605,7 +397,7 @@
}, },
"System.CommandLine": { "System.CommandLine": {
"type": "Direct", "type": "Direct",
"requested": "[2.0.0-beta4.22272.1, 2.0.0-beta4.22272.1]", "requested": "[2.0.0-beta4.22272.1, )",
"resolved": "2.0.0-beta4.22272.1", "resolved": "2.0.0-beta4.22272.1",
"contentHash": "1uqED/q2H0kKoLJ4+hI2iPSBSEdTuhfCYADeJrAqERmiGQ2NNacYKRNEQ+gFbU4glgVyK8rxI+ZOe1onEtr/Pg==" "contentHash": "1uqED/q2H0kKoLJ4+hI2iPSBSEdTuhfCYADeJrAqERmiGQ2NNacYKRNEQ+gFbU4glgVyK8rxI+ZOe1onEtr/Pg=="
}, },
@@ -643,32 +435,53 @@
"SQLitePCLRaw.core": "2.1.4" "SQLitePCLRaw.core": "2.1.4"
} }
}, },
"Microsoft.Extensions.DependencyInjection.Abstractions": { "Microsoft.Extensions.Configuration": {
"type": "Transitive", "type": "Transitive",
"resolved": "8.0.0", "resolved": "2.2.0",
"contentHash": "cjWrLkJXK0rs4zofsK4bSdg+jhDLTaxrkXu4gS6Y7MAlCvRyNNgwY/lJi5RDlQOnSZweHqoyvgvbdvQsRIW+hg==" "contentHash": "nOP8R1mVb/6mZtm2qgAJXn/LFm/2kMjHDAg/QJLFG6CuWYJtaD3p1BwQhufBVvRzL9ceJ/xF0SQ0qsI2GkDQAA==",
"dependencies": {
"Microsoft.Extensions.Configuration.Abstractions": "2.2.0"
}
},
"Microsoft.Extensions.Configuration.Abstractions": {
"type": "Transitive",
"resolved": "2.2.0",
"contentHash": "65MrmXCziWaQFrI0UHkQbesrX5wTwf9XPjY5yFm/VkgJKFJ5gqvXRoXjIZcf2wLi5ZlwGz/oMYfyURVCWbM5iw==",
"dependencies": {
"Microsoft.Extensions.Primitives": "2.2.0"
}
},
"Microsoft.Extensions.Configuration.Binder": {
"type": "Transitive",
"resolved": "2.2.0",
"contentHash": "vJ9xvOZCnUAIHcGC3SU35r3HKmHTVIeHzo6u/qzlHAqD8m6xv92MLin4oJntTvkpKxVX3vI1GFFkIQtU3AdlsQ==",
"dependencies": {
"Microsoft.Extensions.Configuration": "2.2.0"
}
}, },
"Microsoft.Extensions.Logging.Abstractions": { "Microsoft.Extensions.Logging.Abstractions": {
"type": "Transitive", "type": "Transitive",
"resolved": "8.0.0", "resolved": "2.2.0",
"contentHash": "arDBqTgFCyS0EvRV7O3MZturChstm50OJ0y9bDJvAcmEPJm0FFpFyjU/JLYyStNGGey081DvnQYlncNX5SJJGA==", "contentHash": "B2WqEox8o+4KUOpL7rZPyh6qYjik8tHi2tN8Z9jZkHzED8ElYgZa/h6K+xliB435SqUcWT290Fr2aa8BtZjn8A=="
"dependencies": {
"Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.0"
}
}, },
"Microsoft.Extensions.Options": { "Microsoft.Extensions.Options": {
"type": "Transitive", "type": "Transitive",
"resolved": "8.0.0", "resolved": "2.2.0",
"contentHash": "JOVOfqpnqlVLUzINQ2fox8evY2SKLYJ3BV8QDe/Jyp21u1T7r45x/R/5QdteURMR5r01GxeJSBBUOCOyaNXA3g==", "contentHash": "UpZLNLBpIZ0GTebShui7xXYh6DmBHjWM8NxGxZbdQh/bPZ5e6YswqI+bru6BnEL5eWiOdodsXtEz3FROcgi/qg==",
"dependencies": { "dependencies": {
"Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.0", "Microsoft.Extensions.DependencyInjection.Abstractions": "2.2.0",
"Microsoft.Extensions.Primitives": "8.0.0" "Microsoft.Extensions.Primitives": "2.2.0",
"System.ComponentModel.Annotations": "4.5.0"
} }
}, },
"Microsoft.Extensions.Primitives": { "Microsoft.Extensions.Primitives": {
"type": "Transitive", "type": "Transitive",
"resolved": "8.0.0", "resolved": "2.2.0",
"contentHash": "bXJEZrW9ny8vjMF1JV253WeLhpEVzFo1lyaZu1vQ4ZxWUlVvknZ/+ftFgVheLubb4eZPSwwxBeqS1JkCOjxd8g==" "contentHash": "azyQtqbm4fSaDzZHD/J+V6oWMFaf2tWP4WEGIYePLCMw3+b2RQdj9ybgbQyjCshcitQKQ4lEDOZjmSlTTrHxUg==",
"dependencies": {
"System.Memory": "4.5.1",
"System.Runtime.CompilerServices.Unsafe": "4.5.1"
}
}, },
"Microsoft.SourceLink.Common": { "Microsoft.SourceLink.Common": {
"type": "Transitive", "type": "Transitive",
@@ -692,7 +505,10 @@
"SQLitePCLRaw.core": { "SQLitePCLRaw.core": {
"type": "Transitive", "type": "Transitive",
"resolved": "2.1.4", "resolved": "2.1.4",
"contentHash": "inBjvSHo9UDKneGNzfUfDjK08JzlcIhn1+SP5Y3m6cgXpCxXKCJDy6Mka7LpgSV+UZmKSnC8rTwB0SQ0xKu5pA==" "contentHash": "inBjvSHo9UDKneGNzfUfDjK08JzlcIhn1+SP5Y3m6cgXpCxXKCJDy6Mka7LpgSV+UZmKSnC8rTwB0SQ0xKu5pA==",
"dependencies": {
"System.Memory": "4.5.3"
}
}, },
"SQLitePCLRaw.lib.e_sqlite3": { "SQLitePCLRaw.lib.e_sqlite3": {
"type": "Transitive", "type": "Transitive",
@@ -707,11 +523,26 @@
"SQLitePCLRaw.core": "2.1.4" "SQLitePCLRaw.core": "2.1.4"
} }
}, },
"System.ComponentModel.Annotations": {
"type": "Transitive",
"resolved": "4.5.0",
"contentHash": "UxYQ3FGUOtzJ7LfSdnYSFd7+oEv6M8NgUatatIN2HxNtDdlcvFAf+VIq4Of9cDMJEJC0aSRv/x898RYhB4Yppg=="
},
"System.Memory": {
"type": "Transitive",
"resolved": "4.5.3",
"contentHash": "3oDzvc/zzetpTKWMShs1AADwZjQ/36HnsufHRPcOjyRAAMLDlu2iD33MBI2opxnezcVUtXyqDXXjoFMOU9c7SA=="
},
"System.Reactive": { "System.Reactive": {
"type": "Transitive", "type": "Transitive",
"resolved": "5.0.0", "resolved": "5.0.0",
"contentHash": "erBZjkQHWL9jpasCE/0qKAryzVBJFxGHVBAvgRN1bzM0q2s1S4oYREEEL0Vb+1kA/6BKb5FjUZMp5VXmy+gzkQ==" "contentHash": "erBZjkQHWL9jpasCE/0qKAryzVBJFxGHVBAvgRN1bzM0q2s1S4oYREEEL0Vb+1kA/6BKb5FjUZMp5VXmy+gzkQ=="
}, },
"System.Runtime.CompilerServices.Unsafe": {
"type": "Transitive",
"resolved": "4.5.1",
"contentHash": "Zh8t8oqolRaFa9vmOZfdQm/qKejdqz0J9kr7o2Fu0vPeoH3BL1EOXipKWwkWtLT1JPzjByrF19fGuFlNbmPpiw=="
},
"speckle.objects": { "speckle.objects": {
"type": "Project", "type": "Project",
"dependencies": { "dependencies": {
@@ -723,8 +554,8 @@
"dependencies": { "dependencies": {
"GraphQL.Client": "[6.0.0, )", "GraphQL.Client": "[6.0.0, )",
"Microsoft.Data.Sqlite": "[7.0.5, )", "Microsoft.Data.Sqlite": "[7.0.5, )",
"Microsoft.Extensions.DependencyInjection": "[8.0.0, )", "Microsoft.Extensions.DependencyInjection.Abstractions": "[2.2.0, )",
"Microsoft.Extensions.Logging": "[8.0.0, )", "Microsoft.Extensions.Logging": "[2.2.0, )",
"Speckle.DoubleNumerics": "[4.1.0, )", "Speckle.DoubleNumerics": "[4.1.0, )",
"Speckle.Newtonsoft.Json": "[13.0.2, )", "Speckle.Newtonsoft.Json": "[13.0.2, )",
"Speckle.Sdk.Dependencies": "[1.0.0, )" "Speckle.Sdk.Dependencies": "[1.0.0, )"
@@ -735,7 +566,7 @@
}, },
"GraphQL.Client": { "GraphQL.Client": {
"type": "CentralTransitive", "type": "CentralTransitive",
"requested": "[6.1.0, )", "requested": "[6.0.0, )",
"resolved": "6.0.0", "resolved": "6.0.0",
"contentHash": "8yPNBbuVBpTptivyAlak4GZvbwbUcjeQTL4vN1HKHRuOykZ4r7l5fcLS6vpyPyLn0x8FsL31xbOIKyxbmR9rbA==", "contentHash": "8yPNBbuVBpTptivyAlak4GZvbwbUcjeQTL4vN1HKHRuOykZ4r7l5fcLS6vpyPyLn0x8FsL31xbOIKyxbmR9rbA==",
"dependencies": { "dependencies": {
@@ -754,24 +585,22 @@
"SQLitePCLRaw.bundle_e_sqlite3": "2.1.4" "SQLitePCLRaw.bundle_e_sqlite3": "2.1.4"
} }
}, },
"Microsoft.Extensions.DependencyInjection": { "Microsoft.Extensions.DependencyInjection.Abstractions": {
"type": "CentralTransitive", "type": "CentralTransitive",
"requested": "[10.0.6, )", "requested": "[2.2.0, )",
"resolved": "8.0.0", "resolved": "2.2.0",
"contentHash": "V8S3bsm50ig6JSyrbcJJ8bW2b9QLGouz+G1miK3UTaOWmMtFwNNNzUf4AleyDWUmTrWMLNnFSLEQtxmxgNQnNQ==", "contentHash": "f9hstgjVmr6rmrfGSpfsVOl2irKAgr1QjrSi3FgnS7kulxband50f2brRLwySAQTADPZeTdow0mpSMcoAdadCw=="
"dependencies": {
"Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.0"
}
}, },
"Microsoft.Extensions.Logging": { "Microsoft.Extensions.Logging": {
"type": "CentralTransitive", "type": "CentralTransitive",
"requested": "[10.0.6, )", "requested": "[2.2.0, )",
"resolved": "8.0.0", "resolved": "2.2.0",
"contentHash": "tvRkov9tAJ3xP51LCv3FJ2zINmv1P8Hi8lhhtcKGqM+ImiTCC84uOPEI4z8Cdq2C3o9e+Aa0Gw0rmrsJD77W+w==", "contentHash": "Nxqhadc9FCmFHzU+fz3oc8sFlE6IadViYg8dfUdGzJZ2JUxnCsRghBhhOWdM4B2zSZqEc+0BjliBh/oNdRZuig==",
"dependencies": { "dependencies": {
"Microsoft.Extensions.DependencyInjection": "8.0.0", "Microsoft.Extensions.Configuration.Binder": "2.2.0",
"Microsoft.Extensions.Logging.Abstractions": "8.0.0", "Microsoft.Extensions.DependencyInjection.Abstractions": "2.2.0",
"Microsoft.Extensions.Options": "8.0.0" "Microsoft.Extensions.Logging.Abstractions": "2.2.0",
"Microsoft.Extensions.Options": "2.2.0"
} }
}, },
"Speckle.DoubleNumerics": { "Speckle.DoubleNumerics": {
+1 -1
View File
@@ -481,7 +481,7 @@ public class Brep : Base, IHasArea, IHasVolume, IHasBoundingBox, ITransformable<
displayValue = displayValues, displayValue = displayValues,
Surfaces = surfaces, Surfaces = surfaces,
Curve3D = transformedCurve3D, Curve3D = transformedCurve3D,
Curve2D = [.. Curve2D], Curve2D = new List<ICurve>(Curve2D),
Vertices = transformedVertices, Vertices = transformedVertices,
Edges = new List<BrepEdge>(Edges.Count), Edges = new List<BrepEdge>(Edges.Count),
Loops = new List<BrepLoop>(Loops.Count), Loops = new List<BrepLoop>(Loops.Count),
+1 -1
View File
@@ -26,7 +26,7 @@ public class ControlPoint : Point, ITransformable<ControlPoint>
JsonProperty(NullValueHandling = NullValueHandling.Ignore), JsonProperty(NullValueHandling = NullValueHandling.Ignore),
Obsolete("Access coordinates using XYZ and weight fields", true) Obsolete("Access coordinates using XYZ and weight fields", true)
] ]
internal new List<double> value private new List<double> value
{ {
#pragma warning disable CS8603 // Possible null reference return. Reason: obsolete. #pragma warning disable CS8603 // Possible null reference return. Reason: obsolete.
get => null; get => null;
+1 -1
View File
@@ -1,7 +1,7 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<Project Sdk="Microsoft.NET.Sdk"> <Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup Label="Compiler Properties"> <PropertyGroup Label="Compiler Properties">
<TargetFrameworks>netstandard2.0;net8.0;net10.0</TargetFrameworks> <TargetFrameworks>netstandard2.0;net8.0</TargetFrameworks>
<PolySharpExcludeGeneratedTypes>System.Runtime.CompilerServices.RequiresLocationAttribute</PolySharpExcludeGeneratedTypes> <PolySharpExcludeGeneratedTypes>System.Runtime.CompilerServices.RequiresLocationAttribute</PolySharpExcludeGeneratedTypes>
<Configurations>Debug;Release;Local</Configurations> <Configurations>Debug;Release;Local</Configurations>
</PropertyGroup> </PropertyGroup>
+92 -237
View File
@@ -91,11 +91,6 @@
"Microsoft.Extensions.Configuration": "2.2.0" "Microsoft.Extensions.Configuration": "2.2.0"
} }
}, },
"Microsoft.Extensions.DependencyInjection.Abstractions": {
"type": "Transitive",
"resolved": "2.2.0",
"contentHash": "f9hstgjVmr6rmrfGSpfsVOl2irKAgr1QjrSi3FgnS7kulxband50f2brRLwySAQTADPZeTdow0mpSMcoAdadCw=="
},
"Microsoft.Extensions.Logging.Abstractions": { "Microsoft.Extensions.Logging.Abstractions": {
"type": "Transitive", "type": "Transitive",
"resolved": "2.2.0", "resolved": "2.2.0",
@@ -125,6 +120,11 @@
"resolved": "1.1.0", "resolved": "1.1.0",
"contentHash": "kz0PEW2lhqygehI/d6XsPCQzD7ff7gUJaVGPVETX611eadGsA3A877GdSlU0LRVMCTH/+P3o2iDTak+S08V2+A==" "contentHash": "kz0PEW2lhqygehI/d6XsPCQzD7ff7gUJaVGPVETX611eadGsA3A877GdSlU0LRVMCTH/+P3o2iDTak+S08V2+A=="
}, },
"Microsoft.NETCore.Targets": {
"type": "Transitive",
"resolved": "1.1.0",
"contentHash": "aOZA3BWfz9RXjpzt0sRJJMjAscAUm3Hoa4UWAfceV9UTYxgwZ1lZt5nO2myFf+/jetYQo4uTP7zS8sJY67BBxg=="
},
"Microsoft.SourceLink.Common": { "Microsoft.SourceLink.Common": {
"type": "Transitive", "type": "Transitive",
"resolved": "8.0.0", "resolved": "8.0.0",
@@ -194,6 +194,15 @@
"System.Threading.Tasks.Extensions": "4.5.4" "System.Threading.Tasks.Extensions": "4.5.4"
} }
}, },
"System.Runtime": {
"type": "Transitive",
"resolved": "4.3.0",
"contentHash": "JufQi0vPQ0xGnAczR13AUFglDyVYt4Kqnz1AZaiKZ5+GICq0/1MH/mO/eAJHt/mHW1zjKBJd7kV26SrxddAhiw==",
"dependencies": {
"Microsoft.NETCore.Platforms": "1.1.0",
"Microsoft.NETCore.Targets": "1.1.0"
}
},
"System.Runtime.CompilerServices.Unsafe": { "System.Runtime.CompilerServices.Unsafe": {
"type": "Transitive", "type": "Transitive",
"resolved": "4.5.3", "resolved": "4.5.3",
@@ -202,7 +211,10 @@
"System.Runtime.InteropServices.WindowsRuntime": { "System.Runtime.InteropServices.WindowsRuntime": {
"type": "Transitive", "type": "Transitive",
"resolved": "4.3.0", "resolved": "4.3.0",
"contentHash": "J4GUi3xZQLUBasNwZnjrffN8i5wpHrBtZoLG+OhRyGo/+YunMRWWtwoMDlUAIdmX0uRfpHIBDSV6zyr3yf00TA==" "contentHash": "J4GUi3xZQLUBasNwZnjrffN8i5wpHrBtZoLG+OhRyGo/+YunMRWWtwoMDlUAIdmX0uRfpHIBDSV6zyr3yf00TA==",
"dependencies": {
"System.Runtime": "4.3.0"
}
}, },
"System.Threading.Tasks.Extensions": { "System.Threading.Tasks.Extensions": {
"type": "Transitive", "type": "Transitive",
@@ -218,7 +230,7 @@
"GraphQL.Client": "[6.0.0, )", "GraphQL.Client": "[6.0.0, )",
"Microsoft.CSharp": "[4.7.0, )", "Microsoft.CSharp": "[4.7.0, )",
"Microsoft.Data.Sqlite": "[7.0.5, )", "Microsoft.Data.Sqlite": "[7.0.5, )",
"Microsoft.Extensions.DependencyInjection": "[2.2.0, )", "Microsoft.Extensions.DependencyInjection.Abstractions": "[2.2.0, )",
"Microsoft.Extensions.Logging": "[2.2.0, )", "Microsoft.Extensions.Logging": "[2.2.0, )",
"Speckle.DoubleNumerics": "[4.1.0, )", "Speckle.DoubleNumerics": "[4.1.0, )",
"Speckle.Newtonsoft.Json": "[13.0.2, )", "Speckle.Newtonsoft.Json": "[13.0.2, )",
@@ -233,7 +245,7 @@
}, },
"GraphQL.Client": { "GraphQL.Client": {
"type": "CentralTransitive", "type": "CentralTransitive",
"requested": "[6.1.0, )", "requested": "[6.0.0, )",
"resolved": "6.0.0", "resolved": "6.0.0",
"contentHash": "8yPNBbuVBpTptivyAlak4GZvbwbUcjeQTL4vN1HKHRuOykZ4r7l5fcLS6vpyPyLn0x8FsL31xbOIKyxbmR9rbA==", "contentHash": "8yPNBbuVBpTptivyAlak4GZvbwbUcjeQTL4vN1HKHRuOykZ4r7l5fcLS6vpyPyLn0x8FsL31xbOIKyxbmR9rbA==",
"dependencies": { "dependencies": {
@@ -267,18 +279,15 @@
"SQLitePCLRaw.bundle_e_sqlite3": "2.1.4" "SQLitePCLRaw.bundle_e_sqlite3": "2.1.4"
} }
}, },
"Microsoft.Extensions.DependencyInjection": { "Microsoft.Extensions.DependencyInjection.Abstractions": {
"type": "CentralTransitive", "type": "CentralTransitive",
"requested": "[10.0.6, )", "requested": "[2.2.0, )",
"resolved": "2.2.0", "resolved": "2.2.0",
"contentHash": "MZtBIwfDFork5vfjpJdG5g8wuJFt7d/y3LOSVVtDK/76wlbtz6cjltfKHqLx2TKVqTj5/c41t77m1+h20zqtPA==", "contentHash": "f9hstgjVmr6rmrfGSpfsVOl2irKAgr1QjrSi3FgnS7kulxband50f2brRLwySAQTADPZeTdow0mpSMcoAdadCw=="
"dependencies": {
"Microsoft.Extensions.DependencyInjection.Abstractions": "2.2.0"
}
}, },
"Microsoft.Extensions.Logging": { "Microsoft.Extensions.Logging": {
"type": "CentralTransitive", "type": "CentralTransitive",
"requested": "[10.0.6, )", "requested": "[2.2.0, )",
"resolved": "2.2.0", "resolved": "2.2.0",
"contentHash": "Nxqhadc9FCmFHzU+fz3oc8sFlE6IadViYg8dfUdGzJZ2JUxnCsRghBhhOWdM4B2zSZqEc+0BjliBh/oNdRZuig==", "contentHash": "Nxqhadc9FCmFHzU+fz3oc8sFlE6IadViYg8dfUdGzJZ2JUxnCsRghBhhOWdM4B2zSZqEc+0BjliBh/oNdRZuig==",
"dependencies": { "dependencies": {
@@ -301,197 +310,6 @@
"contentHash": "g1BejUZwax5PRfL6xHgLEK23sqHWOgOj9hE7RvfRRlN00AGt8GnPYt8HedSK7UB3HiRW8zCA9Pn0iiYxCK24BA==" "contentHash": "g1BejUZwax5PRfL6xHgLEK23sqHWOgOj9hE7RvfRRlN00AGt8GnPYt8HedSK7UB3HiRW8zCA9Pn0iiYxCK24BA=="
} }
}, },
"net10.0": {
"Microsoft.SourceLink.GitHub": {
"type": "Direct",
"requested": "[8.0.0, )",
"resolved": "8.0.0",
"contentHash": "G5q7OqtwIyGTkeIOAc3u2ZuV/kicQaec5EaRnc0pIeSnh9LUjj+PYQrJYBURvDt7twGl2PKA7nSN0kz1Zw5bnQ==",
"dependencies": {
"Microsoft.Build.Tasks.Git": "8.0.0",
"Microsoft.SourceLink.Common": "8.0.0"
}
},
"PolySharp": {
"type": "Direct",
"requested": "[1.15.0, )",
"resolved": "1.15.0",
"contentHash": "FbU0El+EEjdpuIX4iDbeS7ki1uzpJPx8vbqOzEtqnl1GZeAGJfq+jCbxeJL2y0EPnUNk8dRnnqR2xnYXg9Tf+g=="
},
"Speckle.InterfaceGenerator": {
"type": "Direct",
"requested": "[0.9.6, )",
"resolved": "0.9.6",
"contentHash": "HKH7tYrYYlCK1ct483hgxERAdVdMtl7gUKW9ijWXxA1UsYR4Z+TrRHYmzZ9qmpu1NnTycSrp005NYM78GDKV1w=="
},
"GraphQL.Client.Abstractions": {
"type": "Transitive",
"resolved": "6.1.0",
"contentHash": "Za31wjKLEeROZYJmp0Lmj/TLQ1Yw6x6QM0JHABcuyMC3OSopr34ufayrtdxtbL1a3129FTVFKOFC0hcooSQoJQ==",
"dependencies": {
"GraphQL.Primitives": "6.1.0"
}
},
"GraphQL.Client.Abstractions.Websocket": {
"type": "Transitive",
"resolved": "6.1.0",
"contentHash": "PjdG3q4MzPsa5NiBOBhuIRMRTo59der5bFmX2r1gSS3RIjytwpooxF2RffFCBh16sqbwuH1/dllDcNG+EJt1qA==",
"dependencies": {
"GraphQL.Client.Abstractions": "6.1.0"
}
},
"GraphQL.Primitives": {
"type": "Transitive",
"resolved": "6.1.0",
"contentHash": "L8yQ70Wd9p8hMJvnmpgyZfr2R6Q7S0/lPyEBI1tacJa5XzsoJSVtHdmfsMaHyufwk03hlUsBXgNerAs66kxHdA=="
},
"Microsoft.Build.Tasks.Git": {
"type": "Transitive",
"resolved": "8.0.0",
"contentHash": "bZKfSIKJRXLTuSzLudMFte/8CempWjVamNUR5eHJizsy+iuOuO/k2gnh7W0dHJmYY0tBf+gUErfluCv5mySAOQ=="
},
"Microsoft.Data.Sqlite.Core": {
"type": "Transitive",
"resolved": "10.0.0",
"contentHash": "wPKG/Ym6tSMCo06UOZXzVfeFGzawnOZrTba/R3PfK+RhNuNELZ9I7nFns4WGTtv2kKlrlmmErgJ+kgTXHaNdHg==",
"dependencies": {
"SQLitePCLRaw.core": "2.1.11"
}
},
"Microsoft.Extensions.DependencyInjection.Abstractions": {
"type": "Transitive",
"resolved": "10.0.0",
"contentHash": "L3AdmZ1WOK4XXT5YFPEwyt0ep6l8lGIPs7F5OOBZc77Zqeo01Of7XXICy47628sdVl0v/owxYJTe86DTgFwKCA=="
},
"Microsoft.Extensions.Logging.Abstractions": {
"type": "Transitive",
"resolved": "10.0.0",
"contentHash": "FU/IfjDfwaMuKr414SSQNTIti/69bHEMb+QKrskRb26oVqpx3lNFXMjs/RC9ZUuhBhcwDM2BwOgoMw+PZ+beqQ==",
"dependencies": {
"Microsoft.Extensions.DependencyInjection.Abstractions": "10.0.0"
}
},
"Microsoft.Extensions.Options": {
"type": "Transitive",
"resolved": "10.0.0",
"contentHash": "8oCAgXOow5XDrY9HaXX1QmH3ORsyZO/ANVHBlhLyCeWTH5Sg4UuqZeOTWJi6484M+LqSx0RqQXDJtdYy2BNiLQ==",
"dependencies": {
"Microsoft.Extensions.DependencyInjection.Abstractions": "10.0.0",
"Microsoft.Extensions.Primitives": "10.0.0"
}
},
"Microsoft.Extensions.Primitives": {
"type": "Transitive",
"resolved": "10.0.0",
"contentHash": "inRnbpCS0nwO/RuoZIAqxQUuyjaknOOnCEZB55KSMMjRhl0RQDttSmLSGsUJN3RQ3ocf5NDLFd2mOQViHqMK5w=="
},
"Microsoft.SourceLink.Common": {
"type": "Transitive",
"resolved": "8.0.0",
"contentHash": "dk9JPxTCIevS75HyEQ0E4OVAFhB2N+V9ShCXf8Q6FkUQZDkgLI12y679Nym1YqsiSysuQskT7Z+6nUf3yab6Vw=="
},
"SQLitePCLRaw.bundle_e_sqlite3": {
"type": "Transitive",
"resolved": "2.1.11",
"contentHash": "DC4nA7yWnf4UZdgJDF+9Mus4/cb0Y3Sfgi3gDnAoKNAIBwzkskNAbNbyu+u4atT0ruVlZNJfwZmwiEwE5oz9LQ==",
"dependencies": {
"SQLitePCLRaw.lib.e_sqlite3": "2.1.11",
"SQLitePCLRaw.provider.e_sqlite3": "2.1.11"
}
},
"SQLitePCLRaw.core": {
"type": "Transitive",
"resolved": "2.1.11",
"contentHash": "PK0GLFkfhZzLQeR3PJf71FmhtHox+U3vcY6ZtswoMjrefkB9k6ErNJEnwXqc5KgXDSjige2XXrezqS39gkpQKA=="
},
"SQLitePCLRaw.lib.e_sqlite3": {
"type": "Transitive",
"resolved": "2.1.11",
"contentHash": "Ev2ytaXiOlWZ4b3R67GZBsemTINslLD1DCJr2xiacpn4tbapu0Q4dHEzSvZSMnVWeE5nlObU3VZN2p81q3XOYQ=="
},
"SQLitePCLRaw.provider.e_sqlite3": {
"type": "Transitive",
"resolved": "2.1.11",
"contentHash": "Y/0ZkR+r0Cg3DQFuCl1RBnv/tmxpIZRU3HUvelPw6MVaKHwYYR8YNvgs0vuNuXCMvlyJ+Fh88U1D4tah1tt6qw==",
"dependencies": {
"SQLitePCLRaw.core": "2.1.11"
}
},
"System.Reactive": {
"type": "Transitive",
"resolved": "6.0.0",
"contentHash": "31kfaW4ZupZzPsI5PVe77VhnvFF55qgma7KZr/E0iFTs6fmdhhG8j0mgEx620iLTey1EynOkEfnyTjtNEpJzGw=="
},
"speckle.sdk": {
"type": "Project",
"dependencies": {
"GraphQL.Client": "[6.1.0, )",
"Microsoft.Data.Sqlite": "[10.0.0, )",
"Microsoft.Extensions.DependencyInjection": "[10.0.0, )",
"Microsoft.Extensions.Logging": "[10.0.0, )",
"Speckle.DoubleNumerics": "[4.1.0, )",
"Speckle.Newtonsoft.Json": "[13.0.2, )",
"Speckle.Sdk.Dependencies": "[1.0.0, )"
}
},
"speckle.sdk.dependencies": {
"type": "Project"
},
"GraphQL.Client": {
"type": "CentralTransitive",
"requested": "[6.1.0, )",
"resolved": "6.1.0",
"contentHash": "oKliAxtNuZDMxO9079mjSbwA0YwhjXBzVnVPuNZ3HI4OllO++CcOLT30l90mM/fxCAMaa8GU4ZYMwD9YjLkyiw==",
"dependencies": {
"GraphQL.Client.Abstractions": "6.1.0",
"GraphQL.Client.Abstractions.Websocket": "6.1.0",
"System.Reactive": "6.0.0"
}
},
"Microsoft.Data.Sqlite": {
"type": "CentralTransitive",
"requested": "[7.0.5, )",
"resolved": "10.0.0",
"contentHash": "I/azQ5WjwoLvSlTyDydkhARPSjYJN8jkXRjR5D92OeyTLbTrQ1K93rgf6XU+HYWHZA6lBI9SUOfl69OqEHb4ow==",
"dependencies": {
"Microsoft.Data.Sqlite.Core": "10.0.0",
"SQLitePCLRaw.bundle_e_sqlite3": "2.1.11",
"SQLitePCLRaw.core": "2.1.11"
}
},
"Microsoft.Extensions.DependencyInjection": {
"type": "CentralTransitive",
"requested": "[10.0.6, )",
"resolved": "10.0.0",
"contentHash": "f0RBabswJq+gRu5a+hWIobrLWiUYPKMhCD9WO3sYBAdSy3FFH14LMvLVFZc2kPSCimBLxSuitUhsd6tb0TAY6A==",
"dependencies": {
"Microsoft.Extensions.DependencyInjection.Abstractions": "10.0.0"
}
},
"Microsoft.Extensions.Logging": {
"type": "CentralTransitive",
"requested": "[10.0.6, )",
"resolved": "10.0.0",
"contentHash": "BStFkd5CcnEtarlcgYDBcFzGYCuuNMzPs02wN3WBsOFoYIEmYoUdAiU+au6opzoqfTYJsMTW00AeqDdnXH2CvA==",
"dependencies": {
"Microsoft.Extensions.DependencyInjection": "10.0.0",
"Microsoft.Extensions.Logging.Abstractions": "10.0.0",
"Microsoft.Extensions.Options": "10.0.0"
}
},
"Speckle.DoubleNumerics": {
"type": "CentralTransitive",
"requested": "[4.1.0, )",
"resolved": "4.1.0",
"contentHash": "20DtS+FsDRsOD9+AU3TwNFZ0qrKo5f6f7B5ZR9wStsIHHHC9k7DpjbCvuNtmnSjx54MD+TJC7wV2f5iyGVPj1A=="
},
"Speckle.Newtonsoft.Json": {
"type": "CentralTransitive",
"requested": "[13.0.2, )",
"resolved": "13.0.2",
"contentHash": "g1BejUZwax5PRfL6xHgLEK23sqHWOgOj9hE7RvfRRlN00AGt8GnPYt8HedSK7UB3HiRW8zCA9Pn0iiYxCK24BA=="
}
},
"net8.0": { "net8.0": {
"Microsoft.SourceLink.GitHub": { "Microsoft.SourceLink.GitHub": {
"type": "Direct", "type": "Direct",
@@ -549,32 +367,53 @@
"SQLitePCLRaw.core": "2.1.4" "SQLitePCLRaw.core": "2.1.4"
} }
}, },
"Microsoft.Extensions.DependencyInjection.Abstractions": { "Microsoft.Extensions.Configuration": {
"type": "Transitive", "type": "Transitive",
"resolved": "8.0.0", "resolved": "2.2.0",
"contentHash": "cjWrLkJXK0rs4zofsK4bSdg+jhDLTaxrkXu4gS6Y7MAlCvRyNNgwY/lJi5RDlQOnSZweHqoyvgvbdvQsRIW+hg==" "contentHash": "nOP8R1mVb/6mZtm2qgAJXn/LFm/2kMjHDAg/QJLFG6CuWYJtaD3p1BwQhufBVvRzL9ceJ/xF0SQ0qsI2GkDQAA==",
"dependencies": {
"Microsoft.Extensions.Configuration.Abstractions": "2.2.0"
}
},
"Microsoft.Extensions.Configuration.Abstractions": {
"type": "Transitive",
"resolved": "2.2.0",
"contentHash": "65MrmXCziWaQFrI0UHkQbesrX5wTwf9XPjY5yFm/VkgJKFJ5gqvXRoXjIZcf2wLi5ZlwGz/oMYfyURVCWbM5iw==",
"dependencies": {
"Microsoft.Extensions.Primitives": "2.2.0"
}
},
"Microsoft.Extensions.Configuration.Binder": {
"type": "Transitive",
"resolved": "2.2.0",
"contentHash": "vJ9xvOZCnUAIHcGC3SU35r3HKmHTVIeHzo6u/qzlHAqD8m6xv92MLin4oJntTvkpKxVX3vI1GFFkIQtU3AdlsQ==",
"dependencies": {
"Microsoft.Extensions.Configuration": "2.2.0"
}
}, },
"Microsoft.Extensions.Logging.Abstractions": { "Microsoft.Extensions.Logging.Abstractions": {
"type": "Transitive", "type": "Transitive",
"resolved": "8.0.0", "resolved": "2.2.0",
"contentHash": "arDBqTgFCyS0EvRV7O3MZturChstm50OJ0y9bDJvAcmEPJm0FFpFyjU/JLYyStNGGey081DvnQYlncNX5SJJGA==", "contentHash": "B2WqEox8o+4KUOpL7rZPyh6qYjik8tHi2tN8Z9jZkHzED8ElYgZa/h6K+xliB435SqUcWT290Fr2aa8BtZjn8A=="
"dependencies": {
"Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.0"
}
}, },
"Microsoft.Extensions.Options": { "Microsoft.Extensions.Options": {
"type": "Transitive", "type": "Transitive",
"resolved": "8.0.0", "resolved": "2.2.0",
"contentHash": "JOVOfqpnqlVLUzINQ2fox8evY2SKLYJ3BV8QDe/Jyp21u1T7r45x/R/5QdteURMR5r01GxeJSBBUOCOyaNXA3g==", "contentHash": "UpZLNLBpIZ0GTebShui7xXYh6DmBHjWM8NxGxZbdQh/bPZ5e6YswqI+bru6BnEL5eWiOdodsXtEz3FROcgi/qg==",
"dependencies": { "dependencies": {
"Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.0", "Microsoft.Extensions.DependencyInjection.Abstractions": "2.2.0",
"Microsoft.Extensions.Primitives": "8.0.0" "Microsoft.Extensions.Primitives": "2.2.0",
"System.ComponentModel.Annotations": "4.5.0"
} }
}, },
"Microsoft.Extensions.Primitives": { "Microsoft.Extensions.Primitives": {
"type": "Transitive", "type": "Transitive",
"resolved": "8.0.0", "resolved": "2.2.0",
"contentHash": "bXJEZrW9ny8vjMF1JV253WeLhpEVzFo1lyaZu1vQ4ZxWUlVvknZ/+ftFgVheLubb4eZPSwwxBeqS1JkCOjxd8g==" "contentHash": "azyQtqbm4fSaDzZHD/J+V6oWMFaf2tWP4WEGIYePLCMw3+b2RQdj9ybgbQyjCshcitQKQ4lEDOZjmSlTTrHxUg==",
"dependencies": {
"System.Memory": "4.5.1",
"System.Runtime.CompilerServices.Unsafe": "4.5.1"
}
}, },
"Microsoft.SourceLink.Common": { "Microsoft.SourceLink.Common": {
"type": "Transitive", "type": "Transitive",
@@ -593,7 +432,10 @@
"SQLitePCLRaw.core": { "SQLitePCLRaw.core": {
"type": "Transitive", "type": "Transitive",
"resolved": "2.1.4", "resolved": "2.1.4",
"contentHash": "inBjvSHo9UDKneGNzfUfDjK08JzlcIhn1+SP5Y3m6cgXpCxXKCJDy6Mka7LpgSV+UZmKSnC8rTwB0SQ0xKu5pA==" "contentHash": "inBjvSHo9UDKneGNzfUfDjK08JzlcIhn1+SP5Y3m6cgXpCxXKCJDy6Mka7LpgSV+UZmKSnC8rTwB0SQ0xKu5pA==",
"dependencies": {
"System.Memory": "4.5.3"
}
}, },
"SQLitePCLRaw.lib.e_sqlite3": { "SQLitePCLRaw.lib.e_sqlite3": {
"type": "Transitive", "type": "Transitive",
@@ -608,18 +450,33 @@
"SQLitePCLRaw.core": "2.1.4" "SQLitePCLRaw.core": "2.1.4"
} }
}, },
"System.ComponentModel.Annotations": {
"type": "Transitive",
"resolved": "4.5.0",
"contentHash": "UxYQ3FGUOtzJ7LfSdnYSFd7+oEv6M8NgUatatIN2HxNtDdlcvFAf+VIq4Of9cDMJEJC0aSRv/x898RYhB4Yppg=="
},
"System.Memory": {
"type": "Transitive",
"resolved": "4.5.3",
"contentHash": "3oDzvc/zzetpTKWMShs1AADwZjQ/36HnsufHRPcOjyRAAMLDlu2iD33MBI2opxnezcVUtXyqDXXjoFMOU9c7SA=="
},
"System.Reactive": { "System.Reactive": {
"type": "Transitive", "type": "Transitive",
"resolved": "5.0.0", "resolved": "5.0.0",
"contentHash": "erBZjkQHWL9jpasCE/0qKAryzVBJFxGHVBAvgRN1bzM0q2s1S4oYREEEL0Vb+1kA/6BKb5FjUZMp5VXmy+gzkQ==" "contentHash": "erBZjkQHWL9jpasCE/0qKAryzVBJFxGHVBAvgRN1bzM0q2s1S4oYREEEL0Vb+1kA/6BKb5FjUZMp5VXmy+gzkQ=="
}, },
"System.Runtime.CompilerServices.Unsafe": {
"type": "Transitive",
"resolved": "4.5.1",
"contentHash": "Zh8t8oqolRaFa9vmOZfdQm/qKejdqz0J9kr7o2Fu0vPeoH3BL1EOXipKWwkWtLT1JPzjByrF19fGuFlNbmPpiw=="
},
"speckle.sdk": { "speckle.sdk": {
"type": "Project", "type": "Project",
"dependencies": { "dependencies": {
"GraphQL.Client": "[6.0.0, )", "GraphQL.Client": "[6.0.0, )",
"Microsoft.Data.Sqlite": "[7.0.5, )", "Microsoft.Data.Sqlite": "[7.0.5, )",
"Microsoft.Extensions.DependencyInjection": "[8.0.0, )", "Microsoft.Extensions.DependencyInjection.Abstractions": "[2.2.0, )",
"Microsoft.Extensions.Logging": "[8.0.0, )", "Microsoft.Extensions.Logging": "[2.2.0, )",
"Speckle.DoubleNumerics": "[4.1.0, )", "Speckle.DoubleNumerics": "[4.1.0, )",
"Speckle.Newtonsoft.Json": "[13.0.2, )", "Speckle.Newtonsoft.Json": "[13.0.2, )",
"Speckle.Sdk.Dependencies": "[1.0.0, )" "Speckle.Sdk.Dependencies": "[1.0.0, )"
@@ -630,7 +487,7 @@
}, },
"GraphQL.Client": { "GraphQL.Client": {
"type": "CentralTransitive", "type": "CentralTransitive",
"requested": "[6.1.0, )", "requested": "[6.0.0, )",
"resolved": "6.0.0", "resolved": "6.0.0",
"contentHash": "8yPNBbuVBpTptivyAlak4GZvbwbUcjeQTL4vN1HKHRuOykZ4r7l5fcLS6vpyPyLn0x8FsL31xbOIKyxbmR9rbA==", "contentHash": "8yPNBbuVBpTptivyAlak4GZvbwbUcjeQTL4vN1HKHRuOykZ4r7l5fcLS6vpyPyLn0x8FsL31xbOIKyxbmR9rbA==",
"dependencies": { "dependencies": {
@@ -649,24 +506,22 @@
"SQLitePCLRaw.bundle_e_sqlite3": "2.1.4" "SQLitePCLRaw.bundle_e_sqlite3": "2.1.4"
} }
}, },
"Microsoft.Extensions.DependencyInjection": { "Microsoft.Extensions.DependencyInjection.Abstractions": {
"type": "CentralTransitive", "type": "CentralTransitive",
"requested": "[10.0.6, )", "requested": "[2.2.0, )",
"resolved": "8.0.0", "resolved": "2.2.0",
"contentHash": "V8S3bsm50ig6JSyrbcJJ8bW2b9QLGouz+G1miK3UTaOWmMtFwNNNzUf4AleyDWUmTrWMLNnFSLEQtxmxgNQnNQ==", "contentHash": "f9hstgjVmr6rmrfGSpfsVOl2irKAgr1QjrSi3FgnS7kulxband50f2brRLwySAQTADPZeTdow0mpSMcoAdadCw=="
"dependencies": {
"Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.0"
}
}, },
"Microsoft.Extensions.Logging": { "Microsoft.Extensions.Logging": {
"type": "CentralTransitive", "type": "CentralTransitive",
"requested": "[10.0.6, )", "requested": "[2.2.0, )",
"resolved": "8.0.0", "resolved": "2.2.0",
"contentHash": "tvRkov9tAJ3xP51LCv3FJ2zINmv1P8Hi8lhhtcKGqM+ImiTCC84uOPEI4z8Cdq2C3o9e+Aa0Gw0rmrsJD77W+w==", "contentHash": "Nxqhadc9FCmFHzU+fz3oc8sFlE6IadViYg8dfUdGzJZ2JUxnCsRghBhhOWdM4B2zSZqEc+0BjliBh/oNdRZuig==",
"dependencies": { "dependencies": {
"Microsoft.Extensions.DependencyInjection": "8.0.0", "Microsoft.Extensions.Configuration.Binder": "2.2.0",
"Microsoft.Extensions.Logging.Abstractions": "8.0.0", "Microsoft.Extensions.DependencyInjection.Abstractions": "2.2.0",
"Microsoft.Extensions.Options": "8.0.0" "Microsoft.Extensions.Logging.Abstractions": "2.2.0",
"Microsoft.Extensions.Options": "2.2.0"
} }
}, },
"Speckle.DoubleNumerics": { "Speckle.DoubleNumerics": {
@@ -1,6 +1,6 @@
<Project Sdk="Microsoft.NET.Sdk"> <Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup Label="Compiler Properties"> <PropertyGroup Label="Compiler Properties">
<TargetFrameworks>netstandard2.0;net8.0;net10.0</TargetFrameworks> <TargetFrameworks>netstandard2.0;net8.0</TargetFrameworks>
<Configurations>Debug;Release;Local</Configurations> <Configurations>Debug;Release;Local</Configurations>
<ILRepackTargetConfigurations>Debug;Release;Local</ILRepackTargetConfigurations> <ILRepackTargetConfigurations>Debug;Release;Local</ILRepackTargetConfigurations>
<ILRepackRenameInternalized>true</ILRepackRenameInternalized> <ILRepackRenameInternalized>true</ILRepackRenameInternalized>
@@ -58,7 +58,7 @@
}, },
"Polly": { "Polly": {
"type": "Direct", "type": "Direct",
"requested": "[7.2.3, 8.0.0]", "requested": "[7.2.3, )",
"resolved": "7.2.3", "resolved": "7.2.3",
"contentHash": "DeCY0OFbNdNxsjntr1gTXHJ5pKUwYzp04Er2LLeN3g6pWhffsGuKVfMBLe1lw7x76HrPkLxKEFxBlpRxS2nDEQ==" "contentHash": "DeCY0OFbNdNxsjntr1gTXHJ5pKUwYzp04Er2LLeN3g6pWhffsGuKVfMBLe1lw7x76HrPkLxKEFxBlpRxS2nDEQ=="
}, },
@@ -162,93 +162,6 @@
} }
} }
}, },
"net10.0": {
"ILRepack.FullAuto": {
"type": "Direct",
"requested": "[1.6.0, )",
"resolved": "1.6.0",
"contentHash": "34qp/HQ0XRIWCjtNGUOslJ6p9eNWqHXZQ+xx1iBCvXy3mj8tEiqIwRG+LubFyKCJITqMh5cpFvFl20/6+Dmy+g==",
"dependencies": {
"ILRepack": "2.0.33"
}
},
"Microsoft.Extensions.ObjectPool": {
"type": "Direct",
"requested": "[9.0.4, )",
"resolved": "9.0.4",
"contentHash": "G7p1k2xVZ+2aVANz0JdSiafr+AHDHeS1kF8+Y0ABbIsByd0erOL59IDXBs9vcdJf3pPV/murO0mbtr4k40QxWw=="
},
"Microsoft.SourceLink.GitHub": {
"type": "Direct",
"requested": "[8.0.0, )",
"resolved": "8.0.0",
"contentHash": "G5q7OqtwIyGTkeIOAc3u2ZuV/kicQaec5EaRnc0pIeSnh9LUjj+PYQrJYBURvDt7twGl2PKA7nSN0kz1Zw5bnQ==",
"dependencies": {
"Microsoft.Build.Tasks.Git": "8.0.0",
"Microsoft.SourceLink.Common": "8.0.0"
}
},
"Open.ChannelExtensions": {
"type": "Direct",
"requested": "[9.1.0, )",
"resolved": "9.1.0",
"contentHash": "D6c24vMGy1oZ06vmkD2/FNzWHK7ZIihuv2spDgYEeaUp+eobrILQnrNQKRoASFXD4JGfZ7nfvTM0e+AX79dt8Q=="
},
"Polly": {
"type": "Direct",
"requested": "[7.2.3, 8.0.0]",
"resolved": "7.2.3",
"contentHash": "DeCY0OFbNdNxsjntr1gTXHJ5pKUwYzp04Er2LLeN3g6pWhffsGuKVfMBLe1lw7x76HrPkLxKEFxBlpRxS2nDEQ=="
},
"Polly.Contrib.WaitAndRetry": {
"type": "Direct",
"requested": "[1.1.1, )",
"resolved": "1.1.1",
"contentHash": "1MUQLiSo4KDkQe6nzQRhIU05lm9jlexX5BVsbuw0SL82ynZ+GzAHQxJVDPVBboxV37Po3SG077aX8DuSy8TkaA=="
},
"Polly.Extensions.Http": {
"type": "Direct",
"requested": "[3.0.0, )",
"resolved": "3.0.0",
"contentHash": "drrG+hB3pYFY7w1c3BD+lSGYvH2oIclH8GRSehgfyP5kjnFnHKQuuBhuHLv+PWyFuaTDyk/vfRpnxOzd11+J8g==",
"dependencies": {
"Polly": "7.1.0"
}
},
"PolySharp": {
"type": "Direct",
"requested": "[1.15.0, )",
"resolved": "1.15.0",
"contentHash": "FbU0El+EEjdpuIX4iDbeS7ki1uzpJPx8vbqOzEtqnl1GZeAGJfq+jCbxeJL2y0EPnUNk8dRnnqR2xnYXg9Tf+g=="
},
"Speckle.InterfaceGenerator": {
"type": "Direct",
"requested": "[0.9.6, )",
"resolved": "0.9.6",
"contentHash": "HKH7tYrYYlCK1ct483hgxERAdVdMtl7gUKW9ijWXxA1UsYR4Z+TrRHYmzZ9qmpu1NnTycSrp005NYM78GDKV1w=="
},
"System.Threading.Channels": {
"type": "Direct",
"requested": "[9.0.4, )",
"resolved": "9.0.4",
"contentHash": "4qBn2H6/aXBpE/Pm3wY5yusY/pEvQz99NlWHrTUji0qCmOdbhhjaALcpmbfW2ksxlPM6i6S+QFLkpOQdyfeKYQ=="
},
"ILRepack": {
"type": "Transitive",
"resolved": "2.0.33",
"contentHash": "xb2h1CsOepoYwdXEPui9VcQglwABQwNf9cccZbf+acarEzF5PUp8Xx71nFXIhOgEdm6wrxAoF6xAxK4m/XFRUQ=="
},
"Microsoft.Build.Tasks.Git": {
"type": "Transitive",
"resolved": "8.0.0",
"contentHash": "bZKfSIKJRXLTuSzLudMFte/8CempWjVamNUR5eHJizsy+iuOuO/k2gnh7W0dHJmYY0tBf+gUErfluCv5mySAOQ=="
},
"Microsoft.SourceLink.Common": {
"type": "Transitive",
"resolved": "8.0.0",
"contentHash": "dk9JPxTCIevS75HyEQ0E4OVAFhB2N+V9ShCXf8Q6FkUQZDkgLI12y679Nym1YqsiSysuQskT7Z+6nUf3yab6Vw=="
}
},
"net8.0": { "net8.0": {
"ILRepack.FullAuto": { "ILRepack.FullAuto": {
"type": "Direct", "type": "Direct",
@@ -283,7 +196,7 @@
}, },
"Polly": { "Polly": {
"type": "Direct", "type": "Direct",
"requested": "[7.2.3, 8.0.0]", "requested": "[7.2.3, )",
"resolved": "7.2.3", "resolved": "7.2.3",
"contentHash": "DeCY0OFbNdNxsjntr1gTXHJ5pKUwYzp04Er2LLeN3g6pWhffsGuKVfMBLe1lw7x76HrPkLxKEFxBlpRxS2nDEQ==" "contentHash": "DeCY0OFbNdNxsjntr1gTXHJ5pKUwYzp04Er2LLeN3g6pWhffsGuKVfMBLe1lw7x76HrPkLxKEFxBlpRxS2nDEQ=="
}, },
+2 -2
View File
@@ -154,10 +154,10 @@ public sealed class Client : ISpeckleGraphQLClient, IClient
activity?.SetStatus(SdkActivityStatusCode.Ok); activity?.SetStatus(SdkActivityStatusCode.Ok);
return ret; return ret;
} }
catch (Exception ex) catch (Exception)
{ {
activity?.SetStatus(SdkActivityStatusCode.Error); activity?.SetStatus(SdkActivityStatusCode.Error);
activity?.RecordException(ex); // Don't record exception as it's rethrown.
throw; throw;
} }
} }
@@ -1,3 +1,5 @@
using Speckle.Newtonsoft.Json;
namespace Speckle.Sdk.Api.GraphQL.Models; namespace Speckle.Sdk.Api.GraphQL.Models;
public class LimitedWorkspace public class LimitedWorkspace
@@ -6,8 +8,12 @@ public class LimitedWorkspace
public string name { get; init; } public string name { get; init; }
public string? role { get; init; } public string? role { get; init; }
public string slug { get; init; } public string slug { get; init; }
public string? logo { get; init; } public string? logoUri { get; init; }
public string? description { get; init; } public string? description { get; init; }
[JsonIgnore]
[Obsolete($"Deprecated, use {nameof(logoUri)} instead", true)]
public string? logo { get; init; }
} }
public class Workspace : LimitedWorkspace public class Workspace : LimitedWorkspace
@@ -16,9 +22,13 @@ public class Workspace : LimitedWorkspace
public DateTime updatedAt { get; init; } public DateTime updatedAt { get; init; }
public bool readOnly { get; init; } public bool readOnly { get; init; }
public WorkspacePermissionChecks permissions { get; init; } public WorkspacePermissionChecks permissions { get; init; }
[JsonIgnore]
[Obsolete("Workspaces no longer have creation state, is always created true", true)]
public WorkspaceCreationState? creationState { get; init; } public WorkspaceCreationState? creationState { get; init; }
} }
[Obsolete("Workspaces no longer have creation state, is always created true")]
public sealed class WorkspaceCreationState public sealed class WorkspaceCreationState
{ {
public bool completed { get; init; } public bool completed { get; init; }
@@ -264,15 +264,11 @@ public sealed class ActiveUserResource
name name
role role
slug slug
logo logoUrl
createdAt createdAt
updatedAt updatedAt
readOnly readOnly
description description
creationState
{
completed
}
permissions { permissions {
canCreateProject { canCreateProject {
authorized authorized
@@ -317,7 +313,7 @@ public sealed class ActiveUserResource
/// <remarks>note this returns a <see cref="LimitedWorkspace"/>, because it may be a workspace the user is not a member of</remarks> /// <remarks>note this returns a <see cref="LimitedWorkspace"/>, because it may be a workspace the user is not a member of</remarks>
/// <inheritdoc cref="ISpeckleGraphQLClient.ExecuteGraphQLRequest{T}"/> /// <inheritdoc cref="ISpeckleGraphQLClient.ExecuteGraphQLRequest{T}"/>
/// <exception cref="SpeckleException">The ActiveUser could not be found (e.g. the client is not authenticated)</exception> /// <exception cref="SpeckleException">The ActiveUser could not be found (e.g. the client is not authenticated)</exception>
public async Task<LimitedWorkspace?> GetActiveWorkspace(CancellationToken cancellationToken = default) private async Task<LimitedWorkspace?> GetActiveWorkspace_Legacy(CancellationToken cancellationToken = default)
{ {
//language=graphql //language=graphql
const string QUERY = """ const string QUERY = """
@@ -328,7 +324,6 @@ public sealed class ActiveUserResource
name name
role role
slug slug
logo
description description
} }
} }
@@ -349,6 +344,47 @@ public sealed class ActiveUserResource
return response.data.data; return response.data.data;
} }
public async Task<LimitedWorkspace?> GetActiveWorkspace(CancellationToken cancellationToken = default)
{
//language=graphql
const string QUERY = """
query ActiveUser {
data:activeUser {
data:activeWorkspace {
id
name
role
slug
logoUrl
description
}
}
}
""";
var request = new GraphQLRequest { Query = QUERY };
NullableResponse<NullableResponse<LimitedWorkspace?>?> response;
try
{
response = await _client
.ExecuteGraphQLRequest<NullableResponse<NullableResponse<LimitedWorkspace?>?>>(request, cancellationToken)
.ConfigureAwait(false);
}
catch (SpeckleGraphQLInvalidQueryException)
{
//v2.x.x servers do not have a logoUrl property
return await GetActiveWorkspace_Legacy(cancellationToken).ConfigureAwait(false);
}
if (response.data is null)
{
throw new SpeckleException("GraphQL response indicated that the ActiveUser could not be found");
}
return response.data.data;
}
/// <param name="limit">Max number of projects to fetch</param> /// <param name="limit">Max number of projects to fetch</param>
/// <param name="cursor">Optional cursor for pagination</param> /// <param name="cursor">Optional cursor for pagination</param>
/// <param name="filter">Optional filter</param> /// <param name="filter">Optional filter</param>
@@ -52,7 +52,6 @@ public sealed class OtherUserResource
/// <param name="query">String to search for. Must be at least 3 characters</param> /// <param name="query">String to search for. Must be at least 3 characters</param>
/// <param name="limit">Max number of users to fetch</param> /// <param name="limit">Max number of users to fetch</param>
/// <param name="cursor">Optional cursor for pagination</param> /// <param name="cursor">Optional cursor for pagination</param>
/// <param name="archived"></param>
/// <param name="emailOnly"></param> /// <param name="emailOnly"></param>
/// <param name="cancellationToken"></param> /// <param name="cancellationToken"></param>
/// <returns></returns> /// <returns></returns>
@@ -61,26 +60,25 @@ public sealed class OtherUserResource
string query, string query,
int limit = ServerLimits.DEFAULT_PAGINATION_REQUEST, int limit = ServerLimits.DEFAULT_PAGINATION_REQUEST,
string? cursor = null, string? cursor = null,
bool archived = false,
bool emailOnly = false, bool emailOnly = false,
CancellationToken cancellationToken = default CancellationToken cancellationToken = default
) )
{ {
//language=graphql //language=graphql
const string QUERY = """ const string QUERY = """
query UserSearch($query: String!, $limit: Int!, $cursor: String, $archived: Boolean, $emailOnly: Boolean) { query Users($input: UsersRetrievalInput!) {
data:userSearch(query: $query, limit: $limit, cursor: $cursor, archived: $archived, emailOnly: $emailOnly) { data:users(input: $input) {
cursor cursor
items { items {
id id
name name
bio bio
company company
avatar avatar
verified verified
role role
} }
} }
} }
"""; """;
@@ -89,11 +87,13 @@ public sealed class OtherUserResource
Query = QUERY, Query = QUERY,
Variables = new Variables = new
{ {
query, input = new
limit, {
cursor, query,
archived, limit,
emailOnly, emailOnly,
cursor,
},
}, },
}; };
@@ -76,6 +76,7 @@ public sealed class SubscriptionResource : IDisposable
/// <summary>Subscribe to updates to resource comments/threads. Optionally specify resource ID string to only receive updates regarding comments for those resources</summary> /// <summary>Subscribe to updates to resource comments/threads. Optionally specify resource ID string to only receive updates regarding comments for those resources</summary>
/// <remarks><inheritdoc cref="CreateUserProjectsUpdatedSubscription"/></remarks> /// <remarks><inheritdoc cref="CreateUserProjectsUpdatedSubscription"/></remarks>
/// <inheritdoc cref="ISpeckleGraphQLClient.SubscribeTo{T}"/> /// <inheritdoc cref="ISpeckleGraphQLClient.SubscribeTo{T}"/>
[Obsolete("Comments are now issues, and we've not update SDKs with the new subs")]
public Subscription<ProjectCommentsUpdatedMessage> CreateProjectCommentsUpdatedSubscription( public Subscription<ProjectCommentsUpdatedMessage> CreateProjectCommentsUpdatedSubscription(
ViewerUpdateTrackingTarget target ViewerUpdateTrackingTarget target
) )
@@ -28,15 +28,11 @@ public sealed class WorkspaceResource
name name
role role
slug slug
logo logoUrl
createdAt createdAt
updatedAt updatedAt
readOnly readOnly
description description
creationState
{
completed
}
permissions { permissions {
canCreateProject { canCreateProject {
authorized authorized
-4
View File
@@ -160,10 +160,6 @@ public static class Md5
public static string GetString(string input) public static string GetString(string input)
{ {
var hash = ComputeHash(System.Text.Encoding.UTF8.GetBytes(input)); var hash = ComputeHash(System.Text.Encoding.UTF8.GetBytes(input));
#if NET8_0_OR_GREATER
return Convert.ToHexString(hash);
#else
return BitConverter.ToString(hash).Replace("-", ""); return BitConverter.ToString(hash).Replace("-", "");
#endif
} }
} }
+32 -2
View File
@@ -1,8 +1,11 @@
using System.Runtime.InteropServices;
using Speckle.Sdk.Api.GraphQL.Models; using Speckle.Sdk.Api.GraphQL.Models;
using Speckle.Sdk.Common; using Speckle.Sdk.Common;
namespace Speckle.Sdk.Credentials; namespace Speckle.Sdk.Credentials;
[ClassInterface(ClassInterfaceType.AutoDual)]
[ComVisible(true)]
public class Account : IEquatable<Account> public class Account : IEquatable<Account>
{ {
private string _id; private string _id;
@@ -34,8 +37,6 @@ public class Account : IEquatable<Account>
public string? refreshToken { get; set; } public string? refreshToken { get; set; }
public bool isDefault { get; set; } public bool isDefault { get; set; }
[Obsolete("Not used in v3")]
public bool isOnline { get; set; } = true; public bool isOnline { get; set; } = true;
public ServerInfo serverInfo { get; set; } public ServerInfo serverInfo { get; set; }
@@ -100,4 +101,33 @@ public class Account : IEquatable<Account>
} }
#endregion #endregion
internal const string LOCAL_IDENTIFIER_DEPRECATION_MESSAGE = "Local identifiers no longer nesseary";
/// <summary>
/// Retrieves the local identifier for the current user.
/// </summary>
/// <returns>
/// Returns a <see cref="Uri"/> object representing the local identifier for the current user.
/// The local identifier is created by appending the user ID as a query parameter to the server URL.
/// </returns>
/// <remarks>
/// Notice that the generated Uri is not intended to be used as a functioning Uri, but rather as a
/// unique identifier for a specific account in a local environment. The format of the Uri, containing a query parameter with the user ID,
/// serves this specific purpose. Therefore, it should not be used for forming network requests or
/// expecting it to lead to an actual webpage. The primary intent of this Uri is for unique identification in a Uri format.
/// </remarks>
/// <example>
/// This sample shows how to call the GetLocalIdentifier method.
/// <code>
/// Uri localIdentifier = GetLocalIdentifier();
/// Console.WriteLine(localIdentifier);
/// </code>
/// For a fictional `User ID: 123` and `Server: https://speckle.xyz`, the output might look like this:
/// <code>
/// https://speckle.xyz?id=123
/// </code>
/// </example>
[Obsolete(LOCAL_IDENTIFIER_DEPRECATION_MESSAGE)]
internal Uri GetLocalIdentifier() => new($"{serverInfo.url}?id={userInfo.id}");
} }
+540 -112
View File
@@ -1,35 +1,145 @@
using System.Diagnostics;
using System.Net;
using System.Net.Http.Headers;
using System.Security.Cryptography;
using System.Text;
using System.Text.RegularExpressions;
using GraphQL;
using GraphQL.Client.Http; using GraphQL.Client.Http;
using Microsoft.Extensions.Logging; using Microsoft.Extensions.Logging;
using Speckle.InterfaceGenerator; using Speckle.InterfaceGenerator;
using Speckle.Newtonsoft.Json; using Speckle.Newtonsoft.Json;
using Speckle.Sdk.Api.GraphQL;
using Speckle.Sdk.Api.GraphQL.Models; using Speckle.Sdk.Api.GraphQL.Models;
using Speckle.Sdk.Api.GraphQL.Models.Responses;
using Speckle.Sdk.Common; using Speckle.Sdk.Common;
using Speckle.Sdk.Helpers;
using Speckle.Sdk.Logging; using Speckle.Sdk.Logging;
using Speckle.Sdk.SQLite; using Speckle.Sdk.SQLite;
using Stream = System.IO.Stream;
namespace Speckle.Sdk.Credentials; namespace Speckle.Sdk.Credentials;
public partial interface IAccountManager : IDisposable; public partial interface IAccountManager : IDisposable;
/// <summary> /// <summary>
/// Manages <see cref="Account"/> data in the local sqlite account store /// Manage accounts locally for desktop applications.
/// </summary> /// </summary>
[GenerateAutoInterface] [GenerateAutoInterface]
public sealed class AccountManager( public sealed class AccountManager(
ISpeckleApplication application,
ILogger<AccountManager> logger, ILogger<AccountManager> logger,
IGraphQLClientFactory graphQLClientFactory,
ISpeckleHttp speckleHttp,
IAccountFactory accountFactory, IAccountFactory accountFactory,
IAuthFlow authFlow,
ISqLiteJsonCacheManagerFactory sqLiteJsonCacheManagerFactory ISqLiteJsonCacheManagerFactory sqLiteJsonCacheManagerFactory
) : IAccountManager ) : IAccountManager
{ {
public const string DEFAULT_SERVER_URL = "https://app.speckle.systems"; public const string DEFAULT_SERVER_URL = "https://app.speckle.systems";
private readonly ISqLiteJsonCacheManager _accountStorage = sqLiteJsonCacheManagerFactory.CreateForUser("Accounts"); private readonly ISqLiteJsonCacheManager _accountStorage = sqLiteJsonCacheManagerFactory.CreateForUser("Accounts");
private static volatile bool s_isAddingAccount;
private readonly ISqLiteJsonCacheManager _accountAddLockStorage = sqLiteJsonCacheManagerFactory.CreateForUser(
"AccountAddFlow"
);
[AutoInterfaceIgnore] [AutoInterfaceIgnore]
public void Dispose() public void Dispose()
{ {
_accountStorage.Dispose(); _accountStorage.Dispose();
_accountAddLockStorage.Dispose();
}
/// <summary>
/// Gets the basic information about a server.
/// </summary>
/// <param name="server">Server Information</param>
/// <returns></returns>
/// <exception cref="GraphQLHttpRequestException">Request failed on the HTTP layer (received a non-successful response code)</exception>
/// <exception cref="AggregateException"><inheritdoc cref="GraphQLErrorHandler.EnsureGraphQLSuccess(IGraphQLResponse)"/></exception>
public async Task<ServerInfo> GetServerInfo(Uri server, CancellationToken cancellationToken = default)
{
using var gqlClient = graphQLClientFactory.CreateGraphQLClient(server, null);
//lang=graphql
const string QUERY_STRING = "query { serverInfo { name company migration { movedFrom movedTo } } }";
var request = new GraphQLRequest { Query = QUERY_STRING };
var response = await gqlClient.SendQueryAsync<ServerInfoResponse>(request, cancellationToken).ConfigureAwait(false);
response.EnsureGraphQLSuccess();
ServerInfo serverInfo = response.Data.serverInfo;
serverInfo.url = server.ToString().TrimEnd('/');
return response.Data.serverInfo;
}
/// <summary>
/// Gets basic user information given a token and a server.
/// </summary>
/// <param name="token"></param>
/// <param name="server">Server URL</param>
/// <returns></returns>
/// <exception cref="GraphQLHttpRequestException">Request failed on the HTTP layer (received a non-successful response code)</exception>
/// <exception cref="AggregateException"><inheritdoc cref="GraphQLErrorHandler.EnsureGraphQLSuccess(IGraphQLResponse)"/></exception>
public async Task<UserInfo> GetUserInfo(string token, Uri server, CancellationToken cancellationToken = default)
{
using var gqlClient = graphQLClientFactory.CreateGraphQLClient(server, token);
//language=graphql
const string QUERY = """
query {
data:activeUser {
name
email
id
company
}
}
""";
var request = new GraphQLRequest { Query = QUERY };
var response = await gqlClient
.SendQueryAsync<RequiredResponse<UserInfo>>(request, cancellationToken)
.ConfigureAwait(false);
response.EnsureGraphQLSuccess();
return response.Data.data;
}
/// <summary>
/// The Default Server URL for authentication, can be overridden by placing a file with the alternatrive url in the Speckle folder or with an ENV_VAR
/// </summary>
public Uri GetDefaultServerUrl()
{
var customServerUrl = "";
// first mechanism, check for local file
var customServerFile = Path.Combine(SpecklePathProvider.UserSpeckleFolderPath, "server");
if (File.Exists(customServerFile))
{
customServerUrl = File.ReadAllText(customServerFile);
}
// second mechanism, check ENV VAR
var customServerEnvVar = Environment.GetEnvironmentVariable("SPECKLE_SERVER");
if (!string.IsNullOrEmpty(customServerEnvVar))
{
customServerUrl = customServerEnvVar;
}
if (!string.IsNullOrEmpty(customServerUrl))
{
if (Uri.TryCreate(customServerUrl, UriKind.Absolute, out Uri? url))
{
return url;
}
}
return new Uri(DEFAULT_SERVER_URL);
} }
/// <param name="id">The Id of the account to fetch</param> /// <param name="id">The Id of the account to fetch</param>
@@ -41,6 +151,37 @@ public sealed class AccountManager(
?? throw new SpeckleAccountManagerException($"Account {id} not found"); ?? throw new SpeckleAccountManagerException($"Account {id} not found");
} }
/// <summary>
/// Upgrades an account from the account.serverInfo.movedFrom account to the account.serverInfo.movedTo account
/// </summary>
/// <param name="id">Id of the account to upgrade</param>
public void UpgradeAccount(string id)
{
Account account = GetAccount(id);
if (account.serverInfo.migration?.movedTo is not Uri upgradeUri)
{
throw new SpeckleAccountManagerException(
$"Server with url {account.serverInfo.url} does not have information about the upgraded server"
);
}
account.serverInfo.migration.movedTo = null;
account.serverInfo.migration.movedFrom = new Uri(account.serverInfo.url);
account.serverInfo.url = upgradeUri.ToString().TrimEnd('/');
// setting the id to null will force it to be recreated
account.id = null!; //TODO this is gross so remove when id is nullable
RemoveAccount(id);
_accountStorage.UpdateObject(account.id.NotNull(), JsonConvert.SerializeObject(account));
}
public IEnumerable<Account> GetAccounts(string serverUrl)
{
return GetAccounts(new Uri(serverUrl));
}
/// <summary> /// <summary>
/// Returns all unique accounts matching the serverUrl provided. If an account exists on more than one server, /// Returns all unique accounts matching the serverUrl provided. If an account exists on more than one server,
/// typically because it has been migrated, then only the upgraded account (and therefore server) are returned. /// typically because it has been migrated, then only the upgraded account (and therefore server) are returned.
@@ -104,6 +245,7 @@ public sealed class AccountManager(
static bool IsInvalid(Account ac) => ac.userInfo == null || ac.serverInfo == null; static bool IsInvalid(Account ac) => ac.userInfo == null || ac.serverInfo == null;
var sqlAccounts = _accountStorage.GetAllObjects().Select(x => JsonConvert.DeserializeObject<Account>(x.Json)); var sqlAccounts = _accountStorage.GetAllObjects().Select(x => JsonConvert.DeserializeObject<Account>(x.Json));
var localAccounts = GetLocalAccounts();
foreach (var acc in sqlAccounts) foreach (var acc in sqlAccounts)
{ {
@@ -117,55 +259,119 @@ public sealed class AccountManager(
yield return acc; yield return acc;
} }
} }
}
/// <summary> foreach (var acc in localAccounts)
/// Refetches all local accounts (in local db), including <see cref="ServerInfo"/> and <see cref="UserInfo"/>.
/// If the <see cref="Account.token"/> looks to be expired, this function will also attempt to use the <see cref="Account.refreshToken"/> to refresh it.
/// Will write the changes to the local accounts db
/// </summary>
/// <seealso cref="UpdateAccount"/>
/// <param name="cancellationToken"></param>
/// <exception cref="AggregateException"></exception>
public async Task UpdateAccount(Account account, CancellationToken cancellationToken = default)
{
string oldAccountId = account.id;
await UpdateAccountInMemory(account, cancellationToken).ConfigureAwait(false);
if (oldAccountId != account.id)
{ {
// ID may have changed, e.g. users email changed, or server url migrated yield return acc;
_accountStorage.DeleteObject(oldAccountId);
} }
_accountStorage.UpdateObject(account.id, JsonConvert.SerializeObject(account));
} }
/// <summary> /// <summary>
/// Refetches the <paramref name="account"/> information, including <see cref="ServerInfo"/> and <see cref="UserInfo"/> /// Gets the local accounts
/// /// These are accounts not handled by Manager and are stored in json format in a local directory
/// Will only mutate <paramref name="account"/> in memory only, and only if successful. /// </summary>
/// <returns></returns>
private IList<Account> GetLocalAccounts()
{
var accountsDir = SpecklePathProvider.AccountsFolderPath;
if (!Directory.Exists(accountsDir))
{
return Array.Empty<Account>();
}
var accounts = new List<Account>();
string[] files = Directory.GetFiles(accountsDir, "*.json", SearchOption.AllDirectories);
foreach (var file in files)
{
try
{
var json = File.ReadAllText(file);
Account? account = JsonConvert.DeserializeObject<Account>(json);
if (
account is not null
&& !string.IsNullOrEmpty(account.token)
&& !string.IsNullOrEmpty(account.userInfo.id)
&& !string.IsNullOrEmpty(account.userInfo.email)
&& !string.IsNullOrEmpty(account.userInfo.name)
&& !string.IsNullOrEmpty(account.serverInfo.url)
&& !string.IsNullOrEmpty(account.serverInfo.name)
)
{
accounts.Add(account);
}
}
catch (Exception ex) when (!ex.IsFatal())
{
logger.LogWarning(ex, "Failed to load json account at {filePath}", file);
}
}
return accounts;
}
/// <summary>
/// Refetches user and server info for each account
/// </summary>
/// <param name="app"> It is defaultAppId in the server. By default it is "sca" to not break existing parts that this function involves.</param>
/// <returns></returns>
public async Task UpdateAccounts(CancellationToken ct = default, string app = "sca")
{
// need to ToList() the GetAccounts call or the UpdateObject call at the end of this method
// will not work because sqlite does not support concurrent db calls
foreach (var account in GetAccounts().ToList())
{
try
{
Uri url = new(account.serverInfo.url);
var userServerInfo = await accountFactory.GetUserServerInfo(url, account.token, ct).ConfigureAwait(false);
//the token has expired
//TODO: once we get a token expired exception from the server use that instead
if (userServerInfo.activeUser == null || userServerInfo.serverInfo == null)
{
// We were initially was handling refresh token here bc quite a while ago server was returning null
// for activeUser and serverInfo instead of throwing exception. In short, our logic moved into catch block to cover both.
throw new SpeckleException("Token is expired");
}
account.isOnline = true;
account.userInfo = userServerInfo.activeUser;
account.serverInfo = userServerInfo.serverInfo;
}
catch (OperationCanceledException)
{
throw;
}
catch (Exception ex) when (!ex.IsFatal())
{
await RefreshAndSetAccountToken(account, app).ConfigureAwait(false);
}
ct.ThrowIfCancellationRequested();
_accountStorage.UpdateObject(account.id, JsonConvert.SerializeObject(account));
}
}
/// <summary>
/// Mutates the account with new tokens.
/// </summary> /// </summary>
/// <seealso cref="UpdateAccount"/>
/// <param name="account"></param> /// <param name="account"></param>
/// <param name="cancellationToken"></param> /// <param name="app"></param>
/// <exception cref="GraphQLHttpRequestException"></exception> private async Task RefreshAndSetAccountToken(Account account, string app)
public async Task UpdateAccountInMemory(Account account, CancellationToken cancellationToken = default)
{ {
Uri url = account.serverInfo.migration?.movedTo ?? new(account.serverInfo.url); try
ActiveUserServerInfoResponse userServerInfo = await accountFactory
.GetUserServerInfo(url, account.token, cancellationToken)
.ConfigureAwait(false);
if (userServerInfo.activeUser == null)
{ {
throw new SpeckleException("GraphQL response indicated that the ActiveUser could not be found"); Uri url = new(account.serverInfo.url);
var tokenResponse = await GetRefreshedToken(account.refreshToken, url, app).ConfigureAwait(false);
account.token = tokenResponse.token;
account.refreshToken = tokenResponse.refreshToken;
account.isOnline = true;
}
catch (Exception ex) when (!ex.IsFatal())
{
account.isOnline = false;
} }
account.userInfo = userServerInfo.activeUser;
account.serverInfo = userServerInfo.serverInfo;
//This is a bit gross, since id is not marked nullable
//but this will force re-generate the id (e.g. if the user's email, or servers url has changed)
account.id = null!;
} }
/// <summary> /// <summary>
@@ -206,103 +412,325 @@ public sealed class AccountManager(
} }
/// <summary> /// <summary>
/// Adds an account to local storage by prompting the user to log in via their browser. /// Retrieves the local identifier for the specified account.
/// </summary> /// </summary>
/// <example> /// <param name="account">The account for which to retrieve the local identifier.</param>
/// <code> /// <returns>The local identifier for the specified account in the form of "SERVER_URL?u=USER_ID".</returns>
/// Account account = await AuthenticateAccount(new Uri("https://app.speckle.systems"), TimeSpan.FromMinutes(1)); /// <remarks>
/// </code> /// <inheritdoc cref="Account.GetLocalIdentifier"/>
/// </example> /// </remarks>
/// <param name="serverUrl"></param> [Obsolete(Account.LOCAL_IDENTIFIER_DEPRECATION_MESSAGE)]
/// <param name="timeout">Timeout for user to auth with browser, recommend 1 min timeout</param> public Uri? GetLocalIdentifierForAccount(Account account)
/// <param name="cancellationToken"></param>
/// <returns></returns>
public async Task<Account> AuthenticateAccount(Uri serverUrl, TimeSpan timeout, CancellationToken cancellationToken)
{ {
logger.LogDebug("Starting to add account for {ServerUrl}", serverUrl); var identifier = account.GetLocalIdentifier();
TokenExchangeResponse tokenResponse = await authFlow // Validate account is stored locally
.TriggerAuthFlowWithTimeout(serverUrl, AuthApp.ConnectorsV3, timeout, cancellationToken) var searchResult = GetAccountForLocalIdentifier(identifier);
.ConfigureAwait(false);
return await CreateAndAddAccount(serverUrl, tokenResponse, cancellationToken).ConfigureAwait(false); return searchResult == null ? null : identifier;
} }
public async Task<Account> CreateAndAddAccount( public async Task<UserInfo> Validate(Account account)
Uri serverUrl,
TokenExchangeResponse tokenResponse,
CancellationToken cancellationToken
)
{ {
var account = await accountFactory Uri server = new(account.serverInfo.url);
.CreateAccount(serverUrl, tokenResponse.token, tokenResponse.refreshToken, cancellationToken) return await GetUserInfo(account.token, server).ConfigureAwait(false);
.ConfigureAwait(false);
account.isDefault = !GetAccounts().Any();
_accountStorage.SaveObject(account.id, JsonConvert.SerializeObject(account));
logger.LogInformation("Successfully authenticated account {AccountId} for {ServerUrl}", account.id, serverUrl);
return account;
} }
/// <summary> /// <summary>
/// The Default Server URL for authentication, can be overridden by placing a file with the alternative url in the Speckle folder or with an ENV_VAR /// Gets the account that corresponds to the given local identifier.
/// </summary> /// </summary>
[Obsolete("Unused")] /// <param name="localIdentifier">The local identifier of the account.</param>
public Uri GetDefaultServerUrl() /// <returns>The account that matches the local identifier, or null if no match is found.</returns>
[Obsolete(Account.LOCAL_IDENTIFIER_DEPRECATION_MESSAGE)]
public Account? GetAccountForLocalIdentifier(Uri localIdentifier)
{ {
var customServerUrl = ""; var searchResult = GetAccounts()
.FirstOrDefault(acc =>
// first mechanism, check for local file
var customServerFile = Path.Combine(SpecklePathProvider.UserSpeckleFolderPath, "server");
if (File.Exists(customServerFile))
{
customServerUrl = File.ReadAllText(customServerFile);
}
// second mechanism, check ENV VAR
var customServerEnvVar = Environment.GetEnvironmentVariable("SPECKLE_SERVER");
if (!string.IsNullOrEmpty(customServerEnvVar))
{
customServerUrl = customServerEnvVar;
}
if (!string.IsNullOrEmpty(customServerUrl))
{
if (Uri.TryCreate(customServerUrl, UriKind.Absolute, out Uri? url))
{ {
return url; var id = acc.GetLocalIdentifier();
return id == localIdentifier;
});
return searchResult;
}
private Uri EnsureCorrectServerUrl(Uri? server)
{
var localUrl = server;
if (localUrl == null)
{
localUrl = GetDefaultServerUrl();
logger.LogDebug("The provided server url was null or empty. Changed to the default url {serverUrl}", localUrl);
}
return localUrl;
}
private void EnsureGetAccessCodeFlowIsSupported()
{
if (!HttpListener.IsSupported)
{
logger.LogError("HttpListener not supported");
throw new PlatformNotSupportedException("Your operating system is not supported");
}
}
private async Task<string> GetAccessCode(Uri server, string challenge, TimeSpan timeout)
{
EnsureGetAccessCodeFlowIsSupported();
logger.LogDebug("Starting auth process for {server}/authn/verify/sca/{challenge}", server, challenge);
var accessCode = "";
Process.Start(new ProcessStartInfo($"{server}/authn/verify/sca/{challenge}") { UseShellExecute = true });
var task = Task.Run(() =>
{
using var listener = new HttpListener();
var localUrl = "http://localhost:29363/";
listener.Prefixes.Add(localUrl);
listener.Start();
logger.LogDebug("Listening for auth redirects on {localUrl}", localUrl);
// Note: The GetContext method blocks while waiting for a request.
HttpListenerContext context = listener.GetContext();
HttpListenerRequest request = context.Request;
HttpListenerResponse response = context.Response;
accessCode = request.QueryString["access_code"];
logger.LogDebug("Got access code {accessCode}", accessCode);
string message =
accessCode != null
? "Success!<br/><br/>You can close this window now.<script>window.close();</script>"
: "Oups, something went wrong...!";
var responseString =
$"<HTML><BODY Style='background: linear-gradient(to top right, #ffffff, #c8e8ff); font-family: Roboto, sans-serif; font-size: 2rem; font-weight: 500; text-align: center;'><br/>{message}</BODY></HTML>";
byte[] buffer = Encoding.UTF8.GetBytes(responseString);
response.ContentLength64 = buffer.Length;
Stream output = response.OutputStream;
output.Write(buffer, 0, buffer.Length);
output.Close();
logger.LogDebug("Processed finished processing the access code");
listener.Stop();
listener.Close();
});
var completedTask = await Task.WhenAny(task, Task.Delay(timeout)).ConfigureAwait(false);
// this is means the task timed out
if (completedTask != task)
{
logger.LogWarning(
"Local auth flow failed to complete within the timeout window. Access code is {accessCode}",
accessCode
);
throw new AuthFlowException("Local auth flow failed to complete within the timeout window");
}
if (task.IsFaulted && task.Exception is not null)
{
logger.LogError(
task.Exception,
"Getting access code flow failed with {exceptionMessage}",
task.Exception.Message
);
throw new AuthFlowException($"Auth flow failed: {task.Exception.Message}", task.Exception);
}
// task completed within timeout
logger.LogInformation(
"Local auth flow completed successfully within the timeout window. Access code is {accessCode}",
accessCode
);
return accessCode;
}
private async Task<Account> CreateAccount(string accessCode, string challenge, Uri server)
{
try
{
var tokenResponse = await GetToken(accessCode, challenge, server).ConfigureAwait(false);
var account = await accountFactory
.CreateAccount(server, tokenResponse.token, tokenResponse.refreshToken)
.ConfigureAwait(false);
account.isDefault = !GetAccounts().Any();
logger.LogInformation("Successfully created account for {serverUrl}", server);
return account;
}
catch (Exception ex) when (!ex.IsFatal())
{
throw new SpeckleAccountManagerException("Failed to create account from access code and challenge", ex);
}
}
private void TryLockAccountAddFlow(TimeSpan timespan)
{
// use a static variable to quickly
// prevent launching this flow multiple times
if (s_isAddingAccount)
{
// this should probably throw with an error message
throw new SpeckleAccountFlowLockedException("The account add flow is already launched.");
}
// this uses the SQLite transport to store locks
var lockIds = _accountAddLockStorage.GetAllObjects().Select(x => x.Id).OrderByDescending(d => d).ToList();
var now = DateTime.Now;
foreach (var l in lockIds)
{
var lockArray = l.Split('@');
var lockName = lockArray.Length == 2 ? lockArray[0] : "the other app";
var lockTime =
lockArray.Length == 2
? DateTime.ParseExact(lockArray[1], "o", null)
: DateTime.ParseExact(lockArray[0], "o", null);
if (lockTime > now)
{
var lockString = string.Format("{0:mm} minutes {0:ss} seconds", lockTime - now);
throw new SpeckleAccountFlowLockedException(
$"The account add flow was already started in {lockName}, retry in {lockString}"
);
} }
} }
return new Uri(DEFAULT_SERVER_URL); var lockId = application.ApplicationAndVersion + "@" + DateTime.Now.Add(timespan).ToString("o");
// using the lock release time as an id and value
// for ease of deletion and retrieval
_accountAddLockStorage.SaveObject(lockId, lockId);
s_isAddingAccount = true;
} }
[Obsolete("Use Uri overload")] private void UnlockAccountAddFlow()
public IEnumerable<Account> GetAccounts(string serverUrl)
{ {
return GetAccounts(new Uri(serverUrl)); s_isAddingAccount = false;
// make sure all old locks are removed
foreach (var (id, _) in _accountAddLockStorage.GetAllObjects())
{
_accountAddLockStorage.DeleteObject(id);
}
} }
[Obsolete("Use UpdateAccount instead for more control over error handling", true)] /// <summary>
public Task UpdateAccounts(CancellationToken ct = default, string app = "sca") => throw new NotImplementedException(); /// Adds an account by propting the user to log in via a web flow
/// </summary>
/// <param name="server">Server to use to add the account, if not provied the default Server will be used</param>
/// <returns></returns>
public async Task AddAccount(Uri? server = null)
{
logger.LogDebug("Starting to add account for {serverUrl}", server);
[Obsolete("Use UpdateAccount instead", true)] server = EnsureCorrectServerUrl(server);
public void UpgradeAccount(string id) => throw new NotImplementedException();
[Obsolete($"Use {nameof(AuthenticateAccount)} instead", true)] // locking for 1 minute
public Task AddAccount(Uri? server = null) => throw new NotImplementedException(); var timeout = TimeSpan.FromMinutes(1);
// this is not part of the try finally block
// we do not want to clean up the existing locks
TryLockAccountAddFlow(timeout);
var challenge = GenerateChallenge();
[Obsolete("Use serverInfo stored on a client instead", true)] try
public Task<ServerInfo> GetServerInfo(Uri server, CancellationToken cancellationToken = default) => {
throw new NotImplementedException(); string accessCode = await GetAccessCode(server, challenge, timeout).ConfigureAwait(false);
if (string.IsNullOrEmpty(accessCode))
{
throw new SpeckleAccountManagerException("Access code is invalid");
}
[Obsolete("Use userInfo stored on a client instead", true)] var account = await CreateAccount(accessCode, challenge, server).ConfigureAwait(false);
public Task<UserInfo> GetUserInfo(string token, Uri server, CancellationToken cancellationToken = default) =>
throw new NotImplementedException();
[Obsolete("Accounts must now be stored in sqlite db, no more json workaround", true)] //if the account already exists it will not be added again
public IList<Account> GetLocalAccounts() => throw new NotImplementedException(); _accountStorage.SaveObject(account.id, JsonConvert.SerializeObject(account));
logger.LogDebug("Finished adding account {accountId} for {serverUrl}", account.id, server);
}
catch (SpeckleAccountManagerException ex)
{
logger.LogCritical(ex, "Failed to add account: {exceptionMessage}", ex.Message);
// rethrowing any known errors
throw;
}
catch (Exception ex) when (!ex.IsFatal())
{
logger.LogCritical(ex, "Failed to add account: {exceptionMessage}", ex.Message);
throw new SpeckleAccountManagerException($"Failed to add account: {ex.Message}", ex);
}
finally
{
UnlockAccountAddFlow();
}
}
[Obsolete("Use UpdateAccount or UpdateAccountInMemory Instead", true)] private async Task<TokenExchangeResponse> GetToken(string accessCode, string challenge, Uri server)
public IList<Account> Validate() => throw new NotImplementedException(); {
try
{
using var client = speckleHttp.CreateHttpClient();
var body = new
{
appId = "sca",
appSecret = "sca",
accessCode,
challenge,
};
using var content = new StringContent(JsonConvert.SerializeObject(body));
content.Headers.ContentType = new MediaTypeHeaderValue("application/json");
var response = await client.PostAsync(new Uri(server, "/auth/token"), content).ConfigureAwait(false);
return JsonConvert
.DeserializeObject<TokenExchangeResponse>(await response.Content.ReadAsStringAsync().ConfigureAwait(false))
.NotNull();
}
catch (Exception ex) when (!ex.IsFatal())
{
throw new SpeckleException($"Failed to get authentication token from {server}", ex);
}
}
private async Task<TokenExchangeResponse> GetRefreshedToken(string? refreshToken, Uri server, string app = "sca")
{
try
{
using var client = speckleHttp.CreateHttpClient();
var body = new
{
appId = app,
appSecret = app,
refreshToken,
};
using var content = new StringContent(JsonConvert.SerializeObject(body));
content.Headers.ContentType = new MediaTypeHeaderValue("application/json");
var response = await client.PostAsync(new Uri(server, "/auth/token"), content).ConfigureAwait(false);
return JsonConvert
.DeserializeObject<TokenExchangeResponse>(await response.Content.ReadAsStringAsync().ConfigureAwait(false))
.NotNull();
}
catch (Exception ex) when (!ex.IsFatal())
{
throw new SpeckleException($"Failed to get refreshed token from {server}", ex);
}
}
private static string GenerateChallenge()
{
#if NET8_0
byte[] challengeData = RandomNumberGenerator.GetBytes(32);
#else
using RNGCryptoServiceProvider rng = new();
byte[] challengeData = new byte[32];
rng.GetBytes(challengeData);
#endif
//escaped chars like % do not play nice with the server
return Regex.Replace(Convert.ToBase64String(challengeData), @"[^\w\.@-]", "");
}
} }
-13
View File
@@ -1,13 +0,0 @@
namespace Speckle.Sdk.Credentials;
public readonly record struct AuthApp(string AppId, string AppSecret, Uri CallbackUrl)
{
//These values are defined on the server, and specify the scopes the app is requesting
public static AuthApp ConnectorsV3 { get; } =
new()
{
AppId = "connectrV3",
AppSecret = "connectrV3",
CallbackUrl = new Uri("http://localhost:29355"),
};
}
-330
View File
@@ -1,330 +0,0 @@
using System.Diagnostics;
using System.Diagnostics.Contracts;
using System.Net;
using System.Net.Http.Headers;
using System.Security.Cryptography;
using System.Text;
using Speckle.InterfaceGenerator;
using Speckle.Newtonsoft.Json;
using Speckle.Sdk.Common;
using Speckle.Sdk.Helpers;
using Speckle.Sdk.Logging;
namespace Speckle.Sdk.Credentials;
/// <summary>
/// Authentication flow with the Speckle Server to create a application token for the <c>connectorsV3</c> application
/// Starts the browser based authentication flow where the user's browser will be opened, they'll be asked to
/// confirm permission, then an access code will be given via a <see cref="HttpListener"/> which will be exchanged
/// for a <see cref="TokenExchangeResponse"/>
/// </summary>
/// <remarks>
/// Note, this class is not coupled in any way to <see cref="Account"/>
/// lets keep it that way...
/// See instead <see cref="AccountManager"/>
/// </remarks>
[GenerateAutoInterface]
public sealed class AuthFlow(ISdkActivityFactory activityFactory, ISpeckleHttp speckleHttp) : IAuthFlow
{
private readonly JsonSerializerSettings _serializerSettings = new()
{
MissingMemberHandling = MissingMemberHandling.Error,
NullValueHandling = NullValueHandling.Ignore,
};
public async Task<TokenExchangeResponse> TriggerAuthFlowWithTimeout(
Uri serverUrl,
AuthApp authApp,
TimeSpan timeout,
CancellationToken cancellationToken
)
{
using HttpClient client = speckleHttp.CreateHttpClient();
Uri tokenEndpoint = new(serverUrl, "/oauth/token");
string codeVerifier = GenerateCodeVerifier();
Uri authnVerify;
using var req = await client.GetAsync(tokenEndpoint, cancellationToken).ConfigureAwait(false);
bool useLegacyEndpoint = req.StatusCode != HttpStatusCode.OK;
if (useLegacyEndpoint)
{
string challenge = codeVerifier; // Old endpoint only supports PKCE "plain" method
authnVerify = new($"/authn/verify/{authApp.AppId}/{challenge}", UriKind.Relative);
tokenEndpoint = new(serverUrl, "/auth/token");
}
else
{
string challenge = GenerateCodeChallenge(codeVerifier);
authnVerify = new($"/authn/verify/{authApp.AppId}/{challenge}?code_challenge_method=S256", UriKind.Relative);
}
Uri endpoint = new(serverUrl, authnVerify);
_ = Process.Start(new ProcessStartInfo(endpoint.ToString()) { UseShellExecute = true });
string accessCode = await RunListenerWithTimeout(authApp.CallbackUrl, timeout, cancellationToken)
.ConfigureAwait(false);
object body = useLegacyEndpoint
? new
{
appId = authApp.AppId,
appSecret = authApp.AppSecret,
accessCode = accessCode,
challenge = codeVerifier,
}
: new
{
appId = authApp.AppId,
accessCode = accessCode,
codeVerifier = codeVerifier,
};
return await ExchangeAccessCodeForToken(
client,
JsonConvert.SerializeObject(body, _serializerSettings),
tokenEndpoint,
cancellationToken
)
.ConfigureAwait(false);
}
/// <summary>
///
/// </summary>
/// <param name="applicationCallbackUrl"></param>
/// <param name="timeout"></param>
/// <param name="userCancellation"></param>
/// <returns></returns>
/// <exception cref="OperationCanceledException"><paramref name="userCancellation"/> requested cancel</exception>
/// <exception cref="TimeoutException">timeout was reached</exception>
public async Task<string> RunListenerWithTimeout(
Uri applicationCallbackUrl,
TimeSpan timeout,
CancellationToken userCancellation
)
{
using CancellationTokenSource cancelOnTimeout = new(timeout);
using CancellationTokenSource linkedSource = CancellationTokenSource.CreateLinkedTokenSource(
cancelOnTimeout.Token,
userCancellation
);
try
{
using var activity = activityFactory.Start("Listening for authflow access code");
return await RunListener(applicationCallbackUrl, linkedSource.Token).ConfigureAwait(false);
}
catch (OperationCanceledException) when (userCancellation.IsCancellationRequested)
{
throw;
}
catch (OperationCanceledException ex) when (cancelOnTimeout.IsCancellationRequested)
{
throw new TimeoutException($"Auth flow was cancelled after {timeout:g} timeout", ex);
}
}
/// <summary>
///
/// </summary>
/// <param name="refreshToken"></param>
/// <param name="serverUrl"></param>
/// <param name="authApp">Auth app, needs to match the app that generated the refresh token originally</param>
/// <param name="cancellationToken"></param>
/// <exception cref="HttpRequestException">HTTP exceptions</exception>
/// <exception cref="JsonSerializationException">Server response was invalid or partial</exception>
/// <exception cref="ArgumentOutOfRangeException ">Invalid <paramref name="serverUrl"/> (must be absolute url)</exception>
/// <exception cref="OperationCanceledException"><paramref name="cancellationToken"/> requested cancel</exception>
/// <returns></returns>
public async Task<TokenExchangeResponse> GetRefreshedToken(
string? refreshToken,
Uri serverUrl,
AuthApp authApp,
CancellationToken cancellationToken
)
{
using var client = speckleHttp.CreateHttpClient();
var body = new
{
appId = authApp.AppId,
appSecret = authApp.AppSecret,
refreshToken = refreshToken,
};
using var content = new StringContent(JsonConvert.SerializeObject(body, _serializerSettings));
content.Headers.ContentType = new MediaTypeHeaderValue("application/json");
var response = await client
.PostAsync(new Uri(serverUrl, "/auth/token"), content, cancellationToken)
.ConfigureAwait(false);
response.EnsureSuccessStatusCode();
#if NET8_0_OR_GREATER
string read = await response.Content.ReadAsStringAsync(cancellationToken).ConfigureAwait(false);
#else
string read = await response.Content.ReadAsStringAsync().ConfigureAwait(false);
#endif
return JsonConvert.DeserializeObject<TokenExchangeResponse>(read, _serializerSettings).NotNull();
}
private static async Task<HttpListenerContext> GetContext(HttpListener listener, CancellationToken cancellationToken)
{
//GetContextAsync doesn't support cancellation, so we have to do this song and dance...
Task timeoutTask = Task.Delay(Timeout.Infinite, cancellationToken);
Task<HttpListenerContext> getContextTask = listener.GetContextAsync();
Task completed = await Task.WhenAny(getContextTask, timeoutTask).ConfigureAwait(false);
if (completed == getContextTask)
{
return getContextTask.Result;
}
cancellationToken.ThrowIfCancellationRequested();
throw new InvalidOperationException("Cancellation should have thrown, this shouldn't be possible");
}
public static async Task<string> RunListener(Uri localUrl, CancellationToken cancellationToken)
{
using HttpListener listener = new();
listener.Prefixes.Add(localUrl.ToString());
listener.Start();
HttpListenerContext context = await GetContext(listener, cancellationToken).ConfigureAwait(false);
HttpListenerRequest request = context.Request;
using HttpListenerResponse response = context.Response;
string? accessCode = request.QueryString["access_code"];
string? denied = request.QueryString["denied"];
bool isDenied = denied == "true";
if (isDenied)
{
//lang=html
WriteResponse(
"""
<h1>Denied!</h1>
<br/><br/>
Please close this window and return to your Speckle Connector.
"""
);
throw new AuthFlowException("Authentication flow was denied"); //denied presumably by the user
}
else if (accessCode != null)
{
//lang=html
WriteResponse(
"""
<h1>Success!</h1>
<br/><br/>
Your Speckle Connector is now authorized
<br/><br/>
You may now close this window and return to your Speckle Connector
"""
);
return accessCode;
}
else
{
//lang=html
WriteResponse(
"""
<h1>Failed!</h1>
<br/><br/>
Something went wrong trying to authorize your Speckle Connector
<br/><br/>
Please close this window and try again from your Speckle Connector.
"""
);
throw new AuthFlowException("Failed to receive access code");
}
void WriteResponse(string message)
{
//lang=html
string responseString = $"""
<HTML>
<BODY Style='background: #FAFAFAFF; font-family: Inter, Roboto, sans-serif; font-size: 1rem; font-weight: 500; text-align: center;'>
<br/>
{message}
</BODY>
</HTML>
""";
byte[] buffer = Encoding.UTF8.GetBytes(responseString);
response.ContentLength64 = buffer.Length;
response.OutputStream.Write(buffer, 0, buffer.Length);
}
}
private async Task<TokenExchangeResponse> ExchangeAccessCodeForToken(
HttpClient client,
string jsonContent,
Uri tokenEndpoint,
CancellationToken cancellationToken
)
{
using StringContent content = new(jsonContent);
content.Headers.ContentType = new MediaTypeHeaderValue("application/json");
using HttpResponseMessage response = await client
.PostAsync(tokenEndpoint, content, cancellationToken)
.ConfigureAwait(false);
response.EnsureSuccessStatusCode();
#if NET8_0_OR_GREATER
string read = await response.Content.ReadAsStringAsync(cancellationToken).ConfigureAwait(false);
#else
string read = await response.Content.ReadAsStringAsync().ConfigureAwait(false);
#endif
return JsonConvert.DeserializeObject<TokenExchangeResponse>(read, _serializerSettings).NotNull();
}
[Pure]
public static string GenerateCodeVerifier()
{
#if NET8_0_OR_GREATER
Span<byte> codeVerifierData = stackalloc byte[32];
RandomNumberGenerator.Fill(codeVerifierData);
#else
using RNGCryptoServiceProvider rng = new();
byte[] codeVerifierData = new byte[32];
rng.GetBytes(codeVerifierData);
#endif
return Base64UrlEncode(codeVerifierData);
}
[Pure]
public static string GenerateCodeChallenge(string codeVerifier)
{
#if NET8_0_OR_GREATER
int byteCount = Encoding.UTF8.GetByteCount(codeVerifier.AsSpan());
Span<byte> codeVerifierBytes = stackalloc byte[byteCount];
Encoding.UTF8.GetBytes(codeVerifier, codeVerifierBytes);
Span<byte> challengeData = stackalloc byte[SHA256.HashSizeInBytes];
SHA256.HashData(codeVerifierBytes, challengeData);
#else
byte[] codeVerifierBytes = Encoding.UTF8.GetBytes(codeVerifier);
using SHA256 hash = SHA256.Create();
byte[] challengeData = hash.ComputeHash(codeVerifierBytes);
#endif
return Base64UrlEncode(challengeData);
}
[Pure]
private static string Base64UrlEncode(
#if NET8_0_OR_GREATER
ReadOnlySpan<byte> bytes
#else
byte[] bytes
#endif
)
{
// Base64Url is available in .NET 9, or via the Microsoft.Bcl.Memory polyfill
// But for simplicity r.e. dll dependencies, we're doing it the dumb way...
return Convert.ToBase64String(bytes).Replace('+', '-').Replace('/', '_').TrimEnd('=');
}
}
@@ -0,0 +1,14 @@
namespace Speckle.Sdk.Credentials;
#pragma warning disable CA2237
public sealed class AuthFlowException : Exception
#pragma warning restore CA2237
{
public AuthFlowException(string? message, Exception? innerException)
: base(message, innerException) { }
public AuthFlowException(string? message)
: base(message) { }
public AuthFlowException() { }
}
+11 -11
View File
@@ -1,16 +1,5 @@
namespace Speckle.Sdk.Credentials; namespace Speckle.Sdk.Credentials;
public sealed class AuthFlowException : SpeckleException
{
public AuthFlowException(string? message, Exception? innerException)
: base(message, innerException) { }
public AuthFlowException(string? message)
: base(message) { }
public AuthFlowException() { }
}
public class SpeckleAccountManagerException : SpeckleException public class SpeckleAccountManagerException : SpeckleException
{ {
public SpeckleAccountManagerException(string message) public SpeckleAccountManagerException(string message)
@@ -21,3 +10,14 @@ public class SpeckleAccountManagerException : SpeckleException
public SpeckleAccountManagerException() { } public SpeckleAccountManagerException() { }
} }
public class SpeckleAccountFlowLockedException : SpeckleAccountManagerException
{
public SpeckleAccountFlowLockedException(string message)
: base(message) { }
public SpeckleAccountFlowLockedException() { }
public SpeckleAccountFlowLockedException(string message, Exception? innerException)
: base(message, innerException) { }
}
+5 -8
View File
@@ -6,19 +6,16 @@ namespace Speckle.Sdk.Credentials;
internal sealed class ActiveUserServerInfoResponse internal sealed class ActiveUserServerInfoResponse
{ {
[property: JsonProperty(Required = Required.AllowNull)] [property: JsonProperty(Required = Required.AllowNull)]
public required UserInfo? activeUser { get; init; } public UserInfo? activeUser { get; init; }
[property: JsonProperty(Required = Required.Always)] [property: JsonProperty(Required = Required.Always)]
public required ServerInfo serverInfo { get; init; } public ServerInfo serverInfo { get; init; }
} }
public sealed class TokenExchangeResponse internal sealed class TokenExchangeResponse
{ {
[JsonRequired] public string token { get; init; }
public required string token { get; init; } public string refreshToken { get; init; }
[JsonRequired]
public required string refreshToken { get; init; }
} }
public sealed class UserInfo public sealed class UserInfo
-4
View File
@@ -21,10 +21,6 @@ public static class HashUtility
using var stream = File.OpenRead(filePath); using var stream = File.OpenRead(filePath);
var hash = hashAlgorithm.ComputeHash(stream); var hash = hashAlgorithm.ComputeHash(stream);
#if NET8_0_OR_GREATER
return Convert.ToHexString(hash, 0, HASH_LENGTH).ToLowerInvariant();
#else
return BitConverter.ToString(hash, 0, HASH_LENGTH).Replace("-", "").ToLowerInvariant(); return BitConverter.ToString(hash, 0, HASH_LENGTH).Replace("-", "").ToLowerInvariant();
#endif
} }
} }
@@ -1,6 +0,0 @@
namespace Speckle.Sdk.Pipelines.Progress;
public sealed class NullProgress<T> : IProgress<T>
{
public void Report(T value) { }
}
+1 -6
View File
@@ -65,12 +65,7 @@ public sealed class DiskStore
await foreach (var item in _channel.ReadAllAsync(_cancellationToken).ConfigureAwait(false)) await foreach (var item in _channel.ReadAllAsync(_cancellationToken).ConfigureAwait(false))
{ {
await writer.WriteAsync(item.Id).ConfigureAwait(false); await writer.WriteLineAsync($"{item.Id}\t{item.SpeckleType}\t{item.Json}").ConfigureAwait(false);
await writer.WriteAsync('\t').ConfigureAwait(false);
await writer.WriteAsync(item.SpeckleType).ConfigureAwait(false);
await writer.WriteAsync('\t').ConfigureAwait(false);
await writer.WriteAsync(item.Json.Value).ConfigureAwait(false);
await writer.WriteLineAsync().ConfigureAwait(false);
} }
#if NET8_0_OR_GREATER #if NET8_0_OR_GREATER
await writer.FlushAsync(_cancellationToken).ConfigureAwait(false); await writer.FlushAsync(_cancellationToken).ConfigureAwait(false);
@@ -36,22 +36,28 @@ public sealed class SendPipeline : IDisposable
_diskStore = diskStore; _diskStore = diskStore;
} }
private UploadItem _lastItem;
public async Task<ObjectReference> Process(Base @base) public async Task<ObjectReference> Process(Base @base)
{ {
var results = _serializer.Serialize(@base).ToArray(); var results = _serializer.Serialize(@base).ToArray();
var first = results.First(); var first = results.First();
// .Reverse ensures the root commit object is written last. foreach (var item in results)
foreach (var item in results.Reverse())
{ {
// we're not doing fire and forget here so that we get the backpressure from the uploader // we're not doing fire and forget here so that we get the backpressure from the uploader
await _diskStore.PushAsync(item).ConfigureAwait(false); await _diskStore.PushAsync(item).ConfigureAwait(false);
} }
// NOTE: this is important to keep track of. When we serialze an object, we get back a list of objects, with the first one being the original root.
// In the case of the commit root object, this means the last object is not necessarily the root; we therefore need to manually track its existance here
// and ensure it's the last one through in the uploader's stream. See WaitForUpload down below.
_lastItem = first;
return first.Reference; return first.Reference;
} }
public async Task WaitForUpload() public async Task WaitForUpload()
{ {
await _diskStore.PushAsync(_lastItem).ConfigureAwait(false);
using DisposableFile tempFile = await _diskStore.CompleteAsync().ConfigureAwait(false); using DisposableFile tempFile = await _diskStore.CompleteAsync().ConfigureAwait(false);
using Stream fileStreamUpload = new FileStream( using Stream fileStreamUpload = new FileStream(
+38 -65
View File
@@ -65,90 +65,63 @@ public sealed class Uploader : IDisposable
{ {
using var a = _activity.Start("Get Presigned Url"); using var a = _activity.Start("Get Presigned Url");
try var signUri = new Uri($"projects/{_projectId}/modelingestion/{_ingestionId}/uploads/sign", UriKind.Relative);
{
var signUri = new Uri($"projects/{_projectId}/modelingestion/{_ingestionId}/uploads/sign", UriKind.Relative);
using var signResponse = await _speckleClient.PostAsync(signUri, null, _cancellationToken).ConfigureAwait(false); using var signResponse = await _speckleClient.PostAsync(signUri, null, _cancellationToken).ConfigureAwait(false);
signResponse.EnsureSuccessStatusCode(); signResponse.EnsureSuccessStatusCode();
#if NET5_0_OR_GREATER #if NET5_0_OR_GREATER
string signResponseString = await signResponse string signResponseString = await signResponse.Content.ReadAsStringAsync(_cancellationToken).ConfigureAwait(false);
.Content.ReadAsStringAsync(_cancellationToken)
.ConfigureAwait(false);
#else #else
string signResponseString = await signResponse.Content.ReadAsStringAsync().ConfigureAwait(false); string signResponseString = await signResponse.Content.ReadAsStringAsync().ConfigureAwait(false);
#endif #endif
PresignedUploadResponse presignedUpload = PresignedUploadResponse presignedUpload =
JsonConvert.DeserializeObject<PresignedUploadResponse>(signResponseString) JsonConvert.DeserializeObject<PresignedUploadResponse>(signResponseString)
?? throw new InvalidOperationException("Failed to get presigned upload URL"); ?? throw new InvalidOperationException("Failed to get presigned upload URL");
return presignedUpload; return presignedUpload;
}
catch (Exception ex)
{
a?.SetStatus(SdkActivityStatusCode.Error);
a?.RecordException(ex);
throw;
}
} }
private async Task<string> UploadToS3(Stream fileStream, PresignedUploadResponse presignedUploadResponse) private async Task<string> UploadToS3(Stream fileStream, PresignedUploadResponse presignedUploadResponse)
{ {
using var a = _activity.Start("Uploading file to pre-signed url"); using var a = _activity.Start("Uploading file to pre-signed url");
try
Stream progressStream = new ProgressStream(fileStream, _progress);
using var streamContent = new StreamContent(progressStream);
streamContent.Headers.ContentType = new MediaTypeHeaderValue("application/octet-stream");
streamContent.Headers.ContentLength = fileStream.Length;
using var uploadRequest = new HttpRequestMessage(HttpMethod.Put, presignedUploadResponse.Url);
foreach (var kvp in presignedUploadResponse.AdditionalRequestHeaders)
{ {
Stream progressStream = new ProgressStream(fileStream, _progress); uploadRequest.Headers.Add(kvp.Key, kvp.Value);
using var streamContent = new StreamContent(progressStream);
streamContent.Headers.ContentType = new MediaTypeHeaderValue("application/octet-stream");
streamContent.Headers.ContentLength = fileStream.Length;
using var uploadRequest = new HttpRequestMessage(HttpMethod.Put, presignedUploadResponse.Url);
foreach (var kvp in presignedUploadResponse.AdditionalRequestHeaders)
{
uploadRequest.Headers.Add(kvp.Key, kvp.Value);
}
uploadRequest.Content = streamContent;
using var uploadResponse = await _s3Client
.SendAsync(uploadRequest, HttpCompletionOption.ResponseHeadersRead, _cancellationToken)
.ConfigureAwait(false);
uploadResponse.EnsureSuccessStatusCode();
return BlobApiHelpers.ParseEtagHeader(uploadResponse.Headers);
}
catch (Exception ex)
{
a?.SetStatus(SdkActivityStatusCode.Error);
a?.RecordException(ex);
throw;
} }
uploadRequest.Content = streamContent;
using var uploadResponse = await _s3Client
.SendAsync(uploadRequest, HttpCompletionOption.ResponseHeadersRead, _cancellationToken)
.ConfigureAwait(false);
uploadResponse.EnsureSuccessStatusCode();
return BlobApiHelpers.ParseEtagHeader(uploadResponse.Headers);
} }
private async Task TriggerProcessing(TriggerUploadRequest request) private async Task TriggerProcessing(TriggerUploadRequest request)
{ {
using var a = _activity.Start("Triggering Processing"); using var a = _activity.Start("Triggering Processing");
try
{
Uri processUri = new($"projects/{_projectId}/modelingestion/{_ingestionId}/uploads/process", UriKind.Relative);
string requestBody = JsonConvert.SerializeObject(request);
using var content = new StringContent(requestBody, Encoding.UTF8, "application/json");
using HttpResponseMessage processResponse = await _speckleClient Uri processUri = new($"projects/{_projectId}/modelingestion/{_ingestionId}/uploads/process", UriKind.Relative);
.PostAsync(processUri, content, _cancellationToken) string requestBody = JsonConvert.SerializeObject(request);
.ConfigureAwait(false); using var content = new StringContent(requestBody, Encoding.UTF8, "application/json");
string body = await processResponse.Content.ReadAsStringAsync().ConfigureAwait(false); using HttpResponseMessage processResponse = await _speckleClient
processResponse.EnsureSuccessStatusCode(); .PostAsync(processUri, content, _cancellationToken)
} .ConfigureAwait(false);
catch (Exception ex)
{ string body = await processResponse.Content.ReadAsStringAsync().ConfigureAwait(false);
a?.SetStatus(SdkActivityStatusCode.Error); processResponse.EnsureSuccessStatusCode();
a?.RecordException(ex);
throw;
}
} }
public void Dispose() public void Dispose()
@@ -14,11 +14,7 @@ public enum CacheOperation
public static class CacheDbCommands public static class CacheDbCommands
{ {
public static readonly string[] Commands; public static readonly string[] Commands;
#if NET8_0_OR_GREATER
public static readonly int Count = Enum.GetValues<CacheOperation>().Length;
#else
public static readonly int Count = Enum.GetValues(typeof(CacheOperation)).Length; public static readonly int Count = Enum.GetValues(typeof(CacheOperation)).Length;
#endif
#pragma warning disable CA1810 #pragma warning disable CA1810
static CacheDbCommands() static CacheDbCommands()
@@ -108,14 +108,12 @@ public sealed class ObjectLoader(
{ {
var toCache = new List<BaseItem>(); var toCache = new List<BaseItem>();
await foreach ( await foreach (
var (id, json) in serverObjectManager var (id, json) in serverObjectManager.DownloadObjects(
.DownloadObjects( ids.Select(x => x.NotNull()).ToList(),
ids.Select(x => x.NotNull()).ToList(), null, //TODO: Implement attribute masking in a safe way that will not poison SQLite DB.
null, //TODO: Implement attribute masking in a safe way that will not poison SQLite DB. progress,
progress, _cancellationToken
_cancellationToken )
)
.ConfigureAwait(false)
) )
{ {
_cancellationToken.ThrowIfCancellationRequested(); _cancellationToken.ThrowIfCancellationRequested();
@@ -76,9 +76,7 @@ public class ServerObjectManager : IServerObjectManager
.SendAsync(childrenHttpMessage, HttpCompletionOption.ResponseContentRead, cancellationToken) .SendAsync(childrenHttpMessage, HttpCompletionOption.ResponseContentRead, cancellationToken)
.ConfigureAwait(false); .ConfigureAwait(false);
await foreach ( await foreach (var (id, json) in ResponseProgress(childrenHttpResponse, progress, false, cancellationToken))
var (id, json) in ResponseProgress(childrenHttpResponse, progress, false, cancellationToken).ConfigureAwait(false)
)
{ {
if (id is not null) if (id is not null)
{ {
+7 -19
View File
@@ -1,7 +1,7 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<Project Sdk="Microsoft.NET.Sdk"> <Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup Label="Compiler Properties"> <PropertyGroup Label="Compiler Properties">
<TargetFrameworks>netstandard2.0;net8.0;net10.0</TargetFrameworks> <TargetFrameworks>netstandard2.0;net8.0</TargetFrameworks>
<Configurations>Debug;Release;Local</Configurations> <Configurations>Debug;Release;Local</Configurations>
<AllowUnsafeBlocks>true</AllowUnsafeBlocks> <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
</PropertyGroup> </PropertyGroup>
@@ -22,31 +22,19 @@
<InternalsVisibleTo Include="Speckle.Sdk.Serialization.Tests" /> <InternalsVisibleTo Include="Speckle.Sdk.Serialization.Tests" />
</ItemGroup> </ItemGroup>
<ItemGroup Label="Package References"> <ItemGroup Label="Package References">
<PackageReference Include="GraphQL.Client" />
<PackageReference Include="Microsoft.Data.Sqlite" />
<PackageReference Include="Speckle.DoubleNumerics" /> <PackageReference Include="Speckle.DoubleNumerics" />
<PackageReference Include="Speckle.Newtonsoft.Json" /> <PackageReference Include="Speckle.Newtonsoft.Json" />
</ItemGroup> </ItemGroup>
<ItemGroup Condition=" '$(TargetFramework)' == 'net10.0'">
<PackageReference Include="Microsoft.Extensions.DependencyInjection" VersionOverride="10.0.0" />
<PackageReference Include="Microsoft.Extensions.Logging" VersionOverride="10.0.0" />
<PackageReference Include="Microsoft.Data.Sqlite" VersionOverride="10.0.0" />
<PackageReference Include="GraphQL.Client" VersionOverride="6.1.0" />
</ItemGroup>
<ItemGroup Condition=" '$(TargetFramework)' == 'net8.0'"> <ItemGroup Condition=" '$(TargetFramework)' == 'net8.0'">
<PackageReference Include="Microsoft.Extensions.DependencyInjection" VersionOverride="8.0.0" /> <PackageReference Include="Microsoft.Extensions.DependencyInjection.Abstractions" OverrideVersion="8.0.0" />
<PackageReference Include="Microsoft.Extensions.Logging" VersionOverride="8.0.0" /> <PackageReference Include="Microsoft.Extensions.Logging" OverrideVersion="8.0.0" />
<!--Pinned exactly to match v2-->
<PackageReference Include="Microsoft.Data.Sqlite" VersionOverride="7.0.5" />
<!--Pinned exactly to match v2-->
<PackageReference Include="GraphQL.Client" VersionOverride="6.0.0" />
</ItemGroup> </ItemGroup>
<ItemGroup Condition=" '$(TargetFramework)' == 'netstandard2.0'"> <ItemGroup Condition=" '$(TargetFramework)' == 'netstandard2.0'">
<PackageReference Include="Microsoft.CSharp" /> <PackageReference Include="Microsoft.CSharp" />
<PackageReference Include="Microsoft.Extensions.DependencyInjection" VersionOverride="2.2.0" /> <PackageReference Include="Microsoft.Extensions.DependencyInjection.Abstractions" />
<PackageReference Include="Microsoft.Extensions.Logging" VersionOverride="2.2.0" /> <PackageReference Include="Microsoft.Extensions.Logging" />
<!--Pinned exactly to match v2-->
<PackageReference Include="Microsoft.Data.Sqlite" VersionOverride="7.0.5" />
<!--Pinned exactly to match v2-->
<PackageReference Include="GraphQL.Client" VersionOverride="6.0.0" />
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<ProjectReference Include="..\Speckle.Sdk.Dependencies\Speckle.Sdk.Dependencies.csproj" /> <ProjectReference Include="..\Speckle.Sdk.Dependencies\Speckle.Sdk.Dependencies.csproj" />
@@ -153,7 +153,7 @@ public sealed class ServerTransport : IServerTransport
// Check which children are not already in the local transport // Check which children are not already in the local transport
var childrenFoundMap = await targetTransport.HasObjects(childrenIds.ToList()).ConfigureAwait(false); var childrenFoundMap = await targetTransport.HasObjects(childrenIds.ToList()).ConfigureAwait(false);
List<string> newChildrenIds = childrenFoundMap.Keys.Where(objId => !childrenFoundMap[objId]).ToList(); List<string> newChildrenIds = new(from objId in childrenFoundMap.Keys where !childrenFoundMap[objId] select objId);
targetTransport.BeginWrite(); targetTransport.BeginWrite();
@@ -236,9 +236,7 @@ internal class ParallelServerApi : ParallelOperationExecutor<ServerApiOperation>
try try
{ {
#pragma warning disable CA2025
var result = RunOperation(operation, inputValue.NotNull(), serialApi).GetAwaiter().GetResult(); var result = RunOperation(operation, inputValue.NotNull(), serialApi).GetAwaiter().GetResult();
#pragma warning restore CA2025
tcs.SetResult(result); tcs.SetResult(result);
} }
catch (Exception ex) catch (Exception ex)
+85 -218
View File
@@ -29,14 +29,11 @@
"SQLitePCLRaw.bundle_e_sqlite3": "2.1.4" "SQLitePCLRaw.bundle_e_sqlite3": "2.1.4"
} }
}, },
"Microsoft.Extensions.DependencyInjection": { "Microsoft.Extensions.DependencyInjection.Abstractions": {
"type": "Direct", "type": "Direct",
"requested": "[2.2.0, )", "requested": "[2.2.0, )",
"resolved": "2.2.0", "resolved": "2.2.0",
"contentHash": "MZtBIwfDFork5vfjpJdG5g8wuJFt7d/y3LOSVVtDK/76wlbtz6cjltfKHqLx2TKVqTj5/c41t77m1+h20zqtPA==", "contentHash": "f9hstgjVmr6rmrfGSpfsVOl2irKAgr1QjrSi3FgnS7kulxband50f2brRLwySAQTADPZeTdow0mpSMcoAdadCw=="
"dependencies": {
"Microsoft.Extensions.DependencyInjection.Abstractions": "2.2.0"
}
}, },
"Microsoft.Extensions.Logging": { "Microsoft.Extensions.Logging": {
"type": "Direct", "type": "Direct",
@@ -151,11 +148,6 @@
"Microsoft.Extensions.Configuration": "2.2.0" "Microsoft.Extensions.Configuration": "2.2.0"
} }
}, },
"Microsoft.Extensions.DependencyInjection.Abstractions": {
"type": "Transitive",
"resolved": "2.2.0",
"contentHash": "f9hstgjVmr6rmrfGSpfsVOl2irKAgr1QjrSi3FgnS7kulxband50f2brRLwySAQTADPZeTdow0mpSMcoAdadCw=="
},
"Microsoft.Extensions.Logging.Abstractions": { "Microsoft.Extensions.Logging.Abstractions": {
"type": "Transitive", "type": "Transitive",
"resolved": "2.2.0", "resolved": "2.2.0",
@@ -185,6 +177,11 @@
"resolved": "1.1.0", "resolved": "1.1.0",
"contentHash": "kz0PEW2lhqygehI/d6XsPCQzD7ff7gUJaVGPVETX611eadGsA3A877GdSlU0LRVMCTH/+P3o2iDTak+S08V2+A==" "contentHash": "kz0PEW2lhqygehI/d6XsPCQzD7ff7gUJaVGPVETX611eadGsA3A877GdSlU0LRVMCTH/+P3o2iDTak+S08V2+A=="
}, },
"Microsoft.NETCore.Targets": {
"type": "Transitive",
"resolved": "1.1.0",
"contentHash": "aOZA3BWfz9RXjpzt0sRJJMjAscAUm3Hoa4UWAfceV9UTYxgwZ1lZt5nO2myFf+/jetYQo4uTP7zS8sJY67BBxg=="
},
"Microsoft.SourceLink.Common": { "Microsoft.SourceLink.Common": {
"type": "Transitive", "type": "Transitive",
"resolved": "8.0.0", "resolved": "8.0.0",
@@ -254,6 +251,15 @@
"System.Threading.Tasks.Extensions": "4.5.4" "System.Threading.Tasks.Extensions": "4.5.4"
} }
}, },
"System.Runtime": {
"type": "Transitive",
"resolved": "4.3.0",
"contentHash": "JufQi0vPQ0xGnAczR13AUFglDyVYt4Kqnz1AZaiKZ5+GICq0/1MH/mO/eAJHt/mHW1zjKBJd7kV26SrxddAhiw==",
"dependencies": {
"Microsoft.NETCore.Platforms": "1.1.0",
"Microsoft.NETCore.Targets": "1.1.0"
}
},
"System.Runtime.CompilerServices.Unsafe": { "System.Runtime.CompilerServices.Unsafe": {
"type": "Transitive", "type": "Transitive",
"resolved": "4.5.3", "resolved": "4.5.3",
@@ -262,7 +268,10 @@
"System.Runtime.InteropServices.WindowsRuntime": { "System.Runtime.InteropServices.WindowsRuntime": {
"type": "Transitive", "type": "Transitive",
"resolved": "4.3.0", "resolved": "4.3.0",
"contentHash": "J4GUi3xZQLUBasNwZnjrffN8i5wpHrBtZoLG+OhRyGo/+YunMRWWtwoMDlUAIdmX0uRfpHIBDSV6zyr3yf00TA==" "contentHash": "J4GUi3xZQLUBasNwZnjrffN8i5wpHrBtZoLG+OhRyGo/+YunMRWWtwoMDlUAIdmX0uRfpHIBDSV6zyr3yf00TA==",
"dependencies": {
"System.Runtime": "4.3.0"
}
}, },
"System.Threading.Tasks.Extensions": { "System.Threading.Tasks.Extensions": {
"type": "Transitive", "type": "Transitive",
@@ -288,185 +297,6 @@
} }
} }
}, },
"net10.0": {
"GraphQL.Client": {
"type": "Direct",
"requested": "[6.1.0, )",
"resolved": "6.1.0",
"contentHash": "oKliAxtNuZDMxO9079mjSbwA0YwhjXBzVnVPuNZ3HI4OllO++CcOLT30l90mM/fxCAMaa8GU4ZYMwD9YjLkyiw==",
"dependencies": {
"GraphQL.Client.Abstractions": "6.1.0",
"GraphQL.Client.Abstractions.Websocket": "6.1.0",
"System.Reactive": "6.0.0"
}
},
"Microsoft.Data.Sqlite": {
"type": "Direct",
"requested": "[10.0.0, )",
"resolved": "10.0.0",
"contentHash": "I/azQ5WjwoLvSlTyDydkhARPSjYJN8jkXRjR5D92OeyTLbTrQ1K93rgf6XU+HYWHZA6lBI9SUOfl69OqEHb4ow==",
"dependencies": {
"Microsoft.Data.Sqlite.Core": "10.0.0",
"SQLitePCLRaw.bundle_e_sqlite3": "2.1.11",
"SQLitePCLRaw.core": "2.1.11"
}
},
"Microsoft.Extensions.DependencyInjection": {
"type": "Direct",
"requested": "[10.0.0, )",
"resolved": "10.0.0",
"contentHash": "f0RBabswJq+gRu5a+hWIobrLWiUYPKMhCD9WO3sYBAdSy3FFH14LMvLVFZc2kPSCimBLxSuitUhsd6tb0TAY6A==",
"dependencies": {
"Microsoft.Extensions.DependencyInjection.Abstractions": "10.0.0"
}
},
"Microsoft.Extensions.Logging": {
"type": "Direct",
"requested": "[10.0.0, )",
"resolved": "10.0.0",
"contentHash": "BStFkd5CcnEtarlcgYDBcFzGYCuuNMzPs02wN3WBsOFoYIEmYoUdAiU+au6opzoqfTYJsMTW00AeqDdnXH2CvA==",
"dependencies": {
"Microsoft.Extensions.DependencyInjection": "10.0.0",
"Microsoft.Extensions.Logging.Abstractions": "10.0.0",
"Microsoft.Extensions.Options": "10.0.0"
}
},
"Microsoft.SourceLink.GitHub": {
"type": "Direct",
"requested": "[8.0.0, )",
"resolved": "8.0.0",
"contentHash": "G5q7OqtwIyGTkeIOAc3u2ZuV/kicQaec5EaRnc0pIeSnh9LUjj+PYQrJYBURvDt7twGl2PKA7nSN0kz1Zw5bnQ==",
"dependencies": {
"Microsoft.Build.Tasks.Git": "8.0.0",
"Microsoft.SourceLink.Common": "8.0.0"
}
},
"PolySharp": {
"type": "Direct",
"requested": "[1.15.0, )",
"resolved": "1.15.0",
"contentHash": "FbU0El+EEjdpuIX4iDbeS7ki1uzpJPx8vbqOzEtqnl1GZeAGJfq+jCbxeJL2y0EPnUNk8dRnnqR2xnYXg9Tf+g=="
},
"Speckle.DoubleNumerics": {
"type": "Direct",
"requested": "[4.1.0, )",
"resolved": "4.1.0",
"contentHash": "20DtS+FsDRsOD9+AU3TwNFZ0qrKo5f6f7B5ZR9wStsIHHHC9k7DpjbCvuNtmnSjx54MD+TJC7wV2f5iyGVPj1A=="
},
"Speckle.InterfaceGenerator": {
"type": "Direct",
"requested": "[0.9.6, )",
"resolved": "0.9.6",
"contentHash": "HKH7tYrYYlCK1ct483hgxERAdVdMtl7gUKW9ijWXxA1UsYR4Z+TrRHYmzZ9qmpu1NnTycSrp005NYM78GDKV1w=="
},
"Speckle.Newtonsoft.Json": {
"type": "Direct",
"requested": "[13.0.2, )",
"resolved": "13.0.2",
"contentHash": "g1BejUZwax5PRfL6xHgLEK23sqHWOgOj9hE7RvfRRlN00AGt8GnPYt8HedSK7UB3HiRW8zCA9Pn0iiYxCK24BA=="
},
"GraphQL.Client.Abstractions": {
"type": "Transitive",
"resolved": "6.1.0",
"contentHash": "Za31wjKLEeROZYJmp0Lmj/TLQ1Yw6x6QM0JHABcuyMC3OSopr34ufayrtdxtbL1a3129FTVFKOFC0hcooSQoJQ==",
"dependencies": {
"GraphQL.Primitives": "6.1.0"
}
},
"GraphQL.Client.Abstractions.Websocket": {
"type": "Transitive",
"resolved": "6.1.0",
"contentHash": "PjdG3q4MzPsa5NiBOBhuIRMRTo59der5bFmX2r1gSS3RIjytwpooxF2RffFCBh16sqbwuH1/dllDcNG+EJt1qA==",
"dependencies": {
"GraphQL.Client.Abstractions": "6.1.0"
}
},
"GraphQL.Primitives": {
"type": "Transitive",
"resolved": "6.1.0",
"contentHash": "L8yQ70Wd9p8hMJvnmpgyZfr2R6Q7S0/lPyEBI1tacJa5XzsoJSVtHdmfsMaHyufwk03hlUsBXgNerAs66kxHdA=="
},
"Microsoft.Build.Tasks.Git": {
"type": "Transitive",
"resolved": "8.0.0",
"contentHash": "bZKfSIKJRXLTuSzLudMFte/8CempWjVamNUR5eHJizsy+iuOuO/k2gnh7W0dHJmYY0tBf+gUErfluCv5mySAOQ=="
},
"Microsoft.Data.Sqlite.Core": {
"type": "Transitive",
"resolved": "10.0.0",
"contentHash": "wPKG/Ym6tSMCo06UOZXzVfeFGzawnOZrTba/R3PfK+RhNuNELZ9I7nFns4WGTtv2kKlrlmmErgJ+kgTXHaNdHg==",
"dependencies": {
"SQLitePCLRaw.core": "2.1.11"
}
},
"Microsoft.Extensions.DependencyInjection.Abstractions": {
"type": "Transitive",
"resolved": "10.0.0",
"contentHash": "L3AdmZ1WOK4XXT5YFPEwyt0ep6l8lGIPs7F5OOBZc77Zqeo01Of7XXICy47628sdVl0v/owxYJTe86DTgFwKCA=="
},
"Microsoft.Extensions.Logging.Abstractions": {
"type": "Transitive",
"resolved": "10.0.0",
"contentHash": "FU/IfjDfwaMuKr414SSQNTIti/69bHEMb+QKrskRb26oVqpx3lNFXMjs/RC9ZUuhBhcwDM2BwOgoMw+PZ+beqQ==",
"dependencies": {
"Microsoft.Extensions.DependencyInjection.Abstractions": "10.0.0"
}
},
"Microsoft.Extensions.Options": {
"type": "Transitive",
"resolved": "10.0.0",
"contentHash": "8oCAgXOow5XDrY9HaXX1QmH3ORsyZO/ANVHBlhLyCeWTH5Sg4UuqZeOTWJi6484M+LqSx0RqQXDJtdYy2BNiLQ==",
"dependencies": {
"Microsoft.Extensions.DependencyInjection.Abstractions": "10.0.0",
"Microsoft.Extensions.Primitives": "10.0.0"
}
},
"Microsoft.Extensions.Primitives": {
"type": "Transitive",
"resolved": "10.0.0",
"contentHash": "inRnbpCS0nwO/RuoZIAqxQUuyjaknOOnCEZB55KSMMjRhl0RQDttSmLSGsUJN3RQ3ocf5NDLFd2mOQViHqMK5w=="
},
"Microsoft.SourceLink.Common": {
"type": "Transitive",
"resolved": "8.0.0",
"contentHash": "dk9JPxTCIevS75HyEQ0E4OVAFhB2N+V9ShCXf8Q6FkUQZDkgLI12y679Nym1YqsiSysuQskT7Z+6nUf3yab6Vw=="
},
"SQLitePCLRaw.bundle_e_sqlite3": {
"type": "Transitive",
"resolved": "2.1.11",
"contentHash": "DC4nA7yWnf4UZdgJDF+9Mus4/cb0Y3Sfgi3gDnAoKNAIBwzkskNAbNbyu+u4atT0ruVlZNJfwZmwiEwE5oz9LQ==",
"dependencies": {
"SQLitePCLRaw.lib.e_sqlite3": "2.1.11",
"SQLitePCLRaw.provider.e_sqlite3": "2.1.11"
}
},
"SQLitePCLRaw.core": {
"type": "Transitive",
"resolved": "2.1.11",
"contentHash": "PK0GLFkfhZzLQeR3PJf71FmhtHox+U3vcY6ZtswoMjrefkB9k6ErNJEnwXqc5KgXDSjige2XXrezqS39gkpQKA=="
},
"SQLitePCLRaw.lib.e_sqlite3": {
"type": "Transitive",
"resolved": "2.1.11",
"contentHash": "Ev2ytaXiOlWZ4b3R67GZBsemTINslLD1DCJr2xiacpn4tbapu0Q4dHEzSvZSMnVWeE5nlObU3VZN2p81q3XOYQ=="
},
"SQLitePCLRaw.provider.e_sqlite3": {
"type": "Transitive",
"resolved": "2.1.11",
"contentHash": "Y/0ZkR+r0Cg3DQFuCl1RBnv/tmxpIZRU3HUvelPw6MVaKHwYYR8YNvgs0vuNuXCMvlyJ+Fh88U1D4tah1tt6qw==",
"dependencies": {
"SQLitePCLRaw.core": "2.1.11"
}
},
"System.Reactive": {
"type": "Transitive",
"resolved": "6.0.0",
"contentHash": "31kfaW4ZupZzPsI5PVe77VhnvFF55qgma7KZr/E0iFTs6fmdhhG8j0mgEx620iLTey1EynOkEfnyTjtNEpJzGw=="
},
"speckle.sdk.dependencies": {
"type": "Project"
}
},
"net8.0": { "net8.0": {
"GraphQL.Client": { "GraphQL.Client": {
"type": "Direct", "type": "Direct",
@@ -489,24 +319,22 @@
"SQLitePCLRaw.bundle_e_sqlite3": "2.1.4" "SQLitePCLRaw.bundle_e_sqlite3": "2.1.4"
} }
}, },
"Microsoft.Extensions.DependencyInjection": { "Microsoft.Extensions.DependencyInjection.Abstractions": {
"type": "Direct", "type": "Direct",
"requested": "[8.0.0, )", "requested": "[2.2.0, )",
"resolved": "8.0.0", "resolved": "2.2.0",
"contentHash": "V8S3bsm50ig6JSyrbcJJ8bW2b9QLGouz+G1miK3UTaOWmMtFwNNNzUf4AleyDWUmTrWMLNnFSLEQtxmxgNQnNQ==", "contentHash": "f9hstgjVmr6rmrfGSpfsVOl2irKAgr1QjrSi3FgnS7kulxband50f2brRLwySAQTADPZeTdow0mpSMcoAdadCw=="
"dependencies": {
"Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.0"
}
}, },
"Microsoft.Extensions.Logging": { "Microsoft.Extensions.Logging": {
"type": "Direct", "type": "Direct",
"requested": "[8.0.0, )", "requested": "[2.2.0, )",
"resolved": "8.0.0", "resolved": "2.2.0",
"contentHash": "tvRkov9tAJ3xP51LCv3FJ2zINmv1P8Hi8lhhtcKGqM+ImiTCC84uOPEI4z8Cdq2C3o9e+Aa0Gw0rmrsJD77W+w==", "contentHash": "Nxqhadc9FCmFHzU+fz3oc8sFlE6IadViYg8dfUdGzJZ2JUxnCsRghBhhOWdM4B2zSZqEc+0BjliBh/oNdRZuig==",
"dependencies": { "dependencies": {
"Microsoft.Extensions.DependencyInjection": "8.0.0", "Microsoft.Extensions.Configuration.Binder": "2.2.0",
"Microsoft.Extensions.Logging.Abstractions": "8.0.0", "Microsoft.Extensions.DependencyInjection.Abstractions": "2.2.0",
"Microsoft.Extensions.Options": "8.0.0" "Microsoft.Extensions.Logging.Abstractions": "2.2.0",
"Microsoft.Extensions.Options": "2.2.0"
} }
}, },
"Microsoft.SourceLink.GitHub": { "Microsoft.SourceLink.GitHub": {
@@ -577,32 +405,53 @@
"SQLitePCLRaw.core": "2.1.4" "SQLitePCLRaw.core": "2.1.4"
} }
}, },
"Microsoft.Extensions.DependencyInjection.Abstractions": { "Microsoft.Extensions.Configuration": {
"type": "Transitive", "type": "Transitive",
"resolved": "8.0.0", "resolved": "2.2.0",
"contentHash": "cjWrLkJXK0rs4zofsK4bSdg+jhDLTaxrkXu4gS6Y7MAlCvRyNNgwY/lJi5RDlQOnSZweHqoyvgvbdvQsRIW+hg==" "contentHash": "nOP8R1mVb/6mZtm2qgAJXn/LFm/2kMjHDAg/QJLFG6CuWYJtaD3p1BwQhufBVvRzL9ceJ/xF0SQ0qsI2GkDQAA==",
"dependencies": {
"Microsoft.Extensions.Configuration.Abstractions": "2.2.0"
}
},
"Microsoft.Extensions.Configuration.Abstractions": {
"type": "Transitive",
"resolved": "2.2.0",
"contentHash": "65MrmXCziWaQFrI0UHkQbesrX5wTwf9XPjY5yFm/VkgJKFJ5gqvXRoXjIZcf2wLi5ZlwGz/oMYfyURVCWbM5iw==",
"dependencies": {
"Microsoft.Extensions.Primitives": "2.2.0"
}
},
"Microsoft.Extensions.Configuration.Binder": {
"type": "Transitive",
"resolved": "2.2.0",
"contentHash": "vJ9xvOZCnUAIHcGC3SU35r3HKmHTVIeHzo6u/qzlHAqD8m6xv92MLin4oJntTvkpKxVX3vI1GFFkIQtU3AdlsQ==",
"dependencies": {
"Microsoft.Extensions.Configuration": "2.2.0"
}
}, },
"Microsoft.Extensions.Logging.Abstractions": { "Microsoft.Extensions.Logging.Abstractions": {
"type": "Transitive", "type": "Transitive",
"resolved": "8.0.0", "resolved": "2.2.0",
"contentHash": "arDBqTgFCyS0EvRV7O3MZturChstm50OJ0y9bDJvAcmEPJm0FFpFyjU/JLYyStNGGey081DvnQYlncNX5SJJGA==", "contentHash": "B2WqEox8o+4KUOpL7rZPyh6qYjik8tHi2tN8Z9jZkHzED8ElYgZa/h6K+xliB435SqUcWT290Fr2aa8BtZjn8A=="
"dependencies": {
"Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.0"
}
}, },
"Microsoft.Extensions.Options": { "Microsoft.Extensions.Options": {
"type": "Transitive", "type": "Transitive",
"resolved": "8.0.0", "resolved": "2.2.0",
"contentHash": "JOVOfqpnqlVLUzINQ2fox8evY2SKLYJ3BV8QDe/Jyp21u1T7r45x/R/5QdteURMR5r01GxeJSBBUOCOyaNXA3g==", "contentHash": "UpZLNLBpIZ0GTebShui7xXYh6DmBHjWM8NxGxZbdQh/bPZ5e6YswqI+bru6BnEL5eWiOdodsXtEz3FROcgi/qg==",
"dependencies": { "dependencies": {
"Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.0", "Microsoft.Extensions.DependencyInjection.Abstractions": "2.2.0",
"Microsoft.Extensions.Primitives": "8.0.0" "Microsoft.Extensions.Primitives": "2.2.0",
"System.ComponentModel.Annotations": "4.5.0"
} }
}, },
"Microsoft.Extensions.Primitives": { "Microsoft.Extensions.Primitives": {
"type": "Transitive", "type": "Transitive",
"resolved": "8.0.0", "resolved": "2.2.0",
"contentHash": "bXJEZrW9ny8vjMF1JV253WeLhpEVzFo1lyaZu1vQ4ZxWUlVvknZ/+ftFgVheLubb4eZPSwwxBeqS1JkCOjxd8g==" "contentHash": "azyQtqbm4fSaDzZHD/J+V6oWMFaf2tWP4WEGIYePLCMw3+b2RQdj9ybgbQyjCshcitQKQ4lEDOZjmSlTTrHxUg==",
"dependencies": {
"System.Memory": "4.5.1",
"System.Runtime.CompilerServices.Unsafe": "4.5.1"
}
}, },
"Microsoft.SourceLink.Common": { "Microsoft.SourceLink.Common": {
"type": "Transitive", "type": "Transitive",
@@ -621,7 +470,10 @@
"SQLitePCLRaw.core": { "SQLitePCLRaw.core": {
"type": "Transitive", "type": "Transitive",
"resolved": "2.1.4", "resolved": "2.1.4",
"contentHash": "inBjvSHo9UDKneGNzfUfDjK08JzlcIhn1+SP5Y3m6cgXpCxXKCJDy6Mka7LpgSV+UZmKSnC8rTwB0SQ0xKu5pA==" "contentHash": "inBjvSHo9UDKneGNzfUfDjK08JzlcIhn1+SP5Y3m6cgXpCxXKCJDy6Mka7LpgSV+UZmKSnC8rTwB0SQ0xKu5pA==",
"dependencies": {
"System.Memory": "4.5.3"
}
}, },
"SQLitePCLRaw.lib.e_sqlite3": { "SQLitePCLRaw.lib.e_sqlite3": {
"type": "Transitive", "type": "Transitive",
@@ -636,11 +488,26 @@
"SQLitePCLRaw.core": "2.1.4" "SQLitePCLRaw.core": "2.1.4"
} }
}, },
"System.ComponentModel.Annotations": {
"type": "Transitive",
"resolved": "4.5.0",
"contentHash": "UxYQ3FGUOtzJ7LfSdnYSFd7+oEv6M8NgUatatIN2HxNtDdlcvFAf+VIq4Of9cDMJEJC0aSRv/x898RYhB4Yppg=="
},
"System.Memory": {
"type": "Transitive",
"resolved": "4.5.3",
"contentHash": "3oDzvc/zzetpTKWMShs1AADwZjQ/36HnsufHRPcOjyRAAMLDlu2iD33MBI2opxnezcVUtXyqDXXjoFMOU9c7SA=="
},
"System.Reactive": { "System.Reactive": {
"type": "Transitive", "type": "Transitive",
"resolved": "5.0.0", "resolved": "5.0.0",
"contentHash": "erBZjkQHWL9jpasCE/0qKAryzVBJFxGHVBAvgRN1bzM0q2s1S4oYREEEL0Vb+1kA/6BKb5FjUZMp5VXmy+gzkQ==" "contentHash": "erBZjkQHWL9jpasCE/0qKAryzVBJFxGHVBAvgRN1bzM0q2s1S4oYREEEL0Vb+1kA/6BKb5FjUZMp5VXmy+gzkQ=="
}, },
"System.Runtime.CompilerServices.Unsafe": {
"type": "Transitive",
"resolved": "4.5.1",
"contentHash": "Zh8t8oqolRaFa9vmOZfdQm/qKejdqz0J9kr7o2Fu0vPeoH3BL1EOXipKWwkWtLT1JPzjByrF19fGuFlNbmPpiw=="
},
"speckle.sdk.dependencies": { "speckle.sdk.dependencies": {
"type": "Project" "type": "Project"
} }
@@ -1,6 +1,6 @@
<Project Sdk="Microsoft.NET.Sdk"> <Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup> <PropertyGroup>
<TargetFramework>net10.0</TargetFramework> <TargetFramework>net8.0</TargetFramework>
<IsTestProject>true</IsTestProject> <IsTestProject>true</IsTestProject>
</PropertyGroup> </PropertyGroup>
<ItemGroup> <ItemGroup>
@@ -1,4 +1,4 @@
using AwesomeAssertions; using FluentAssertions;
using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.DependencyInjection;
using Newtonsoft.Json; using Newtonsoft.Json;
using Speckle.Automate.Sdk.Schema; using Speckle.Automate.Sdk.Schema;
@@ -1,27 +1,27 @@
{ {
"version": 2, "version": 2,
"dependencies": { "dependencies": {
"net10.0": { "net8.0": {
"altcover": { "altcover": {
"type": "Direct", "type": "Direct",
"requested": "[9.0.102, )", "requested": "[9.0.1, )",
"resolved": "9.0.102", "resolved": "9.0.1",
"contentHash": "q3Rf5t0M9kXlcO5qhsaAe6NrFSNd5enrhKmF/Ezgmomqw34PbUTbRSYjSDNhS3YGDyUrPTkyPn14EfLDJWztcA==" "contentHash": "aadciFNDT5bnylaYUkKal+s5hF7yU/lmZxImQWAlk1438iPqK1Uf79H5ylELpyLIU49HL5ql+tnWBihp3WVLCA=="
}, },
"AwesomeAssertions": { "AwesomeAssertions": {
"type": "Direct", "type": "Direct",
"requested": "[9.4.0, )", "requested": "[8.1.0, )",
"resolved": "9.4.0", "resolved": "8.1.0",
"contentHash": "dJxkWiQ8D+xT6Gr2sSL83+Mar+Vpy2JTcUPxFcckpPJ8VYBfSgnk+zqpS6t7kcGnjz8NLyF14qfuoL4bKzzoew==" "contentHash": "IfNC4cpXPi9tclWvuNO9lfkuIxJsUTLTS1NXto55jDrAUQJYl0zLI9ByISrfkbBE2Xtg+IWaAXQ6jnUx3anDuw=="
}, },
"Microsoft.NET.Test.Sdk": { "Microsoft.NET.Test.Sdk": {
"type": "Direct", "type": "Direct",
"requested": "[18.3.0, )", "requested": "[17.13.0, )",
"resolved": "18.3.0", "resolved": "17.13.0",
"contentHash": "xW3kXuWRQtgoxJp4J+gdhHSQyK+6Wb/AZDSd7lMvuMRYlZ1tnpkojyfZlWilB5G4dmZ0Y0ZxU/M23TlubndNkw==", "contentHash": "W19wCPizaIC9Zh47w8wWI/yxuqR7/dtABwOrc8r2jX/8mUNxM2vw4fXDh+DJTeogxV+KzKwg5jNNGQVwf3LXyA==",
"dependencies": { "dependencies": {
"Microsoft.CodeCoverage": "18.3.0", "Microsoft.CodeCoverage": "17.13.0",
"Microsoft.TestPlatform.TestHost": "18.3.0" "Microsoft.TestPlatform.TestHost": "17.13.0"
} }
}, },
"Microsoft.SourceLink.GitHub": { "Microsoft.SourceLink.GitHub": {
@@ -54,14 +54,14 @@
}, },
"xunit.runner.visualstudio": { "xunit.runner.visualstudio": {
"type": "Direct", "type": "Direct",
"requested": "[3.1.5, )", "requested": "[3.0.2, )",
"resolved": "3.1.5", "resolved": "3.0.2",
"contentHash": "tKi7dSTwP4m5m9eXPM2Ime4Kn7xNf4x4zT9sdLO/G4hZVnQCRiMTWoSZqI/pYTVeI27oPPqHBKYI/DjJ9GsYgA==" "contentHash": "oXbusR6iPq0xlqoikjdLvzh+wQDkMv9If58myz9MEzldS4nIcp442Btgs2sWbYWV+caEluMe2pQCZ0hUZgPiow=="
}, },
"Argon": { "Argon": {
"type": "Transitive", "type": "Transitive",
"resolved": "0.33.5", "resolved": "0.28.0",
"contentHash": "J6821zxO+EqMzO9C/V5uiWc2eBGyzN7Z8Z0xq3Q1/e6IxYcHDA32OgiZX5/7/f8rVPQQa7aYtm6f0UfnrgKNBg==" "contentHash": "78BmoFm8SK733nq4F/SjqNKkXJHdrg/MslvYfNjJX/nM/mEkltHUzPJRjBE9VI/zghsjFPQxMRPEUaqIgg98zg=="
}, },
"Castle.Core": { "Castle.Core": {
"type": "Transitive", "type": "Transitive",
@@ -73,16 +73,17 @@
}, },
"DiffEngine": { "DiffEngine": {
"type": "Transitive", "type": "Transitive",
"resolved": "18.4.1", "resolved": "16.2.1",
"contentHash": "9/E4N4auQW4iOKPxP6MpGihpuw0uaxfiLLJfraKrqv02cG2LzVx3ocFwIss70mQFwAolrq58zv5NHwMaqT3+3A==", "contentHash": "UfMgXClqOGkPNfth210upiTY18LPCgjsfNrh0Olo5qI+QTkkCO6wHSuOwknxJdKtsWoaJ+E132Y2nzD0PiLWRw==",
"dependencies": { "dependencies": {
"EmptyFiles": "8.17.2" "EmptyFiles": "8.9.1",
"System.Management": "8.0.0"
} }
}, },
"EmptyFiles": { "EmptyFiles": {
"type": "Transitive", "type": "Transitive",
"resolved": "8.17.2", "resolved": "8.9.1",
"contentHash": "2oyDVmM/DU3g0h2kqcV05zjOUfo9AdwPoduIGh0LZL6nXqSN4qhZna2M/aJoYiQrmIznJ52wxYCmxDnWaRZ1JQ==" "contentHash": "GbGf+oH/xiI3C5vJ5TnoA4sx7x7LhtOvN00fxihRZJsj40XuXk2TMz/4m26PfNSJj8JMAqo3BUBirjvam+3xkA=="
}, },
"FSharp.Core": { "FSharp.Core": {
"type": "Transitive", "type": "Transitive",
@@ -91,24 +92,24 @@
}, },
"GraphQL.Client.Abstractions": { "GraphQL.Client.Abstractions": {
"type": "Transitive", "type": "Transitive",
"resolved": "6.1.0", "resolved": "6.0.0",
"contentHash": "Za31wjKLEeROZYJmp0Lmj/TLQ1Yw6x6QM0JHABcuyMC3OSopr34ufayrtdxtbL1a3129FTVFKOFC0hcooSQoJQ==", "contentHash": "h7uzWFORHZ+CCjwr/ThAyXMr0DPpzEANDa4Uo54wqCQ+j7qUKwqYTgOrb1W40sqbvNaZm9v/X7It31SUw0maHA==",
"dependencies": { "dependencies": {
"GraphQL.Primitives": "6.1.0" "GraphQL.Primitives": "6.0.0"
} }
}, },
"GraphQL.Client.Abstractions.Websocket": { "GraphQL.Client.Abstractions.Websocket": {
"type": "Transitive", "type": "Transitive",
"resolved": "6.1.0", "resolved": "6.0.0",
"contentHash": "PjdG3q4MzPsa5NiBOBhuIRMRTo59der5bFmX2r1gSS3RIjytwpooxF2RffFCBh16sqbwuH1/dllDcNG+EJt1qA==", "contentHash": "Nr9bPf8gIOvLuXpqEpqr9z9jslYFJOvd0feHth3/kPqeR3uMbjF5pjiwh4jxyMcxHdr8Pb6QiXkV3hsSyt0v7A==",
"dependencies": { "dependencies": {
"GraphQL.Client.Abstractions": "6.1.0" "GraphQL.Client.Abstractions": "6.0.0"
} }
}, },
"GraphQL.Primitives": { "GraphQL.Primitives": {
"type": "Transitive", "type": "Transitive",
"resolved": "6.1.0", "resolved": "6.0.0",
"contentHash": "L8yQ70Wd9p8hMJvnmpgyZfr2R6Q7S0/lPyEBI1tacJa5XzsoJSVtHdmfsMaHyufwk03hlUsBXgNerAs66kxHdA==" "contentHash": "yg72rrYDapfsIUrul7aF6wwNnTJBOFvuA9VdDTQpPa8AlAriHbufeXYLBcodKjfUdkCnaiggX1U/nEP08Zb5GA=="
}, },
"Microsoft.Build.Tasks.Git": { "Microsoft.Build.Tasks.Git": {
"type": "Transitive", "type": "Transitive",
@@ -117,43 +118,64 @@
}, },
"Microsoft.CodeCoverage": { "Microsoft.CodeCoverage": {
"type": "Transitive", "type": "Transitive",
"resolved": "18.3.0", "resolved": "17.13.0",
"contentHash": "23BNy/vziREC20Wwhb50K7+kZe0m07KlLWDQv4qjJ9tt3QjpDpDIqJFrhYHmMEo9xDkuSp55U/8h4bMF7MiB+g==" "contentHash": "9LIUy0y+DvUmEPtbRDw6Bay3rzwqFV8P4efTrK4CZhQle3M/QwLPjISghfcolmEGAPWxuJi6m98ZEfk4VR4Lfg=="
}, },
"Microsoft.Data.Sqlite.Core": { "Microsoft.Data.Sqlite.Core": {
"type": "Transitive", "type": "Transitive",
"resolved": "10.0.0", "resolved": "7.0.5",
"contentHash": "wPKG/Ym6tSMCo06UOZXzVfeFGzawnOZrTba/R3PfK+RhNuNELZ9I7nFns4WGTtv2kKlrlmmErgJ+kgTXHaNdHg==", "contentHash": "FTerRmQPqHrCrnoUzhBu+E+1DNGwyrAMLqHkAqOOOu5pGfyMOj8qQUBxI/gDtWtG11p49UxSfWmBzRNlwZqfUg==",
"dependencies": { "dependencies": {
"SQLitePCLRaw.core": "2.1.11" "SQLitePCLRaw.core": "2.1.4"
} }
}, },
"Microsoft.Extensions.DependencyInjection.Abstractions": { "Microsoft.Extensions.Configuration": {
"type": "Transitive", "type": "Transitive",
"resolved": "10.0.6", "resolved": "2.2.0",
"contentHash": "w+dX4SIr1X9yegX2yX2dU1XtP4JAUVNdvOG/Evn+H+ndn96YzfIPX52FALXChrRNWFR9l77FQyg1mB7WQo6iOA==" "contentHash": "nOP8R1mVb/6mZtm2qgAJXn/LFm/2kMjHDAg/QJLFG6CuWYJtaD3p1BwQhufBVvRzL9ceJ/xF0SQ0qsI2GkDQAA==",
"dependencies": {
"Microsoft.Extensions.Configuration.Abstractions": "2.2.0"
}
},
"Microsoft.Extensions.Configuration.Abstractions": {
"type": "Transitive",
"resolved": "2.2.0",
"contentHash": "65MrmXCziWaQFrI0UHkQbesrX5wTwf9XPjY5yFm/VkgJKFJ5gqvXRoXjIZcf2wLi5ZlwGz/oMYfyURVCWbM5iw==",
"dependencies": {
"Microsoft.Extensions.Primitives": "2.2.0"
}
},
"Microsoft.Extensions.Configuration.Binder": {
"type": "Transitive",
"resolved": "2.2.0",
"contentHash": "vJ9xvOZCnUAIHcGC3SU35r3HKmHTVIeHzo6u/qzlHAqD8m6xv92MLin4oJntTvkpKxVX3vI1GFFkIQtU3AdlsQ==",
"dependencies": {
"Microsoft.Extensions.Configuration": "2.2.0"
}
}, },
"Microsoft.Extensions.Logging.Abstractions": { "Microsoft.Extensions.Logging.Abstractions": {
"type": "Transitive", "type": "Transitive",
"resolved": "10.0.0", "resolved": "2.2.0",
"contentHash": "FU/IfjDfwaMuKr414SSQNTIti/69bHEMb+QKrskRb26oVqpx3lNFXMjs/RC9ZUuhBhcwDM2BwOgoMw+PZ+beqQ==", "contentHash": "B2WqEox8o+4KUOpL7rZPyh6qYjik8tHi2tN8Z9jZkHzED8ElYgZa/h6K+xliB435SqUcWT290Fr2aa8BtZjn8A=="
"dependencies": {
"Microsoft.Extensions.DependencyInjection.Abstractions": "10.0.0"
}
}, },
"Microsoft.Extensions.Options": { "Microsoft.Extensions.Options": {
"type": "Transitive", "type": "Transitive",
"resolved": "10.0.0", "resolved": "2.2.0",
"contentHash": "8oCAgXOow5XDrY9HaXX1QmH3ORsyZO/ANVHBlhLyCeWTH5Sg4UuqZeOTWJi6484M+LqSx0RqQXDJtdYy2BNiLQ==", "contentHash": "UpZLNLBpIZ0GTebShui7xXYh6DmBHjWM8NxGxZbdQh/bPZ5e6YswqI+bru6BnEL5eWiOdodsXtEz3FROcgi/qg==",
"dependencies": { "dependencies": {
"Microsoft.Extensions.DependencyInjection.Abstractions": "10.0.0", "Microsoft.Extensions.DependencyInjection.Abstractions": "2.2.0",
"Microsoft.Extensions.Primitives": "10.0.0" "Microsoft.Extensions.Primitives": "2.2.0",
"System.ComponentModel.Annotations": "4.5.0"
} }
}, },
"Microsoft.Extensions.Primitives": { "Microsoft.Extensions.Primitives": {
"type": "Transitive", "type": "Transitive",
"resolved": "10.0.0", "resolved": "2.2.0",
"contentHash": "inRnbpCS0nwO/RuoZIAqxQUuyjaknOOnCEZB55KSMMjRhl0RQDttSmLSGsUJN3RQ3ocf5NDLFd2mOQViHqMK5w==" "contentHash": "azyQtqbm4fSaDzZHD/J+V6oWMFaf2tWP4WEGIYePLCMw3+b2RQdj9ybgbQyjCshcitQKQ4lEDOZjmSlTTrHxUg==",
"dependencies": {
"System.Memory": "4.5.1",
"System.Runtime.CompilerServices.Unsafe": "4.5.1"
}
}, },
"Microsoft.SourceLink.Common": { "Microsoft.SourceLink.Common": {
"type": "Transitive", "type": "Transitive",
@@ -162,16 +184,19 @@
}, },
"Microsoft.TestPlatform.ObjectModel": { "Microsoft.TestPlatform.ObjectModel": {
"type": "Transitive", "type": "Transitive",
"resolved": "18.3.0", "resolved": "17.13.0",
"contentHash": "AEIEX2aWdPO9XbtR96eBaJxmXRD9vaI9uQ1T/JbPEKlTAZwYx0ZrMzKyULMdh/HH9Sg03kXCoN7LszQ90o6nPQ==" "contentHash": "bt0E0Dx+iqW97o4A59RCmUmz/5NarJ7LRL+jXbSHod72ibL5XdNm1Ke+UO5tFhBG4VwHLcSjqq9BUSblGNWamw==",
"dependencies": {
"System.Reflection.Metadata": "1.6.0"
}
}, },
"Microsoft.TestPlatform.TestHost": { "Microsoft.TestPlatform.TestHost": {
"type": "Transitive", "type": "Transitive",
"resolved": "18.3.0", "resolved": "17.13.0",
"contentHash": "twmsoelXnp1uWMU3VGip9f0Jr1mZ0PZqgJdF35CIrdYgYrkHIJMV1m8uKyhcdjLdsQDESHAgkR7KhS9i1qpJag==", "contentHash": "9GGw08Dc3AXspjekdyTdZ/wYWFlxbgcF0s7BKxzVX+hzAwpifDOdxM+ceVaaJSQOwqt3jtuNlHn3XTpKUS9x9Q==",
"dependencies": { "dependencies": {
"Microsoft.TestPlatform.ObjectModel": "18.3.0", "Microsoft.TestPlatform.ObjectModel": "17.13.0",
"Newtonsoft.Json": "13.0.3" "Newtonsoft.Json": "13.0.1"
} }
}, },
"Newtonsoft.Json": { "Newtonsoft.Json": {
@@ -184,59 +209,107 @@
"resolved": "0.3.1", "resolved": "0.3.1",
"contentHash": "LD6bz2p+4O/BQnmD4mqFZrmdN/IjsPo1wUvfmcH46Q05ng+dyMLl3d2ylj0x412F4fpJEtm0Z3EaCAx4FqgNuQ==", "contentHash": "LD6bz2p+4O/BQnmD4mqFZrmdN/IjsPo1wUvfmcH46Q05ng+dyMLl3d2ylj0x412F4fpJEtm0Z3EaCAx4FqgNuQ==",
"dependencies": { "dependencies": {
"FSharp.Core": "7.0.300" "FSharp.Core": "7.0.300",
"System.Text.Json": "7.0.3"
} }
}, },
"SimpleInfoName": { "SimpleInfoName": {
"type": "Transitive", "type": "Transitive",
"resolved": "3.2.0", "resolved": "3.1.0",
"contentHash": "K8ivHRbPWfncijk62Dan/r/z55gwq3aFzqB6yFlD9X0bbpIaacHyHH2cpcIdz0FECUpERUZTwxts0z4gRWpQpA==" "contentHash": "j+ENh86NhxrgDc6T1ueqIR2QOdDkSJY2dbTFyPN/JvIXifB4GHAunlMw/x7P6m7XaXEHr3s+SMZfKBlmnmkO6g=="
}, },
"SQLitePCLRaw.bundle_e_sqlite3": { "SQLitePCLRaw.bundle_e_sqlite3": {
"type": "Transitive", "type": "Transitive",
"resolved": "2.1.11", "resolved": "2.1.4",
"contentHash": "DC4nA7yWnf4UZdgJDF+9Mus4/cb0Y3Sfgi3gDnAoKNAIBwzkskNAbNbyu+u4atT0ruVlZNJfwZmwiEwE5oz9LQ==", "contentHash": "EWI1olKDjFEBMJu0+3wuxwziIAdWDVMYLhuZ3Qs84rrz+DHwD00RzWPZCa+bLnHCf3oJwuFZIRsHT5p236QXww==",
"dependencies": { "dependencies": {
"SQLitePCLRaw.lib.e_sqlite3": "2.1.11", "SQLitePCLRaw.lib.e_sqlite3": "2.1.4",
"SQLitePCLRaw.provider.e_sqlite3": "2.1.11" "SQLitePCLRaw.provider.e_sqlite3": "2.1.4"
} }
}, },
"SQLitePCLRaw.core": { "SQLitePCLRaw.core": {
"type": "Transitive", "type": "Transitive",
"resolved": "2.1.11", "resolved": "2.1.4",
"contentHash": "PK0GLFkfhZzLQeR3PJf71FmhtHox+U3vcY6ZtswoMjrefkB9k6ErNJEnwXqc5KgXDSjige2XXrezqS39gkpQKA==" "contentHash": "inBjvSHo9UDKneGNzfUfDjK08JzlcIhn1+SP5Y3m6cgXpCxXKCJDy6Mka7LpgSV+UZmKSnC8rTwB0SQ0xKu5pA==",
"dependencies": {
"System.Memory": "4.5.3"
}
}, },
"SQLitePCLRaw.lib.e_sqlite3": { "SQLitePCLRaw.lib.e_sqlite3": {
"type": "Transitive", "type": "Transitive",
"resolved": "2.1.11", "resolved": "2.1.4",
"contentHash": "Ev2ytaXiOlWZ4b3R67GZBsemTINslLD1DCJr2xiacpn4tbapu0Q4dHEzSvZSMnVWeE5nlObU3VZN2p81q3XOYQ==" "contentHash": "2C9Q9eX7CPLveJA0rIhf9RXAvu+7nWZu1A2MdG6SD/NOu26TakGgL1nsbc0JAspGijFOo3HoN79xrx8a368fBg=="
}, },
"SQLitePCLRaw.provider.e_sqlite3": { "SQLitePCLRaw.provider.e_sqlite3": {
"type": "Transitive", "type": "Transitive",
"resolved": "2.1.11", "resolved": "2.1.4",
"contentHash": "Y/0ZkR+r0Cg3DQFuCl1RBnv/tmxpIZRU3HUvelPw6MVaKHwYYR8YNvgs0vuNuXCMvlyJ+Fh88U1D4tah1tt6qw==", "contentHash": "CSlb5dUp1FMIkez9Iv5EXzpeq7rHryVNqwJMWnpq87j9zWZexaEMdisDktMsnnrzKM6ahNrsTkjqNodTBPBxtQ==",
"dependencies": { "dependencies": {
"SQLitePCLRaw.core": "2.1.11" "SQLitePCLRaw.core": "2.1.4"
} }
}, },
"System.CodeDom": {
"type": "Transitive",
"resolved": "8.0.0",
"contentHash": "WTlRjL6KWIMr/pAaq3rYqh0TJlzpouaQ/W1eelssHgtlwHAH25jXTkUphTYx9HaIIf7XA6qs/0+YhtLEQRkJ+Q=="
},
"System.ComponentModel.Annotations": {
"type": "Transitive",
"resolved": "4.5.0",
"contentHash": "UxYQ3FGUOtzJ7LfSdnYSFd7+oEv6M8NgUatatIN2HxNtDdlcvFAf+VIq4Of9cDMJEJC0aSRv/x898RYhB4Yppg=="
},
"System.Diagnostics.EventLog": { "System.Diagnostics.EventLog": {
"type": "Transitive", "type": "Transitive",
"resolved": "6.0.0", "resolved": "6.0.0",
"contentHash": "lcyUiXTsETK2ALsZrX+nWuHSIQeazhqPphLfaRxzdGaG93+0kELqpgEHtwWOlQe7+jSFnKwaCAgL4kjeZCQJnw==" "contentHash": "lcyUiXTsETK2ALsZrX+nWuHSIQeazhqPphLfaRxzdGaG93+0kELqpgEHtwWOlQe7+jSFnKwaCAgL4kjeZCQJnw=="
}, },
"System.IO.Hashing": {
"type": "Transitive",
"resolved": "9.0.4",
"contentHash": "WogPvgAFqQORFD8Iyha6RZ+/1QB3dsWRWxbwi8/HHVgiGQ8z0oMWpwe8Kk3Ti+Roe+P6a3sBg+WwBfEsyziZKg=="
},
"System.Management": {
"type": "Transitive",
"resolved": "8.0.0",
"contentHash": "jrK22i5LRzxZCfGb+tGmke2VH7oE0DvcDlJ1HAKYU8cPmD8XnpUT0bYn2Gy98GEhGjtfbR/sxKTVb+dE770pfA==",
"dependencies": {
"System.CodeDom": "8.0.0"
}
},
"System.Memory": {
"type": "Transitive",
"resolved": "4.5.3",
"contentHash": "3oDzvc/zzetpTKWMShs1AADwZjQ/36HnsufHRPcOjyRAAMLDlu2iD33MBI2opxnezcVUtXyqDXXjoFMOU9c7SA=="
},
"System.Reactive": { "System.Reactive": {
"type": "Transitive", "type": "Transitive",
"resolved": "6.0.0", "resolved": "5.0.0",
"contentHash": "31kfaW4ZupZzPsI5PVe77VhnvFF55qgma7KZr/E0iFTs6fmdhhG8j0mgEx620iLTey1EynOkEfnyTjtNEpJzGw==" "contentHash": "erBZjkQHWL9jpasCE/0qKAryzVBJFxGHVBAvgRN1bzM0q2s1S4oYREEEL0Vb+1kA/6BKb5FjUZMp5VXmy+gzkQ=="
},
"System.Reflection.Metadata": {
"type": "Transitive",
"resolved": "1.6.0",
"contentHash": "COC1aiAJjCoA5GBF+QKL2uLqEBew4JsCkQmoHKbN3TlOZKa2fKLz5CpiRQKDz0RsAOEGsVKqOD5bomsXq/4STQ=="
},
"System.Runtime.CompilerServices.Unsafe": {
"type": "Transitive",
"resolved": "4.5.1",
"contentHash": "Zh8t8oqolRaFa9vmOZfdQm/qKejdqz0J9kr7o2Fu0vPeoH3BL1EOXipKWwkWtLT1JPzjByrF19fGuFlNbmPpiw=="
},
"System.Text.Encodings.Web": {
"type": "Transitive",
"resolved": "8.0.0",
"contentHash": "yev/k9GHAEGx2Rg3/tU6MQh4HGBXJs70y7j1LaM1i/ER9po+6nnQ6RRqTJn1E7Xu0fbIFK80Nh5EoODxrbxwBQ=="
}, },
"Verify": { "Verify": {
"type": "Transitive", "type": "Transitive",
"resolved": "31.12.5", "resolved": "29.4.0",
"contentHash": "Luht+42xCM969Scwl7XQ1teZb/7w9XbQg/4eqVQ2WGTWc7mfheENb8PnaX9yJCNROyb1POjQIrQogO+wtf34mg==", "contentHash": "wlqJ6ygXORa3lrAaErTA4EWkDcK9pBG2k5iC/I5F2UpWfyV7aXw/+SwGiWYe4XSk9d7VObe4xi4+0AV9rLRsBw==",
"dependencies": { "dependencies": {
"Argon": "0.33.5", "Argon": "0.28.0",
"DiffEngine": "18.4.1", "DiffEngine": "16.2.1",
"SimpleInfoName": "3.2.0" "SimpleInfoName": "3.1.0",
"System.IO.Hashing": "9.0.4"
} }
}, },
"xunit.abstractions": { "xunit.abstractions": {
@@ -279,7 +352,7 @@
"dependencies": { "dependencies": {
"Newtonsoft.Json.Schema": "[4.0.1, )", "Newtonsoft.Json.Schema": "[4.0.1, )",
"Speckle.Objects": "[1.0.0, )", "Speckle.Objects": "[1.0.0, )",
"System.CommandLine": "[2.0.0-beta4.22272.1, 2.0.0-beta4.22272.1]" "System.CommandLine": "[2.0.0-beta4.22272.1, )"
} }
}, },
"speckle.objects": { "speckle.objects": {
@@ -291,10 +364,10 @@
"speckle.sdk": { "speckle.sdk": {
"type": "Project", "type": "Project",
"dependencies": { "dependencies": {
"GraphQL.Client": "[6.1.0, )", "GraphQL.Client": "[6.0.0, )",
"Microsoft.Data.Sqlite": "[10.0.0, )", "Microsoft.Data.Sqlite": "[7.0.5, )",
"Microsoft.Extensions.DependencyInjection": "[10.0.0, )", "Microsoft.Extensions.DependencyInjection.Abstractions": "[2.2.0, )",
"Microsoft.Extensions.Logging": "[10.0.0, )", "Microsoft.Extensions.Logging": "[2.2.0, )",
"Speckle.DoubleNumerics": "[4.1.0, )", "Speckle.DoubleNumerics": "[4.1.0, )",
"Speckle.Newtonsoft.Json": "[13.0.2, )", "Speckle.Newtonsoft.Json": "[13.0.2, )",
"Speckle.Sdk.Dependencies": "[1.0.0, )" "Speckle.Sdk.Dependencies": "[1.0.0, )"
@@ -309,62 +382,68 @@
"Moq": "[4.20.72, )", "Moq": "[4.20.72, )",
"Speckle.Sdk": "[1.0.0, )", "Speckle.Sdk": "[1.0.0, )",
"Verify.Quibble": "[2.1.1, )", "Verify.Quibble": "[2.1.1, )",
"Verify.Xunit": "[31.12.5, )" "Verify.Xunit": "[29.4.0, )"
} }
}, },
"speckle.sdk.tests.integration": { "speckle.sdk.tests.integration": {
"type": "Project", "type": "Project",
"dependencies": { "dependencies": {
"AwesomeAssertions": "[9.4.0, )", "AwesomeAssertions": "[8.1.0, )",
"Microsoft.Extensions.DependencyInjection": "[10.0.6, )", "Microsoft.Extensions.DependencyInjection": "[2.2.0, )",
"Microsoft.NET.Test.Sdk": "[18.3.0, )", "Microsoft.NET.Test.Sdk": "[17.13.0, )",
"Speckle.Sdk": "[1.0.0, )", "Speckle.Sdk": "[1.0.0, )",
"Speckle.Sdk.Testing": "[1.0.0, )", "Speckle.Sdk.Testing": "[1.0.0, )",
"altcover": "[9.0.102, )", "altcover": "[9.0.1, )",
"xunit": "[2.9.3, )", "xunit": "[2.9.3, )",
"xunit.runner.visualstudio": "[3.1.5, )" "xunit.runner.visualstudio": "[3.0.2, )"
} }
}, },
"GraphQL.Client": { "GraphQL.Client": {
"type": "CentralTransitive", "type": "CentralTransitive",
"requested": "[6.1.0, )", "requested": "[6.0.0, )",
"resolved": "6.1.0", "resolved": "6.0.0",
"contentHash": "oKliAxtNuZDMxO9079mjSbwA0YwhjXBzVnVPuNZ3HI4OllO++CcOLT30l90mM/fxCAMaa8GU4ZYMwD9YjLkyiw==", "contentHash": "8yPNBbuVBpTptivyAlak4GZvbwbUcjeQTL4vN1HKHRuOykZ4r7l5fcLS6vpyPyLn0x8FsL31xbOIKyxbmR9rbA==",
"dependencies": { "dependencies": {
"GraphQL.Client.Abstractions": "6.1.0", "GraphQL.Client.Abstractions": "6.0.0",
"GraphQL.Client.Abstractions.Websocket": "6.1.0", "GraphQL.Client.Abstractions.Websocket": "6.0.0",
"System.Reactive": "6.0.0" "System.Reactive": "5.0.0"
} }
}, },
"Microsoft.Data.Sqlite": { "Microsoft.Data.Sqlite": {
"type": "CentralTransitive", "type": "CentralTransitive",
"requested": "[7.0.5, )", "requested": "[7.0.5, )",
"resolved": "10.0.0", "resolved": "7.0.5",
"contentHash": "I/azQ5WjwoLvSlTyDydkhARPSjYJN8jkXRjR5D92OeyTLbTrQ1K93rgf6XU+HYWHZA6lBI9SUOfl69OqEHb4ow==", "contentHash": "KGxbPeWsQMnmQy43DSBxAFtHz3l2JX8EWBSGUCvT3CuZ8KsuzbkqMIJMDOxWtG8eZSoCDI04aiVQjWuuV8HmSw==",
"dependencies": { "dependencies": {
"Microsoft.Data.Sqlite.Core": "10.0.0", "Microsoft.Data.Sqlite.Core": "7.0.5",
"SQLitePCLRaw.bundle_e_sqlite3": "2.1.11", "SQLitePCLRaw.bundle_e_sqlite3": "2.1.4"
"SQLitePCLRaw.core": "2.1.11"
} }
}, },
"Microsoft.Extensions.DependencyInjection": { "Microsoft.Extensions.DependencyInjection": {
"type": "CentralTransitive", "type": "CentralTransitive",
"requested": "[10.0.6, )", "requested": "[2.2.0, )",
"resolved": "10.0.6", "resolved": "2.2.0",
"contentHash": "poUvwtf92bEs8uBH3aRRs/ZgiAw+Z485EU7TtVPBt//MmD0uMPERe7+v3Ur7lpD8XgIEDL9sDoTBcW1LMG97CQ==", "contentHash": "MZtBIwfDFork5vfjpJdG5g8wuJFt7d/y3LOSVVtDK/76wlbtz6cjltfKHqLx2TKVqTj5/c41t77m1+h20zqtPA==",
"dependencies": { "dependencies": {
"Microsoft.Extensions.DependencyInjection.Abstractions": "10.0.6" "Microsoft.Extensions.DependencyInjection.Abstractions": "2.2.0"
} }
}, },
"Microsoft.Extensions.DependencyInjection.Abstractions": {
"type": "CentralTransitive",
"requested": "[2.2.0, )",
"resolved": "2.2.0",
"contentHash": "f9hstgjVmr6rmrfGSpfsVOl2irKAgr1QjrSi3FgnS7kulxband50f2brRLwySAQTADPZeTdow0mpSMcoAdadCw=="
},
"Microsoft.Extensions.Logging": { "Microsoft.Extensions.Logging": {
"type": "CentralTransitive", "type": "CentralTransitive",
"requested": "[10.0.6, )", "requested": "[2.2.0, )",
"resolved": "10.0.0", "resolved": "2.2.0",
"contentHash": "BStFkd5CcnEtarlcgYDBcFzGYCuuNMzPs02wN3WBsOFoYIEmYoUdAiU+au6opzoqfTYJsMTW00AeqDdnXH2CvA==", "contentHash": "Nxqhadc9FCmFHzU+fz3oc8sFlE6IadViYg8dfUdGzJZ2JUxnCsRghBhhOWdM4B2zSZqEc+0BjliBh/oNdRZuig==",
"dependencies": { "dependencies": {
"Microsoft.Extensions.DependencyInjection": "10.0.0", "Microsoft.Extensions.Configuration.Binder": "2.2.0",
"Microsoft.Extensions.Logging.Abstractions": "10.0.0", "Microsoft.Extensions.DependencyInjection.Abstractions": "2.2.0",
"Microsoft.Extensions.Options": "10.0.0" "Microsoft.Extensions.Logging.Abstractions": "2.2.0",
"Microsoft.Extensions.Options": "2.2.0"
} }
}, },
"Moq": { "Moq": {
@@ -399,10 +478,19 @@
}, },
"System.CommandLine": { "System.CommandLine": {
"type": "CentralTransitive", "type": "CentralTransitive",
"requested": "[2.0.0-beta4.22272.1, 2.0.0-beta4.22272.1]", "requested": "[2.0.0-beta4.22272.1, )",
"resolved": "2.0.0-beta4.22272.1", "resolved": "2.0.0-beta4.22272.1",
"contentHash": "1uqED/q2H0kKoLJ4+hI2iPSBSEdTuhfCYADeJrAqERmiGQ2NNacYKRNEQ+gFbU4glgVyK8rxI+ZOe1onEtr/Pg==" "contentHash": "1uqED/q2H0kKoLJ4+hI2iPSBSEdTuhfCYADeJrAqERmiGQ2NNacYKRNEQ+gFbU4glgVyK8rxI+ZOe1onEtr/Pg=="
}, },
"System.Text.Json": {
"type": "CentralTransitive",
"requested": "[8.0.5, )",
"resolved": "8.0.4",
"contentHash": "bAkhgDJ88XTsqczoxEMliSrpijKZHhbJQldhAmObj/RbrN3sU5dcokuXmWJWsdQAhiMJ9bTayWsL1C9fbbCRhw==",
"dependencies": {
"System.Text.Encodings.Web": "8.0.0"
}
},
"Verify.Quibble": { "Verify.Quibble": {
"type": "CentralTransitive", "type": "CentralTransitive",
"requested": "[2.1.1, )", "requested": "[2.1.1, )",
@@ -410,19 +498,21 @@
"contentHash": "Z8bVwFICa3Dog6Mcnx0wlrn4Y+CFpQXx1f+ijfLn6/v4q00q+jLm9Gu/nVyUFuc75cjn6ieI08UrqXKcR9fTYw==", "contentHash": "Z8bVwFICa3Dog6Mcnx0wlrn4Y+CFpQXx1f+ijfLn6/v4q00q+jLm9Gu/nVyUFuc75cjn6ieI08UrqXKcR9fTYw==",
"dependencies": { "dependencies": {
"Quibble": "0.3.1", "Quibble": "0.3.1",
"System.Text.Json": "8.0.4",
"Verify": "26.1.1" "Verify": "26.1.1"
} }
}, },
"Verify.Xunit": { "Verify.Xunit": {
"type": "CentralTransitive", "type": "CentralTransitive",
"requested": "[31.12.5, )", "requested": "[29.4.0, )",
"resolved": "31.12.5", "resolved": "29.4.0",
"contentHash": "i1d2bPonW/3ZzzEZYTWgv8mjPyRWpKaPsIxxp/kYK7Nq8ZeSEmkLA5BkGwInDlybHkxsviFu+s8iF20y+yUcZw==", "contentHash": "P8HYW7aromKGm90Cgx0XKL3qKKmYZHDwHTQfBfDCCPnhNlVWevJzrpuUQ0+3vTVdRAtsts2a1OE/tD+3yjJbHA==",
"dependencies": { "dependencies": {
"Argon": "0.33.5", "Argon": "0.28.0",
"DiffEngine": "18.4.1", "DiffEngine": "16.2.1",
"SimpleInfoName": "3.2.0", "SimpleInfoName": "3.1.0",
"Verify": "31.12.5", "System.IO.Hashing": "9.0.4",
"Verify": "29.4.0",
"xunit.abstractions": "2.0.3", "xunit.abstractions": "2.0.3",
"xunit.extensibility.execution": "2.9.3" "xunit.extensibility.execution": "2.9.3"
} }
@@ -1,4 +1,4 @@
using AwesomeAssertions; using FluentAssertions;
using Speckle.Objects.Geometry; using Speckle.Objects.Geometry;
using Speckle.Sdk.Common; using Speckle.Sdk.Common;
@@ -1,4 +1,4 @@
using AwesomeAssertions; using FluentAssertions;
using Speckle.Objects.Geometry; using Speckle.Objects.Geometry;
using Speckle.Sdk.Common; using Speckle.Sdk.Common;
@@ -1,4 +1,4 @@
using AwesomeAssertions; using FluentAssertions;
using Speckle.Objects.Geometry; using Speckle.Objects.Geometry;
using Speckle.Sdk.Common; using Speckle.Sdk.Common;
@@ -1,5 +1,5 @@
using System.Diagnostics.CodeAnalysis; using System.Diagnostics.CodeAnalysis;
using AwesomeAssertions; using FluentAssertions;
using Speckle.DoubleNumerics; using Speckle.DoubleNumerics;
using Speckle.Objects.Geometry; using Speckle.Objects.Geometry;
using Speckle.Objects.Other; using Speckle.Objects.Other;
@@ -97,7 +97,7 @@ public class PointTests
new(0, 0, 0, Units.Feet), new(0, 0, 0, Units.Feet),
]; ];
public static TheoryData<Point> PointTestCases() => [.. PointTestData]; public static TheoryData<Point> PointTestCases() => new(PointTestData);
public static TheoryData<Matrix4x4, Point> TransformTestCases() public static TheoryData<Matrix4x4, Point> TransformTestCases()
{ {
@@ -1,4 +1,4 @@
using AwesomeAssertions; using FluentAssertions;
using Speckle.DoubleNumerics; using Speckle.DoubleNumerics;
using Speckle.Objects.Other; using Speckle.Objects.Other;
using Speckle.Sdk.Common; using Speckle.Sdk.Common;
@@ -1,4 +1,4 @@
using AwesomeAssertions; using FluentAssertions;
using Speckle.DoubleNumerics; using Speckle.DoubleNumerics;
using Speckle.Objects.Geometry; using Speckle.Objects.Geometry;
@@ -1,5 +1,5 @@
using System.Drawing; using System.Drawing;
using AwesomeAssertions; using FluentAssertions;
using Speckle.DoubleNumerics; using Speckle.DoubleNumerics;
using Speckle.Newtonsoft.Json; using Speckle.Newtonsoft.Json;
using Speckle.Sdk.Host; using Speckle.Sdk.Host;
@@ -1,4 +1,4 @@
using AwesomeAssertions; using FluentAssertions;
using Speckle.Objects.Geometry; using Speckle.Objects.Geometry;
using Speckle.Objects.Geometry.Autocad; using Speckle.Objects.Geometry.Autocad;
using Speckle.Sdk.Host; using Speckle.Sdk.Host;
@@ -42,5 +42,5 @@ public static class ObjectsTestData
}; };
} }
public static TheoryData<Base> TheoryData => [.. Data()]; public static TheoryData<Base> TheoryData => new(Data());
} }
@@ -1,6 +1,6 @@
<Project Sdk="Microsoft.NET.Sdk"> <Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup> <PropertyGroup>
<TargetFrameworks>net10.0;net8.0</TargetFrameworks> <TargetFramework>net8.0</TargetFramework>
<IsTestProject>true</IsTestProject> <IsTestProject>true</IsTestProject>
<PolySharpExcludeGeneratedTypes>System.Runtime.CompilerServices.IsExternalInit</PolySharpExcludeGeneratedTypes> <PolySharpExcludeGeneratedTypes>System.Runtime.CompilerServices.IsExternalInit</PolySharpExcludeGeneratedTypes>
</PropertyGroup> </PropertyGroup>
@@ -1,4 +1,4 @@
using AwesomeAssertions; using FluentAssertions;
using Speckle.Objects.Geometry; using Speckle.Objects.Geometry;
using Speckle.Objects.Utils; using Speckle.Objects.Utils;
using Speckle.Sdk.Common; using Speckle.Sdk.Common;
@@ -71,7 +71,7 @@ public class MeshTriangulationHelperTests
Mesh mesh = new() Mesh mesh = new()
{ {
vertices = vertices, vertices = vertices,
faces = faces.ToList(), faces = new List<int>(faces),
units = Units.Meters, units = Units.Meters,
}; };
@@ -102,7 +102,7 @@ public class MeshTriangulationHelperTests
Mesh mesh = new() Mesh mesh = new()
{ {
vertices = vertices, vertices = vertices,
faces = faces, faces = new List<int>(faces),
units = Units.Meters, units = Units.Meters,
}; };
@@ -1,5 +1,5 @@
using System.Collections; using System.Collections;
using AwesomeAssertions; using FluentAssertions;
using Speckle.Objects.Data; using Speckle.Objects.Data;
using Speckle.Objects.Geometry; using Speckle.Objects.Geometry;
using Speckle.Sdk.Common; using Speckle.Sdk.Common;
@@ -1,404 +1,27 @@
{ {
"version": 2, "version": 2,
"dependencies": { "dependencies": {
"net10.0": {
"altcover": {
"type": "Direct",
"requested": "[9.0.102, )",
"resolved": "9.0.102",
"contentHash": "q3Rf5t0M9kXlcO5qhsaAe6NrFSNd5enrhKmF/Ezgmomqw34PbUTbRSYjSDNhS3YGDyUrPTkyPn14EfLDJWztcA=="
},
"AwesomeAssertions": {
"type": "Direct",
"requested": "[9.4.0, )",
"resolved": "9.4.0",
"contentHash": "dJxkWiQ8D+xT6Gr2sSL83+Mar+Vpy2JTcUPxFcckpPJ8VYBfSgnk+zqpS6t7kcGnjz8NLyF14qfuoL4bKzzoew=="
},
"Microsoft.NET.Test.Sdk": {
"type": "Direct",
"requested": "[18.3.0, )",
"resolved": "18.3.0",
"contentHash": "xW3kXuWRQtgoxJp4J+gdhHSQyK+6Wb/AZDSd7lMvuMRYlZ1tnpkojyfZlWilB5G4dmZ0Y0ZxU/M23TlubndNkw==",
"dependencies": {
"Microsoft.CodeCoverage": "18.3.0",
"Microsoft.TestPlatform.TestHost": "18.3.0"
}
},
"Microsoft.SourceLink.GitHub": {
"type": "Direct",
"requested": "[8.0.0, )",
"resolved": "8.0.0",
"contentHash": "G5q7OqtwIyGTkeIOAc3u2ZuV/kicQaec5EaRnc0pIeSnh9LUjj+PYQrJYBURvDt7twGl2PKA7nSN0kz1Zw5bnQ==",
"dependencies": {
"Microsoft.Build.Tasks.Git": "8.0.0",
"Microsoft.SourceLink.Common": "8.0.0"
}
},
"PolySharp": {
"type": "Direct",
"requested": "[1.15.0, )",
"resolved": "1.15.0",
"contentHash": "FbU0El+EEjdpuIX4iDbeS7ki1uzpJPx8vbqOzEtqnl1GZeAGJfq+jCbxeJL2y0EPnUNk8dRnnqR2xnYXg9Tf+g=="
},
"Speckle.InterfaceGenerator": {
"type": "Direct",
"requested": "[0.9.6, )",
"resolved": "0.9.6",
"contentHash": "HKH7tYrYYlCK1ct483hgxERAdVdMtl7gUKW9ijWXxA1UsYR4Z+TrRHYmzZ9qmpu1NnTycSrp005NYM78GDKV1w=="
},
"xunit.assert": {
"type": "Direct",
"requested": "[2.9.3, )",
"resolved": "2.9.3",
"contentHash": "/Kq28fCE7MjOV42YLVRAJzRF0WmEqsmflm0cfpMjGtzQ2lR5mYVj1/i0Y8uDAOLczkL3/jArrwehfMD0YogMAA=="
},
"xunit.runner.visualstudio": {
"type": "Direct",
"requested": "[3.1.5, )",
"resolved": "3.1.5",
"contentHash": "tKi7dSTwP4m5m9eXPM2Ime4Kn7xNf4x4zT9sdLO/G4hZVnQCRiMTWoSZqI/pYTVeI27oPPqHBKYI/DjJ9GsYgA=="
},
"Argon": {
"type": "Transitive",
"resolved": "0.33.5",
"contentHash": "J6821zxO+EqMzO9C/V5uiWc2eBGyzN7Z8Z0xq3Q1/e6IxYcHDA32OgiZX5/7/f8rVPQQa7aYtm6f0UfnrgKNBg=="
},
"Castle.Core": {
"type": "Transitive",
"resolved": "5.1.1",
"contentHash": "rpYtIczkzGpf+EkZgDr9CClTdemhsrwA/W5hMoPjLkRFnXzH44zDLoovXeKtmxb1ykXK9aJVODSpiJml8CTw2g==",
"dependencies": {
"System.Diagnostics.EventLog": "6.0.0"
}
},
"DiffEngine": {
"type": "Transitive",
"resolved": "18.4.1",
"contentHash": "9/E4N4auQW4iOKPxP6MpGihpuw0uaxfiLLJfraKrqv02cG2LzVx3ocFwIss70mQFwAolrq58zv5NHwMaqT3+3A==",
"dependencies": {
"EmptyFiles": "8.17.2"
}
},
"EmptyFiles": {
"type": "Transitive",
"resolved": "8.17.2",
"contentHash": "2oyDVmM/DU3g0h2kqcV05zjOUfo9AdwPoduIGh0LZL6nXqSN4qhZna2M/aJoYiQrmIznJ52wxYCmxDnWaRZ1JQ=="
},
"FSharp.Core": {
"type": "Transitive",
"resolved": "7.0.300",
"contentHash": "8vvItREJ1l5lcp3vBCSJ1mFevVAhR48I34DuF/EoUa7o1KlFpQpagyuZkVYMAsHPIjdp47ZxM9sI4eqeXaeWkA=="
},
"GraphQL.Client.Abstractions": {
"type": "Transitive",
"resolved": "6.1.0",
"contentHash": "Za31wjKLEeROZYJmp0Lmj/TLQ1Yw6x6QM0JHABcuyMC3OSopr34ufayrtdxtbL1a3129FTVFKOFC0hcooSQoJQ==",
"dependencies": {
"GraphQL.Primitives": "6.1.0"
}
},
"GraphQL.Client.Abstractions.Websocket": {
"type": "Transitive",
"resolved": "6.1.0",
"contentHash": "PjdG3q4MzPsa5NiBOBhuIRMRTo59der5bFmX2r1gSS3RIjytwpooxF2RffFCBh16sqbwuH1/dllDcNG+EJt1qA==",
"dependencies": {
"GraphQL.Client.Abstractions": "6.1.0"
}
},
"GraphQL.Primitives": {
"type": "Transitive",
"resolved": "6.1.0",
"contentHash": "L8yQ70Wd9p8hMJvnmpgyZfr2R6Q7S0/lPyEBI1tacJa5XzsoJSVtHdmfsMaHyufwk03hlUsBXgNerAs66kxHdA=="
},
"Microsoft.Build.Tasks.Git": {
"type": "Transitive",
"resolved": "8.0.0",
"contentHash": "bZKfSIKJRXLTuSzLudMFte/8CempWjVamNUR5eHJizsy+iuOuO/k2gnh7W0dHJmYY0tBf+gUErfluCv5mySAOQ=="
},
"Microsoft.CodeCoverage": {
"type": "Transitive",
"resolved": "18.3.0",
"contentHash": "23BNy/vziREC20Wwhb50K7+kZe0m07KlLWDQv4qjJ9tt3QjpDpDIqJFrhYHmMEo9xDkuSp55U/8h4bMF7MiB+g=="
},
"Microsoft.Data.Sqlite.Core": {
"type": "Transitive",
"resolved": "10.0.0",
"contentHash": "wPKG/Ym6tSMCo06UOZXzVfeFGzawnOZrTba/R3PfK+RhNuNELZ9I7nFns4WGTtv2kKlrlmmErgJ+kgTXHaNdHg==",
"dependencies": {
"SQLitePCLRaw.core": "2.1.11"
}
},
"Microsoft.Extensions.DependencyInjection.Abstractions": {
"type": "Transitive",
"resolved": "10.0.0",
"contentHash": "L3AdmZ1WOK4XXT5YFPEwyt0ep6l8lGIPs7F5OOBZc77Zqeo01Of7XXICy47628sdVl0v/owxYJTe86DTgFwKCA=="
},
"Microsoft.Extensions.Logging.Abstractions": {
"type": "Transitive",
"resolved": "10.0.0",
"contentHash": "FU/IfjDfwaMuKr414SSQNTIti/69bHEMb+QKrskRb26oVqpx3lNFXMjs/RC9ZUuhBhcwDM2BwOgoMw+PZ+beqQ==",
"dependencies": {
"Microsoft.Extensions.DependencyInjection.Abstractions": "10.0.0"
}
},
"Microsoft.Extensions.Options": {
"type": "Transitive",
"resolved": "10.0.0",
"contentHash": "8oCAgXOow5XDrY9HaXX1QmH3ORsyZO/ANVHBlhLyCeWTH5Sg4UuqZeOTWJi6484M+LqSx0RqQXDJtdYy2BNiLQ==",
"dependencies": {
"Microsoft.Extensions.DependencyInjection.Abstractions": "10.0.0",
"Microsoft.Extensions.Primitives": "10.0.0"
}
},
"Microsoft.Extensions.Primitives": {
"type": "Transitive",
"resolved": "10.0.0",
"contentHash": "inRnbpCS0nwO/RuoZIAqxQUuyjaknOOnCEZB55KSMMjRhl0RQDttSmLSGsUJN3RQ3ocf5NDLFd2mOQViHqMK5w=="
},
"Microsoft.SourceLink.Common": {
"type": "Transitive",
"resolved": "8.0.0",
"contentHash": "dk9JPxTCIevS75HyEQ0E4OVAFhB2N+V9ShCXf8Q6FkUQZDkgLI12y679Nym1YqsiSysuQskT7Z+6nUf3yab6Vw=="
},
"Microsoft.TestPlatform.ObjectModel": {
"type": "Transitive",
"resolved": "18.3.0",
"contentHash": "AEIEX2aWdPO9XbtR96eBaJxmXRD9vaI9uQ1T/JbPEKlTAZwYx0ZrMzKyULMdh/HH9Sg03kXCoN7LszQ90o6nPQ=="
},
"Microsoft.TestPlatform.TestHost": {
"type": "Transitive",
"resolved": "18.3.0",
"contentHash": "twmsoelXnp1uWMU3VGip9f0Jr1mZ0PZqgJdF35CIrdYgYrkHIJMV1m8uKyhcdjLdsQDESHAgkR7KhS9i1qpJag==",
"dependencies": {
"Microsoft.TestPlatform.ObjectModel": "18.3.0",
"Newtonsoft.Json": "13.0.3"
}
},
"Newtonsoft.Json": {
"type": "Transitive",
"resolved": "13.0.3",
"contentHash": "HrC5BXdl00IP9zeV+0Z848QWPAoCr9P3bDEZguI+gkLcBKAOxix/tLEAAHC+UvDNPv4a2d18lOReHMOagPa+zQ=="
},
"Quibble": {
"type": "Transitive",
"resolved": "0.3.1",
"contentHash": "LD6bz2p+4O/BQnmD4mqFZrmdN/IjsPo1wUvfmcH46Q05ng+dyMLl3d2ylj0x412F4fpJEtm0Z3EaCAx4FqgNuQ==",
"dependencies": {
"FSharp.Core": "7.0.300"
}
},
"SimpleInfoName": {
"type": "Transitive",
"resolved": "3.2.0",
"contentHash": "K8ivHRbPWfncijk62Dan/r/z55gwq3aFzqB6yFlD9X0bbpIaacHyHH2cpcIdz0FECUpERUZTwxts0z4gRWpQpA=="
},
"SQLitePCLRaw.bundle_e_sqlite3": {
"type": "Transitive",
"resolved": "2.1.11",
"contentHash": "DC4nA7yWnf4UZdgJDF+9Mus4/cb0Y3Sfgi3gDnAoKNAIBwzkskNAbNbyu+u4atT0ruVlZNJfwZmwiEwE5oz9LQ==",
"dependencies": {
"SQLitePCLRaw.lib.e_sqlite3": "2.1.11",
"SQLitePCLRaw.provider.e_sqlite3": "2.1.11"
}
},
"SQLitePCLRaw.core": {
"type": "Transitive",
"resolved": "2.1.11",
"contentHash": "PK0GLFkfhZzLQeR3PJf71FmhtHox+U3vcY6ZtswoMjrefkB9k6ErNJEnwXqc5KgXDSjige2XXrezqS39gkpQKA=="
},
"SQLitePCLRaw.lib.e_sqlite3": {
"type": "Transitive",
"resolved": "2.1.11",
"contentHash": "Ev2ytaXiOlWZ4b3R67GZBsemTINslLD1DCJr2xiacpn4tbapu0Q4dHEzSvZSMnVWeE5nlObU3VZN2p81q3XOYQ=="
},
"SQLitePCLRaw.provider.e_sqlite3": {
"type": "Transitive",
"resolved": "2.1.11",
"contentHash": "Y/0ZkR+r0Cg3DQFuCl1RBnv/tmxpIZRU3HUvelPw6MVaKHwYYR8YNvgs0vuNuXCMvlyJ+Fh88U1D4tah1tt6qw==",
"dependencies": {
"SQLitePCLRaw.core": "2.1.11"
}
},
"System.Diagnostics.EventLog": {
"type": "Transitive",
"resolved": "6.0.0",
"contentHash": "lcyUiXTsETK2ALsZrX+nWuHSIQeazhqPphLfaRxzdGaG93+0kELqpgEHtwWOlQe7+jSFnKwaCAgL4kjeZCQJnw=="
},
"System.Reactive": {
"type": "Transitive",
"resolved": "6.0.0",
"contentHash": "31kfaW4ZupZzPsI5PVe77VhnvFF55qgma7KZr/E0iFTs6fmdhhG8j0mgEx620iLTey1EynOkEfnyTjtNEpJzGw=="
},
"Verify": {
"type": "Transitive",
"resolved": "31.12.5",
"contentHash": "Luht+42xCM969Scwl7XQ1teZb/7w9XbQg/4eqVQ2WGTWc7mfheENb8PnaX9yJCNROyb1POjQIrQogO+wtf34mg==",
"dependencies": {
"Argon": "0.33.5",
"DiffEngine": "18.4.1",
"SimpleInfoName": "3.2.0"
}
},
"xunit.abstractions": {
"type": "Transitive",
"resolved": "2.0.3",
"contentHash": "pot1I4YOxlWjIb5jmwvvQNbTrZ3lJQ+jUGkGjWE3hEFM0l5gOnBWS+H3qsex68s5cO52g+44vpGzhAt+42vwKg=="
},
"xunit.extensibility.core": {
"type": "Transitive",
"resolved": "2.9.3",
"contentHash": "kf3si0YTn2a8J8eZNb+zFpwfoyvIrQ7ivNk5ZYA5yuYk1bEtMe4DxJ2CF/qsRgmEnDr7MnW1mxylBaHTZ4qErA==",
"dependencies": {
"xunit.abstractions": "2.0.3"
}
},
"xunit.extensibility.execution": {
"type": "Transitive",
"resolved": "2.9.3",
"contentHash": "yMb6vMESlSrE3Wfj7V6cjQ3S4TXdXpRqYeNEI3zsX31uTsGMJjEw6oD5F5u1cHnMptjhEECnmZSsPxB6ChZHDQ==",
"dependencies": {
"xunit.extensibility.core": "[2.9.3]"
}
},
"speckle.objects": {
"type": "Project",
"dependencies": {
"Speckle.Sdk": "[1.0.0, )"
}
},
"speckle.sdk": {
"type": "Project",
"dependencies": {
"GraphQL.Client": "[6.1.0, )",
"Microsoft.Data.Sqlite": "[10.0.0, )",
"Microsoft.Extensions.DependencyInjection": "[10.0.0, )",
"Microsoft.Extensions.Logging": "[10.0.0, )",
"Speckle.DoubleNumerics": "[4.1.0, )",
"Speckle.Newtonsoft.Json": "[13.0.2, )",
"Speckle.Sdk.Dependencies": "[1.0.0, )"
}
},
"speckle.sdk.dependencies": {
"type": "Project"
},
"speckle.sdk.testing": {
"type": "Project",
"dependencies": {
"Moq": "[4.20.72, )",
"Speckle.Sdk": "[1.0.0, )",
"Verify.Quibble": "[2.1.1, )",
"Verify.Xunit": "[31.12.5, )"
}
},
"GraphQL.Client": {
"type": "CentralTransitive",
"requested": "[6.1.0, )",
"resolved": "6.1.0",
"contentHash": "oKliAxtNuZDMxO9079mjSbwA0YwhjXBzVnVPuNZ3HI4OllO++CcOLT30l90mM/fxCAMaa8GU4ZYMwD9YjLkyiw==",
"dependencies": {
"GraphQL.Client.Abstractions": "6.1.0",
"GraphQL.Client.Abstractions.Websocket": "6.1.0",
"System.Reactive": "6.0.0"
}
},
"Microsoft.Data.Sqlite": {
"type": "CentralTransitive",
"requested": "[7.0.5, )",
"resolved": "10.0.0",
"contentHash": "I/azQ5WjwoLvSlTyDydkhARPSjYJN8jkXRjR5D92OeyTLbTrQ1K93rgf6XU+HYWHZA6lBI9SUOfl69OqEHb4ow==",
"dependencies": {
"Microsoft.Data.Sqlite.Core": "10.0.0",
"SQLitePCLRaw.bundle_e_sqlite3": "2.1.11",
"SQLitePCLRaw.core": "2.1.11"
}
},
"Microsoft.Extensions.DependencyInjection": {
"type": "CentralTransitive",
"requested": "[10.0.6, )",
"resolved": "10.0.0",
"contentHash": "f0RBabswJq+gRu5a+hWIobrLWiUYPKMhCD9WO3sYBAdSy3FFH14LMvLVFZc2kPSCimBLxSuitUhsd6tb0TAY6A==",
"dependencies": {
"Microsoft.Extensions.DependencyInjection.Abstractions": "10.0.0"
}
},
"Microsoft.Extensions.Logging": {
"type": "CentralTransitive",
"requested": "[10.0.6, )",
"resolved": "10.0.0",
"contentHash": "BStFkd5CcnEtarlcgYDBcFzGYCuuNMzPs02wN3WBsOFoYIEmYoUdAiU+au6opzoqfTYJsMTW00AeqDdnXH2CvA==",
"dependencies": {
"Microsoft.Extensions.DependencyInjection": "10.0.0",
"Microsoft.Extensions.Logging.Abstractions": "10.0.0",
"Microsoft.Extensions.Options": "10.0.0"
}
},
"Moq": {
"type": "CentralTransitive",
"requested": "[4.20.72, )",
"resolved": "4.20.72",
"contentHash": "EA55cjyNn8eTNWrgrdZJH5QLFp2L43oxl1tlkoYUKIE9pRwL784OWiTXeCV5ApS+AMYEAlt7Fo03A2XfouvHmQ==",
"dependencies": {
"Castle.Core": "5.1.1"
}
},
"Speckle.DoubleNumerics": {
"type": "CentralTransitive",
"requested": "[4.1.0, )",
"resolved": "4.1.0",
"contentHash": "20DtS+FsDRsOD9+AU3TwNFZ0qrKo5f6f7B5ZR9wStsIHHHC9k7DpjbCvuNtmnSjx54MD+TJC7wV2f5iyGVPj1A=="
},
"Speckle.Newtonsoft.Json": {
"type": "CentralTransitive",
"requested": "[13.0.2, )",
"resolved": "13.0.2",
"contentHash": "g1BejUZwax5PRfL6xHgLEK23sqHWOgOj9hE7RvfRRlN00AGt8GnPYt8HedSK7UB3HiRW8zCA9Pn0iiYxCK24BA=="
},
"Verify.Quibble": {
"type": "CentralTransitive",
"requested": "[2.1.1, )",
"resolved": "2.1.1",
"contentHash": "Z8bVwFICa3Dog6Mcnx0wlrn4Y+CFpQXx1f+ijfLn6/v4q00q+jLm9Gu/nVyUFuc75cjn6ieI08UrqXKcR9fTYw==",
"dependencies": {
"Quibble": "0.3.1",
"Verify": "26.1.1"
}
},
"Verify.Xunit": {
"type": "CentralTransitive",
"requested": "[31.12.5, )",
"resolved": "31.12.5",
"contentHash": "i1d2bPonW/3ZzzEZYTWgv8mjPyRWpKaPsIxxp/kYK7Nq8ZeSEmkLA5BkGwInDlybHkxsviFu+s8iF20y+yUcZw==",
"dependencies": {
"Argon": "0.33.5",
"DiffEngine": "18.4.1",
"SimpleInfoName": "3.2.0",
"Verify": "31.12.5",
"xunit.abstractions": "2.0.3",
"xunit.extensibility.execution": "2.9.3"
}
}
},
"net8.0": { "net8.0": {
"altcover": { "altcover": {
"type": "Direct", "type": "Direct",
"requested": "[9.0.102, )", "requested": "[9.0.1, )",
"resolved": "9.0.102", "resolved": "9.0.1",
"contentHash": "q3Rf5t0M9kXlcO5qhsaAe6NrFSNd5enrhKmF/Ezgmomqw34PbUTbRSYjSDNhS3YGDyUrPTkyPn14EfLDJWztcA==" "contentHash": "aadciFNDT5bnylaYUkKal+s5hF7yU/lmZxImQWAlk1438iPqK1Uf79H5ylELpyLIU49HL5ql+tnWBihp3WVLCA=="
}, },
"AwesomeAssertions": { "AwesomeAssertions": {
"type": "Direct", "type": "Direct",
"requested": "[9.4.0, )", "requested": "[8.1.0, )",
"resolved": "9.4.0", "resolved": "8.1.0",
"contentHash": "dJxkWiQ8D+xT6Gr2sSL83+Mar+Vpy2JTcUPxFcckpPJ8VYBfSgnk+zqpS6t7kcGnjz8NLyF14qfuoL4bKzzoew==" "contentHash": "IfNC4cpXPi9tclWvuNO9lfkuIxJsUTLTS1NXto55jDrAUQJYl0zLI9ByISrfkbBE2Xtg+IWaAXQ6jnUx3anDuw=="
}, },
"Microsoft.NET.Test.Sdk": { "Microsoft.NET.Test.Sdk": {
"type": "Direct", "type": "Direct",
"requested": "[18.3.0, )", "requested": "[17.13.0, )",
"resolved": "18.3.0", "resolved": "17.13.0",
"contentHash": "xW3kXuWRQtgoxJp4J+gdhHSQyK+6Wb/AZDSd7lMvuMRYlZ1tnpkojyfZlWilB5G4dmZ0Y0ZxU/M23TlubndNkw==", "contentHash": "W19wCPizaIC9Zh47w8wWI/yxuqR7/dtABwOrc8r2jX/8mUNxM2vw4fXDh+DJTeogxV+KzKwg5jNNGQVwf3LXyA==",
"dependencies": { "dependencies": {
"Microsoft.CodeCoverage": "18.3.0", "Microsoft.CodeCoverage": "17.13.0",
"Microsoft.TestPlatform.TestHost": "18.3.0" "Microsoft.TestPlatform.TestHost": "17.13.0"
} }
}, },
"Microsoft.SourceLink.GitHub": { "Microsoft.SourceLink.GitHub": {
@@ -431,14 +54,14 @@
}, },
"xunit.runner.visualstudio": { "xunit.runner.visualstudio": {
"type": "Direct", "type": "Direct",
"requested": "[3.1.5, )", "requested": "[3.0.2, )",
"resolved": "3.1.5", "resolved": "3.0.2",
"contentHash": "tKi7dSTwP4m5m9eXPM2Ime4Kn7xNf4x4zT9sdLO/G4hZVnQCRiMTWoSZqI/pYTVeI27oPPqHBKYI/DjJ9GsYgA==" "contentHash": "oXbusR6iPq0xlqoikjdLvzh+wQDkMv9If58myz9MEzldS4nIcp442Btgs2sWbYWV+caEluMe2pQCZ0hUZgPiow=="
}, },
"Argon": { "Argon": {
"type": "Transitive", "type": "Transitive",
"resolved": "0.33.5", "resolved": "0.28.0",
"contentHash": "J6821zxO+EqMzO9C/V5uiWc2eBGyzN7Z8Z0xq3Q1/e6IxYcHDA32OgiZX5/7/f8rVPQQa7aYtm6f0UfnrgKNBg==" "contentHash": "78BmoFm8SK733nq4F/SjqNKkXJHdrg/MslvYfNjJX/nM/mEkltHUzPJRjBE9VI/zghsjFPQxMRPEUaqIgg98zg=="
}, },
"Castle.Core": { "Castle.Core": {
"type": "Transitive", "type": "Transitive",
@@ -450,16 +73,17 @@
}, },
"DiffEngine": { "DiffEngine": {
"type": "Transitive", "type": "Transitive",
"resolved": "18.4.1", "resolved": "16.2.1",
"contentHash": "9/E4N4auQW4iOKPxP6MpGihpuw0uaxfiLLJfraKrqv02cG2LzVx3ocFwIss70mQFwAolrq58zv5NHwMaqT3+3A==", "contentHash": "UfMgXClqOGkPNfth210upiTY18LPCgjsfNrh0Olo5qI+QTkkCO6wHSuOwknxJdKtsWoaJ+E132Y2nzD0PiLWRw==",
"dependencies": { "dependencies": {
"EmptyFiles": "8.17.2" "EmptyFiles": "8.9.1",
"System.Management": "8.0.0"
} }
}, },
"EmptyFiles": { "EmptyFiles": {
"type": "Transitive", "type": "Transitive",
"resolved": "8.17.2", "resolved": "8.9.1",
"contentHash": "2oyDVmM/DU3g0h2kqcV05zjOUfo9AdwPoduIGh0LZL6nXqSN4qhZna2M/aJoYiQrmIznJ52wxYCmxDnWaRZ1JQ==" "contentHash": "GbGf+oH/xiI3C5vJ5TnoA4sx7x7LhtOvN00fxihRZJsj40XuXk2TMz/4m26PfNSJj8JMAqo3BUBirjvam+3xkA=="
}, },
"FSharp.Core": { "FSharp.Core": {
"type": "Transitive", "type": "Transitive",
@@ -494,8 +118,8 @@
}, },
"Microsoft.CodeCoverage": { "Microsoft.CodeCoverage": {
"type": "Transitive", "type": "Transitive",
"resolved": "18.3.0", "resolved": "17.13.0",
"contentHash": "23BNy/vziREC20Wwhb50K7+kZe0m07KlLWDQv4qjJ9tt3QjpDpDIqJFrhYHmMEo9xDkuSp55U/8h4bMF7MiB+g==" "contentHash": "9LIUy0y+DvUmEPtbRDw6Bay3rzwqFV8P4efTrK4CZhQle3M/QwLPjISghfcolmEGAPWxuJi6m98ZEfk4VR4Lfg=="
}, },
"Microsoft.Data.Sqlite.Core": { "Microsoft.Data.Sqlite.Core": {
"type": "Transitive", "type": "Transitive",
@@ -505,32 +129,53 @@
"SQLitePCLRaw.core": "2.1.4" "SQLitePCLRaw.core": "2.1.4"
} }
}, },
"Microsoft.Extensions.DependencyInjection.Abstractions": { "Microsoft.Extensions.Configuration": {
"type": "Transitive", "type": "Transitive",
"resolved": "8.0.0", "resolved": "2.2.0",
"contentHash": "cjWrLkJXK0rs4zofsK4bSdg+jhDLTaxrkXu4gS6Y7MAlCvRyNNgwY/lJi5RDlQOnSZweHqoyvgvbdvQsRIW+hg==" "contentHash": "nOP8R1mVb/6mZtm2qgAJXn/LFm/2kMjHDAg/QJLFG6CuWYJtaD3p1BwQhufBVvRzL9ceJ/xF0SQ0qsI2GkDQAA==",
"dependencies": {
"Microsoft.Extensions.Configuration.Abstractions": "2.2.0"
}
},
"Microsoft.Extensions.Configuration.Abstractions": {
"type": "Transitive",
"resolved": "2.2.0",
"contentHash": "65MrmXCziWaQFrI0UHkQbesrX5wTwf9XPjY5yFm/VkgJKFJ5gqvXRoXjIZcf2wLi5ZlwGz/oMYfyURVCWbM5iw==",
"dependencies": {
"Microsoft.Extensions.Primitives": "2.2.0"
}
},
"Microsoft.Extensions.Configuration.Binder": {
"type": "Transitive",
"resolved": "2.2.0",
"contentHash": "vJ9xvOZCnUAIHcGC3SU35r3HKmHTVIeHzo6u/qzlHAqD8m6xv92MLin4oJntTvkpKxVX3vI1GFFkIQtU3AdlsQ==",
"dependencies": {
"Microsoft.Extensions.Configuration": "2.2.0"
}
}, },
"Microsoft.Extensions.Logging.Abstractions": { "Microsoft.Extensions.Logging.Abstractions": {
"type": "Transitive", "type": "Transitive",
"resolved": "8.0.0", "resolved": "2.2.0",
"contentHash": "arDBqTgFCyS0EvRV7O3MZturChstm50OJ0y9bDJvAcmEPJm0FFpFyjU/JLYyStNGGey081DvnQYlncNX5SJJGA==", "contentHash": "B2WqEox8o+4KUOpL7rZPyh6qYjik8tHi2tN8Z9jZkHzED8ElYgZa/h6K+xliB435SqUcWT290Fr2aa8BtZjn8A=="
"dependencies": {
"Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.0"
}
}, },
"Microsoft.Extensions.Options": { "Microsoft.Extensions.Options": {
"type": "Transitive", "type": "Transitive",
"resolved": "8.0.0", "resolved": "2.2.0",
"contentHash": "JOVOfqpnqlVLUzINQ2fox8evY2SKLYJ3BV8QDe/Jyp21u1T7r45x/R/5QdteURMR5r01GxeJSBBUOCOyaNXA3g==", "contentHash": "UpZLNLBpIZ0GTebShui7xXYh6DmBHjWM8NxGxZbdQh/bPZ5e6YswqI+bru6BnEL5eWiOdodsXtEz3FROcgi/qg==",
"dependencies": { "dependencies": {
"Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.0", "Microsoft.Extensions.DependencyInjection.Abstractions": "2.2.0",
"Microsoft.Extensions.Primitives": "8.0.0" "Microsoft.Extensions.Primitives": "2.2.0",
"System.ComponentModel.Annotations": "4.5.0"
} }
}, },
"Microsoft.Extensions.Primitives": { "Microsoft.Extensions.Primitives": {
"type": "Transitive", "type": "Transitive",
"resolved": "8.0.0", "resolved": "2.2.0",
"contentHash": "bXJEZrW9ny8vjMF1JV253WeLhpEVzFo1lyaZu1vQ4ZxWUlVvknZ/+ftFgVheLubb4eZPSwwxBeqS1JkCOjxd8g==" "contentHash": "azyQtqbm4fSaDzZHD/J+V6oWMFaf2tWP4WEGIYePLCMw3+b2RQdj9ybgbQyjCshcitQKQ4lEDOZjmSlTTrHxUg==",
"dependencies": {
"System.Memory": "4.5.1",
"System.Runtime.CompilerServices.Unsafe": "4.5.1"
}
}, },
"Microsoft.SourceLink.Common": { "Microsoft.SourceLink.Common": {
"type": "Transitive", "type": "Transitive",
@@ -539,35 +184,39 @@
}, },
"Microsoft.TestPlatform.ObjectModel": { "Microsoft.TestPlatform.ObjectModel": {
"type": "Transitive", "type": "Transitive",
"resolved": "18.3.0", "resolved": "17.13.0",
"contentHash": "AEIEX2aWdPO9XbtR96eBaJxmXRD9vaI9uQ1T/JbPEKlTAZwYx0ZrMzKyULMdh/HH9Sg03kXCoN7LszQ90o6nPQ==" "contentHash": "bt0E0Dx+iqW97o4A59RCmUmz/5NarJ7LRL+jXbSHod72ibL5XdNm1Ke+UO5tFhBG4VwHLcSjqq9BUSblGNWamw==",
"dependencies": {
"System.Reflection.Metadata": "1.6.0"
}
}, },
"Microsoft.TestPlatform.TestHost": { "Microsoft.TestPlatform.TestHost": {
"type": "Transitive", "type": "Transitive",
"resolved": "18.3.0", "resolved": "17.13.0",
"contentHash": "twmsoelXnp1uWMU3VGip9f0Jr1mZ0PZqgJdF35CIrdYgYrkHIJMV1m8uKyhcdjLdsQDESHAgkR7KhS9i1qpJag==", "contentHash": "9GGw08Dc3AXspjekdyTdZ/wYWFlxbgcF0s7BKxzVX+hzAwpifDOdxM+ceVaaJSQOwqt3jtuNlHn3XTpKUS9x9Q==",
"dependencies": { "dependencies": {
"Microsoft.TestPlatform.ObjectModel": "18.3.0", "Microsoft.TestPlatform.ObjectModel": "17.13.0",
"Newtonsoft.Json": "13.0.3" "Newtonsoft.Json": "13.0.1"
} }
}, },
"Newtonsoft.Json": { "Newtonsoft.Json": {
"type": "Transitive", "type": "Transitive",
"resolved": "13.0.3", "resolved": "13.0.1",
"contentHash": "HrC5BXdl00IP9zeV+0Z848QWPAoCr9P3bDEZguI+gkLcBKAOxix/tLEAAHC+UvDNPv4a2d18lOReHMOagPa+zQ==" "contentHash": "ppPFpBcvxdsfUonNcvITKqLl3bqxWbDCZIzDWHzjpdAHRFfZe0Dw9HmA0+za13IdyrgJwpkDTDA9fHaxOrt20A=="
}, },
"Quibble": { "Quibble": {
"type": "Transitive", "type": "Transitive",
"resolved": "0.3.1", "resolved": "0.3.1",
"contentHash": "LD6bz2p+4O/BQnmD4mqFZrmdN/IjsPo1wUvfmcH46Q05ng+dyMLl3d2ylj0x412F4fpJEtm0Z3EaCAx4FqgNuQ==", "contentHash": "LD6bz2p+4O/BQnmD4mqFZrmdN/IjsPo1wUvfmcH46Q05ng+dyMLl3d2ylj0x412F4fpJEtm0Z3EaCAx4FqgNuQ==",
"dependencies": { "dependencies": {
"FSharp.Core": "7.0.300" "FSharp.Core": "7.0.300",
"System.Text.Json": "7.0.3"
} }
}, },
"SimpleInfoName": { "SimpleInfoName": {
"type": "Transitive", "type": "Transitive",
"resolved": "3.2.0", "resolved": "3.1.0",
"contentHash": "K8ivHRbPWfncijk62Dan/r/z55gwq3aFzqB6yFlD9X0bbpIaacHyHH2cpcIdz0FECUpERUZTwxts0z4gRWpQpA==" "contentHash": "j+ENh86NhxrgDc6T1ueqIR2QOdDkSJY2dbTFyPN/JvIXifB4GHAunlMw/x7P6m7XaXEHr3s+SMZfKBlmnmkO6g=="
}, },
"SQLitePCLRaw.bundle_e_sqlite3": { "SQLitePCLRaw.bundle_e_sqlite3": {
"type": "Transitive", "type": "Transitive",
@@ -581,7 +230,10 @@
"SQLitePCLRaw.core": { "SQLitePCLRaw.core": {
"type": "Transitive", "type": "Transitive",
"resolved": "2.1.4", "resolved": "2.1.4",
"contentHash": "inBjvSHo9UDKneGNzfUfDjK08JzlcIhn1+SP5Y3m6cgXpCxXKCJDy6Mka7LpgSV+UZmKSnC8rTwB0SQ0xKu5pA==" "contentHash": "inBjvSHo9UDKneGNzfUfDjK08JzlcIhn1+SP5Y3m6cgXpCxXKCJDy6Mka7LpgSV+UZmKSnC8rTwB0SQ0xKu5pA==",
"dependencies": {
"System.Memory": "4.5.3"
}
}, },
"SQLitePCLRaw.lib.e_sqlite3": { "SQLitePCLRaw.lib.e_sqlite3": {
"type": "Transitive", "type": "Transitive",
@@ -596,24 +248,68 @@
"SQLitePCLRaw.core": "2.1.4" "SQLitePCLRaw.core": "2.1.4"
} }
}, },
"System.CodeDom": {
"type": "Transitive",
"resolved": "8.0.0",
"contentHash": "WTlRjL6KWIMr/pAaq3rYqh0TJlzpouaQ/W1eelssHgtlwHAH25jXTkUphTYx9HaIIf7XA6qs/0+YhtLEQRkJ+Q=="
},
"System.ComponentModel.Annotations": {
"type": "Transitive",
"resolved": "4.5.0",
"contentHash": "UxYQ3FGUOtzJ7LfSdnYSFd7+oEv6M8NgUatatIN2HxNtDdlcvFAf+VIq4Of9cDMJEJC0aSRv/x898RYhB4Yppg=="
},
"System.Diagnostics.EventLog": { "System.Diagnostics.EventLog": {
"type": "Transitive", "type": "Transitive",
"resolved": "6.0.0", "resolved": "6.0.0",
"contentHash": "lcyUiXTsETK2ALsZrX+nWuHSIQeazhqPphLfaRxzdGaG93+0kELqpgEHtwWOlQe7+jSFnKwaCAgL4kjeZCQJnw==" "contentHash": "lcyUiXTsETK2ALsZrX+nWuHSIQeazhqPphLfaRxzdGaG93+0kELqpgEHtwWOlQe7+jSFnKwaCAgL4kjeZCQJnw=="
}, },
"System.IO.Hashing": {
"type": "Transitive",
"resolved": "9.0.4",
"contentHash": "WogPvgAFqQORFD8Iyha6RZ+/1QB3dsWRWxbwi8/HHVgiGQ8z0oMWpwe8Kk3Ti+Roe+P6a3sBg+WwBfEsyziZKg=="
},
"System.Management": {
"type": "Transitive",
"resolved": "8.0.0",
"contentHash": "jrK22i5LRzxZCfGb+tGmke2VH7oE0DvcDlJ1HAKYU8cPmD8XnpUT0bYn2Gy98GEhGjtfbR/sxKTVb+dE770pfA==",
"dependencies": {
"System.CodeDom": "8.0.0"
}
},
"System.Memory": {
"type": "Transitive",
"resolved": "4.5.3",
"contentHash": "3oDzvc/zzetpTKWMShs1AADwZjQ/36HnsufHRPcOjyRAAMLDlu2iD33MBI2opxnezcVUtXyqDXXjoFMOU9c7SA=="
},
"System.Reactive": { "System.Reactive": {
"type": "Transitive", "type": "Transitive",
"resolved": "5.0.0", "resolved": "5.0.0",
"contentHash": "erBZjkQHWL9jpasCE/0qKAryzVBJFxGHVBAvgRN1bzM0q2s1S4oYREEEL0Vb+1kA/6BKb5FjUZMp5VXmy+gzkQ==" "contentHash": "erBZjkQHWL9jpasCE/0qKAryzVBJFxGHVBAvgRN1bzM0q2s1S4oYREEEL0Vb+1kA/6BKb5FjUZMp5VXmy+gzkQ=="
}, },
"System.Reflection.Metadata": {
"type": "Transitive",
"resolved": "1.6.0",
"contentHash": "COC1aiAJjCoA5GBF+QKL2uLqEBew4JsCkQmoHKbN3TlOZKa2fKLz5CpiRQKDz0RsAOEGsVKqOD5bomsXq/4STQ=="
},
"System.Runtime.CompilerServices.Unsafe": {
"type": "Transitive",
"resolved": "4.5.1",
"contentHash": "Zh8t8oqolRaFa9vmOZfdQm/qKejdqz0J9kr7o2Fu0vPeoH3BL1EOXipKWwkWtLT1JPzjByrF19fGuFlNbmPpiw=="
},
"System.Text.Encodings.Web": {
"type": "Transitive",
"resolved": "8.0.0",
"contentHash": "yev/k9GHAEGx2Rg3/tU6MQh4HGBXJs70y7j1LaM1i/ER9po+6nnQ6RRqTJn1E7Xu0fbIFK80Nh5EoODxrbxwBQ=="
},
"Verify": { "Verify": {
"type": "Transitive", "type": "Transitive",
"resolved": "31.12.5", "resolved": "29.4.0",
"contentHash": "Luht+42xCM969Scwl7XQ1teZb/7w9XbQg/4eqVQ2WGTWc7mfheENb8PnaX9yJCNROyb1POjQIrQogO+wtf34mg==", "contentHash": "wlqJ6ygXORa3lrAaErTA4EWkDcK9pBG2k5iC/I5F2UpWfyV7aXw/+SwGiWYe4XSk9d7VObe4xi4+0AV9rLRsBw==",
"dependencies": { "dependencies": {
"Argon": "0.33.5", "Argon": "0.28.0",
"DiffEngine": "18.4.1", "DiffEngine": "16.2.1",
"SimpleInfoName": "3.2.0" "SimpleInfoName": "3.1.0",
"System.IO.Hashing": "9.0.4"
} }
}, },
"xunit.abstractions": { "xunit.abstractions": {
@@ -648,8 +344,8 @@
"dependencies": { "dependencies": {
"GraphQL.Client": "[6.0.0, )", "GraphQL.Client": "[6.0.0, )",
"Microsoft.Data.Sqlite": "[7.0.5, )", "Microsoft.Data.Sqlite": "[7.0.5, )",
"Microsoft.Extensions.DependencyInjection": "[8.0.0, )", "Microsoft.Extensions.DependencyInjection.Abstractions": "[2.2.0, )",
"Microsoft.Extensions.Logging": "[8.0.0, )", "Microsoft.Extensions.Logging": "[2.2.0, )",
"Speckle.DoubleNumerics": "[4.1.0, )", "Speckle.DoubleNumerics": "[4.1.0, )",
"Speckle.Newtonsoft.Json": "[13.0.2, )", "Speckle.Newtonsoft.Json": "[13.0.2, )",
"Speckle.Sdk.Dependencies": "[1.0.0, )" "Speckle.Sdk.Dependencies": "[1.0.0, )"
@@ -664,12 +360,12 @@
"Moq": "[4.20.72, )", "Moq": "[4.20.72, )",
"Speckle.Sdk": "[1.0.0, )", "Speckle.Sdk": "[1.0.0, )",
"Verify.Quibble": "[2.1.1, )", "Verify.Quibble": "[2.1.1, )",
"Verify.Xunit": "[31.12.5, )" "Verify.Xunit": "[29.4.0, )"
} }
}, },
"GraphQL.Client": { "GraphQL.Client": {
"type": "CentralTransitive", "type": "CentralTransitive",
"requested": "[6.1.0, )", "requested": "[6.0.0, )",
"resolved": "6.0.0", "resolved": "6.0.0",
"contentHash": "8yPNBbuVBpTptivyAlak4GZvbwbUcjeQTL4vN1HKHRuOykZ4r7l5fcLS6vpyPyLn0x8FsL31xbOIKyxbmR9rbA==", "contentHash": "8yPNBbuVBpTptivyAlak4GZvbwbUcjeQTL4vN1HKHRuOykZ4r7l5fcLS6vpyPyLn0x8FsL31xbOIKyxbmR9rbA==",
"dependencies": { "dependencies": {
@@ -688,24 +384,22 @@
"SQLitePCLRaw.bundle_e_sqlite3": "2.1.4" "SQLitePCLRaw.bundle_e_sqlite3": "2.1.4"
} }
}, },
"Microsoft.Extensions.DependencyInjection": { "Microsoft.Extensions.DependencyInjection.Abstractions": {
"type": "CentralTransitive", "type": "CentralTransitive",
"requested": "[10.0.6, )", "requested": "[2.2.0, )",
"resolved": "8.0.0", "resolved": "2.2.0",
"contentHash": "V8S3bsm50ig6JSyrbcJJ8bW2b9QLGouz+G1miK3UTaOWmMtFwNNNzUf4AleyDWUmTrWMLNnFSLEQtxmxgNQnNQ==", "contentHash": "f9hstgjVmr6rmrfGSpfsVOl2irKAgr1QjrSi3FgnS7kulxband50f2brRLwySAQTADPZeTdow0mpSMcoAdadCw=="
"dependencies": {
"Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.0"
}
}, },
"Microsoft.Extensions.Logging": { "Microsoft.Extensions.Logging": {
"type": "CentralTransitive", "type": "CentralTransitive",
"requested": "[10.0.6, )", "requested": "[2.2.0, )",
"resolved": "8.0.0", "resolved": "2.2.0",
"contentHash": "tvRkov9tAJ3xP51LCv3FJ2zINmv1P8Hi8lhhtcKGqM+ImiTCC84uOPEI4z8Cdq2C3o9e+Aa0Gw0rmrsJD77W+w==", "contentHash": "Nxqhadc9FCmFHzU+fz3oc8sFlE6IadViYg8dfUdGzJZ2JUxnCsRghBhhOWdM4B2zSZqEc+0BjliBh/oNdRZuig==",
"dependencies": { "dependencies": {
"Microsoft.Extensions.DependencyInjection": "8.0.0", "Microsoft.Extensions.Configuration.Binder": "2.2.0",
"Microsoft.Extensions.Logging.Abstractions": "8.0.0", "Microsoft.Extensions.DependencyInjection.Abstractions": "2.2.0",
"Microsoft.Extensions.Options": "8.0.0" "Microsoft.Extensions.Logging.Abstractions": "2.2.0",
"Microsoft.Extensions.Options": "2.2.0"
} }
}, },
"Moq": { "Moq": {
@@ -729,6 +423,15 @@
"resolved": "13.0.2", "resolved": "13.0.2",
"contentHash": "g1BejUZwax5PRfL6xHgLEK23sqHWOgOj9hE7RvfRRlN00AGt8GnPYt8HedSK7UB3HiRW8zCA9Pn0iiYxCK24BA==" "contentHash": "g1BejUZwax5PRfL6xHgLEK23sqHWOgOj9hE7RvfRRlN00AGt8GnPYt8HedSK7UB3HiRW8zCA9Pn0iiYxCK24BA=="
}, },
"System.Text.Json": {
"type": "CentralTransitive",
"requested": "[8.0.5, )",
"resolved": "8.0.4",
"contentHash": "bAkhgDJ88XTsqczoxEMliSrpijKZHhbJQldhAmObj/RbrN3sU5dcokuXmWJWsdQAhiMJ9bTayWsL1C9fbbCRhw==",
"dependencies": {
"System.Text.Encodings.Web": "8.0.0"
}
},
"Verify.Quibble": { "Verify.Quibble": {
"type": "CentralTransitive", "type": "CentralTransitive",
"requested": "[2.1.1, )", "requested": "[2.1.1, )",
@@ -736,19 +439,21 @@
"contentHash": "Z8bVwFICa3Dog6Mcnx0wlrn4Y+CFpQXx1f+ijfLn6/v4q00q+jLm9Gu/nVyUFuc75cjn6ieI08UrqXKcR9fTYw==", "contentHash": "Z8bVwFICa3Dog6Mcnx0wlrn4Y+CFpQXx1f+ijfLn6/v4q00q+jLm9Gu/nVyUFuc75cjn6ieI08UrqXKcR9fTYw==",
"dependencies": { "dependencies": {
"Quibble": "0.3.1", "Quibble": "0.3.1",
"System.Text.Json": "8.0.4",
"Verify": "26.1.1" "Verify": "26.1.1"
} }
}, },
"Verify.Xunit": { "Verify.Xunit": {
"type": "CentralTransitive", "type": "CentralTransitive",
"requested": "[31.12.5, )", "requested": "[29.4.0, )",
"resolved": "31.12.5", "resolved": "29.4.0",
"contentHash": "i1d2bPonW/3ZzzEZYTWgv8mjPyRWpKaPsIxxp/kYK7Nq8ZeSEmkLA5BkGwInDlybHkxsviFu+s8iF20y+yUcZw==", "contentHash": "P8HYW7aromKGm90Cgx0XKL3qKKmYZHDwHTQfBfDCCPnhNlVWevJzrpuUQ0+3vTVdRAtsts2a1OE/tD+3yjJbHA==",
"dependencies": { "dependencies": {
"Argon": "0.33.5", "Argon": "0.28.0",
"DiffEngine": "18.4.1", "DiffEngine": "16.2.1",
"SimpleInfoName": "3.2.0", "SimpleInfoName": "3.1.0",
"Verify": "31.12.5", "System.IO.Hashing": "9.0.4",
"Verify": "29.4.0",
"xunit.abstractions": "2.0.3", "xunit.abstractions": "2.0.3",
"xunit.extensibility.execution": "2.9.3" "xunit.extensibility.execution": "2.9.3"
} }
@@ -10,4 +10,7 @@
<ProjectReference Include="..\..\src\Speckle.Sdk\Speckle.Sdk.csproj" /> <ProjectReference Include="..\..\src\Speckle.Sdk\Speckle.Sdk.csproj" />
<ProjectReference Include="..\Speckle.Sdk.Tests.Performance\Speckle.Sdk.Tests.Performance.csproj" /> <ProjectReference Include="..\Speckle.Sdk.Tests.Performance\Speckle.Sdk.Tests.Performance.csproj" />
</ItemGroup> </ItemGroup>
<ItemGroup>
<PackageReference Include="Microsoft.Extensions.DependencyInjection" />
</ItemGroup>
</Project> </Project>
@@ -2,6 +2,15 @@
"version": 2, "version": 2,
"dependencies": { "dependencies": {
"net8.0": { "net8.0": {
"Microsoft.Extensions.DependencyInjection": {
"type": "Direct",
"requested": "[2.2.0, )",
"resolved": "2.2.0",
"contentHash": "MZtBIwfDFork5vfjpJdG5g8wuJFt7d/y3LOSVVtDK/76wlbtz6cjltfKHqLx2TKVqTj5/c41t77m1+h20zqtPA==",
"dependencies": {
"Microsoft.Extensions.DependencyInjection.Abstractions": "2.2.0"
}
},
"Microsoft.SourceLink.GitHub": { "Microsoft.SourceLink.GitHub": {
"type": "Direct", "type": "Direct",
"requested": "[8.0.0, )", "requested": "[8.0.0, )",
@@ -138,32 +147,53 @@
"resolved": "3.1.6", "resolved": "3.1.6",
"contentHash": "jek4XYaQ/PGUwDKKhwR8K47Uh1189PFzMeLqO83mXrXQVIpARZCcfuDedH50YDTepBkfijCZN5U/vZi++erxtg==" "contentHash": "jek4XYaQ/PGUwDKKhwR8K47Uh1189PFzMeLqO83mXrXQVIpARZCcfuDedH50YDTepBkfijCZN5U/vZi++erxtg=="
}, },
"Microsoft.Extensions.DependencyInjection.Abstractions": { "Microsoft.Extensions.Configuration": {
"type": "Transitive", "type": "Transitive",
"resolved": "8.0.0", "resolved": "2.2.0",
"contentHash": "cjWrLkJXK0rs4zofsK4bSdg+jhDLTaxrkXu4gS6Y7MAlCvRyNNgwY/lJi5RDlQOnSZweHqoyvgvbdvQsRIW+hg==" "contentHash": "nOP8R1mVb/6mZtm2qgAJXn/LFm/2kMjHDAg/QJLFG6CuWYJtaD3p1BwQhufBVvRzL9ceJ/xF0SQ0qsI2GkDQAA==",
"dependencies": {
"Microsoft.Extensions.Configuration.Abstractions": "2.2.0"
}
},
"Microsoft.Extensions.Configuration.Abstractions": {
"type": "Transitive",
"resolved": "2.2.0",
"contentHash": "65MrmXCziWaQFrI0UHkQbesrX5wTwf9XPjY5yFm/VkgJKFJ5gqvXRoXjIZcf2wLi5ZlwGz/oMYfyURVCWbM5iw==",
"dependencies": {
"Microsoft.Extensions.Primitives": "2.2.0"
}
},
"Microsoft.Extensions.Configuration.Binder": {
"type": "Transitive",
"resolved": "2.2.0",
"contentHash": "vJ9xvOZCnUAIHcGC3SU35r3HKmHTVIeHzo6u/qzlHAqD8m6xv92MLin4oJntTvkpKxVX3vI1GFFkIQtU3AdlsQ==",
"dependencies": {
"Microsoft.Extensions.Configuration": "2.2.0"
}
}, },
"Microsoft.Extensions.Logging.Abstractions": { "Microsoft.Extensions.Logging.Abstractions": {
"type": "Transitive", "type": "Transitive",
"resolved": "8.0.0", "resolved": "2.2.0",
"contentHash": "arDBqTgFCyS0EvRV7O3MZturChstm50OJ0y9bDJvAcmEPJm0FFpFyjU/JLYyStNGGey081DvnQYlncNX5SJJGA==", "contentHash": "B2WqEox8o+4KUOpL7rZPyh6qYjik8tHi2tN8Z9jZkHzED8ElYgZa/h6K+xliB435SqUcWT290Fr2aa8BtZjn8A=="
"dependencies": {
"Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.0"
}
}, },
"Microsoft.Extensions.Options": { "Microsoft.Extensions.Options": {
"type": "Transitive", "type": "Transitive",
"resolved": "8.0.0", "resolved": "2.2.0",
"contentHash": "JOVOfqpnqlVLUzINQ2fox8evY2SKLYJ3BV8QDe/Jyp21u1T7r45x/R/5QdteURMR5r01GxeJSBBUOCOyaNXA3g==", "contentHash": "UpZLNLBpIZ0GTebShui7xXYh6DmBHjWM8NxGxZbdQh/bPZ5e6YswqI+bru6BnEL5eWiOdodsXtEz3FROcgi/qg==",
"dependencies": { "dependencies": {
"Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.0", "Microsoft.Extensions.DependencyInjection.Abstractions": "2.2.0",
"Microsoft.Extensions.Primitives": "8.0.0" "Microsoft.Extensions.Primitives": "2.2.0",
"System.ComponentModel.Annotations": "4.5.0"
} }
}, },
"Microsoft.Extensions.Primitives": { "Microsoft.Extensions.Primitives": {
"type": "Transitive", "type": "Transitive",
"resolved": "8.0.0", "resolved": "2.2.0",
"contentHash": "bXJEZrW9ny8vjMF1JV253WeLhpEVzFo1lyaZu1vQ4ZxWUlVvknZ/+ftFgVheLubb4eZPSwwxBeqS1JkCOjxd8g==" "contentHash": "azyQtqbm4fSaDzZHD/J+V6oWMFaf2tWP4WEGIYePLCMw3+b2RQdj9ybgbQyjCshcitQKQ4lEDOZjmSlTTrHxUg==",
"dependencies": {
"System.Memory": "4.5.1",
"System.Runtime.CompilerServices.Unsafe": "4.5.1"
}
}, },
"Microsoft.NETCore.Platforms": { "Microsoft.NETCore.Platforms": {
"type": "Transitive", "type": "Transitive",
@@ -229,6 +259,11 @@
"resolved": "5.0.0", "resolved": "5.0.0",
"contentHash": "FXkLXiK0sVVewcso0imKQoOxjoPAj42R8HtjjbSjVPAzwDfzoyoznWxgA3c38LDbN9SJux1xXoXYAhz98j7r2g==" "contentHash": "FXkLXiK0sVVewcso0imKQoOxjoPAj42R8HtjjbSjVPAzwDfzoyoznWxgA3c38LDbN9SJux1xXoXYAhz98j7r2g=="
}, },
"System.ComponentModel.Annotations": {
"type": "Transitive",
"resolved": "4.5.0",
"contentHash": "UxYQ3FGUOtzJ7LfSdnYSFd7+oEv6M8NgUatatIN2HxNtDdlcvFAf+VIq4Of9cDMJEJC0aSRv/x898RYhB4Yppg=="
},
"System.Management": { "System.Management": {
"type": "Transitive", "type": "Transitive",
"resolved": "5.0.0", "resolved": "5.0.0",
@@ -298,8 +333,8 @@
"dependencies": { "dependencies": {
"GraphQL.Client": "[6.0.0, )", "GraphQL.Client": "[6.0.0, )",
"Microsoft.Data.Sqlite": "[7.0.5, )", "Microsoft.Data.Sqlite": "[7.0.5, )",
"Microsoft.Extensions.DependencyInjection": "[8.0.0, )", "Microsoft.Extensions.DependencyInjection.Abstractions": "[2.2.0, )",
"Microsoft.Extensions.Logging": "[8.0.0, )", "Microsoft.Extensions.Logging": "[2.2.0, )",
"Speckle.DoubleNumerics": "[4.1.0, )", "Speckle.DoubleNumerics": "[4.1.0, )",
"Speckle.Newtonsoft.Json": "[13.0.2, )", "Speckle.Newtonsoft.Json": "[13.0.2, )",
"Speckle.Sdk.Dependencies": "[1.0.0, )" "Speckle.Sdk.Dependencies": "[1.0.0, )"
@@ -312,6 +347,7 @@
"type": "Project", "type": "Project",
"dependencies": { "dependencies": {
"BenchmarkDotNet": "[0.14.0, )", "BenchmarkDotNet": "[0.14.0, )",
"Microsoft.Extensions.DependencyInjection": "[2.2.0, )",
"Speckle.Objects": "[1.0.0, )" "Speckle.Objects": "[1.0.0, )"
} }
}, },
@@ -335,7 +371,7 @@
}, },
"GraphQL.Client": { "GraphQL.Client": {
"type": "CentralTransitive", "type": "CentralTransitive",
"requested": "[6.1.0, )", "requested": "[6.0.0, )",
"resolved": "6.0.0", "resolved": "6.0.0",
"contentHash": "8yPNBbuVBpTptivyAlak4GZvbwbUcjeQTL4vN1HKHRuOykZ4r7l5fcLS6vpyPyLn0x8FsL31xbOIKyxbmR9rbA==", "contentHash": "8yPNBbuVBpTptivyAlak4GZvbwbUcjeQTL4vN1HKHRuOykZ4r7l5fcLS6vpyPyLn0x8FsL31xbOIKyxbmR9rbA==",
"dependencies": { "dependencies": {
@@ -360,24 +396,22 @@
"SQLitePCLRaw.bundle_e_sqlite3": "2.1.4" "SQLitePCLRaw.bundle_e_sqlite3": "2.1.4"
} }
}, },
"Microsoft.Extensions.DependencyInjection": { "Microsoft.Extensions.DependencyInjection.Abstractions": {
"type": "CentralTransitive", "type": "CentralTransitive",
"requested": "[10.0.6, )", "requested": "[2.2.0, )",
"resolved": "8.0.0", "resolved": "2.2.0",
"contentHash": "V8S3bsm50ig6JSyrbcJJ8bW2b9QLGouz+G1miK3UTaOWmMtFwNNNzUf4AleyDWUmTrWMLNnFSLEQtxmxgNQnNQ==", "contentHash": "f9hstgjVmr6rmrfGSpfsVOl2irKAgr1QjrSi3FgnS7kulxband50f2brRLwySAQTADPZeTdow0mpSMcoAdadCw=="
"dependencies": {
"Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.0"
}
}, },
"Microsoft.Extensions.Logging": { "Microsoft.Extensions.Logging": {
"type": "CentralTransitive", "type": "CentralTransitive",
"requested": "[10.0.6, )", "requested": "[2.2.0, )",
"resolved": "8.0.0", "resolved": "2.2.0",
"contentHash": "tvRkov9tAJ3xP51LCv3FJ2zINmv1P8Hi8lhhtcKGqM+ImiTCC84uOPEI4z8Cdq2C3o9e+Aa0Gw0rmrsJD77W+w==", "contentHash": "Nxqhadc9FCmFHzU+fz3oc8sFlE6IadViYg8dfUdGzJZ2JUxnCsRghBhhOWdM4B2zSZqEc+0BjliBh/oNdRZuig==",
"dependencies": { "dependencies": {
"Microsoft.Extensions.DependencyInjection": "8.0.0", "Microsoft.Extensions.Configuration.Binder": "2.2.0",
"Microsoft.Extensions.Logging.Abstractions": "8.0.0", "Microsoft.Extensions.DependencyInjection.Abstractions": "2.2.0",
"Microsoft.Extensions.Options": "8.0.0" "Microsoft.Extensions.Logging.Abstractions": "2.2.0",
"Microsoft.Extensions.Options": "2.2.0"
} }
}, },
"Speckle.DoubleNumerics": { "Speckle.DoubleNumerics": {
@@ -1,5 +1,5 @@
using System.Collections.Concurrent; using System.Collections.Concurrent;
using AwesomeAssertions; using FluentAssertions;
using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.DependencyInjection;
using Speckle.Sdk.Serialisation; using Speckle.Sdk.Serialisation;
using Speckle.Sdk.Serialisation.V2; using Speckle.Sdk.Serialisation.V2;
@@ -1,5 +1,5 @@
using System.Collections.Concurrent; using System.Collections.Concurrent;
using AwesomeAssertions; using FluentAssertions;
using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Logging.Abstractions; using Microsoft.Extensions.Logging.Abstractions;
using Speckle.Objects.Geometry; using Speckle.Objects.Geometry;
@@ -1,4 +1,4 @@
using AwesomeAssertions; using FluentAssertions;
using Speckle.Newtonsoft.Json; using Speckle.Newtonsoft.Json;
using Speckle.Sdk.Serialisation.Utilities; using Speckle.Sdk.Serialisation.Utilities;
@@ -1,6 +1,6 @@
using System.Collections.Concurrent; using System.Collections.Concurrent;
using System.Text; using System.Text;
using AwesomeAssertions; using FluentAssertions;
using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.DependencyInjection;
using Speckle.Newtonsoft.Json.Linq; using Speckle.Newtonsoft.Json.Linq;
using Speckle.Objects.Geometry; using Speckle.Objects.Geometry;
@@ -1,5 +1,5 @@
using System.Collections.Concurrent; using System.Collections.Concurrent;
using AwesomeAssertions; using FluentAssertions;
using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Logging.Abstractions; using Microsoft.Extensions.Logging.Abstractions;
using Speckle.Objects.Geometry; using Speckle.Objects.Geometry;
@@ -1,5 +1,5 @@
using System.Collections.Concurrent; using System.Collections.Concurrent;
using AwesomeAssertions; using FluentAssertions;
using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Logging.Abstractions; using Microsoft.Extensions.Logging.Abstractions;
using Speckle.Newtonsoft.Json; using Speckle.Newtonsoft.Json;
@@ -1,4 +1,4 @@
using AwesomeAssertions; using FluentAssertions;
using Speckle.Sdk.Serialisation; using Speckle.Sdk.Serialisation;
using Speckle.Sdk.Serialisation.V2.Send; using Speckle.Sdk.Serialisation.V2.Send;
@@ -1,6 +1,6 @@
using System.Net; using System.Net;
using System.Text; using System.Text;
using AwesomeAssertions; using FluentAssertions;
using HttpMultipartParser; using HttpMultipartParser;
using Moq; using Moq;
using RichardSzalay.MockHttp; using RichardSzalay.MockHttp;
@@ -1,6 +1,6 @@
<Project Sdk="Microsoft.NET.Sdk"> <Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup> <PropertyGroup>
<TargetFramework>net10.0</TargetFramework> <TargetFramework>net8.0</TargetFramework>
<IsTestProject>true</IsTestProject> <IsTestProject>true</IsTestProject>
<PolySharpExcludeGeneratedTypes>System.Runtime.CompilerServices.IsExternalInit;System.Runtime.CompilerServices.RequiresLocationAttribute</PolySharpExcludeGeneratedTypes> <PolySharpExcludeGeneratedTypes>System.Runtime.CompilerServices.IsExternalInit;System.Runtime.CompilerServices.RequiresLocationAttribute</PolySharpExcludeGeneratedTypes>
</PropertyGroup> </PropertyGroup>
@@ -8,6 +8,7 @@
<PackageReference Include="altcover" /> <PackageReference Include="altcover" />
<PackageReference Include="AwesomeAssertions" /> <PackageReference Include="AwesomeAssertions" />
<PackageReference Include="HttpMultipartParser" /> <PackageReference Include="HttpMultipartParser" />
<PackageReference Include="Microsoft.Extensions.DependencyInjection" />
<PackageReference Include="Microsoft.NET.Test.Sdk" /> <PackageReference Include="Microsoft.NET.Test.Sdk" />
<PackageReference Include="Moq" /> <PackageReference Include="Moq" />
<PackageReference Include="RichardSzalay.MockHttp" /> <PackageReference Include="RichardSzalay.MockHttp" />
@@ -1,36 +1,47 @@
{ {
"version": 2, "version": 2,
"dependencies": { "dependencies": {
"net10.0": { "net8.0": {
"altcover": { "altcover": {
"type": "Direct", "type": "Direct",
"requested": "[9.0.102, )", "requested": "[9.0.1, )",
"resolved": "9.0.102", "resolved": "9.0.1",
"contentHash": "q3Rf5t0M9kXlcO5qhsaAe6NrFSNd5enrhKmF/Ezgmomqw34PbUTbRSYjSDNhS3YGDyUrPTkyPn14EfLDJWztcA==" "contentHash": "aadciFNDT5bnylaYUkKal+s5hF7yU/lmZxImQWAlk1438iPqK1Uf79H5ylELpyLIU49HL5ql+tnWBihp3WVLCA=="
}, },
"AwesomeAssertions": { "AwesomeAssertions": {
"type": "Direct", "type": "Direct",
"requested": "[9.4.0, )", "requested": "[8.1.0, )",
"resolved": "9.4.0", "resolved": "8.1.0",
"contentHash": "dJxkWiQ8D+xT6Gr2sSL83+Mar+Vpy2JTcUPxFcckpPJ8VYBfSgnk+zqpS6t7kcGnjz8NLyF14qfuoL4bKzzoew==" "contentHash": "IfNC4cpXPi9tclWvuNO9lfkuIxJsUTLTS1NXto55jDrAUQJYl0zLI9ByISrfkbBE2Xtg+IWaAXQ6jnUx3anDuw=="
}, },
"HttpMultipartParser": { "HttpMultipartParser": {
"type": "Direct", "type": "Direct",
"requested": "[10.0.0, )", "requested": "[9.0.0, )",
"resolved": "10.0.0", "resolved": "9.0.0",
"contentHash": "/1hHkZSQs/JJuGcpNNS9aVodce6H8/iEGoHA/1ua7kJAo46XA9DbbCoI//JDB03qprvT00AaV/4VwfMFO7lcAg==", "contentHash": "WeGKDK62waagwo9nokRY62DrLukwVCNXOPVjrzi/qSS73D+B6zPOBkImsFqzhvRNweIobR74js9M2HTV+PTeIg==",
"dependencies": { "dependencies": {
"Microsoft.IO.RecyclableMemoryStream": "3.0.1" "Microsoft.CSharp": "4.7.0",
"Microsoft.IO.RecyclableMemoryStream": "3.0.1",
"System.Buffers": "4.6.0"
}
},
"Microsoft.Extensions.DependencyInjection": {
"type": "Direct",
"requested": "[2.2.0, )",
"resolved": "2.2.0",
"contentHash": "MZtBIwfDFork5vfjpJdG5g8wuJFt7d/y3LOSVVtDK/76wlbtz6cjltfKHqLx2TKVqTj5/c41t77m1+h20zqtPA==",
"dependencies": {
"Microsoft.Extensions.DependencyInjection.Abstractions": "2.2.0"
} }
}, },
"Microsoft.NET.Test.Sdk": { "Microsoft.NET.Test.Sdk": {
"type": "Direct", "type": "Direct",
"requested": "[18.3.0, )", "requested": "[17.13.0, )",
"resolved": "18.3.0", "resolved": "17.13.0",
"contentHash": "xW3kXuWRQtgoxJp4J+gdhHSQyK+6Wb/AZDSd7lMvuMRYlZ1tnpkojyfZlWilB5G4dmZ0Y0ZxU/M23TlubndNkw==", "contentHash": "W19wCPizaIC9Zh47w8wWI/yxuqR7/dtABwOrc8r2jX/8mUNxM2vw4fXDh+DJTeogxV+KzKwg5jNNGQVwf3LXyA==",
"dependencies": { "dependencies": {
"Microsoft.CodeCoverage": "18.3.0", "Microsoft.CodeCoverage": "17.13.0",
"Microsoft.TestPlatform.TestHost": "18.3.0" "Microsoft.TestPlatform.TestHost": "17.13.0"
} }
}, },
"Microsoft.SourceLink.GitHub": { "Microsoft.SourceLink.GitHub": {
@@ -78,14 +89,14 @@
}, },
"xunit.runner.visualstudio": { "xunit.runner.visualstudio": {
"type": "Direct", "type": "Direct",
"requested": "[3.1.5, )", "requested": "[3.0.2, )",
"resolved": "3.1.5", "resolved": "3.0.2",
"contentHash": "tKi7dSTwP4m5m9eXPM2Ime4Kn7xNf4x4zT9sdLO/G4hZVnQCRiMTWoSZqI/pYTVeI27oPPqHBKYI/DjJ9GsYgA==" "contentHash": "oXbusR6iPq0xlqoikjdLvzh+wQDkMv9If58myz9MEzldS4nIcp442Btgs2sWbYWV+caEluMe2pQCZ0hUZgPiow=="
}, },
"Argon": { "Argon": {
"type": "Transitive", "type": "Transitive",
"resolved": "0.33.5", "resolved": "0.28.0",
"contentHash": "J6821zxO+EqMzO9C/V5uiWc2eBGyzN7Z8Z0xq3Q1/e6IxYcHDA32OgiZX5/7/f8rVPQQa7aYtm6f0UfnrgKNBg==" "contentHash": "78BmoFm8SK733nq4F/SjqNKkXJHdrg/MslvYfNjJX/nM/mEkltHUzPJRjBE9VI/zghsjFPQxMRPEUaqIgg98zg=="
}, },
"Castle.Core": { "Castle.Core": {
"type": "Transitive", "type": "Transitive",
@@ -97,16 +108,17 @@
}, },
"DiffEngine": { "DiffEngine": {
"type": "Transitive", "type": "Transitive",
"resolved": "18.4.1", "resolved": "16.2.1",
"contentHash": "9/E4N4auQW4iOKPxP6MpGihpuw0uaxfiLLJfraKrqv02cG2LzVx3ocFwIss70mQFwAolrq58zv5NHwMaqT3+3A==", "contentHash": "UfMgXClqOGkPNfth210upiTY18LPCgjsfNrh0Olo5qI+QTkkCO6wHSuOwknxJdKtsWoaJ+E132Y2nzD0PiLWRw==",
"dependencies": { "dependencies": {
"EmptyFiles": "8.17.2" "EmptyFiles": "8.9.1",
"System.Management": "8.0.0"
} }
}, },
"EmptyFiles": { "EmptyFiles": {
"type": "Transitive", "type": "Transitive",
"resolved": "8.17.2", "resolved": "8.9.1",
"contentHash": "2oyDVmM/DU3g0h2kqcV05zjOUfo9AdwPoduIGh0LZL6nXqSN4qhZna2M/aJoYiQrmIznJ52wxYCmxDnWaRZ1JQ==" "contentHash": "GbGf+oH/xiI3C5vJ5TnoA4sx7x7LhtOvN00fxihRZJsj40XuXk2TMz/4m26PfNSJj8JMAqo3BUBirjvam+3xkA=="
}, },
"FSharp.Core": { "FSharp.Core": {
"type": "Transitive", "type": "Transitive",
@@ -115,24 +127,24 @@
}, },
"GraphQL.Client.Abstractions": { "GraphQL.Client.Abstractions": {
"type": "Transitive", "type": "Transitive",
"resolved": "6.1.0", "resolved": "6.0.0",
"contentHash": "Za31wjKLEeROZYJmp0Lmj/TLQ1Yw6x6QM0JHABcuyMC3OSopr34ufayrtdxtbL1a3129FTVFKOFC0hcooSQoJQ==", "contentHash": "h7uzWFORHZ+CCjwr/ThAyXMr0DPpzEANDa4Uo54wqCQ+j7qUKwqYTgOrb1W40sqbvNaZm9v/X7It31SUw0maHA==",
"dependencies": { "dependencies": {
"GraphQL.Primitives": "6.1.0" "GraphQL.Primitives": "6.0.0"
} }
}, },
"GraphQL.Client.Abstractions.Websocket": { "GraphQL.Client.Abstractions.Websocket": {
"type": "Transitive", "type": "Transitive",
"resolved": "6.1.0", "resolved": "6.0.0",
"contentHash": "PjdG3q4MzPsa5NiBOBhuIRMRTo59der5bFmX2r1gSS3RIjytwpooxF2RffFCBh16sqbwuH1/dllDcNG+EJt1qA==", "contentHash": "Nr9bPf8gIOvLuXpqEpqr9z9jslYFJOvd0feHth3/kPqeR3uMbjF5pjiwh4jxyMcxHdr8Pb6QiXkV3hsSyt0v7A==",
"dependencies": { "dependencies": {
"GraphQL.Client.Abstractions": "6.1.0" "GraphQL.Client.Abstractions": "6.0.0"
} }
}, },
"GraphQL.Primitives": { "GraphQL.Primitives": {
"type": "Transitive", "type": "Transitive",
"resolved": "6.1.0", "resolved": "6.0.0",
"contentHash": "L8yQ70Wd9p8hMJvnmpgyZfr2R6Q7S0/lPyEBI1tacJa5XzsoJSVtHdmfsMaHyufwk03hlUsBXgNerAs66kxHdA==" "contentHash": "yg72rrYDapfsIUrul7aF6wwNnTJBOFvuA9VdDTQpPa8AlAriHbufeXYLBcodKjfUdkCnaiggX1U/nEP08Zb5GA=="
}, },
"Microsoft.Build.Tasks.Git": { "Microsoft.Build.Tasks.Git": {
"type": "Transitive", "type": "Transitive",
@@ -141,43 +153,64 @@
}, },
"Microsoft.CodeCoverage": { "Microsoft.CodeCoverage": {
"type": "Transitive", "type": "Transitive",
"resolved": "18.3.0", "resolved": "17.13.0",
"contentHash": "23BNy/vziREC20Wwhb50K7+kZe0m07KlLWDQv4qjJ9tt3QjpDpDIqJFrhYHmMEo9xDkuSp55U/8h4bMF7MiB+g==" "contentHash": "9LIUy0y+DvUmEPtbRDw6Bay3rzwqFV8P4efTrK4CZhQle3M/QwLPjISghfcolmEGAPWxuJi6m98ZEfk4VR4Lfg=="
}, },
"Microsoft.Data.Sqlite.Core": { "Microsoft.Data.Sqlite.Core": {
"type": "Transitive", "type": "Transitive",
"resolved": "10.0.0", "resolved": "7.0.5",
"contentHash": "wPKG/Ym6tSMCo06UOZXzVfeFGzawnOZrTba/R3PfK+RhNuNELZ9I7nFns4WGTtv2kKlrlmmErgJ+kgTXHaNdHg==", "contentHash": "FTerRmQPqHrCrnoUzhBu+E+1DNGwyrAMLqHkAqOOOu5pGfyMOj8qQUBxI/gDtWtG11p49UxSfWmBzRNlwZqfUg==",
"dependencies": { "dependencies": {
"SQLitePCLRaw.core": "2.1.11" "SQLitePCLRaw.core": "2.1.4"
} }
}, },
"Microsoft.Extensions.DependencyInjection.Abstractions": { "Microsoft.Extensions.Configuration": {
"type": "Transitive", "type": "Transitive",
"resolved": "10.0.0", "resolved": "2.2.0",
"contentHash": "L3AdmZ1WOK4XXT5YFPEwyt0ep6l8lGIPs7F5OOBZc77Zqeo01Of7XXICy47628sdVl0v/owxYJTe86DTgFwKCA==" "contentHash": "nOP8R1mVb/6mZtm2qgAJXn/LFm/2kMjHDAg/QJLFG6CuWYJtaD3p1BwQhufBVvRzL9ceJ/xF0SQ0qsI2GkDQAA==",
"dependencies": {
"Microsoft.Extensions.Configuration.Abstractions": "2.2.0"
}
},
"Microsoft.Extensions.Configuration.Abstractions": {
"type": "Transitive",
"resolved": "2.2.0",
"contentHash": "65MrmXCziWaQFrI0UHkQbesrX5wTwf9XPjY5yFm/VkgJKFJ5gqvXRoXjIZcf2wLi5ZlwGz/oMYfyURVCWbM5iw==",
"dependencies": {
"Microsoft.Extensions.Primitives": "2.2.0"
}
},
"Microsoft.Extensions.Configuration.Binder": {
"type": "Transitive",
"resolved": "2.2.0",
"contentHash": "vJ9xvOZCnUAIHcGC3SU35r3HKmHTVIeHzo6u/qzlHAqD8m6xv92MLin4oJntTvkpKxVX3vI1GFFkIQtU3AdlsQ==",
"dependencies": {
"Microsoft.Extensions.Configuration": "2.2.0"
}
}, },
"Microsoft.Extensions.Logging.Abstractions": { "Microsoft.Extensions.Logging.Abstractions": {
"type": "Transitive", "type": "Transitive",
"resolved": "10.0.0", "resolved": "2.2.0",
"contentHash": "FU/IfjDfwaMuKr414SSQNTIti/69bHEMb+QKrskRb26oVqpx3lNFXMjs/RC9ZUuhBhcwDM2BwOgoMw+PZ+beqQ==", "contentHash": "B2WqEox8o+4KUOpL7rZPyh6qYjik8tHi2tN8Z9jZkHzED8ElYgZa/h6K+xliB435SqUcWT290Fr2aa8BtZjn8A=="
"dependencies": {
"Microsoft.Extensions.DependencyInjection.Abstractions": "10.0.0"
}
}, },
"Microsoft.Extensions.Options": { "Microsoft.Extensions.Options": {
"type": "Transitive", "type": "Transitive",
"resolved": "10.0.0", "resolved": "2.2.0",
"contentHash": "8oCAgXOow5XDrY9HaXX1QmH3ORsyZO/ANVHBlhLyCeWTH5Sg4UuqZeOTWJi6484M+LqSx0RqQXDJtdYy2BNiLQ==", "contentHash": "UpZLNLBpIZ0GTebShui7xXYh6DmBHjWM8NxGxZbdQh/bPZ5e6YswqI+bru6BnEL5eWiOdodsXtEz3FROcgi/qg==",
"dependencies": { "dependencies": {
"Microsoft.Extensions.DependencyInjection.Abstractions": "10.0.0", "Microsoft.Extensions.DependencyInjection.Abstractions": "2.2.0",
"Microsoft.Extensions.Primitives": "10.0.0" "Microsoft.Extensions.Primitives": "2.2.0",
"System.ComponentModel.Annotations": "4.5.0"
} }
}, },
"Microsoft.Extensions.Primitives": { "Microsoft.Extensions.Primitives": {
"type": "Transitive", "type": "Transitive",
"resolved": "10.0.0", "resolved": "2.2.0",
"contentHash": "inRnbpCS0nwO/RuoZIAqxQUuyjaknOOnCEZB55KSMMjRhl0RQDttSmLSGsUJN3RQ3ocf5NDLFd2mOQViHqMK5w==" "contentHash": "azyQtqbm4fSaDzZHD/J+V6oWMFaf2tWP4WEGIYePLCMw3+b2RQdj9ybgbQyjCshcitQKQ4lEDOZjmSlTTrHxUg==",
"dependencies": {
"System.Memory": "4.5.1",
"System.Runtime.CompilerServices.Unsafe": "4.5.1"
}
}, },
"Microsoft.IO.RecyclableMemoryStream": { "Microsoft.IO.RecyclableMemoryStream": {
"type": "Transitive", "type": "Transitive",
@@ -191,81 +224,137 @@
}, },
"Microsoft.TestPlatform.ObjectModel": { "Microsoft.TestPlatform.ObjectModel": {
"type": "Transitive", "type": "Transitive",
"resolved": "18.3.0", "resolved": "17.13.0",
"contentHash": "AEIEX2aWdPO9XbtR96eBaJxmXRD9vaI9uQ1T/JbPEKlTAZwYx0ZrMzKyULMdh/HH9Sg03kXCoN7LszQ90o6nPQ==" "contentHash": "bt0E0Dx+iqW97o4A59RCmUmz/5NarJ7LRL+jXbSHod72ibL5XdNm1Ke+UO5tFhBG4VwHLcSjqq9BUSblGNWamw==",
"dependencies": {
"System.Reflection.Metadata": "1.6.0"
}
}, },
"Microsoft.TestPlatform.TestHost": { "Microsoft.TestPlatform.TestHost": {
"type": "Transitive", "type": "Transitive",
"resolved": "18.3.0", "resolved": "17.13.0",
"contentHash": "twmsoelXnp1uWMU3VGip9f0Jr1mZ0PZqgJdF35CIrdYgYrkHIJMV1m8uKyhcdjLdsQDESHAgkR7KhS9i1qpJag==", "contentHash": "9GGw08Dc3AXspjekdyTdZ/wYWFlxbgcF0s7BKxzVX+hzAwpifDOdxM+ceVaaJSQOwqt3jtuNlHn3XTpKUS9x9Q==",
"dependencies": { "dependencies": {
"Microsoft.TestPlatform.ObjectModel": "18.3.0", "Microsoft.TestPlatform.ObjectModel": "17.13.0",
"Newtonsoft.Json": "13.0.3" "Newtonsoft.Json": "13.0.1"
} }
}, },
"Newtonsoft.Json": { "Newtonsoft.Json": {
"type": "Transitive", "type": "Transitive",
"resolved": "13.0.3", "resolved": "13.0.1",
"contentHash": "HrC5BXdl00IP9zeV+0Z848QWPAoCr9P3bDEZguI+gkLcBKAOxix/tLEAAHC+UvDNPv4a2d18lOReHMOagPa+zQ==" "contentHash": "ppPFpBcvxdsfUonNcvITKqLl3bqxWbDCZIzDWHzjpdAHRFfZe0Dw9HmA0+za13IdyrgJwpkDTDA9fHaxOrt20A=="
}, },
"Quibble": { "Quibble": {
"type": "Transitive", "type": "Transitive",
"resolved": "0.3.1", "resolved": "0.3.1",
"contentHash": "LD6bz2p+4O/BQnmD4mqFZrmdN/IjsPo1wUvfmcH46Q05ng+dyMLl3d2ylj0x412F4fpJEtm0Z3EaCAx4FqgNuQ==", "contentHash": "LD6bz2p+4O/BQnmD4mqFZrmdN/IjsPo1wUvfmcH46Q05ng+dyMLl3d2ylj0x412F4fpJEtm0Z3EaCAx4FqgNuQ==",
"dependencies": { "dependencies": {
"FSharp.Core": "7.0.300" "FSharp.Core": "7.0.300",
"System.Text.Json": "7.0.3"
} }
}, },
"SimpleInfoName": { "SimpleInfoName": {
"type": "Transitive", "type": "Transitive",
"resolved": "3.2.0", "resolved": "3.1.0",
"contentHash": "K8ivHRbPWfncijk62Dan/r/z55gwq3aFzqB6yFlD9X0bbpIaacHyHH2cpcIdz0FECUpERUZTwxts0z4gRWpQpA==" "contentHash": "j+ENh86NhxrgDc6T1ueqIR2QOdDkSJY2dbTFyPN/JvIXifB4GHAunlMw/x7P6m7XaXEHr3s+SMZfKBlmnmkO6g=="
}, },
"SQLitePCLRaw.bundle_e_sqlite3": { "SQLitePCLRaw.bundle_e_sqlite3": {
"type": "Transitive", "type": "Transitive",
"resolved": "2.1.11", "resolved": "2.1.4",
"contentHash": "DC4nA7yWnf4UZdgJDF+9Mus4/cb0Y3Sfgi3gDnAoKNAIBwzkskNAbNbyu+u4atT0ruVlZNJfwZmwiEwE5oz9LQ==", "contentHash": "EWI1olKDjFEBMJu0+3wuxwziIAdWDVMYLhuZ3Qs84rrz+DHwD00RzWPZCa+bLnHCf3oJwuFZIRsHT5p236QXww==",
"dependencies": { "dependencies": {
"SQLitePCLRaw.lib.e_sqlite3": "2.1.11", "SQLitePCLRaw.lib.e_sqlite3": "2.1.4",
"SQLitePCLRaw.provider.e_sqlite3": "2.1.11" "SQLitePCLRaw.provider.e_sqlite3": "2.1.4"
} }
}, },
"SQLitePCLRaw.core": { "SQLitePCLRaw.core": {
"type": "Transitive", "type": "Transitive",
"resolved": "2.1.11", "resolved": "2.1.4",
"contentHash": "PK0GLFkfhZzLQeR3PJf71FmhtHox+U3vcY6ZtswoMjrefkB9k6ErNJEnwXqc5KgXDSjige2XXrezqS39gkpQKA==" "contentHash": "inBjvSHo9UDKneGNzfUfDjK08JzlcIhn1+SP5Y3m6cgXpCxXKCJDy6Mka7LpgSV+UZmKSnC8rTwB0SQ0xKu5pA==",
"dependencies": {
"System.Memory": "4.5.3"
}
}, },
"SQLitePCLRaw.lib.e_sqlite3": { "SQLitePCLRaw.lib.e_sqlite3": {
"type": "Transitive", "type": "Transitive",
"resolved": "2.1.11", "resolved": "2.1.4",
"contentHash": "Ev2ytaXiOlWZ4b3R67GZBsemTINslLD1DCJr2xiacpn4tbapu0Q4dHEzSvZSMnVWeE5nlObU3VZN2p81q3XOYQ==" "contentHash": "2C9Q9eX7CPLveJA0rIhf9RXAvu+7nWZu1A2MdG6SD/NOu26TakGgL1nsbc0JAspGijFOo3HoN79xrx8a368fBg=="
}, },
"SQLitePCLRaw.provider.e_sqlite3": { "SQLitePCLRaw.provider.e_sqlite3": {
"type": "Transitive", "type": "Transitive",
"resolved": "2.1.11", "resolved": "2.1.4",
"contentHash": "Y/0ZkR+r0Cg3DQFuCl1RBnv/tmxpIZRU3HUvelPw6MVaKHwYYR8YNvgs0vuNuXCMvlyJ+Fh88U1D4tah1tt6qw==", "contentHash": "CSlb5dUp1FMIkez9Iv5EXzpeq7rHryVNqwJMWnpq87j9zWZexaEMdisDktMsnnrzKM6ahNrsTkjqNodTBPBxtQ==",
"dependencies": { "dependencies": {
"SQLitePCLRaw.core": "2.1.11" "SQLitePCLRaw.core": "2.1.4"
} }
}, },
"System.Buffers": {
"type": "Transitive",
"resolved": "4.6.0",
"contentHash": "lN6tZi7Q46zFzAbRYXTIvfXcyvQQgxnY7Xm6C6xQ9784dEL1amjM6S6Iw4ZpsvesAKnRVsM4scrDQaDqSClkjA=="
},
"System.CodeDom": {
"type": "Transitive",
"resolved": "8.0.0",
"contentHash": "WTlRjL6KWIMr/pAaq3rYqh0TJlzpouaQ/W1eelssHgtlwHAH25jXTkUphTYx9HaIIf7XA6qs/0+YhtLEQRkJ+Q=="
},
"System.ComponentModel.Annotations": {
"type": "Transitive",
"resolved": "4.5.0",
"contentHash": "UxYQ3FGUOtzJ7LfSdnYSFd7+oEv6M8NgUatatIN2HxNtDdlcvFAf+VIq4Of9cDMJEJC0aSRv/x898RYhB4Yppg=="
},
"System.Diagnostics.EventLog": { "System.Diagnostics.EventLog": {
"type": "Transitive", "type": "Transitive",
"resolved": "6.0.0", "resolved": "6.0.0",
"contentHash": "lcyUiXTsETK2ALsZrX+nWuHSIQeazhqPphLfaRxzdGaG93+0kELqpgEHtwWOlQe7+jSFnKwaCAgL4kjeZCQJnw==" "contentHash": "lcyUiXTsETK2ALsZrX+nWuHSIQeazhqPphLfaRxzdGaG93+0kELqpgEHtwWOlQe7+jSFnKwaCAgL4kjeZCQJnw=="
}, },
"System.IO.Hashing": {
"type": "Transitive",
"resolved": "9.0.4",
"contentHash": "WogPvgAFqQORFD8Iyha6RZ+/1QB3dsWRWxbwi8/HHVgiGQ8z0oMWpwe8Kk3Ti+Roe+P6a3sBg+WwBfEsyziZKg=="
},
"System.Management": {
"type": "Transitive",
"resolved": "8.0.0",
"contentHash": "jrK22i5LRzxZCfGb+tGmke2VH7oE0DvcDlJ1HAKYU8cPmD8XnpUT0bYn2Gy98GEhGjtfbR/sxKTVb+dE770pfA==",
"dependencies": {
"System.CodeDom": "8.0.0"
}
},
"System.Memory": {
"type": "Transitive",
"resolved": "4.5.3",
"contentHash": "3oDzvc/zzetpTKWMShs1AADwZjQ/36HnsufHRPcOjyRAAMLDlu2iD33MBI2opxnezcVUtXyqDXXjoFMOU9c7SA=="
},
"System.Reactive": { "System.Reactive": {
"type": "Transitive", "type": "Transitive",
"resolved": "6.0.0", "resolved": "5.0.0",
"contentHash": "31kfaW4ZupZzPsI5PVe77VhnvFF55qgma7KZr/E0iFTs6fmdhhG8j0mgEx620iLTey1EynOkEfnyTjtNEpJzGw==" "contentHash": "erBZjkQHWL9jpasCE/0qKAryzVBJFxGHVBAvgRN1bzM0q2s1S4oYREEEL0Vb+1kA/6BKb5FjUZMp5VXmy+gzkQ=="
},
"System.Reflection.Metadata": {
"type": "Transitive",
"resolved": "1.6.0",
"contentHash": "COC1aiAJjCoA5GBF+QKL2uLqEBew4JsCkQmoHKbN3TlOZKa2fKLz5CpiRQKDz0RsAOEGsVKqOD5bomsXq/4STQ=="
},
"System.Runtime.CompilerServices.Unsafe": {
"type": "Transitive",
"resolved": "4.5.1",
"contentHash": "Zh8t8oqolRaFa9vmOZfdQm/qKejdqz0J9kr7o2Fu0vPeoH3BL1EOXipKWwkWtLT1JPzjByrF19fGuFlNbmPpiw=="
},
"System.Text.Encodings.Web": {
"type": "Transitive",
"resolved": "8.0.0",
"contentHash": "yev/k9GHAEGx2Rg3/tU6MQh4HGBXJs70y7j1LaM1i/ER9po+6nnQ6RRqTJn1E7Xu0fbIFK80Nh5EoODxrbxwBQ=="
}, },
"Verify": { "Verify": {
"type": "Transitive", "type": "Transitive",
"resolved": "31.12.5", "resolved": "29.4.0",
"contentHash": "Luht+42xCM969Scwl7XQ1teZb/7w9XbQg/4eqVQ2WGTWc7mfheENb8PnaX9yJCNROyb1POjQIrQogO+wtf34mg==", "contentHash": "wlqJ6ygXORa3lrAaErTA4EWkDcK9pBG2k5iC/I5F2UpWfyV7aXw/+SwGiWYe4XSk9d7VObe4xi4+0AV9rLRsBw==",
"dependencies": { "dependencies": {
"Argon": "0.33.5", "Argon": "0.28.0",
"DiffEngine": "18.4.1", "DiffEngine": "16.2.1",
"SimpleInfoName": "3.2.0" "SimpleInfoName": "3.1.0",
"System.IO.Hashing": "9.0.4"
} }
}, },
"xunit.abstractions": { "xunit.abstractions": {
@@ -298,10 +387,10 @@
"speckle.sdk": { "speckle.sdk": {
"type": "Project", "type": "Project",
"dependencies": { "dependencies": {
"GraphQL.Client": "[6.1.0, )", "GraphQL.Client": "[6.0.0, )",
"Microsoft.Data.Sqlite": "[10.0.0, )", "Microsoft.Data.Sqlite": "[7.0.5, )",
"Microsoft.Extensions.DependencyInjection": "[10.0.0, )", "Microsoft.Extensions.DependencyInjection.Abstractions": "[2.2.0, )",
"Microsoft.Extensions.Logging": "[10.0.0, )", "Microsoft.Extensions.Logging": "[2.2.0, )",
"Speckle.DoubleNumerics": "[4.1.0, )", "Speckle.DoubleNumerics": "[4.1.0, )",
"Speckle.Newtonsoft.Json": "[13.0.2, )", "Speckle.Newtonsoft.Json": "[13.0.2, )",
"Speckle.Sdk.Dependencies": "[1.0.0, )" "Speckle.Sdk.Dependencies": "[1.0.0, )"
@@ -316,49 +405,52 @@
"Moq": "[4.20.72, )", "Moq": "[4.20.72, )",
"Speckle.Sdk": "[1.0.0, )", "Speckle.Sdk": "[1.0.0, )",
"Verify.Quibble": "[2.1.1, )", "Verify.Quibble": "[2.1.1, )",
"Verify.Xunit": "[31.12.5, )" "Verify.Xunit": "[29.4.0, )"
} }
}, },
"GraphQL.Client": { "GraphQL.Client": {
"type": "CentralTransitive", "type": "CentralTransitive",
"requested": "[6.1.0, )", "requested": "[6.0.0, )",
"resolved": "6.1.0", "resolved": "6.0.0",
"contentHash": "oKliAxtNuZDMxO9079mjSbwA0YwhjXBzVnVPuNZ3HI4OllO++CcOLT30l90mM/fxCAMaa8GU4ZYMwD9YjLkyiw==", "contentHash": "8yPNBbuVBpTptivyAlak4GZvbwbUcjeQTL4vN1HKHRuOykZ4r7l5fcLS6vpyPyLn0x8FsL31xbOIKyxbmR9rbA==",
"dependencies": { "dependencies": {
"GraphQL.Client.Abstractions": "6.1.0", "GraphQL.Client.Abstractions": "6.0.0",
"GraphQL.Client.Abstractions.Websocket": "6.1.0", "GraphQL.Client.Abstractions.Websocket": "6.0.0",
"System.Reactive": "6.0.0" "System.Reactive": "5.0.0"
} }
}, },
"Microsoft.CSharp": {
"type": "CentralTransitive",
"requested": "[4.7.0, )",
"resolved": "4.7.0",
"contentHash": "pTj+D3uJWyN3My70i2Hqo+OXixq3Os2D1nJ2x92FFo6sk8fYS1m1WLNTs0Dc1uPaViH0YvEEwvzddQ7y4rhXmA=="
},
"Microsoft.Data.Sqlite": { "Microsoft.Data.Sqlite": {
"type": "CentralTransitive", "type": "CentralTransitive",
"requested": "[7.0.5, )", "requested": "[7.0.5, )",
"resolved": "10.0.0", "resolved": "7.0.5",
"contentHash": "I/azQ5WjwoLvSlTyDydkhARPSjYJN8jkXRjR5D92OeyTLbTrQ1K93rgf6XU+HYWHZA6lBI9SUOfl69OqEHb4ow==", "contentHash": "KGxbPeWsQMnmQy43DSBxAFtHz3l2JX8EWBSGUCvT3CuZ8KsuzbkqMIJMDOxWtG8eZSoCDI04aiVQjWuuV8HmSw==",
"dependencies": { "dependencies": {
"Microsoft.Data.Sqlite.Core": "10.0.0", "Microsoft.Data.Sqlite.Core": "7.0.5",
"SQLitePCLRaw.bundle_e_sqlite3": "2.1.11", "SQLitePCLRaw.bundle_e_sqlite3": "2.1.4"
"SQLitePCLRaw.core": "2.1.11"
} }
}, },
"Microsoft.Extensions.DependencyInjection": { "Microsoft.Extensions.DependencyInjection.Abstractions": {
"type": "CentralTransitive", "type": "CentralTransitive",
"requested": "[10.0.6, )", "requested": "[2.2.0, )",
"resolved": "10.0.0", "resolved": "2.2.0",
"contentHash": "f0RBabswJq+gRu5a+hWIobrLWiUYPKMhCD9WO3sYBAdSy3FFH14LMvLVFZc2kPSCimBLxSuitUhsd6tb0TAY6A==", "contentHash": "f9hstgjVmr6rmrfGSpfsVOl2irKAgr1QjrSi3FgnS7kulxband50f2brRLwySAQTADPZeTdow0mpSMcoAdadCw=="
"dependencies": {
"Microsoft.Extensions.DependencyInjection.Abstractions": "10.0.0"
}
}, },
"Microsoft.Extensions.Logging": { "Microsoft.Extensions.Logging": {
"type": "CentralTransitive", "type": "CentralTransitive",
"requested": "[10.0.6, )", "requested": "[2.2.0, )",
"resolved": "10.0.0", "resolved": "2.2.0",
"contentHash": "BStFkd5CcnEtarlcgYDBcFzGYCuuNMzPs02wN3WBsOFoYIEmYoUdAiU+au6opzoqfTYJsMTW00AeqDdnXH2CvA==", "contentHash": "Nxqhadc9FCmFHzU+fz3oc8sFlE6IadViYg8dfUdGzJZ2JUxnCsRghBhhOWdM4B2zSZqEc+0BjliBh/oNdRZuig==",
"dependencies": { "dependencies": {
"Microsoft.Extensions.DependencyInjection": "10.0.0", "Microsoft.Extensions.Configuration.Binder": "2.2.0",
"Microsoft.Extensions.Logging.Abstractions": "10.0.0", "Microsoft.Extensions.DependencyInjection.Abstractions": "2.2.0",
"Microsoft.Extensions.Options": "10.0.0" "Microsoft.Extensions.Logging.Abstractions": "2.2.0",
"Microsoft.Extensions.Options": "2.2.0"
} }
}, },
"Speckle.DoubleNumerics": { "Speckle.DoubleNumerics": {
@@ -373,6 +465,15 @@
"resolved": "13.0.2", "resolved": "13.0.2",
"contentHash": "g1BejUZwax5PRfL6xHgLEK23sqHWOgOj9hE7RvfRRlN00AGt8GnPYt8HedSK7UB3HiRW8zCA9Pn0iiYxCK24BA==" "contentHash": "g1BejUZwax5PRfL6xHgLEK23sqHWOgOj9hE7RvfRRlN00AGt8GnPYt8HedSK7UB3HiRW8zCA9Pn0iiYxCK24BA=="
}, },
"System.Text.Json": {
"type": "CentralTransitive",
"requested": "[8.0.5, )",
"resolved": "8.0.4",
"contentHash": "bAkhgDJ88XTsqczoxEMliSrpijKZHhbJQldhAmObj/RbrN3sU5dcokuXmWJWsdQAhiMJ9bTayWsL1C9fbbCRhw==",
"dependencies": {
"System.Text.Encodings.Web": "8.0.0"
}
},
"Verify.Quibble": { "Verify.Quibble": {
"type": "CentralTransitive", "type": "CentralTransitive",
"requested": "[2.1.1, )", "requested": "[2.1.1, )",
@@ -380,19 +481,21 @@
"contentHash": "Z8bVwFICa3Dog6Mcnx0wlrn4Y+CFpQXx1f+ijfLn6/v4q00q+jLm9Gu/nVyUFuc75cjn6ieI08UrqXKcR9fTYw==", "contentHash": "Z8bVwFICa3Dog6Mcnx0wlrn4Y+CFpQXx1f+ijfLn6/v4q00q+jLm9Gu/nVyUFuc75cjn6ieI08UrqXKcR9fTYw==",
"dependencies": { "dependencies": {
"Quibble": "0.3.1", "Quibble": "0.3.1",
"System.Text.Json": "8.0.4",
"Verify": "26.1.1" "Verify": "26.1.1"
} }
}, },
"Verify.Xunit": { "Verify.Xunit": {
"type": "CentralTransitive", "type": "CentralTransitive",
"requested": "[31.12.5, )", "requested": "[29.4.0, )",
"resolved": "31.12.5", "resolved": "29.4.0",
"contentHash": "i1d2bPonW/3ZzzEZYTWgv8mjPyRWpKaPsIxxp/kYK7Nq8ZeSEmkLA5BkGwInDlybHkxsviFu+s8iF20y+yUcZw==", "contentHash": "P8HYW7aromKGm90Cgx0XKL3qKKmYZHDwHTQfBfDCCPnhNlVWevJzrpuUQ0+3vTVdRAtsts2a1OE/tD+3yjJbHA==",
"dependencies": { "dependencies": {
"Argon": "0.33.5", "Argon": "0.28.0",
"DiffEngine": "18.4.1", "DiffEngine": "16.2.1",
"SimpleInfoName": "3.2.0", "SimpleInfoName": "3.1.0",
"Verify": "31.12.5", "System.IO.Hashing": "9.0.4",
"Verify": "29.4.0",
"xunit.abstractions": "2.0.3", "xunit.abstractions": "2.0.3",
"xunit.extensibility.execution": "2.9.3" "xunit.extensibility.execution": "2.9.3"
} }
@@ -1,6 +1,6 @@
<Project Sdk="Microsoft.NET.Sdk"> <Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup> <PropertyGroup>
<TargetFrameworks>net10.0;net8.0</TargetFrameworks> <TargetFramework>net8.0</TargetFramework>
<TestProjectAnalyserRules>true</TestProjectAnalyserRules> <TestProjectAnalyserRules>true</TestProjectAnalyserRules>
</PropertyGroup> </PropertyGroup>
<ItemGroup> <ItemGroup>
+127 -357
View File
@@ -1,310 +1,6 @@
{ {
"version": 2, "version": 2,
"dependencies": { "dependencies": {
"net10.0": {
"Microsoft.SourceLink.GitHub": {
"type": "Direct",
"requested": "[8.0.0, )",
"resolved": "8.0.0",
"contentHash": "G5q7OqtwIyGTkeIOAc3u2ZuV/kicQaec5EaRnc0pIeSnh9LUjj+PYQrJYBURvDt7twGl2PKA7nSN0kz1Zw5bnQ==",
"dependencies": {
"Microsoft.Build.Tasks.Git": "8.0.0",
"Microsoft.SourceLink.Common": "8.0.0"
}
},
"Moq": {
"type": "Direct",
"requested": "[4.20.72, )",
"resolved": "4.20.72",
"contentHash": "EA55cjyNn8eTNWrgrdZJH5QLFp2L43oxl1tlkoYUKIE9pRwL784OWiTXeCV5ApS+AMYEAlt7Fo03A2XfouvHmQ==",
"dependencies": {
"Castle.Core": "5.1.1"
}
},
"PolySharp": {
"type": "Direct",
"requested": "[1.15.0, )",
"resolved": "1.15.0",
"contentHash": "FbU0El+EEjdpuIX4iDbeS7ki1uzpJPx8vbqOzEtqnl1GZeAGJfq+jCbxeJL2y0EPnUNk8dRnnqR2xnYXg9Tf+g=="
},
"Speckle.InterfaceGenerator": {
"type": "Direct",
"requested": "[0.9.6, )",
"resolved": "0.9.6",
"contentHash": "HKH7tYrYYlCK1ct483hgxERAdVdMtl7gUKW9ijWXxA1UsYR4Z+TrRHYmzZ9qmpu1NnTycSrp005NYM78GDKV1w=="
},
"Verify.Quibble": {
"type": "Direct",
"requested": "[2.1.1, )",
"resolved": "2.1.1",
"contentHash": "Z8bVwFICa3Dog6Mcnx0wlrn4Y+CFpQXx1f+ijfLn6/v4q00q+jLm9Gu/nVyUFuc75cjn6ieI08UrqXKcR9fTYw==",
"dependencies": {
"Quibble": "0.3.1",
"Verify": "26.1.1"
}
},
"Verify.Xunit": {
"type": "Direct",
"requested": "[31.12.5, )",
"resolved": "31.12.5",
"contentHash": "i1d2bPonW/3ZzzEZYTWgv8mjPyRWpKaPsIxxp/kYK7Nq8ZeSEmkLA5BkGwInDlybHkxsviFu+s8iF20y+yUcZw==",
"dependencies": {
"Argon": "0.33.5",
"DiffEngine": "18.4.1",
"SimpleInfoName": "3.2.0",
"Verify": "31.12.5",
"xunit.abstractions": "2.0.3",
"xunit.extensibility.execution": "2.9.3"
}
},
"Argon": {
"type": "Transitive",
"resolved": "0.33.5",
"contentHash": "J6821zxO+EqMzO9C/V5uiWc2eBGyzN7Z8Z0xq3Q1/e6IxYcHDA32OgiZX5/7/f8rVPQQa7aYtm6f0UfnrgKNBg=="
},
"Castle.Core": {
"type": "Transitive",
"resolved": "5.1.1",
"contentHash": "rpYtIczkzGpf+EkZgDr9CClTdemhsrwA/W5hMoPjLkRFnXzH44zDLoovXeKtmxb1ykXK9aJVODSpiJml8CTw2g==",
"dependencies": {
"System.Diagnostics.EventLog": "6.0.0"
}
},
"DiffEngine": {
"type": "Transitive",
"resolved": "18.4.1",
"contentHash": "9/E4N4auQW4iOKPxP6MpGihpuw0uaxfiLLJfraKrqv02cG2LzVx3ocFwIss70mQFwAolrq58zv5NHwMaqT3+3A==",
"dependencies": {
"EmptyFiles": "8.17.2"
}
},
"EmptyFiles": {
"type": "Transitive",
"resolved": "8.17.2",
"contentHash": "2oyDVmM/DU3g0h2kqcV05zjOUfo9AdwPoduIGh0LZL6nXqSN4qhZna2M/aJoYiQrmIznJ52wxYCmxDnWaRZ1JQ=="
},
"FSharp.Core": {
"type": "Transitive",
"resolved": "7.0.300",
"contentHash": "8vvItREJ1l5lcp3vBCSJ1mFevVAhR48I34DuF/EoUa7o1KlFpQpagyuZkVYMAsHPIjdp47ZxM9sI4eqeXaeWkA=="
},
"GraphQL.Client.Abstractions": {
"type": "Transitive",
"resolved": "6.1.0",
"contentHash": "Za31wjKLEeROZYJmp0Lmj/TLQ1Yw6x6QM0JHABcuyMC3OSopr34ufayrtdxtbL1a3129FTVFKOFC0hcooSQoJQ==",
"dependencies": {
"GraphQL.Primitives": "6.1.0"
}
},
"GraphQL.Client.Abstractions.Websocket": {
"type": "Transitive",
"resolved": "6.1.0",
"contentHash": "PjdG3q4MzPsa5NiBOBhuIRMRTo59der5bFmX2r1gSS3RIjytwpooxF2RffFCBh16sqbwuH1/dllDcNG+EJt1qA==",
"dependencies": {
"GraphQL.Client.Abstractions": "6.1.0"
}
},
"GraphQL.Primitives": {
"type": "Transitive",
"resolved": "6.1.0",
"contentHash": "L8yQ70Wd9p8hMJvnmpgyZfr2R6Q7S0/lPyEBI1tacJa5XzsoJSVtHdmfsMaHyufwk03hlUsBXgNerAs66kxHdA=="
},
"Microsoft.Build.Tasks.Git": {
"type": "Transitive",
"resolved": "8.0.0",
"contentHash": "bZKfSIKJRXLTuSzLudMFte/8CempWjVamNUR5eHJizsy+iuOuO/k2gnh7W0dHJmYY0tBf+gUErfluCv5mySAOQ=="
},
"Microsoft.Data.Sqlite.Core": {
"type": "Transitive",
"resolved": "10.0.0",
"contentHash": "wPKG/Ym6tSMCo06UOZXzVfeFGzawnOZrTba/R3PfK+RhNuNELZ9I7nFns4WGTtv2kKlrlmmErgJ+kgTXHaNdHg==",
"dependencies": {
"SQLitePCLRaw.core": "2.1.11"
}
},
"Microsoft.Extensions.DependencyInjection.Abstractions": {
"type": "Transitive",
"resolved": "10.0.0",
"contentHash": "L3AdmZ1WOK4XXT5YFPEwyt0ep6l8lGIPs7F5OOBZc77Zqeo01Of7XXICy47628sdVl0v/owxYJTe86DTgFwKCA=="
},
"Microsoft.Extensions.Logging.Abstractions": {
"type": "Transitive",
"resolved": "10.0.0",
"contentHash": "FU/IfjDfwaMuKr414SSQNTIti/69bHEMb+QKrskRb26oVqpx3lNFXMjs/RC9ZUuhBhcwDM2BwOgoMw+PZ+beqQ==",
"dependencies": {
"Microsoft.Extensions.DependencyInjection.Abstractions": "10.0.0"
}
},
"Microsoft.Extensions.Options": {
"type": "Transitive",
"resolved": "10.0.0",
"contentHash": "8oCAgXOow5XDrY9HaXX1QmH3ORsyZO/ANVHBlhLyCeWTH5Sg4UuqZeOTWJi6484M+LqSx0RqQXDJtdYy2BNiLQ==",
"dependencies": {
"Microsoft.Extensions.DependencyInjection.Abstractions": "10.0.0",
"Microsoft.Extensions.Primitives": "10.0.0"
}
},
"Microsoft.Extensions.Primitives": {
"type": "Transitive",
"resolved": "10.0.0",
"contentHash": "inRnbpCS0nwO/RuoZIAqxQUuyjaknOOnCEZB55KSMMjRhl0RQDttSmLSGsUJN3RQ3ocf5NDLFd2mOQViHqMK5w=="
},
"Microsoft.SourceLink.Common": {
"type": "Transitive",
"resolved": "8.0.0",
"contentHash": "dk9JPxTCIevS75HyEQ0E4OVAFhB2N+V9ShCXf8Q6FkUQZDkgLI12y679Nym1YqsiSysuQskT7Z+6nUf3yab6Vw=="
},
"Quibble": {
"type": "Transitive",
"resolved": "0.3.1",
"contentHash": "LD6bz2p+4O/BQnmD4mqFZrmdN/IjsPo1wUvfmcH46Q05ng+dyMLl3d2ylj0x412F4fpJEtm0Z3EaCAx4FqgNuQ==",
"dependencies": {
"FSharp.Core": "7.0.300"
}
},
"SimpleInfoName": {
"type": "Transitive",
"resolved": "3.2.0",
"contentHash": "K8ivHRbPWfncijk62Dan/r/z55gwq3aFzqB6yFlD9X0bbpIaacHyHH2cpcIdz0FECUpERUZTwxts0z4gRWpQpA=="
},
"SQLitePCLRaw.bundle_e_sqlite3": {
"type": "Transitive",
"resolved": "2.1.11",
"contentHash": "DC4nA7yWnf4UZdgJDF+9Mus4/cb0Y3Sfgi3gDnAoKNAIBwzkskNAbNbyu+u4atT0ruVlZNJfwZmwiEwE5oz9LQ==",
"dependencies": {
"SQLitePCLRaw.lib.e_sqlite3": "2.1.11",
"SQLitePCLRaw.provider.e_sqlite3": "2.1.11"
}
},
"SQLitePCLRaw.core": {
"type": "Transitive",
"resolved": "2.1.11",
"contentHash": "PK0GLFkfhZzLQeR3PJf71FmhtHox+U3vcY6ZtswoMjrefkB9k6ErNJEnwXqc5KgXDSjige2XXrezqS39gkpQKA=="
},
"SQLitePCLRaw.lib.e_sqlite3": {
"type": "Transitive",
"resolved": "2.1.11",
"contentHash": "Ev2ytaXiOlWZ4b3R67GZBsemTINslLD1DCJr2xiacpn4tbapu0Q4dHEzSvZSMnVWeE5nlObU3VZN2p81q3XOYQ=="
},
"SQLitePCLRaw.provider.e_sqlite3": {
"type": "Transitive",
"resolved": "2.1.11",
"contentHash": "Y/0ZkR+r0Cg3DQFuCl1RBnv/tmxpIZRU3HUvelPw6MVaKHwYYR8YNvgs0vuNuXCMvlyJ+Fh88U1D4tah1tt6qw==",
"dependencies": {
"SQLitePCLRaw.core": "2.1.11"
}
},
"System.Diagnostics.EventLog": {
"type": "Transitive",
"resolved": "6.0.0",
"contentHash": "lcyUiXTsETK2ALsZrX+nWuHSIQeazhqPphLfaRxzdGaG93+0kELqpgEHtwWOlQe7+jSFnKwaCAgL4kjeZCQJnw=="
},
"System.Reactive": {
"type": "Transitive",
"resolved": "6.0.0",
"contentHash": "31kfaW4ZupZzPsI5PVe77VhnvFF55qgma7KZr/E0iFTs6fmdhhG8j0mgEx620iLTey1EynOkEfnyTjtNEpJzGw=="
},
"Verify": {
"type": "Transitive",
"resolved": "31.12.5",
"contentHash": "Luht+42xCM969Scwl7XQ1teZb/7w9XbQg/4eqVQ2WGTWc7mfheENb8PnaX9yJCNROyb1POjQIrQogO+wtf34mg==",
"dependencies": {
"Argon": "0.33.5",
"DiffEngine": "18.4.1",
"SimpleInfoName": "3.2.0"
}
},
"xunit.abstractions": {
"type": "Transitive",
"resolved": "2.0.3",
"contentHash": "pot1I4YOxlWjIb5jmwvvQNbTrZ3lJQ+jUGkGjWE3hEFM0l5gOnBWS+H3qsex68s5cO52g+44vpGzhAt+42vwKg=="
},
"xunit.extensibility.core": {
"type": "Transitive",
"resolved": "2.9.3",
"contentHash": "kf3si0YTn2a8J8eZNb+zFpwfoyvIrQ7ivNk5ZYA5yuYk1bEtMe4DxJ2CF/qsRgmEnDr7MnW1mxylBaHTZ4qErA==",
"dependencies": {
"xunit.abstractions": "2.0.3"
}
},
"xunit.extensibility.execution": {
"type": "Transitive",
"resolved": "2.9.3",
"contentHash": "yMb6vMESlSrE3Wfj7V6cjQ3S4TXdXpRqYeNEI3zsX31uTsGMJjEw6oD5F5u1cHnMptjhEECnmZSsPxB6ChZHDQ==",
"dependencies": {
"xunit.extensibility.core": "[2.9.3]"
}
},
"speckle.sdk": {
"type": "Project",
"dependencies": {
"GraphQL.Client": "[6.1.0, )",
"Microsoft.Data.Sqlite": "[10.0.0, )",
"Microsoft.Extensions.DependencyInjection": "[10.0.0, )",
"Microsoft.Extensions.Logging": "[10.0.0, )",
"Speckle.DoubleNumerics": "[4.1.0, )",
"Speckle.Newtonsoft.Json": "[13.0.2, )",
"Speckle.Sdk.Dependencies": "[1.0.0, )"
}
},
"speckle.sdk.dependencies": {
"type": "Project"
},
"GraphQL.Client": {
"type": "CentralTransitive",
"requested": "[6.1.0, )",
"resolved": "6.1.0",
"contentHash": "oKliAxtNuZDMxO9079mjSbwA0YwhjXBzVnVPuNZ3HI4OllO++CcOLT30l90mM/fxCAMaa8GU4ZYMwD9YjLkyiw==",
"dependencies": {
"GraphQL.Client.Abstractions": "6.1.0",
"GraphQL.Client.Abstractions.Websocket": "6.1.0",
"System.Reactive": "6.0.0"
}
},
"Microsoft.Data.Sqlite": {
"type": "CentralTransitive",
"requested": "[7.0.5, )",
"resolved": "10.0.0",
"contentHash": "I/azQ5WjwoLvSlTyDydkhARPSjYJN8jkXRjR5D92OeyTLbTrQ1K93rgf6XU+HYWHZA6lBI9SUOfl69OqEHb4ow==",
"dependencies": {
"Microsoft.Data.Sqlite.Core": "10.0.0",
"SQLitePCLRaw.bundle_e_sqlite3": "2.1.11",
"SQLitePCLRaw.core": "2.1.11"
}
},
"Microsoft.Extensions.DependencyInjection": {
"type": "CentralTransitive",
"requested": "[10.0.6, )",
"resolved": "10.0.0",
"contentHash": "f0RBabswJq+gRu5a+hWIobrLWiUYPKMhCD9WO3sYBAdSy3FFH14LMvLVFZc2kPSCimBLxSuitUhsd6tb0TAY6A==",
"dependencies": {
"Microsoft.Extensions.DependencyInjection.Abstractions": "10.0.0"
}
},
"Microsoft.Extensions.Logging": {
"type": "CentralTransitive",
"requested": "[10.0.6, )",
"resolved": "10.0.0",
"contentHash": "BStFkd5CcnEtarlcgYDBcFzGYCuuNMzPs02wN3WBsOFoYIEmYoUdAiU+au6opzoqfTYJsMTW00AeqDdnXH2CvA==",
"dependencies": {
"Microsoft.Extensions.DependencyInjection": "10.0.0",
"Microsoft.Extensions.Logging.Abstractions": "10.0.0",
"Microsoft.Extensions.Options": "10.0.0"
}
},
"Speckle.DoubleNumerics": {
"type": "CentralTransitive",
"requested": "[4.1.0, )",
"resolved": "4.1.0",
"contentHash": "20DtS+FsDRsOD9+AU3TwNFZ0qrKo5f6f7B5ZR9wStsIHHHC9k7DpjbCvuNtmnSjx54MD+TJC7wV2f5iyGVPj1A=="
},
"Speckle.Newtonsoft.Json": {
"type": "CentralTransitive",
"requested": "[13.0.2, )",
"resolved": "13.0.2",
"contentHash": "g1BejUZwax5PRfL6xHgLEK23sqHWOgOj9hE7RvfRRlN00AGt8GnPYt8HedSK7UB3HiRW8zCA9Pn0iiYxCK24BA=="
}
},
"net8.0": { "net8.0": {
"Microsoft.SourceLink.GitHub": { "Microsoft.SourceLink.GitHub": {
"type": "Direct", "type": "Direct",
@@ -344,27 +40,29 @@
"contentHash": "Z8bVwFICa3Dog6Mcnx0wlrn4Y+CFpQXx1f+ijfLn6/v4q00q+jLm9Gu/nVyUFuc75cjn6ieI08UrqXKcR9fTYw==", "contentHash": "Z8bVwFICa3Dog6Mcnx0wlrn4Y+CFpQXx1f+ijfLn6/v4q00q+jLm9Gu/nVyUFuc75cjn6ieI08UrqXKcR9fTYw==",
"dependencies": { "dependencies": {
"Quibble": "0.3.1", "Quibble": "0.3.1",
"System.Text.Json": "8.0.4",
"Verify": "26.1.1" "Verify": "26.1.1"
} }
}, },
"Verify.Xunit": { "Verify.Xunit": {
"type": "Direct", "type": "Direct",
"requested": "[31.12.5, )", "requested": "[29.4.0, )",
"resolved": "31.12.5", "resolved": "29.4.0",
"contentHash": "i1d2bPonW/3ZzzEZYTWgv8mjPyRWpKaPsIxxp/kYK7Nq8ZeSEmkLA5BkGwInDlybHkxsviFu+s8iF20y+yUcZw==", "contentHash": "P8HYW7aromKGm90Cgx0XKL3qKKmYZHDwHTQfBfDCCPnhNlVWevJzrpuUQ0+3vTVdRAtsts2a1OE/tD+3yjJbHA==",
"dependencies": { "dependencies": {
"Argon": "0.33.5", "Argon": "0.28.0",
"DiffEngine": "18.4.1", "DiffEngine": "16.2.1",
"SimpleInfoName": "3.2.0", "SimpleInfoName": "3.1.0",
"Verify": "31.12.5", "System.IO.Hashing": "9.0.4",
"Verify": "29.4.0",
"xunit.abstractions": "2.0.3", "xunit.abstractions": "2.0.3",
"xunit.extensibility.execution": "2.9.3" "xunit.extensibility.execution": "2.9.3"
} }
}, },
"Argon": { "Argon": {
"type": "Transitive", "type": "Transitive",
"resolved": "0.33.5", "resolved": "0.28.0",
"contentHash": "J6821zxO+EqMzO9C/V5uiWc2eBGyzN7Z8Z0xq3Q1/e6IxYcHDA32OgiZX5/7/f8rVPQQa7aYtm6f0UfnrgKNBg==" "contentHash": "78BmoFm8SK733nq4F/SjqNKkXJHdrg/MslvYfNjJX/nM/mEkltHUzPJRjBE9VI/zghsjFPQxMRPEUaqIgg98zg=="
}, },
"Castle.Core": { "Castle.Core": {
"type": "Transitive", "type": "Transitive",
@@ -376,16 +74,17 @@
}, },
"DiffEngine": { "DiffEngine": {
"type": "Transitive", "type": "Transitive",
"resolved": "18.4.1", "resolved": "16.2.1",
"contentHash": "9/E4N4auQW4iOKPxP6MpGihpuw0uaxfiLLJfraKrqv02cG2LzVx3ocFwIss70mQFwAolrq58zv5NHwMaqT3+3A==", "contentHash": "UfMgXClqOGkPNfth210upiTY18LPCgjsfNrh0Olo5qI+QTkkCO6wHSuOwknxJdKtsWoaJ+E132Y2nzD0PiLWRw==",
"dependencies": { "dependencies": {
"EmptyFiles": "8.17.2" "EmptyFiles": "8.9.1",
"System.Management": "8.0.0"
} }
}, },
"EmptyFiles": { "EmptyFiles": {
"type": "Transitive", "type": "Transitive",
"resolved": "8.17.2", "resolved": "8.9.1",
"contentHash": "2oyDVmM/DU3g0h2kqcV05zjOUfo9AdwPoduIGh0LZL6nXqSN4qhZna2M/aJoYiQrmIznJ52wxYCmxDnWaRZ1JQ==" "contentHash": "GbGf+oH/xiI3C5vJ5TnoA4sx7x7LhtOvN00fxihRZJsj40XuXk2TMz/4m26PfNSJj8JMAqo3BUBirjvam+3xkA=="
}, },
"FSharp.Core": { "FSharp.Core": {
"type": "Transitive", "type": "Transitive",
@@ -426,32 +125,53 @@
"SQLitePCLRaw.core": "2.1.4" "SQLitePCLRaw.core": "2.1.4"
} }
}, },
"Microsoft.Extensions.DependencyInjection.Abstractions": { "Microsoft.Extensions.Configuration": {
"type": "Transitive", "type": "Transitive",
"resolved": "8.0.0", "resolved": "2.2.0",
"contentHash": "cjWrLkJXK0rs4zofsK4bSdg+jhDLTaxrkXu4gS6Y7MAlCvRyNNgwY/lJi5RDlQOnSZweHqoyvgvbdvQsRIW+hg==" "contentHash": "nOP8R1mVb/6mZtm2qgAJXn/LFm/2kMjHDAg/QJLFG6CuWYJtaD3p1BwQhufBVvRzL9ceJ/xF0SQ0qsI2GkDQAA==",
"dependencies": {
"Microsoft.Extensions.Configuration.Abstractions": "2.2.0"
}
},
"Microsoft.Extensions.Configuration.Abstractions": {
"type": "Transitive",
"resolved": "2.2.0",
"contentHash": "65MrmXCziWaQFrI0UHkQbesrX5wTwf9XPjY5yFm/VkgJKFJ5gqvXRoXjIZcf2wLi5ZlwGz/oMYfyURVCWbM5iw==",
"dependencies": {
"Microsoft.Extensions.Primitives": "2.2.0"
}
},
"Microsoft.Extensions.Configuration.Binder": {
"type": "Transitive",
"resolved": "2.2.0",
"contentHash": "vJ9xvOZCnUAIHcGC3SU35r3HKmHTVIeHzo6u/qzlHAqD8m6xv92MLin4oJntTvkpKxVX3vI1GFFkIQtU3AdlsQ==",
"dependencies": {
"Microsoft.Extensions.Configuration": "2.2.0"
}
}, },
"Microsoft.Extensions.Logging.Abstractions": { "Microsoft.Extensions.Logging.Abstractions": {
"type": "Transitive", "type": "Transitive",
"resolved": "8.0.0", "resolved": "2.2.0",
"contentHash": "arDBqTgFCyS0EvRV7O3MZturChstm50OJ0y9bDJvAcmEPJm0FFpFyjU/JLYyStNGGey081DvnQYlncNX5SJJGA==", "contentHash": "B2WqEox8o+4KUOpL7rZPyh6qYjik8tHi2tN8Z9jZkHzED8ElYgZa/h6K+xliB435SqUcWT290Fr2aa8BtZjn8A=="
"dependencies": {
"Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.0"
}
}, },
"Microsoft.Extensions.Options": { "Microsoft.Extensions.Options": {
"type": "Transitive", "type": "Transitive",
"resolved": "8.0.0", "resolved": "2.2.0",
"contentHash": "JOVOfqpnqlVLUzINQ2fox8evY2SKLYJ3BV8QDe/Jyp21u1T7r45x/R/5QdteURMR5r01GxeJSBBUOCOyaNXA3g==", "contentHash": "UpZLNLBpIZ0GTebShui7xXYh6DmBHjWM8NxGxZbdQh/bPZ5e6YswqI+bru6BnEL5eWiOdodsXtEz3FROcgi/qg==",
"dependencies": { "dependencies": {
"Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.0", "Microsoft.Extensions.DependencyInjection.Abstractions": "2.2.0",
"Microsoft.Extensions.Primitives": "8.0.0" "Microsoft.Extensions.Primitives": "2.2.0",
"System.ComponentModel.Annotations": "4.5.0"
} }
}, },
"Microsoft.Extensions.Primitives": { "Microsoft.Extensions.Primitives": {
"type": "Transitive", "type": "Transitive",
"resolved": "8.0.0", "resolved": "2.2.0",
"contentHash": "bXJEZrW9ny8vjMF1JV253WeLhpEVzFo1lyaZu1vQ4ZxWUlVvknZ/+ftFgVheLubb4eZPSwwxBeqS1JkCOjxd8g==" "contentHash": "azyQtqbm4fSaDzZHD/J+V6oWMFaf2tWP4WEGIYePLCMw3+b2RQdj9ybgbQyjCshcitQKQ4lEDOZjmSlTTrHxUg==",
"dependencies": {
"System.Memory": "4.5.1",
"System.Runtime.CompilerServices.Unsafe": "4.5.1"
}
}, },
"Microsoft.SourceLink.Common": { "Microsoft.SourceLink.Common": {
"type": "Transitive", "type": "Transitive",
@@ -463,13 +183,14 @@
"resolved": "0.3.1", "resolved": "0.3.1",
"contentHash": "LD6bz2p+4O/BQnmD4mqFZrmdN/IjsPo1wUvfmcH46Q05ng+dyMLl3d2ylj0x412F4fpJEtm0Z3EaCAx4FqgNuQ==", "contentHash": "LD6bz2p+4O/BQnmD4mqFZrmdN/IjsPo1wUvfmcH46Q05ng+dyMLl3d2ylj0x412F4fpJEtm0Z3EaCAx4FqgNuQ==",
"dependencies": { "dependencies": {
"FSharp.Core": "7.0.300" "FSharp.Core": "7.0.300",
"System.Text.Json": "7.0.3"
} }
}, },
"SimpleInfoName": { "SimpleInfoName": {
"type": "Transitive", "type": "Transitive",
"resolved": "3.2.0", "resolved": "3.1.0",
"contentHash": "K8ivHRbPWfncijk62Dan/r/z55gwq3aFzqB6yFlD9X0bbpIaacHyHH2cpcIdz0FECUpERUZTwxts0z4gRWpQpA==" "contentHash": "j+ENh86NhxrgDc6T1ueqIR2QOdDkSJY2dbTFyPN/JvIXifB4GHAunlMw/x7P6m7XaXEHr3s+SMZfKBlmnmkO6g=="
}, },
"SQLitePCLRaw.bundle_e_sqlite3": { "SQLitePCLRaw.bundle_e_sqlite3": {
"type": "Transitive", "type": "Transitive",
@@ -483,7 +204,10 @@
"SQLitePCLRaw.core": { "SQLitePCLRaw.core": {
"type": "Transitive", "type": "Transitive",
"resolved": "2.1.4", "resolved": "2.1.4",
"contentHash": "inBjvSHo9UDKneGNzfUfDjK08JzlcIhn1+SP5Y3m6cgXpCxXKCJDy6Mka7LpgSV+UZmKSnC8rTwB0SQ0xKu5pA==" "contentHash": "inBjvSHo9UDKneGNzfUfDjK08JzlcIhn1+SP5Y3m6cgXpCxXKCJDy6Mka7LpgSV+UZmKSnC8rTwB0SQ0xKu5pA==",
"dependencies": {
"System.Memory": "4.5.3"
}
}, },
"SQLitePCLRaw.lib.e_sqlite3": { "SQLitePCLRaw.lib.e_sqlite3": {
"type": "Transitive", "type": "Transitive",
@@ -498,24 +222,63 @@
"SQLitePCLRaw.core": "2.1.4" "SQLitePCLRaw.core": "2.1.4"
} }
}, },
"System.CodeDom": {
"type": "Transitive",
"resolved": "8.0.0",
"contentHash": "WTlRjL6KWIMr/pAaq3rYqh0TJlzpouaQ/W1eelssHgtlwHAH25jXTkUphTYx9HaIIf7XA6qs/0+YhtLEQRkJ+Q=="
},
"System.ComponentModel.Annotations": {
"type": "Transitive",
"resolved": "4.5.0",
"contentHash": "UxYQ3FGUOtzJ7LfSdnYSFd7+oEv6M8NgUatatIN2HxNtDdlcvFAf+VIq4Of9cDMJEJC0aSRv/x898RYhB4Yppg=="
},
"System.Diagnostics.EventLog": { "System.Diagnostics.EventLog": {
"type": "Transitive", "type": "Transitive",
"resolved": "6.0.0", "resolved": "6.0.0",
"contentHash": "lcyUiXTsETK2ALsZrX+nWuHSIQeazhqPphLfaRxzdGaG93+0kELqpgEHtwWOlQe7+jSFnKwaCAgL4kjeZCQJnw==" "contentHash": "lcyUiXTsETK2ALsZrX+nWuHSIQeazhqPphLfaRxzdGaG93+0kELqpgEHtwWOlQe7+jSFnKwaCAgL4kjeZCQJnw=="
}, },
"System.IO.Hashing": {
"type": "Transitive",
"resolved": "9.0.4",
"contentHash": "WogPvgAFqQORFD8Iyha6RZ+/1QB3dsWRWxbwi8/HHVgiGQ8z0oMWpwe8Kk3Ti+Roe+P6a3sBg+WwBfEsyziZKg=="
},
"System.Management": {
"type": "Transitive",
"resolved": "8.0.0",
"contentHash": "jrK22i5LRzxZCfGb+tGmke2VH7oE0DvcDlJ1HAKYU8cPmD8XnpUT0bYn2Gy98GEhGjtfbR/sxKTVb+dE770pfA==",
"dependencies": {
"System.CodeDom": "8.0.0"
}
},
"System.Memory": {
"type": "Transitive",
"resolved": "4.5.3",
"contentHash": "3oDzvc/zzetpTKWMShs1AADwZjQ/36HnsufHRPcOjyRAAMLDlu2iD33MBI2opxnezcVUtXyqDXXjoFMOU9c7SA=="
},
"System.Reactive": { "System.Reactive": {
"type": "Transitive", "type": "Transitive",
"resolved": "5.0.0", "resolved": "5.0.0",
"contentHash": "erBZjkQHWL9jpasCE/0qKAryzVBJFxGHVBAvgRN1bzM0q2s1S4oYREEEL0Vb+1kA/6BKb5FjUZMp5VXmy+gzkQ==" "contentHash": "erBZjkQHWL9jpasCE/0qKAryzVBJFxGHVBAvgRN1bzM0q2s1S4oYREEEL0Vb+1kA/6BKb5FjUZMp5VXmy+gzkQ=="
}, },
"System.Runtime.CompilerServices.Unsafe": {
"type": "Transitive",
"resolved": "4.5.1",
"contentHash": "Zh8t8oqolRaFa9vmOZfdQm/qKejdqz0J9kr7o2Fu0vPeoH3BL1EOXipKWwkWtLT1JPzjByrF19fGuFlNbmPpiw=="
},
"System.Text.Encodings.Web": {
"type": "Transitive",
"resolved": "8.0.0",
"contentHash": "yev/k9GHAEGx2Rg3/tU6MQh4HGBXJs70y7j1LaM1i/ER9po+6nnQ6RRqTJn1E7Xu0fbIFK80Nh5EoODxrbxwBQ=="
},
"Verify": { "Verify": {
"type": "Transitive", "type": "Transitive",
"resolved": "31.12.5", "resolved": "29.4.0",
"contentHash": "Luht+42xCM969Scwl7XQ1teZb/7w9XbQg/4eqVQ2WGTWc7mfheENb8PnaX9yJCNROyb1POjQIrQogO+wtf34mg==", "contentHash": "wlqJ6ygXORa3lrAaErTA4EWkDcK9pBG2k5iC/I5F2UpWfyV7aXw/+SwGiWYe4XSk9d7VObe4xi4+0AV9rLRsBw==",
"dependencies": { "dependencies": {
"Argon": "0.33.5", "Argon": "0.28.0",
"DiffEngine": "18.4.1", "DiffEngine": "16.2.1",
"SimpleInfoName": "3.2.0" "SimpleInfoName": "3.1.0",
"System.IO.Hashing": "9.0.4"
} }
}, },
"xunit.abstractions": { "xunit.abstractions": {
@@ -544,8 +307,8 @@
"dependencies": { "dependencies": {
"GraphQL.Client": "[6.0.0, )", "GraphQL.Client": "[6.0.0, )",
"Microsoft.Data.Sqlite": "[7.0.5, )", "Microsoft.Data.Sqlite": "[7.0.5, )",
"Microsoft.Extensions.DependencyInjection": "[8.0.0, )", "Microsoft.Extensions.DependencyInjection.Abstractions": "[2.2.0, )",
"Microsoft.Extensions.Logging": "[8.0.0, )", "Microsoft.Extensions.Logging": "[2.2.0, )",
"Speckle.DoubleNumerics": "[4.1.0, )", "Speckle.DoubleNumerics": "[4.1.0, )",
"Speckle.Newtonsoft.Json": "[13.0.2, )", "Speckle.Newtonsoft.Json": "[13.0.2, )",
"Speckle.Sdk.Dependencies": "[1.0.0, )" "Speckle.Sdk.Dependencies": "[1.0.0, )"
@@ -556,7 +319,7 @@
}, },
"GraphQL.Client": { "GraphQL.Client": {
"type": "CentralTransitive", "type": "CentralTransitive",
"requested": "[6.1.0, )", "requested": "[6.0.0, )",
"resolved": "6.0.0", "resolved": "6.0.0",
"contentHash": "8yPNBbuVBpTptivyAlak4GZvbwbUcjeQTL4vN1HKHRuOykZ4r7l5fcLS6vpyPyLn0x8FsL31xbOIKyxbmR9rbA==", "contentHash": "8yPNBbuVBpTptivyAlak4GZvbwbUcjeQTL4vN1HKHRuOykZ4r7l5fcLS6vpyPyLn0x8FsL31xbOIKyxbmR9rbA==",
"dependencies": { "dependencies": {
@@ -575,24 +338,22 @@
"SQLitePCLRaw.bundle_e_sqlite3": "2.1.4" "SQLitePCLRaw.bundle_e_sqlite3": "2.1.4"
} }
}, },
"Microsoft.Extensions.DependencyInjection": { "Microsoft.Extensions.DependencyInjection.Abstractions": {
"type": "CentralTransitive", "type": "CentralTransitive",
"requested": "[10.0.6, )", "requested": "[2.2.0, )",
"resolved": "8.0.0", "resolved": "2.2.0",
"contentHash": "V8S3bsm50ig6JSyrbcJJ8bW2b9QLGouz+G1miK3UTaOWmMtFwNNNzUf4AleyDWUmTrWMLNnFSLEQtxmxgNQnNQ==", "contentHash": "f9hstgjVmr6rmrfGSpfsVOl2irKAgr1QjrSi3FgnS7kulxband50f2brRLwySAQTADPZeTdow0mpSMcoAdadCw=="
"dependencies": {
"Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.0"
}
}, },
"Microsoft.Extensions.Logging": { "Microsoft.Extensions.Logging": {
"type": "CentralTransitive", "type": "CentralTransitive",
"requested": "[10.0.6, )", "requested": "[2.2.0, )",
"resolved": "8.0.0", "resolved": "2.2.0",
"contentHash": "tvRkov9tAJ3xP51LCv3FJ2zINmv1P8Hi8lhhtcKGqM+ImiTCC84uOPEI4z8Cdq2C3o9e+Aa0Gw0rmrsJD77W+w==", "contentHash": "Nxqhadc9FCmFHzU+fz3oc8sFlE6IadViYg8dfUdGzJZ2JUxnCsRghBhhOWdM4B2zSZqEc+0BjliBh/oNdRZuig==",
"dependencies": { "dependencies": {
"Microsoft.Extensions.DependencyInjection": "8.0.0", "Microsoft.Extensions.Configuration.Binder": "2.2.0",
"Microsoft.Extensions.Logging.Abstractions": "8.0.0", "Microsoft.Extensions.DependencyInjection.Abstractions": "2.2.0",
"Microsoft.Extensions.Options": "8.0.0" "Microsoft.Extensions.Logging.Abstractions": "2.2.0",
"Microsoft.Extensions.Options": "2.2.0"
} }
}, },
"Speckle.DoubleNumerics": { "Speckle.DoubleNumerics": {
@@ -606,6 +367,15 @@
"requested": "[13.0.2, )", "requested": "[13.0.2, )",
"resolved": "13.0.2", "resolved": "13.0.2",
"contentHash": "g1BejUZwax5PRfL6xHgLEK23sqHWOgOj9hE7RvfRRlN00AGt8GnPYt8HedSK7UB3HiRW8zCA9Pn0iiYxCK24BA==" "contentHash": "g1BejUZwax5PRfL6xHgLEK23sqHWOgOj9hE7RvfRRlN00AGt8GnPYt8HedSK7UB3HiRW8zCA9Pn0iiYxCK24BA=="
},
"System.Text.Json": {
"type": "CentralTransitive",
"requested": "[8.0.5, )",
"resolved": "8.0.4",
"contentHash": "bAkhgDJ88XTsqczoxEMliSrpijKZHhbJQldhAmObj/RbrN3sU5dcokuXmWJWsdQAhiMJ9bTayWsL1C9fbbCRhw==",
"dependencies": {
"System.Text.Encodings.Web": "8.0.0"
}
} }
} }
} }
@@ -1,4 +1,4 @@
using AwesomeAssertions; using FluentAssertions;
using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.DependencyInjection;
using Speckle.Sdk.Api; using Speckle.Sdk.Api;
using Speckle.Sdk.Api.Blob; using Speckle.Sdk.Api.Blob;
@@ -1,5 +1,5 @@
using System.ComponentModel; using System.ComponentModel;
using AwesomeAssertions; using FluentAssertions;
using GraphQL; using GraphQL;
using GraphQL.Client.Http; using GraphQL.Client.Http;
using Speckle.Newtonsoft.Json; using Speckle.Newtonsoft.Json;
@@ -91,7 +91,7 @@ public class GraphQLClientExceptionHandling : IAsyncLifetime
using CancellationTokenSource cts = new(); using CancellationTokenSource cts = new();
await cts.CancelAsync(); await cts.CancelAsync();
var ex = await Assert.ThrowsAnyAsync<OperationCanceledException>(async () => var ex = await Assert.ThrowsAsync<TaskCanceledException>(async () =>
await _sut.ActiveUser.Get(cts.Token).ConfigureAwait(false) await _sut.ActiveUser.Get(cts.Token).ConfigureAwait(false)
); );
@@ -1,4 +1,4 @@
using AwesomeAssertions; using FluentAssertions;
using Speckle.Sdk.Api; using Speckle.Sdk.Api;
using Speckle.Sdk.Api.GraphQL.Inputs; using Speckle.Sdk.Api.GraphQL.Inputs;
using Speckle.Sdk.Api.GraphQL.Resources; using Speckle.Sdk.Api.GraphQL.Resources;
@@ -1,4 +1,4 @@
using AwesomeAssertions; using FluentAssertions;
using Speckle.Sdk.Api; using Speckle.Sdk.Api;
using Speckle.Sdk.Api.GraphQL.Inputs; using Speckle.Sdk.Api.GraphQL.Inputs;
using Speckle.Sdk.Api.GraphQL.Models; using Speckle.Sdk.Api.GraphQL.Models;
@@ -1,4 +1,4 @@
using AwesomeAssertions; using FluentAssertions;
using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.DependencyInjection;
using Speckle.Sdk.Api; using Speckle.Sdk.Api;
using Speckle.Sdk.Api.GraphQL.Inputs; using Speckle.Sdk.Api.GraphQL.Inputs;
@@ -1,4 +1,4 @@
using AwesomeAssertions; using FluentAssertions;
using Speckle.Sdk.Api; using Speckle.Sdk.Api;
using Speckle.Sdk.Api.GraphQL.Enums; using Speckle.Sdk.Api.GraphQL.Enums;
using Speckle.Sdk.Api.GraphQL.Inputs; using Speckle.Sdk.Api.GraphQL.Inputs;
@@ -1,4 +1,4 @@
using AwesomeAssertions; using FluentAssertions;
using Speckle.Sdk.Api; using Speckle.Sdk.Api;
using Speckle.Sdk.Api.GraphQL.Enums; using Speckle.Sdk.Api.GraphQL.Enums;
using Speckle.Sdk.Api.GraphQL.Inputs; using Speckle.Sdk.Api.GraphQL.Inputs;
@@ -1,4 +1,4 @@
using AwesomeAssertions; using FluentAssertions;
using Speckle.Sdk.Api; using Speckle.Sdk.Api;
using Speckle.Sdk.Api.GraphQL.Resources; using Speckle.Sdk.Api.GraphQL.Resources;
using Speckle.Sdk.Credentials; using Speckle.Sdk.Credentials;
@@ -1,4 +1,4 @@
using AwesomeAssertions; using FluentAssertions;
using Speckle.Sdk.Api; using Speckle.Sdk.Api;
using Speckle.Sdk.Api.GraphQL.Inputs; using Speckle.Sdk.Api.GraphQL.Inputs;
using Speckle.Sdk.Api.GraphQL.Models; using Speckle.Sdk.Api.GraphQL.Models;
@@ -1,4 +1,4 @@
using AwesomeAssertions; using FluentAssertions;
using Speckle.Sdk.Api; using Speckle.Sdk.Api;
using Speckle.Sdk.Api.GraphQL; using Speckle.Sdk.Api.GraphQL;
using Speckle.Sdk.Api.GraphQL.Enums; using Speckle.Sdk.Api.GraphQL.Enums;
@@ -1,4 +1,4 @@
using AwesomeAssertions; using FluentAssertions;
using Speckle.Sdk.Api; using Speckle.Sdk.Api;
using Speckle.Sdk.Api.GraphQL; using Speckle.Sdk.Api.GraphQL;
using Speckle.Sdk.Api.GraphQL.Enums; using Speckle.Sdk.Api.GraphQL.Enums;
@@ -1,4 +1,4 @@
using AwesomeAssertions; using FluentAssertions;
using Speckle.Sdk.Api; using Speckle.Sdk.Api;
using Speckle.Sdk.Api.GraphQL.Enums; using Speckle.Sdk.Api.GraphQL.Enums;
using Speckle.Sdk.Api.GraphQL.Inputs; using Speckle.Sdk.Api.GraphQL.Inputs;
@@ -1,4 +1,4 @@
using AwesomeAssertions; using FluentAssertions;
using Speckle.Sdk.Api; using Speckle.Sdk.Api;
using Speckle.Sdk.Api.GraphQL.Resources; using Speckle.Sdk.Api.GraphQL.Resources;
@@ -1,4 +1,4 @@
using AwesomeAssertions; using FluentAssertions;
using Speckle.Sdk.Api; using Speckle.Sdk.Api;
using Speckle.Sdk.Api.GraphQL.Enums; using Speckle.Sdk.Api.GraphQL.Enums;
using Speckle.Sdk.Api.GraphQL.Inputs; using Speckle.Sdk.Api.GraphQL.Inputs;
@@ -1,4 +1,4 @@
using AwesomeAssertions; using FluentAssertions;
using Speckle.Sdk.Api; using Speckle.Sdk.Api;
using Speckle.Sdk.Api.GraphQL.Inputs; using Speckle.Sdk.Api.GraphQL.Inputs;
using Speckle.Sdk.Api.GraphQL.Models; using Speckle.Sdk.Api.GraphQL.Models;
@@ -1,5 +1,4 @@
using AwesomeAssertions; using Speckle.Sdk.Api;
using Speckle.Sdk.Api;
using Speckle.Sdk.Api.GraphQL.Resources; using Speckle.Sdk.Api.GraphQL.Resources;
namespace Speckle.Sdk.Tests.Integration.API.GraphQL.Resources; namespace Speckle.Sdk.Tests.Integration.API.GraphQL.Resources;
@@ -22,19 +21,19 @@ public class WorkspaceResourceTests
return testUser; return testUser;
} }
[Fact] [Fact, Trait("Server", "Internal")]
public async Task TestGetWorkspace() public async Task TestGetWorkspace()
{ {
var ex = await Assert.ThrowsAsync<AggregateException>(async () => _ = await Sut.Get("non-existent-id")); var ex = await Assert.ThrowsAsync<AggregateException>(async () => _ = await Sut.Get("non-existent-id"));
ex.InnerExceptions.Should().HaveCount(1); Assert.Single(ex.InnerExceptions);
ex.InnerExceptions.Should().AllBeOfType<SpeckleGraphQLForbiddenException>(); Assert.All(ex.InnerExceptions, item => Assert.IsType<SpeckleGraphQLForbiddenException>(item));
} }
[Fact] [Fact]
public async Task TestGetProjects() public async Task TestGetProjects()
{ {
var ex = await Assert.ThrowsAsync<AggregateException>(async () => _ = await Sut.GetProjects("non-existent-id")); var ex = await Assert.ThrowsAsync<AggregateException>(async () => _ = await Sut.GetProjects("non-existent-id"));
ex.InnerExceptions.Should().HaveCount(1); Assert.Single(ex.InnerExceptions);
ex.InnerExceptions.Should().AllBeOfType<SpeckleGraphQLForbiddenException>(); Assert.All(ex.InnerExceptions, item => Assert.IsType<SpeckleGraphQLForbiddenException>(item));
} }
} }
@@ -1,7 +0,0 @@
namespace Speckle.Sdk.Tests.Integration;
[CollectionDefinition(nameof(RequiresSqLiteAccountDb), DisableParallelization = true)]
public sealed class RequiresSqLiteAccountDb;
[CollectionDefinition(nameof(RequiresAuthFlowPort), DisableParallelization = true)]
public sealed class RequiresAuthFlowPort;
@@ -1,4 +1,4 @@
using AwesomeAssertions; using FluentAssertions;
using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.DependencyInjection;
using Speckle.Sdk.Api; using Speckle.Sdk.Api;
using Speckle.Sdk.Api.GraphQL.Inputs; using Speckle.Sdk.Api.GraphQL.Inputs;
@@ -1,107 +0,0 @@
using Microsoft.Extensions.DependencyInjection;
using Speckle.Sdk.Api;
using Speckle.Sdk.Api.GraphQL.Models;
using Speckle.Sdk.Credentials;
namespace Speckle.Sdk.Tests.Integration.Credentials;
[Collection(nameof(RequiresSqLiteAccountDb))]
public class AccountManagerTests
{
private IAccountManager _sut;
public AccountManagerTests()
{
_sut = Fixtures.ServiceProvider.GetRequiredService<IAccountManager>();
}
[Fact]
public async Task UpdateAccount_UpdatesUserInfo()
{
using IClient user = await Fixtures.SeedUserWithClient();
string realAccountId = user.Account.id;
UserInfo realUserData = user.Account.userInfo;
UserInfo staleData = new()
{
avatar = "my old avatar",
company = "my old company",
email = "my.old.email@example.com",
id = realUserData.id,
name = "my old name",
};
// Mutate with "fake" data to simulate a stale account data
user.Account.userInfo = staleData;
user.Account.id = null!; //force re-generate id
Assert.NotEqual(realAccountId, user.Account.id);
await _sut.UpdateAccountInMemory(user.Account);
Assert.Equal(realUserData.avatar, user.Account.userInfo.avatar);
Assert.Equal(realUserData.company, user.Account.userInfo.company);
Assert.Equal(realUserData.email, user.Account.userInfo.email);
Assert.Equal(realUserData.id, user.Account.userInfo.id);
Assert.Equal(realUserData.name, user.Account.userInfo.name);
Assert.Equal(realAccountId, user.Account.id);
}
[Fact]
public async Task UpdateAccount_UpdatesServerInfo()
{
using IClient user = await Fixtures.SeedUserWithClient();
string realAccountId = user.Account.id;
ServerInfo realServerData = user.Account.serverInfo;
ServerInfo staleData = new()
{
company = "This old company",
description = "this old description",
name = "This old name",
url = realServerData.url,
version = "0.0.123",
};
// Mutate with "fake" data to simulate a stale account data
user.Account.serverInfo = staleData;
user.Account.id = null!; //force re-generate id
Assert.Equal(realAccountId, user.Account.id); //account id should not change since we didn't change server url
await _sut.UpdateAccountInMemory(user.Account);
Assert.Equal(realServerData.company, user.Account.serverInfo.company);
Assert.Equal(realServerData.description, user.Account.serverInfo.description);
Assert.Equal(realServerData.name, user.Account.serverInfo.name);
Assert.Equal(realServerData.url, user.Account.serverInfo.url);
Assert.Equal(realServerData.version, user.Account.serverInfo.version);
Assert.Equal(realAccountId, user.Account.id);
}
[Fact]
public async Task UpdateAccount_ServerInfoMigration()
{
using IClient user = await Fixtures.SeedUserWithClient();
string realAccountId = user.Account.id;
ServerInfo realServerData = user.Account.serverInfo;
ServerInfo staleData = new()
{
company = "This old company",
description = "this old description",
name = "This old name",
url = realServerData.url,
version = "0.0.123",
};
// Mutate with "fake" data to simulate a stale account data
user.Account.serverInfo = staleData;
user.Account.id = null!; //force re-generate id
Assert.Equal(realAccountId, user.Account.id); //account id should not change since we didn't change server url
await _sut.UpdateAccountInMemory(user.Account);
Assert.Equal(realServerData.company, user.Account.serverInfo.company);
Assert.Equal(realServerData.description, user.Account.serverInfo.description);
Assert.Equal(realServerData.name, user.Account.serverInfo.name);
Assert.Equal(realServerData.url, user.Account.serverInfo.url);
Assert.Equal(realServerData.version, user.Account.serverInfo.version);
Assert.Equal(realAccountId, user.Account.id);
}
}
@@ -1,84 +0,0 @@
using System.Net;
using Microsoft.Extensions.DependencyInjection;
using Speckle.Sdk.Api;
using Speckle.Sdk.Credentials;
namespace Speckle.Sdk.Tests.Integration.Credentials;
[Collection(nameof(RequiresAuthFlowPort))]
public class AuthFlowExceptionalTests : IAsyncLifetime
{
private IAuthFlow _authFlow;
private IClient _client;
private readonly Uri _url = AuthApp.ConnectorsV3.CallbackUrl;
[Fact]
public async Task GetRefreshToken_Cancellation()
{
await Assert.ThrowsAnyAsync<OperationCanceledException>(async () =>
_ = await _authFlow.GetRefreshedToken(
_client.Account.refreshToken,
_client.ServerUrl,
Fixtures.TestAuthApp,
new(true)
)
);
}
[Fact]
public async Task GetRefreshToken_UnknownApp()
{
//interestingly, the server responds with a 401 Unauthorized despite internally being a bad request
await Assert.ThrowsAnyAsync<HttpRequestException>(async () =>
_ = await _authFlow.GetRefreshedToken(
_client.Account.refreshToken,
_client.ServerUrl,
new()
{
AppId = "doesn't exist",
AppSecret = "doesn't exist",
CallbackUrl = new("invalid://localhost"),
},
CancellationToken.None
)
);
}
[Fact]
public async Task GetRefreshToken_NullRefreshToken()
{
await Assert.ThrowsAnyAsync<HttpRequestException>(async () =>
_ = await _authFlow.GetRefreshedToken(null, _client.ServerUrl, AuthApp.ConnectorsV3, CancellationToken.None)
);
}
[Fact]
public async Task SimultaneousListeners_SamePort_OneFails()
{
using CancellationTokenSource ct = new();
var task1 = AuthFlow.RunListener(_url, ct.Token);
await Task.Delay(50, CancellationToken.None);
await Assert.ThrowsAsync<HttpListenerException>(async () => await AuthFlow.RunListener(_url, ct.Token));
if (task1.IsCompleted)
{
throw new InvalidOperationException("Was expecting task to still be running", task1.Exception);
}
await ct.CancelAsync();
await Assert.ThrowsAnyAsync<OperationCanceledException>(async () => await task1);
}
public async Task InitializeAsync()
{
_authFlow = Fixtures.ServiceProvider.GetRequiredService<IAuthFlow>();
_client = await Fixtures.SeedUserWithClient();
}
public Task DisposeAsync()
{
_client.Dispose();
return Task.CompletedTask;
}
}
@@ -1,94 +0,0 @@
using Microsoft.Extensions.DependencyInjection;
using Speckle.Sdk.Credentials;
namespace Speckle.Sdk.Tests.Integration.Credentials;
[Collection(nameof(RequiresAuthFlowPort))]
public sealed class AuthFlowTests
{
private readonly IAuthFlow _authFlow;
private readonly Uri _url = AuthApp.ConnectorsV3.CallbackUrl;
public AuthFlowTests()
{
_authFlow = Fixtures.ServiceProvider.GetRequiredService<IAuthFlow>();
}
[Fact]
public async Task RunListener_ReturnsAccessCode_WhenQueryContainsAccessCode()
{
var listenerTask = AuthFlow.RunListener(_url, CancellationToken.None);
using var client = new HttpClient();
const string EXPECTED_ACCESS_CODE = "abcdef123456";
var response = await client.GetAsync(new Uri(_url, $"?access_code={EXPECTED_ACCESS_CODE}"));
response.EnsureSuccessStatusCode();
string result = await listenerTask;
Assert.Equal(EXPECTED_ACCESS_CODE, result);
}
[Fact]
public async Task RunListener_Throws_InvalidAccessCode()
{
var listenerTask = AuthFlow.RunListener(_url, CancellationToken.None);
using var client = new HttpClient();
var response = await client.GetAsync(new Uri(_url, ""));
response.EnsureSuccessStatusCode();
await Assert.ThrowsAsync<AuthFlowException>(async () =>
{
_ = await listenerTask;
});
}
[Fact]
public async Task RunListener_Throws_Cancellation()
{
using CancellationTokenSource cancellationTokenSource = new();
var listenerTask = AuthFlow.RunListener(_url, cancellationTokenSource.Token);
await cancellationTokenSource.CancelAsync();
await Assert.ThrowsAsync<OperationCanceledException>(async () =>
{
_ = await listenerTask;
});
}
[Theory]
[InlineData(0.1)]
[InlineData(1)]
[InlineData(5)]
public async Task RunListener_Timeout(double timeS)
{
await Assert.ThrowsAsync<TimeoutException>(async () =>
{
_ = await _authFlow.RunListenerWithTimeout(_url, TimeSpan.FromSeconds(timeS), CancellationToken.None);
});
}
[Fact]
public async Task CanGetRefreshToken()
{
using var user = await Fixtures.SeedUserWithClient();
var tokenExchange = await _authFlow.GetRefreshedToken(
user.Account.refreshToken,
user.ServerUrl,
Fixtures.TestAuthApp,
CancellationToken.None
);
Assert.NotNull(tokenExchange.token);
Assert.NotNull(tokenExchange.refreshToken);
user.Account.token = tokenExchange.token;
user.Account.refreshToken = tokenExchange.refreshToken;
var apiTest = await user.ActiveUser.Get();
Assert.NotNull(apiTest);
}
}
@@ -27,12 +27,7 @@ namespace Speckle.Sdk.Tests.Integration;
public static class Fixtures public static class Fixtures
{ {
public static readonly ServerInfo Server = new() { url = "http://localhost:3000", name = "Docker Server" }; public static readonly ServerInfo Server = new() { url = "http://localhost:3000", name = "Docker Server" };
public static readonly AuthApp TestAuthApp = new()
{
AppId = "spklwebapp",
AppSecret = "spklwebapp",
CallbackUrl = new Uri("invaid://localhost"),
};
public static IServiceProvider ServiceProvider { get; set; } public static IServiceProvider ServiceProvider { get; set; }
static Fixtures() static Fixtures()
@@ -100,8 +95,8 @@ public static class Fixtures
Dictionary<string, string> tokenBody = new() Dictionary<string, string> tokenBody = new()
{ {
["accessCode"] = accessCode, ["accessCode"] = accessCode,
["appId"] = TestAuthApp.AppId, ["appId"] = "spklwebapp",
["appSecret"] = TestAuthApp.AppSecret, ["appSecret"] = "spklwebapp",
["challenge"] = "challengingchallenge", ["challenge"] = "challengingchallenge",
}; };
@@ -114,11 +109,8 @@ public static class Fixtures
); );
var token = deserialised.NotNull()["token"].NotNull(); var token = deserialised.NotNull()["token"].NotNull();
var refreshToken = deserialised.NotNull()["refreshToken"].NotNull();
return await ServiceProvider return await ServiceProvider.GetRequiredService<IAccountFactory>().CreateAccount(new(Server.url), token);
.GetRequiredService<IAccountFactory>()
.CreateAccount(new(Server.url), token, refreshToken);
} }
public static Base GenerateSimpleObject() public static Base GenerateSimpleObject()

Some files were not shown because too many files have changed in this diff Show More