From 18f4c8f46443bc7b0c68c5c2a16e70a08064f226 Mon Sep 17 00:00:00 2001 From: crobibero Date: Tue, 20 Apr 2021 11:17:46 -0600 Subject: [PATCH] Initialize --- .github/dependabot.yml | 21 ++ .github/workflows/stable-generation.yml | 64 ++++++ .github/workflows/unstable-generation.yml | 64 ++++++ .gitignore | 240 ++++++++++++++++++++++ LICENSE | 21 ++ stable/BaseClient.cs | 88 ++++++++ stable/Jellyfin.Sdk.csproj | 33 +++ stable/SdkClientSettings.cs | 29 +++ stable/nswag.json | 100 +++++++++ unstable/BaseClient.cs | 88 ++++++++ unstable/Jellyfin.Sdk.csproj | 33 +++ unstable/SdkClientSettings.cs | 29 +++ unstable/nswag.json | 100 +++++++++ 13 files changed, 910 insertions(+) create mode 100644 .github/dependabot.yml create mode 100644 .github/workflows/stable-generation.yml create mode 100644 .github/workflows/unstable-generation.yml create mode 100644 .gitignore create mode 100644 LICENSE create mode 100644 stable/BaseClient.cs create mode 100644 stable/Jellyfin.Sdk.csproj create mode 100644 stable/SdkClientSettings.cs create mode 100644 stable/nswag.json create mode 100644 unstable/BaseClient.cs create mode 100644 unstable/Jellyfin.Sdk.csproj create mode 100644 unstable/SdkClientSettings.cs create mode 100644 unstable/nswag.json diff --git a/.github/dependabot.yml b/.github/dependabot.yml new file mode 100644 index 0000000..7e045ca --- /dev/null +++ b/.github/dependabot.yml @@ -0,0 +1,21 @@ +version: 2 +updates: + # Maintain dependencies for GitHub Actions + - package-ecosystem: "github-actions" + directory: "/" + schedule: + interval: "daily" + + - package-ecosystem: npm + directory: '/stable' + schedule: + interval: daily + time: '00:00' + open-pull-requests-limit: 10 + + - package-ecosystem: npm + directory: '/unstable' + schedule: + interval: daily + time: '00:00' + open-pull-requests-limit: 10 diff --git a/.github/workflows/stable-generation.yml b/.github/workflows/stable-generation.yml new file mode 100644 index 0000000..5cff510 --- /dev/null +++ b/.github/workflows/stable-generation.yml @@ -0,0 +1,64 @@ +name: Generate stable API + +on: + schedule: + - cron: "0 0 * * *" + workflow_dispatch: + +jobs: + build: + runs-on: ubuntu-latest + defaults: + run: + working-directory: ./stable + env: + DOTNET_NOLOGO: true + DOTNET_CLI_TELEMETRY_OPTOUT: true + steps: + - uses: actions/checkout@v2 + with: + ref: 'master' + - uses: actions/setup-dotnet@v1 + with: + dotnet-version: '5.0.x' + - uses: actions/setup-dotnet@v1 + with: + dotnet-version: '3.1.x' + + - name: Restore packages + run: dotnet restore + + - name: Get OpenApi version + id: apiversion + run: echo "::set-output name=number::$(curl -s https://api.jellyfin.org/openapi/jellyfin-openapi-stable.json | jq '.info.version')" + + - name: Create new version string + id: version + run: echo "::set-output name=number::$(echo ${{ steps.apiversion.outputs.number }})" + + - name: Install dotnet-setversion + run: dotnet tool install -g dotnet-setversion + + - name: Set project version + run: setversion ${{steps.version.outputs.number}} + + - name: Generate Api Client + run: dotnet build -c Release + + - name: Check if generated client files were modified + id: diff + run: echo "::set-output name=count::$(git status -s | grep g.cs | grep -v csproj | wc -l)" + + - name: Publish to nuget + # if: ${{ steps.diff.outputs.count }} > 0 + run: dotnet nuget push bin/Release/*.nupkg --api-key ${{ secrets.NUGET_APIKEY }} --source https://api.nuget.org/v3/index.json --skip-duplicate + + - name: Commit new changes to the repo + # if: ${{ steps.diff.outputs.count }} > 0 + run: | + git config --global user.email "packaging@jellyfin.org" + git config --global user.name "Jellyfin Packaging Team" + git pull + git add . + git commit -m "Update stable OpenAPI client" || echo + git push \ No newline at end of file diff --git a/.github/workflows/unstable-generation.yml b/.github/workflows/unstable-generation.yml new file mode 100644 index 0000000..f211ff2 --- /dev/null +++ b/.github/workflows/unstable-generation.yml @@ -0,0 +1,64 @@ +name: Generate unstable API + +on: + schedule: + - cron: "30 0 * * *" + workflow_dispatch: + +jobs: + build: + runs-on: ubuntu-latest + defaults: + run: + working-directory: ./unstable + env: + DOTNET_NOLOGO: true + DOTNET_CLI_TELEMETRY_OPTOUT: true + steps: + - uses: actions/checkout@v2 + with: + ref: 'master' + - uses: actions/setup-dotnet@v1 + with: + dotnet-version: '5.0.x' + - uses: actions/setup-dotnet@v1 + with: + dotnet-version: '3.1.x' + + - name: Restore packages + run: dotnet restore + + - name: Get OpenApi version + id: apiversion + run: echo "::set-output name=number::$(curl -s https://api.jellyfin.org/openapi/jellyfin-openapi-unstable.json | jq '.info.version')" + + - name: Create new version string + id: version + run: echo "::set-output name=number::$(echo ${{ steps.apiversion.outputs.number }}-unstable.$(date +'%Y%m%d%H%M'))" + + - name: Install dotnet-setversion + run: dotnet tool install -g dotnet-setversion + + - name: Set project version + run: setversion ${{steps.version.outputs.number}} + + - name: Generate Api Client + run: dotnet build -c Release + + - name: Check if generated client files were modified + id: diff + run: echo "::set-output name=count::$(git status -s | grep g.cs | grep -v csproj | wc -l)" + + - name: Publish to nuget + # if: ${{ steps.diff.outputs.count }} > 0 + run: dotnet nuget push bin/Release/*.nupkg --api-key ${{ secrets.NUGET_APIKEY }} --source https://api.nuget.org/v3/index.json --skip-duplicate + + - name: Commit new changes to the repo + # if: ${{ steps.diff.outputs.count }} > 0 + run: | + git config --global user.email "packaging@jellyfin.org" + git config --global user.name "Jellyfin Packaging Team" + git pull + git add . + git commit -m "Update unstable OpenAPI client" || echo + git push \ No newline at end of file diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..e50b430 --- /dev/null +++ b/.gitignore @@ -0,0 +1,240 @@ +.directory + +################# +## Eclipse +################# + +*.pydevproject +.project +.metadata +bin/ +tmp/ +*.tmp +*.bak +*.swp +*~.nib +project.fragment.lock.json +project.lock.json +local.properties +.classpath +.settings/ +.loadpath + +# External tool builders +.externalToolBuilders/ + +# Locally stored "Eclipse launch configurations" +*.launch + +# CDT-specific +.cproject + +# PDT-specific +.buildpath + +################# +## Media Browser +################# +ProgramData*/ +CorePlugins*/ +ProgramData-Server*/ +ProgramData-UI*/ + +################# +## Visual Studio +################# + +## Ignore Visual Studio temporary files, build results, and +## files generated by popular Visual Studio add-ons. + +.vs/ + +# User-specific files +*.suo +*.user +*.sln.docstates + +# Build results + +[Dd]ebug/ +[Rr]elease/ +build/ +[Bb]in/ +[Oo]bj/ + +# MSTest test Results +[Tt]est[Rr]esult*/ +[Bb]uild[Ll]og.* + +*_i.c +*_p.c +*.ilk +*.meta +*.obj +*.pch +*.pdb +*.pgc +*.pgd +*.rsp +*.sbr +*.tlb +*.tli +*.tlh +*.tmp +*.tmp_proj +*.log +*.vspscc +*.vssscc +.builds +*.pidb +*.log +*.scc +*.scc +*.psess +*.vsp +*.vspx +*.orig +*.rej +*.sdf +*.opensdf +*.ipch + +# Visual C++ cache files +ipch/ +*.aps +*.ncb +*.opensdf +*.sdf +*.cachefile + +# Visual Studio profiler +*.psess +*.vsp +*.vspx + +# Guidance Automation Toolkit +*.gpState + +# ReSharper is a .NET coding add-in +_ReSharper*/ +*.[Rr]e[Ss]harper + +# TeamCity is a build add-in +_TeamCity* + +# DotCover is a Code Coverage Tool +*.dotCover + +# NCrunch +*.ncrunch* +.*crunch*.local.xml + +# Installshield output folder +[Ee]xpress/ + +# DocProject is a documentation generator add-in +DocProject/buildhelp/ +DocProject/Help/*.HxT +DocProject/Help/*.HxC +DocProject/Help/*.hhc +DocProject/Help/*.hhk +DocProject/Help/*.hhp +DocProject/Help/Html2 +DocProject/Help/html + +# Click-Once directory +publish/ + +# Publish Web Output +*.Publish.xml +*.pubxml + +# NuGet Packages Directory +## TODO: If you have NuGet Package Restore enabled, uncomment the next line +# packages/ +dlls/ +dllssigned/ + +# Windows Azure Build Output +csx +*.build.csdef + +# Windows Store app package directory +AppPackages/ + +# Others +sql/ +*.Cache +ClientBin/ +[Ss]tyle[Cc]op.* +~$* +*~ +*.dbmdl +*.[Pp]ublish.xml +*.publishsettings + +# RIA/Silverlight projects +Generated_Code/ + +# Backup & report files from converting an old project file to a newer +# Visual Studio version. Backup files are not needed, because we have git ;-) +_UpgradeReport_Files/ +Backup*/ +UpgradeLog*.XML +UpgradeLog*.htm + +# SQL Server files +App_Data/*.mdf +App_Data/*.ldf + +############# +## Windows detritus +############# + +# Windows image file caches +Thumbs.db +ehthumbs.db + +# Folder config file +Desktop.ini + +# Recycle Bin used on file shares +$RECYCLE.BIN/ + +# Mac crap +.DS_Store + +############# +## Python +############# + +*.py[co] + +# Packages +*.egg +*.egg-info +build/ +eggs/ +parts/ +var/ +sdist/ +develop-eggs/ +.installed.cfg + +# Installer logs +pip-log.txt + +# Unit test / coverage reports +.coverage +.tox + +#Translations +*.mo + +#Mr Developer +.mr.developer.cfg + +########## +# Rider +########## +.idea/ \ No newline at end of file diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..f5fff43 --- /dev/null +++ b/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2021 Jellyfin + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/stable/BaseClient.cs b/stable/BaseClient.cs new file mode 100644 index 0000000..691542e --- /dev/null +++ b/stable/BaseClient.cs @@ -0,0 +1,88 @@ +using System.Net.Http; +using System.Text; +using System.Threading; +using System.Threading.Tasks; + +namespace Jellyfin.Sdk +{ + /// + /// The base client. + /// + public class BaseClient + { + private readonly SdkClientSettings _clientState; + + /// + /// Initializes a new instance of the . + /// + /// The sdk client state. + public BaseClient(SdkClientSettings clientState) + { + _clientState = clientState; + } + + /// + /// Prepare the request. + /// + /// + /// Required for generated clients. + /// + /// The http client. + /// The http request message. + /// The request url. + /// The Task. + protected Task PrepareRequestAsync(HttpClient client, HttpRequestMessage request, StringBuilder url) + { + // Insert baseurl into full url. + if (!string.IsNullOrEmpty(_clientState.BaseUrl)) + { + url.Insert(0, _clientState.BaseUrl.TrimEnd('/') + '/'); + } + + if (string.IsNullOrEmpty(_clientState.AccessToken)) + { + // Token isn't set, attempt to request without. + request.Headers.Add("X-Emby-Authorization", _clientState.DefaultAuthorizationHeader); + } + else + { + // Token is set, make regular request. + request.Headers.Add("X-Emby-Token", _clientState.AccessToken); + } + + return Task.CompletedTask; + } + + /// + /// Prepare the request. + /// + /// + /// Required for generated clients. + /// + /// The http client. + /// The http request message. + /// The request url. + /// The Task. + protected Task PrepareRequestAsync(HttpClient client, HttpRequestMessage request, string url) + { + // Required for generated api. + return Task.CompletedTask; + } + + /// + /// Process response message. + /// + /// + /// Required for generated clients. + /// + /// The http client. + /// The http response message. + /// The cancellation token. + /// The Task. + protected Task ProcessResponseAsync(HttpClient client, HttpResponseMessage response, CancellationToken cancellationToken) + { + // Required for generated api. + return Task.CompletedTask; + } + } +} \ No newline at end of file diff --git a/stable/Jellyfin.Sdk.csproj b/stable/Jellyfin.Sdk.csproj new file mode 100644 index 0000000..d89868d --- /dev/null +++ b/stable/Jellyfin.Sdk.csproj @@ -0,0 +1,33 @@ + + + netstandard2.0;netstandard2.1;net5.0 + true + true + snupkg + 10.7.2.1 + true + + + Jellyfin.Sdk + Jellyfin Contributors + Jellyfin;Api;Sdk;Client + true + MIT + Auto generated sdk for Jellyfin. + + + + all + runtime; build; native; contentfiles; analyzers; buildtransitive + + + + + all + runtime; build; native; contentfiles; analyzers; buildtransitive + + + + + + \ No newline at end of file diff --git a/stable/SdkClientSettings.cs b/stable/SdkClientSettings.cs new file mode 100644 index 0000000..131e9d7 --- /dev/null +++ b/stable/SdkClientSettings.cs @@ -0,0 +1,29 @@ +namespace Jellyfin.Sdk +{ + /// + /// The sdk client settings. + /// + public class SdkClientSettings + { + /// + /// Gets or sets the Jellyfin server's base url. + /// + /// + /// https://demo.jellyfin.org/stable + /// + public string BaseUrl { get; set; } + + /// + /// Gets or sets the user's access token. + /// + public string AccessToken { get; set; } + + /// + /// Get or sets the default authorization header. + /// + /// + /// This is used when the access token is not set. + /// + public string DefaultAuthorizationHeader { get; set; } + } +} \ No newline at end of file diff --git a/stable/nswag.json b/stable/nswag.json new file mode 100644 index 0000000..d0874e3 --- /dev/null +++ b/stable/nswag.json @@ -0,0 +1,100 @@ +{ + "runtime": "Net50", + "defaultVariables": null, + "documentGenerator": { + "fromDocument": { + "json": "", + "url": "https://repo.jellyfin.org/releases/openapi/jellyfin-openapi-stable.json", + "output": null, + "newLineBehavior": "Auto" + } + }, + "codeGenerators": { + "openApiToCSharpClient": { + "clientBaseClass": "BaseClient", + "configurationClass": "SdkClientSettings", + "generateClientClasses": true, + "generateClientInterfaces": true, + "clientBaseInterface": null, + "injectHttpClient": true, + "disposeHttpClient": false, + "protectedMethods": [], + "generateExceptionClasses": true, + "exceptionClass": "{controller}Exception", + "wrapDtoExceptions": true, + "useHttpClientCreationMethod": false, + "httpClientType": "System.Net.Http.HttpClient", + "useHttpRequestMessageCreationMethod": false, + "useBaseUrl": false, + "generateBaseUrlProperty": false, + "generateSyncMethods": false, + "generatePrepareRequestAndProcessResponseAsAsyncMethods": true, + "exposeJsonSerializerSettings": false, + "clientClassAccessModifier": "public", + "typeAccessModifier": "public", + "generateContractsOutput": false, + "contractsNamespace": null, + "contractsOutputFilePath": null, + "parameterDateTimeFormat": "s", + "parameterDateFormat": "yyyy-MM-dd", + "generateUpdateJsonSerializerSettingsMethod": true, + "useRequestAndResponseSerializationSettings": false, + "serializeTypeInformation": false, + "queryNullValue": "", + "className": "{controller}Client", + "operationGenerationMode": "MultipleClientsFromFirstTagAndOperationId", + "additionalNamespaceUsages": [], + "additionalContractNamespaceUsages": [], + "generateOptionalParameters": true, + "generateJsonMethods": false, + "enforceFlagEnums": false, + "parameterArrayType": "System.Collections.Generic.IEnumerable", + "parameterDictionaryType": "System.Collections.Generic.IDictionary", + "responseArrayType": "System.Collections.Generic.IReadOnlyList", + "responseDictionaryType": "System.Collections.Generic.IDictionary", + "wrapResponses": false, + "wrapResponseMethods": [], + "generateResponseClasses": true, + "responseClass": "SwaggerResponse", + "namespace": "Jellyfin.Sdk", + "requiredPropertiesMustBeDefined": true, + "dateType": "System.DateTimeOffset", + "jsonConverters": null, + "anyType": "object", + "dateTimeType": "System.DateTimeOffset", + "timeType": "System.TimeSpan", + "timeSpanType": "System.TimeSpan", + "arrayType": "System.Collections.Generic.IReadOnlyList", + "arrayInstanceType": "", + "dictionaryType": "System.Collections.Generic.IDictionary", + "dictionaryInstanceType": "System.Collections.Generic.Dictionary", + "arrayBaseType": "System.Collections.Generic.IReadOnlyList", + "dictionaryBaseType": "System.Collections.Generic.Dictionary", + "classStyle": "Poco", + "jsonLibrary": "NewtonsoftJson", + "generateDefaultValues": true, + "generateDataAnnotations": true, + "excludedTypeNames": [], + "excludedParameterNames": [], + "handleReferences": false, + "generateImmutableArrayProperties": false, + "generateImmutableDictionaryProperties": false, + "jsonSerializerSettingsTransformationMethod": null, + "inlineNamedArrays": false, + "inlineNamedDictionaries": false, + "inlineNamedTuples": true, + "inlineNamedAny": false, + "generateDtoTypes": true, + "generateOptionalPropertiesAsNullable": false, + "generateNullableReferenceTypes": false, + "templateDirectory": null, + "typeNameGeneratorType": null, + "propertyNameGeneratorType": null, + "enumNameGeneratorType": null, + "serviceHost": ".", + "serviceSchemes": null, + "output": "JellyfinSdk.g.cs", + "newLineBehavior": "Auto" + } + } +} \ No newline at end of file diff --git a/unstable/BaseClient.cs b/unstable/BaseClient.cs new file mode 100644 index 0000000..691542e --- /dev/null +++ b/unstable/BaseClient.cs @@ -0,0 +1,88 @@ +using System.Net.Http; +using System.Text; +using System.Threading; +using System.Threading.Tasks; + +namespace Jellyfin.Sdk +{ + /// + /// The base client. + /// + public class BaseClient + { + private readonly SdkClientSettings _clientState; + + /// + /// Initializes a new instance of the . + /// + /// The sdk client state. + public BaseClient(SdkClientSettings clientState) + { + _clientState = clientState; + } + + /// + /// Prepare the request. + /// + /// + /// Required for generated clients. + /// + /// The http client. + /// The http request message. + /// The request url. + /// The Task. + protected Task PrepareRequestAsync(HttpClient client, HttpRequestMessage request, StringBuilder url) + { + // Insert baseurl into full url. + if (!string.IsNullOrEmpty(_clientState.BaseUrl)) + { + url.Insert(0, _clientState.BaseUrl.TrimEnd('/') + '/'); + } + + if (string.IsNullOrEmpty(_clientState.AccessToken)) + { + // Token isn't set, attempt to request without. + request.Headers.Add("X-Emby-Authorization", _clientState.DefaultAuthorizationHeader); + } + else + { + // Token is set, make regular request. + request.Headers.Add("X-Emby-Token", _clientState.AccessToken); + } + + return Task.CompletedTask; + } + + /// + /// Prepare the request. + /// + /// + /// Required for generated clients. + /// + /// The http client. + /// The http request message. + /// The request url. + /// The Task. + protected Task PrepareRequestAsync(HttpClient client, HttpRequestMessage request, string url) + { + // Required for generated api. + return Task.CompletedTask; + } + + /// + /// Process response message. + /// + /// + /// Required for generated clients. + /// + /// The http client. + /// The http response message. + /// The cancellation token. + /// The Task. + protected Task ProcessResponseAsync(HttpClient client, HttpResponseMessage response, CancellationToken cancellationToken) + { + // Required for generated api. + return Task.CompletedTask; + } + } +} \ No newline at end of file diff --git a/unstable/Jellyfin.Sdk.csproj b/unstable/Jellyfin.Sdk.csproj new file mode 100644 index 0000000..4fc20fa --- /dev/null +++ b/unstable/Jellyfin.Sdk.csproj @@ -0,0 +1,33 @@ + + + netstandard2.0;netstandard2.1;net5.0 + true + true + snupkg + 10.8.0-unstable.202104201640 + true + + + Jellyfin.ApiClient + Jellyfin Contributors + Jellyfin;Api;Client + true + MIT + Auto generated Api client for Jellyfin. + + + + all + runtime; build; native; contentfiles; analyzers; buildtransitive + + + + + all + runtime; build; native; contentfiles; analyzers; buildtransitive + + + + + + \ No newline at end of file diff --git a/unstable/SdkClientSettings.cs b/unstable/SdkClientSettings.cs new file mode 100644 index 0000000..131e9d7 --- /dev/null +++ b/unstable/SdkClientSettings.cs @@ -0,0 +1,29 @@ +namespace Jellyfin.Sdk +{ + /// + /// The sdk client settings. + /// + public class SdkClientSettings + { + /// + /// Gets or sets the Jellyfin server's base url. + /// + /// + /// https://demo.jellyfin.org/stable + /// + public string BaseUrl { get; set; } + + /// + /// Gets or sets the user's access token. + /// + public string AccessToken { get; set; } + + /// + /// Get or sets the default authorization header. + /// + /// + /// This is used when the access token is not set. + /// + public string DefaultAuthorizationHeader { get; set; } + } +} \ No newline at end of file diff --git a/unstable/nswag.json b/unstable/nswag.json new file mode 100644 index 0000000..93cd443 --- /dev/null +++ b/unstable/nswag.json @@ -0,0 +1,100 @@ +{ + "runtime": "Net50", + "defaultVariables": null, + "documentGenerator": { + "fromDocument": { + "json": "", + "url": "https://repo.jellyfin.org/releases/openapi/jellyfin-openapi-unstable.json", + "output": null, + "newLineBehavior": "Auto" + } + }, + "codeGenerators": { + "openApiToCSharpClient": { + "clientBaseClass": "BaseClient", + "configurationClass": "SdkClientSettings", + "generateClientClasses": true, + "generateClientInterfaces": true, + "clientBaseInterface": null, + "injectHttpClient": true, + "disposeHttpClient": false, + "protectedMethods": [], + "generateExceptionClasses": true, + "exceptionClass": "{controller}Exception", + "wrapDtoExceptions": true, + "useHttpClientCreationMethod": false, + "httpClientType": "System.Net.Http.HttpClient", + "useHttpRequestMessageCreationMethod": false, + "useBaseUrl": false, + "generateBaseUrlProperty": false, + "generateSyncMethods": false, + "generatePrepareRequestAndProcessResponseAsAsyncMethods": true, + "exposeJsonSerializerSettings": false, + "clientClassAccessModifier": "public", + "typeAccessModifier": "public", + "generateContractsOutput": false, + "contractsNamespace": null, + "contractsOutputFilePath": null, + "parameterDateTimeFormat": "s", + "parameterDateFormat": "yyyy-MM-dd", + "generateUpdateJsonSerializerSettingsMethod": true, + "useRequestAndResponseSerializationSettings": false, + "serializeTypeInformation": false, + "queryNullValue": "", + "className": "{controller}Client", + "operationGenerationMode": "MultipleClientsFromFirstTagAndOperationId", + "additionalNamespaceUsages": [], + "additionalContractNamespaceUsages": [], + "generateOptionalParameters": true, + "generateJsonMethods": false, + "enforceFlagEnums": false, + "parameterArrayType": "System.Collections.Generic.IEnumerable", + "parameterDictionaryType": "System.Collections.Generic.IDictionary", + "responseArrayType": "System.Collections.Generic.IReadOnlyList", + "responseDictionaryType": "System.Collections.Generic.IDictionary", + "wrapResponses": false, + "wrapResponseMethods": [], + "generateResponseClasses": true, + "responseClass": "SwaggerResponse", + "namespace": "Jellyfin.Sdk", + "requiredPropertiesMustBeDefined": true, + "dateType": "System.DateTimeOffset", + "jsonConverters": null, + "anyType": "object", + "dateTimeType": "System.DateTimeOffset", + "timeType": "System.TimeSpan", + "timeSpanType": "System.TimeSpan", + "arrayType": "System.Collections.Generic.IReadOnlyList", + "arrayInstanceType": "", + "dictionaryType": "System.Collections.Generic.IDictionary", + "dictionaryInstanceType": "System.Collections.Generic.Dictionary", + "arrayBaseType": "System.Collections.Generic.IReadOnlyList", + "dictionaryBaseType": "System.Collections.Generic.Dictionary", + "classStyle": "Poco", + "jsonLibrary": "NewtonsoftJson", + "generateDefaultValues": true, + "generateDataAnnotations": true, + "excludedTypeNames": [], + "excludedParameterNames": [], + "handleReferences": false, + "generateImmutableArrayProperties": false, + "generateImmutableDictionaryProperties": false, + "jsonSerializerSettingsTransformationMethod": null, + "inlineNamedArrays": false, + "inlineNamedDictionaries": false, + "inlineNamedTuples": true, + "inlineNamedAny": false, + "generateDtoTypes": true, + "generateOptionalPropertiesAsNullable": false, + "generateNullableReferenceTypes": false, + "templateDirectory": null, + "typeNameGeneratorType": null, + "propertyNameGeneratorType": null, + "enumNameGeneratorType": null, + "serviceHost": ".", + "serviceSchemes": null, + "output": "JellyfinSdk.g.cs", + "newLineBehavior": "Auto" + } + } +} \ No newline at end of file