diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json new file mode 100644 index 0000000..d28b033 --- /dev/null +++ b/.devcontainer/devcontainer.json @@ -0,0 +1,42 @@ +// For format details, see https://aka.ms/devcontainer.json. For config options, see the +// README at: https://github.com/devcontainers/templates/tree/main/src/dotnet +{ + "name": "C# (.NET)", + // Or use a Dockerfile or Docker Compose file. More info: https://containers.dev/guide/dockerfile + "image": "mcr.microsoft.com/devcontainers/dotnet:0-7.0", + + // Features to add to the dev container. More info: https://containers.dev/features. + // "features": {}, + + // Use 'forwardPorts' to make a list of ports inside the container available locally. + // "forwardPorts": [5000, 5001], + // "portsAttributes": { + // "5001": { + // "protocol": "https" + // } + // } + + // Use 'postCreateCommand' to run commands after the container is created. + "postCreateCommand": "dotnet restore", + "features": { + "ghcr.io/devcontainers/features/docker-in-docker:2": {}, + "ghcr.io/devcontainers/features/dotnet:2": {} + }, + + // Configure tool-specific properties. + "customizations": { + // Configure properties specific to VS Code. + "vscode": { + // Add the IDs of extensions you want installed when the container is created. + "extensions": [ + "csharpier.csharpier-vscode", + "ms-dotnettools.csharp", + "ms-dotnettools.csdevkit", + "ms-azuretools.vscode-docker" + ] + } + } + + // Uncomment to connect as root instead. More info: https://aka.ms/dev-containers-non-root. + // "remoteUser": "root" +} diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 8105617..395f208 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -1,4 +1,4 @@ -name: 'build and deploy Speckle functions' +name: "build and deploy Speckle functions" on: push: branches: @@ -7,7 +7,8 @@ on: jobs: publish-automate-function-version: # make sure the action works on a clean machine without building env: - FUNCTION_SCHEMA_PATH: ${HOME}/functionSchema.json + FUNCTION_SCHEMA_FILE_NAME: functionSchema.json + SPECKLE_AUTOMATE_URL: https://automate.speckle.dev runs-on: ubuntu-latest steps: - uses: actions/checkout@v3.4.0 @@ -15,21 +16,20 @@ jobs: uses: actions/setup-dotnet@v3.2.0 with: dotnet-version: 7.x - cache: true - - name: Restore dependencies - run: dotnet restore --locked-mode + run: dotnet restore - name: Extract functionInputSchema id: extract_schema + working-directory: "SpeckleAutomateDotnetExample" run: | dotnet build - echo $(dotnet run generate-schema) > ${HOME}/functionSchema.json + dotnet run generate-schema ${HOME}/functionSchema.json cat ${HOME}/functionSchema.json - name: Speckle Automate Function - Build and Publish - uses: specklesystems/speckle-automate-github-composite-action@0.4.2 + uses: specklesystems/speckle-automate-github-composite-action@0.6.7 with: - speckle_automate_url: 'https://automate.speckle.dev' + speckle_function_command: "dotnet SpeckleAutomateDotnetExample.dll" + speckle_automate_url: ${{ env.SPECKLE_AUTOMATE_URL }} speckle_token: ${{ secrets.SPECKLE_FUNCTION_TOKEN }} speckle_function_id: ${{ secrets.SPECKLE_FUNCTION_ID }} - speckle_function_input_schema_file_path: functionSchema.json - speckle_function_command: 'dotnet SpeckleAutomateDotnetExample.dll' + speckle_function_input_schema_file_path: ${{ env.FUNCTION_SCHEMA_FILE_NAME }} diff --git a/.gitignore b/.gitignore index d16919a..2b7e4fb 100644 --- a/.gitignore +++ b/.gitignore @@ -65,6 +65,7 @@ Temporary Items # Covers JetBrains IDEs: IntelliJ, RubyMine, PhpStorm, AppCode, PyCharm, CLion, Android Studio, WebStorm and Rider # Reference: https://intellij-support.jetbrains.com/hc/en-us/articles/206544839 +.idea # User-specific stuff .idea/**/workspace.xml .idea/**/tasks.xml diff --git a/.idea/.idea.SpeckleAutomateDotnetExample.dir/.idea/.gitignore b/.idea/.idea.SpeckleAutomateDotnetExample.dir/.idea/.gitignore deleted file mode 100644 index e47d1f4..0000000 --- a/.idea/.idea.SpeckleAutomateDotnetExample.dir/.idea/.gitignore +++ /dev/null @@ -1,13 +0,0 @@ -# Default ignored files -/shelf/ -/workspace.xml -# Rider ignored files -/contentModel.xml -/projectSettingsUpdater.xml -/modules.xml -/.idea.SpeckleAutomateDotnetExample.iml -# Editor-based HTTP Client requests -/httpRequests/ -# Datasource local storage ignored files -/dataSources/ -/dataSources.local.xml diff --git a/.idea/.idea.SpeckleAutomateDotnetExample.dir/.idea/encodings.xml b/.idea/.idea.SpeckleAutomateDotnetExample.dir/.idea/encodings.xml deleted file mode 100644 index df87cf9..0000000 --- a/.idea/.idea.SpeckleAutomateDotnetExample.dir/.idea/encodings.xml +++ /dev/null @@ -1,4 +0,0 @@ - - - - \ No newline at end of file diff --git a/.idea/.idea.SpeckleAutomateDotnetExample.dir/.idea/indexLayout.xml b/.idea/.idea.SpeckleAutomateDotnetExample.dir/.idea/indexLayout.xml deleted file mode 100644 index 7b08163..0000000 --- a/.idea/.idea.SpeckleAutomateDotnetExample.dir/.idea/indexLayout.xml +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - - \ No newline at end of file diff --git a/.idea/.idea.SpeckleAutomateDotnetExample.dir/.idea/vcs.xml b/.idea/.idea.SpeckleAutomateDotnetExample.dir/.idea/vcs.xml deleted file mode 100644 index 94a25f7..0000000 --- a/.idea/.idea.SpeckleAutomateDotnetExample.dir/.idea/vcs.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/.tool-versions b/.tool-versions deleted file mode 100644 index aac82d7..0000000 --- a/.tool-versions +++ /dev/null @@ -1 +0,0 @@ -dotnet 7.0.306 diff --git a/.vscode/extensions.json b/.vscode/extensions.json new file mode 100644 index 0000000..b7d39d2 --- /dev/null +++ b/.vscode/extensions.json @@ -0,0 +1,8 @@ +{ + "recommendations": [ + "csharpier.csharpier-vscode", + "ms-dotnettools.csharp", + "ms-dotnettools.csdevkit", + "ms-azuretools.vscode-docker" + ] +} diff --git a/.vscode/settings.json b/.vscode/settings.json index 35d0800..59d7e75 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -1,3 +1,7 @@ { - "dotnet.server.useOmnisharp": false + "dotnet.server.useOmnisharp": false, + "[csharp]": { + "editor.defaultFormatter": "csharpier.csharpier-vscode", + "editor.formatOnSave": true + } } diff --git a/AutomateFunction.cs b/AutomateFunction.cs deleted file mode 100644 index e2a72ce..0000000 --- a/AutomateFunction.cs +++ /dev/null @@ -1,52 +0,0 @@ -using System.ComponentModel.DataAnnotations; -using Objects.Geometry; -using Speckle.Core.Api; -using Speckle.Core.Credentials; -using Speckle.Core.Models.Extensions; -using Speckle.Core.Transports; - -/// -/// This class describes the user specified variables that the function wants to work with. -/// -/// This class is used to generate a JSON Schema to ensure that the user provided values -/// are valid and match the required schema. -class FunctionInputs -{ - [Required] - public string SpeckleTypeToCount; -} - -class AutomateFunction -{ - public static async Task Run( - SpeckleProjectData speckleProjectData, - FunctionInputs functionInputs, - string speckleToken - ) - { - var account = new Account - { - token = speckleToken, - serverInfo = new ServerInfo() { url = speckleProjectData.SpeckleServerUrl } - }; - var client = new Client(account); - - - // HACK needed for the objects kit to initialize - var p = new Point(); - - var commit = await client.CommitGet( - speckleProjectData.ProjectId, - speckleProjectData.VersionId - ); - - var serverTransport = new ServerTransport(account, speckleProjectData.ProjectId); - var rootObject = await Operations.Receive( - commit.referencedObject, - serverTransport, - new MemoryTransport() - ); - - return rootObject.Flatten().Count( b => b.speckle_type == functionInputs.SpeckleTypeToCount); - } -} diff --git a/Dockerfile b/Dockerfile index d98fb57..70cc0c2 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,9 +1,8 @@ FROM mcr.microsoft.com/dotnet/sdk:7.0 as build-env WORKDIR /src -COPY *.csproj . +COPY SpeckleAutomateDotnetExample/ . RUN dotnet restore --use-current-runtime -COPY . . RUN dotnet publish --use-current-runtime --self-contained false --no-restore -o /publish FROM mcr.microsoft.com/dotnet/runtime:7.0 as runtime diff --git a/Program.cs b/Program.cs deleted file mode 100644 index 0c5dca6..0000000 --- a/Program.cs +++ /dev/null @@ -1,91 +0,0 @@ -using System.CommandLine; -using Newtonsoft.Json.Schema.Generation; -using Newtonsoft.Json.Serialization; -using Speckle.Newtonsoft.Json; - - -internal static class Program -{ - internal static async Task Main(string[] args) - { - var speckleProjectDataArg = new Argument( - name: "Speckle project data", - description: "The values of the project / model / version that triggered this function" - ); - var functionInputsArg = new Argument( - name: "Function inputs", - description: "The values provided by the function user, matching the function input schema" - ); - var speckleTokenArg = new Argument( - name: "Speckle token", - description: "A token to talk to the Speckle server with" - ); - var rootCommand = new RootCommand("Count objects matching the given speckle_type"); - rootCommand.AddArgument(speckleProjectDataArg); - rootCommand.AddArgument(functionInputsArg); - rootCommand.AddArgument(speckleTokenArg); - rootCommand.SetHandler( - async (speckleProjectData, functionInputs, speckleToken) => - { - await RunFunction(speckleProjectData, functionInputs, speckleToken); - }, - speckleProjectDataArg, - functionInputsArg, - speckleTokenArg - ); - - var generateSchemaCommand = new Command( - "generate-schema", - "Generate JSON schema for the function inputs" - ); - generateSchemaCommand.SetHandler(() => - { - var schema = GenerateFunctionInputSchema(); - Console.WriteLine(schema); - }); - rootCommand.Add(generateSchemaCommand); - - await rootCommand.InvokeAsync(args); - } - - static async Task RunFunction( - string rawSpeckleProjectData, - string rawFunctionInputs, - string speckleToken - ) - { - var speckleProjectData = JsonConvert.DeserializeObject( - rawSpeckleProjectData - ); - var functionInputs = JsonConvert.DeserializeObject( - rawFunctionInputs - ); - var count = await AutomateFunction.Run( - speckleProjectData, - functionInputs, - speckleToken - ); - Console.WriteLine( - $"Found {count} elements that have the type {functionInputs.SpeckleTypeToCount}" - ); - } - - static string GenerateFunctionInputSchema() - { - var generator = new JSchemaGenerator - { - ContractResolver = new CamelCasePropertyNamesContractResolver() - }; - var schema = generator.Generate(typeof(FunctionInputs)); - return schema.ToString(Newtonsoft.Json.Schema.SchemaVersion.Draft2019_09); - } -} - - -internal class SpeckleProjectData -{ - public string ProjectId; - public string ModelId; - public string VersionId; - public string SpeckleServerUrl; -} diff --git a/SpeckleAutomateDotnetExample.csproj b/SpeckleAutomateDotnetExample.csproj deleted file mode 100644 index 180896a..0000000 --- a/SpeckleAutomateDotnetExample.csproj +++ /dev/null @@ -1,21 +0,0 @@ - - - - Exe - net7.0 - enable - enable - - - - - - - - - - - - - - diff --git a/SpeckleAutomateDotnetExample.sln b/SpeckleAutomateDotnetExample.sln new file mode 100644 index 0000000..6aebe93 --- /dev/null +++ b/SpeckleAutomateDotnetExample.sln @@ -0,0 +1,25 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio Version 17 +VisualStudioVersion = 17.5.002.0 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SpeckleAutomateDotnetExample", "SpeckleAutomateDotnetExample/SpeckleAutomateDotnetExample.csproj", "{E1DE5809-1111-4817-9B7D-7ADCA087FA1C}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {E1DE5809-1111-4817-9B7D-7ADCA087FA1C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {E1DE5809-1111-4817-9B7D-7ADCA087FA1C}.Debug|Any CPU.Build.0 = Debug|Any CPU + {E1DE5809-1111-4817-9B7D-7ADCA087FA1C}.Release|Any CPU.ActiveCfg = Release|Any CPU + {E1DE5809-1111-4817-9B7D-7ADCA087FA1C}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {6487EAE6-FBD5-4884-BCA1-1E8C082EC370} + EndGlobalSection +EndGlobal diff --git a/SpeckleAutomateDotnetExample/AutomateFunction.cs b/SpeckleAutomateDotnetExample/AutomateFunction.cs new file mode 100644 index 0000000..ea6f92a --- /dev/null +++ b/SpeckleAutomateDotnetExample/AutomateFunction.cs @@ -0,0 +1,28 @@ +using Objects; +using Objects.Geometry; +using Speckle.Automate.Sdk; +using Speckle.Core.Logging; +using Speckle.Core.Models.Extensions; + +static class AutomateFunction +{ + public static async Task Run( + AutomationContext automationContext, + FunctionInputs functionInputs + ) + { + Console.WriteLine("Starting execution"); + _ = typeof(ObjectsKit).Assembly; // INFO: Force objects kit to initialize + + + Console.WriteLine("Receiving version"); + var commitObject = await automationContext.ReceiveVersion(); + + Console.WriteLine("Received version: " + commitObject); + + var count = commitObject + .Flatten() + .Count(b => b.speckle_type == functionInputs.SpeckleTypeToCount); + automationContext.MarkRunSuccess($"Counted {count} objects"); + } +} diff --git a/SpeckleAutomateDotnetExample/FunctionInputs.cs b/SpeckleAutomateDotnetExample/FunctionInputs.cs new file mode 100644 index 0000000..f37a05a --- /dev/null +++ b/SpeckleAutomateDotnetExample/FunctionInputs.cs @@ -0,0 +1,12 @@ +using System.ComponentModel.DataAnnotations; + +/// +/// This class describes the user specified variables that the function wants to work with. +/// +/// This class is used to generate a JSON Schema to ensure that the user provided values +/// are valid and match the required schema. +struct FunctionInputs +{ + [Required] + public string SpeckleTypeToCount; +} diff --git a/SpeckleAutomateDotnetExample/Program.cs b/SpeckleAutomateDotnetExample/Program.cs new file mode 100644 index 0000000..552eff9 --- /dev/null +++ b/SpeckleAutomateDotnetExample/Program.cs @@ -0,0 +1,6 @@ +using Speckle.Automate.Sdk; + +// WARNING do not delete this call, this is the actual execution of your function +await AutomationRunner + .Main(args, AutomateFunction.Run) + .ConfigureAwait(false); diff --git a/SpeckleAutomateDotnetExample/SpeckleAutomateDotnetExample.csproj b/SpeckleAutomateDotnetExample/SpeckleAutomateDotnetExample.csproj new file mode 100644 index 0000000..197ca6d --- /dev/null +++ b/SpeckleAutomateDotnetExample/SpeckleAutomateDotnetExample.csproj @@ -0,0 +1,14 @@ + + + + Exe + net7.0 + enable + enable + + + + + + + \ No newline at end of file diff --git a/packages.lock.json b/packages.lock.json deleted file mode 100644 index 71f0d35..0000000 --- a/packages.lock.json +++ /dev/null @@ -1,374 +0,0 @@ -{ - "version": 1, - "dependencies": { - "net7.0": { - "Newtonsoft.Json.Schema": { - "type": "Direct", - "requested": "[3.0.15, )", - "resolved": "3.0.15", - "contentHash": "O/RBoXYm93pJy/JF3vRJxISALxup8CxKrBGXAyd/pFGrCa9hnSeHq/rQqkTnnpOcvtQwcEDfMZ+R5h871XEO5A==", - "dependencies": { - "Newtonsoft.Json": "13.0.3" - } - }, - "Speckle.Core": { - "type": "Direct", - "requested": "[2.15.3, )", - "resolved": "2.15.3", - "contentHash": "rL4g3mBgL2TYWw55wC9QqVe0mR1MUISfcuDhiDNfVoPiWMmvGD1UQ6PjU5MncQRvLXYow48KGrUMDl7nntlIAQ==", - "dependencies": { - "GraphQL.Client": "6.0.0", - "Microsoft.CSharp": "4.7.0", - "Microsoft.Data.Sqlite": "7.0.5", - "Polly": "7.2.3", - "Polly.Contrib.WaitAndRetry": "1.1.1", - "Polly.Extensions.Http": "3.0.0", - "Sentry": "3.33.0", - "Sentry.Serilog": "3.33.0", - "Serilog": "2.12.0", - "Serilog.Enrichers.ClientInfo": "1.3.0", - "Serilog.Enrichers.GlobalLogContext": "3.0.0", - "Serilog.Exceptions": "8.4.0", - "Serilog.Sinks.Console": "4.1.0", - "Serilog.Sinks.Seq": "5.2.2", - "SerilogTimings": "3.0.1", - "Speckle.Newtonsoft.Json": "13.0.2" - } - }, - "Speckle.Newtonsoft.Json": { - "type": "Direct", - "requested": "[13.0.2, )", - "resolved": "13.0.2", - "contentHash": "g1BejUZwax5PRfL6xHgLEK23sqHWOgOj9hE7RvfRRlN00AGt8GnPYt8HedSK7UB3HiRW8zCA9Pn0iiYxCK24BA==" - }, - "Speckle.Objects": { - "type": "Direct", - "requested": "[2.15.3, )", - "resolved": "2.15.3", - "contentHash": "oj822fIHKIzevwZRYYZXmed/RNhf/WUX1DtKIxNQyGAhsPrMg6veke2Z5RuY6N3NtzC8NSJz4AyKhu/ESjVh2w==", - "dependencies": { - "Speckle.Core": "2.15.3" - } - }, - "System.CommandLine": { - "type": "Direct", - "requested": "[2.0.0-beta4.22272.1, )", - "resolved": "2.0.0-beta4.22272.1", - "contentHash": "1uqED/q2H0kKoLJ4+hI2iPSBSEdTuhfCYADeJrAqERmiGQ2NNacYKRNEQ+gFbU4glgVyK8rxI+ZOe1onEtr/Pg==" - }, - "GraphQL.Client": { - "type": "Transitive", - "resolved": "6.0.0", - "contentHash": "8yPNBbuVBpTptivyAlak4GZvbwbUcjeQTL4vN1HKHRuOykZ4r7l5fcLS6vpyPyLn0x8FsL31xbOIKyxbmR9rbA==", - "dependencies": { - "GraphQL.Client.Abstractions": "6.0.0", - "GraphQL.Client.Abstractions.Websocket": "6.0.0", - "System.Reactive": "5.0.0" - } - }, - "GraphQL.Client.Abstractions": { - "type": "Transitive", - "resolved": "6.0.0", - "contentHash": "h7uzWFORHZ+CCjwr/ThAyXMr0DPpzEANDa4Uo54wqCQ+j7qUKwqYTgOrb1W40sqbvNaZm9v/X7It31SUw0maHA==", - "dependencies": { - "GraphQL.Primitives": "6.0.0" - } - }, - "GraphQL.Client.Abstractions.Websocket": { - "type": "Transitive", - "resolved": "6.0.0", - "contentHash": "Nr9bPf8gIOvLuXpqEpqr9z9jslYFJOvd0feHth3/kPqeR3uMbjF5pjiwh4jxyMcxHdr8Pb6QiXkV3hsSyt0v7A==", - "dependencies": { - "GraphQL.Client.Abstractions": "6.0.0" - } - }, - "GraphQL.Primitives": { - "type": "Transitive", - "resolved": "6.0.0", - "contentHash": "yg72rrYDapfsIUrul7aF6wwNnTJBOFvuA9VdDTQpPa8AlAriHbufeXYLBcodKjfUdkCnaiggX1U/nEP08Zb5GA==" - }, - "Microsoft.AspNetCore.Http": { - "type": "Transitive", - "resolved": "2.2.2", - "contentHash": "BAibpoItxI5puk7YJbIGj95arZueM8B8M5xT1fXBn3hb3L2G3ucrZcYXv1gXdaroLbntUs8qeV8iuBrpjQsrKw==", - "dependencies": { - "Microsoft.AspNetCore.Http.Abstractions": "2.2.0", - "Microsoft.AspNetCore.WebUtilities": "2.2.0", - "Microsoft.Extensions.ObjectPool": "2.2.0", - "Microsoft.Extensions.Options": "2.2.0", - "Microsoft.Net.Http.Headers": "2.2.0" - } - }, - "Microsoft.AspNetCore.Http.Abstractions": { - "type": "Transitive", - "resolved": "2.2.0", - "contentHash": "Nxs7Z1q3f1STfLYKJSVXCs1iBl+Ya6E8o4Oy1bCxJ/rNI44E/0f6tbsrVqAWfB7jlnJfyaAtIalBVxPKUPQb4Q==", - "dependencies": { - "Microsoft.AspNetCore.Http.Features": "2.2.0", - "System.Text.Encodings.Web": "4.5.0" - } - }, - "Microsoft.AspNetCore.Http.Features": { - "type": "Transitive", - "resolved": "2.2.0", - "contentHash": "ziFz5zH8f33En4dX81LW84I6XrYXKf9jg6aM39cM+LffN9KJahViKZ61dGMSO2gd3e+qe5yBRwsesvyqlZaSMg==", - "dependencies": { - "Microsoft.Extensions.Primitives": "2.2.0" - } - }, - "Microsoft.AspNetCore.WebUtilities": { - "type": "Transitive", - "resolved": "2.2.0", - "contentHash": "9ErxAAKaDzxXASB/b5uLEkLgUWv1QbeVxyJYEHQwMaxXOeFFVkQxiq8RyfVcifLU7NR0QY0p3acqx4ZpYfhHDg==", - "dependencies": { - "Microsoft.Net.Http.Headers": "2.2.0", - "System.Text.Encodings.Web": "4.5.0" - } - }, - "Microsoft.CSharp": { - "type": "Transitive", - "resolved": "4.7.0", - "contentHash": "pTj+D3uJWyN3My70i2Hqo+OXixq3Os2D1nJ2x92FFo6sk8fYS1m1WLNTs0Dc1uPaViH0YvEEwvzddQ7y4rhXmA==" - }, - "Microsoft.Data.Sqlite": { - "type": "Transitive", - "resolved": "7.0.5", - "contentHash": "KGxbPeWsQMnmQy43DSBxAFtHz3l2JX8EWBSGUCvT3CuZ8KsuzbkqMIJMDOxWtG8eZSoCDI04aiVQjWuuV8HmSw==", - "dependencies": { - "Microsoft.Data.Sqlite.Core": "7.0.5", - "SQLitePCLRaw.bundle_e_sqlite3": "2.1.4" - } - }, - "Microsoft.Data.Sqlite.Core": { - "type": "Transitive", - "resolved": "7.0.5", - "contentHash": "FTerRmQPqHrCrnoUzhBu+E+1DNGwyrAMLqHkAqOOOu5pGfyMOj8qQUBxI/gDtWtG11p49UxSfWmBzRNlwZqfUg==", - "dependencies": { - "SQLitePCLRaw.core": "2.1.4" - } - }, - "Microsoft.Extensions.DependencyInjection.Abstractions": { - "type": "Transitive", - "resolved": "2.2.0", - "contentHash": "f9hstgjVmr6rmrfGSpfsVOl2irKAgr1QjrSi3FgnS7kulxband50f2brRLwySAQTADPZeTdow0mpSMcoAdadCw==" - }, - "Microsoft.Extensions.ObjectPool": { - "type": "Transitive", - "resolved": "2.2.0", - "contentHash": "gA8H7uQOnM5gb+L0uTNjViHYr+hRDqCdfugheGo/MxQnuHzmhhzCBTIPm19qL1z1Xe0NEMabfcOBGv9QghlZ8g==" - }, - "Microsoft.Extensions.Options": { - "type": "Transitive", - "resolved": "2.2.0", - "contentHash": "UpZLNLBpIZ0GTebShui7xXYh6DmBHjWM8NxGxZbdQh/bPZ5e6YswqI+bru6BnEL5eWiOdodsXtEz3FROcgi/qg==", - "dependencies": { - "Microsoft.Extensions.DependencyInjection.Abstractions": "2.2.0", - "Microsoft.Extensions.Primitives": "2.2.0", - "System.ComponentModel.Annotations": "4.5.0" - } - }, - "Microsoft.Extensions.Primitives": { - "type": "Transitive", - "resolved": "2.2.0", - "contentHash": "azyQtqbm4fSaDzZHD/J+V6oWMFaf2tWP4WEGIYePLCMw3+b2RQdj9ybgbQyjCshcitQKQ4lEDOZjmSlTTrHxUg==", - "dependencies": { - "System.Memory": "4.5.1", - "System.Runtime.CompilerServices.Unsafe": "4.5.1" - } - }, - "Microsoft.Net.Http.Headers": { - "type": "Transitive", - "resolved": "2.2.0", - "contentHash": "iZNkjYqlo8sIOI0bQfpsSoMTmB/kyvmV2h225ihyZT33aTp48ZpF6qYnXxzSXmHt8DpBAwBTX+1s1UFLbYfZKg==", - "dependencies": { - "Microsoft.Extensions.Primitives": "2.2.0", - "System.Buffers": "4.5.0" - } - }, - "Newtonsoft.Json": { - "type": "Transitive", - "resolved": "13.0.3", - "contentHash": "HrC5BXdl00IP9zeV+0Z848QWPAoCr9P3bDEZguI+gkLcBKAOxix/tLEAAHC+UvDNPv4a2d18lOReHMOagPa+zQ==" - }, - "Polly": { - "type": "Transitive", - "resolved": "7.2.3", - "contentHash": "DeCY0OFbNdNxsjntr1gTXHJ5pKUwYzp04Er2LLeN3g6pWhffsGuKVfMBLe1lw7x76HrPkLxKEFxBlpRxS2nDEQ==" - }, - "Polly.Contrib.WaitAndRetry": { - "type": "Transitive", - "resolved": "1.1.1", - "contentHash": "1MUQLiSo4KDkQe6nzQRhIU05lm9jlexX5BVsbuw0SL82ynZ+GzAHQxJVDPVBboxV37Po3SG077aX8DuSy8TkaA==" - }, - "Polly.Extensions.Http": { - "type": "Transitive", - "resolved": "3.0.0", - "contentHash": "drrG+hB3pYFY7w1c3BD+lSGYvH2oIclH8GRSehgfyP5kjnFnHKQuuBhuHLv+PWyFuaTDyk/vfRpnxOzd11+J8g==", - "dependencies": { - "Polly": "7.1.0" - } - }, - "Sentry": { - "type": "Transitive", - "resolved": "3.33.0", - "contentHash": "8vbD2o6IR2wrRrkSiRbnodWGWUOqIlwYtzpjvPNOb5raJdOf+zxMwfS8f6nx9bmrTTfDj7KrCB8C/5OuicAc8A==" - }, - "Sentry.Serilog": { - "type": "Transitive", - "resolved": "3.33.0", - "contentHash": "V8BU7QGWg2qLYfNPqtuTBhC1opysny5l+Ifp6J6PhOeAxU0FssR7nYfbJVetrnLIoh2rd3DlJ6hHYYQosQYcUQ==", - "dependencies": { - "Sentry": "3.33.0", - "Serilog": "2.10.0" - } - }, - "Serilog": { - "type": "Transitive", - "resolved": "2.12.0", - "contentHash": "xaiJLIdu6rYMKfQMYUZgTy8YK7SMZjB4Yk50C/u//Z4OsvxkUfSPJy4nknfvwAC34yr13q7kcyh4grbwhSxyZg==" - }, - "Serilog.Enrichers.ClientInfo": { - "type": "Transitive", - "resolved": "1.3.0", - "contentHash": "mTc7PM+wC9Hr7LWSwqt5mmnlAr7RJs+eTb3PGPRhwdOackk95MkhUZognuxXEdlW19HAFNmEBTSBY5DfLwM8jQ==", - "dependencies": { - "Microsoft.AspNetCore.Http": "2.2.2", - "Serilog": "2.9.0" - } - }, - "Serilog.Enrichers.GlobalLogContext": { - "type": "Transitive", - "resolved": "3.0.0", - "contentHash": "IIZcj5mAUVhIl/NTA+YI2KC+sPDzcwvs0ZMHH42jsPfl1a4LVX7ohVpw5UK+e3GxuV3Nv239Il5oM2peUIl44g==", - "dependencies": { - "Serilog": "2.12.0" - } - }, - "Serilog.Exceptions": { - "type": "Transitive", - "resolved": "8.4.0", - "contentHash": "nc/+hUw3lsdo0zCj0KMIybAu7perMx79vu72w0za9Nsi6mWyNkGXxYxakAjWB7nEmYL6zdmhEQRB4oJ2ALUeug==", - "dependencies": { - "Serilog": "2.8.0", - "System.Reflection.TypeExtensions": "4.7.0" - } - }, - "Serilog.Formatting.Compact": { - "type": "Transitive", - "resolved": "1.1.0", - "contentHash": "pNroKVjo+rDqlxNG5PXkRLpfSCuDOBY0ri6jp9PLe505ljqwhwZz8ospy2vWhQlFu5GkIesh3FcDs4n7sWZODA==", - "dependencies": { - "Serilog": "2.8.0" - } - }, - "Serilog.Sinks.Console": { - "type": "Transitive", - "resolved": "4.1.0", - "contentHash": "K6N5q+5fetjnJPvCmkWOpJ/V8IEIoMIB1s86OzBrbxwTyHxdx3pmz4H+8+O/Dc/ftUX12DM1aynx/dDowkwzqg==", - "dependencies": { - "Serilog": "2.10.0" - } - }, - "Serilog.Sinks.File": { - "type": "Transitive", - "resolved": "5.0.0", - "contentHash": "uwV5hdhWPwUH1szhO8PJpFiahqXmzPzJT/sOijH/kFgUx+cyoDTMM8MHD0adw9+Iem6itoibbUXHYslzXsLEAg==", - "dependencies": { - "Serilog": "2.10.0" - } - }, - "Serilog.Sinks.PeriodicBatching": { - "type": "Transitive", - "resolved": "3.1.0", - "contentHash": "NDWR7m3PalVlGEq3rzoktrXikjFMLmpwF0HI4sowo8YDdU+gqPlTHlDQiOGxHfB0sTfjPA9JjA7ctKG9zqjGkw==", - "dependencies": { - "Serilog": "2.0.0" - } - }, - "Serilog.Sinks.Seq": { - "type": "Transitive", - "resolved": "5.2.2", - "contentHash": "1Csmo5ua7NKUe0yXUx+zsRefjAniPWcXFhUXxXG8pwo0iMiw2gjn9SOkgYnnxbgWqmlGv236w0N/dHc2v5XwMg==", - "dependencies": { - "Serilog": "2.12.0", - "Serilog.Formatting.Compact": "1.1.0", - "Serilog.Sinks.File": "5.0.0", - "Serilog.Sinks.PeriodicBatching": "3.1.0" - } - }, - "SerilogTimings": { - "type": "Transitive", - "resolved": "3.0.1", - "contentHash": "Zs28eTgszAMwpIrbBnWHBI50yuxL50p/dmAUWmy75+axdZYK/Sjm5/5m1N/CisR8acJUhTVcjPZrsB1P5iv0Uw==", - "dependencies": { - "Serilog": "2.10.0" - } - }, - "SQLitePCLRaw.bundle_e_sqlite3": { - "type": "Transitive", - "resolved": "2.1.4", - "contentHash": "EWI1olKDjFEBMJu0+3wuxwziIAdWDVMYLhuZ3Qs84rrz+DHwD00RzWPZCa+bLnHCf3oJwuFZIRsHT5p236QXww==", - "dependencies": { - "SQLitePCLRaw.lib.e_sqlite3": "2.1.4", - "SQLitePCLRaw.provider.e_sqlite3": "2.1.4" - } - }, - "SQLitePCLRaw.core": { - "type": "Transitive", - "resolved": "2.1.4", - "contentHash": "inBjvSHo9UDKneGNzfUfDjK08JzlcIhn1+SP5Y3m6cgXpCxXKCJDy6Mka7LpgSV+UZmKSnC8rTwB0SQ0xKu5pA==", - "dependencies": { - "System.Memory": "4.5.3" - } - }, - "SQLitePCLRaw.lib.e_sqlite3": { - "type": "Transitive", - "resolved": "2.1.4", - "contentHash": "2C9Q9eX7CPLveJA0rIhf9RXAvu+7nWZu1A2MdG6SD/NOu26TakGgL1nsbc0JAspGijFOo3HoN79xrx8a368fBg==" - }, - "SQLitePCLRaw.provider.e_sqlite3": { - "type": "Transitive", - "resolved": "2.1.4", - "contentHash": "CSlb5dUp1FMIkez9Iv5EXzpeq7rHryVNqwJMWnpq87j9zWZexaEMdisDktMsnnrzKM6ahNrsTkjqNodTBPBxtQ==", - "dependencies": { - "SQLitePCLRaw.core": "2.1.4" - } - }, - "System.Buffers": { - "type": "Transitive", - "resolved": "4.5.0", - "contentHash": "pL2ChpaRRWI/p4LXyy4RgeWlYF2sgfj/pnVMvBqwNFr5cXg7CXNnWZWxrOONLg8VGdFB8oB+EG2Qw4MLgTOe+A==" - }, - "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": { - "type": "Transitive", - "resolved": "5.0.0", - "contentHash": "erBZjkQHWL9jpasCE/0qKAryzVBJFxGHVBAvgRN1bzM0q2s1S4oYREEEL0Vb+1kA/6BKb5FjUZMp5VXmy+gzkQ==" - }, - "System.Reflection.TypeExtensions": { - "type": "Transitive", - "resolved": "4.7.0", - "contentHash": "VybpaOQQhqE6siHppMktjfGBw1GCwvCqiufqmP8F1nj7fTUNtW35LOEt3UZTEsECfo+ELAl/9o9nJx3U91i7vA==" - }, - "System.Runtime.CompilerServices.Unsafe": { - "type": "Transitive", - "resolved": "4.5.1", - "contentHash": "Zh8t8oqolRaFa9vmOZfdQm/qKejdqz0J9kr7o2Fu0vPeoH3BL1EOXipKWwkWtLT1JPzjByrF19fGuFlNbmPpiw==" - }, - "System.Text.Encodings.Web": { - "type": "Transitive", - "resolved": "4.5.0", - "contentHash": "Xg4G4Indi4dqP1iuAiMSwpiWS54ZghzR644OtsRCm/m/lBMG8dUBhLVN7hLm8NNrNTR+iGbshCPTwrvxZPlm4g==" - } - } - } -} \ No newline at end of file