diff --git a/.github/workflows/build-commerceapi.yml b/.github/workflows/build-commerceapi.yml new file mode 100644 index 0000000..d38f914 --- /dev/null +++ b/.github/workflows/build-commerceapi.yml @@ -0,0 +1,59 @@ +name: Jhoose Commerce API Build + +on: + push: + branches: [ main, release/* ] + pull_request: + branches: [ main ] + workflow_dispatch: + +env: + BUILD_NO: 1.0.0.${{ github.run_number }} + BUILD_NO_PRE: 1.0.0-rc.${{ github.run_number }} + +jobs: + build: + + runs-on: ubuntu-latest + + steps: + - uses: actions/checkout@v4 + + - name: Setup .NET + uses: actions/setup-dotnet@v4 + with: + dotnet-version: | + 8.0.x + 9.0.x + 10.0.x + + - name: Configure Source + working-directory: ./src/Jhoose.CommerceApi + run: | + dotnet nuget add source https://nuget.pkg.github.com/andrewmarkham/index.json --name "GithubBuild" --store-password-in-clear-text --username andrewmarkham --password ${{ secrets.PACKAGE_TOKEN }} + dotnet nuget add source https://api.nuget.optimizely.com/v3/index.json --name "Optimizely" + + - name: Restore (nuget.exe) + run: dotnet restore Jhoose.CommerceApi.csproj --configfile ../../Nuget.config + working-directory: ./src/Jhoose.CommerceApi + + - name: Build (Production) + if: github.ref == 'refs/heads/main' + run: dotnet build --configuration Release --no-restore -p:Version=${{ env.BUILD_NO }} + working-directory: ./src/Jhoose.CommerceApi + + - name: Build (Pre Release) + if: github.ref != 'refs/heads/main' + run: dotnet build --configuration PreRelease --no-restore -p:Version=${{ env.BUILD_NO_PRE }} + working-directory: ./src/Jhoose.CommerceApi + + - name: Run Jhoose.CommerceApi.Tests + working-directory: ./src/Jhoose.CommerceApi.Tests + run: dotnet test Jhoose.CommerceApi.Tests.csproj --no-restore --configuration Release --logger "trx;LogFileName=test_results.trx" + + - name: nuget push + if: github.ref == 'refs/heads/main' || startsWith(github.ref, 'refs/heads/release') + working-directory: ./src/Jhoose.CommerceApi + run: dotnet nuget push "**/Jhoose.CommerceApi*.nupkg" -k ${{ secrets.PACKAGE_TOKEN }} -s https://nuget.pkg.github.com/andrewmarkham/index.json --skip-duplicate + env: + GITHUB_TOKEN: ${{ secrets.PACKAGE_TOKEN }} \ No newline at end of file diff --git a/.github/workflows/npm-publish-commerce-core.yml b/.github/workflows/npm-publish-commerce-core.yml deleted file mode 100644 index 728969f..0000000 --- a/.github/workflows/npm-publish-commerce-core.yml +++ /dev/null @@ -1,27 +0,0 @@ -name: Publish jhoose commerce core package -on: - workflow_dispatch: - release: - types: [published] -jobs: - build: - runs-on: ubuntu-latest - permissions: - contents: read - packages: write - steps: - - uses: actions/checkout@v4 - - # Setup .npmrc file to publish to GitHub Packages - - uses: actions/setup-node@v4 - with: - node-version: '20.x' - registry-url: 'https://npm.pkg.github.com' - # Defaults to the user or organization that owns the workflow file - scope: '@jhoose-commerce' - - run: npm ci - working-directory: ./src/eCommerce/site/packages/core - - run: npm publish - working-directory: ./src/eCommerce/site/packages/core - env: - NODE_AUTH_TOKEN: ${{ secrets.npm_access }} diff --git a/.vs/Foundation/xs/UserPrefs.xml b/.vs/Foundation/xs/UserPrefs.xml deleted file mode 100644 index 4821614..0000000 --- a/.vs/Foundation/xs/UserPrefs.xml +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/.vs/Foundation/xs/project-cache/Foundation-Debug.json b/.vs/Foundation/xs/project-cache/Foundation-Debug.json deleted file mode 100644 index 1c5001b..0000000 --- a/.vs/Foundation/xs/project-cache/Foundation-Debug.json +++ /dev/null @@ -1 +0,0 @@ -{"Format":1,"ProjectReferences":[{"FilePath":"/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Jhoose.CommerceApi/Jhoose.CommerceApi.csproj","Aliases":[],"Framework":null}],"MetadataReferences":[{"FilePath":"/Users/andrewmarkham/.nuget/packages/advanced.cms.advancedreviews/1.3.6/lib/net6.0/Advanced.CMS.AdvancedReviews.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/advanced.cms.advancedreviews/1.3.6/lib/net6.0/Advanced.CMS.ApprovalReviews.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/advanced.cms.advancedreviews/1.3.6/lib/net6.0/Advanced.CMS.ExternalReviews.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/azure.core/1.35.0/lib/net6.0/Azure.Core.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/azure.identity/1.10.3/lib/netstandard2.0/Azure.Identity.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/baaijte.optimizely.imagesharp.web/2.1.1/lib/net6.0/Baaijte.Optimizely.ImageSharp.Web.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/portable.bouncycastle/1.9.0/lib/netstandard2.0/BouncyCastle.Crypto.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/boxed.aspnetcore.taghelpers/6.0.0/lib/net6.0/Boxed.AspNetCore.TagHelpers.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/castle.core/4.4.1/lib/netstandard1.5/Castle.Core.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/castle.windsor/5.1.1/lib/netstandard1.6/Castle.Windsor.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/episerver.addons.helpers/1.1.0/lib/net6.0/EPiServer.AddOns.Helpers.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/episerver.framework/12.21.2/lib/net6.0/EPiServer.ApplicationModules.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/episerver.commerce.core/14.19.0/lib/net6.0/EPiServer.Business.Commerce.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/episerver.cms.aspnetcore/12.21.2/lib/net6.0/EPiServer.Cms.AspNetCore.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/episerver.cms.aspnetcore.htmlhelpers/12.21.2/lib/net6.0/EPiServer.Cms.AspNetCore.HtmlHelpers.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/episerver.cms.aspnetcore.mvc/12.21.2/lib/net6.0/EPiServer.Cms.AspNetCore.Mvc.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/episerver.cms.aspnetcore.routing/12.21.2/lib/net6.0/EPiServer.Cms.AspNetCore.Routing.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/episerver.cms.aspnetcore.taghelpers/12.20.2/lib/net6.0/EPiServer.Cms.AspNetCore.TagHelpers.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/episerver.cms.aspnetcore.templating/12.21.2/lib/net6.0/EPiServer.Cms.AspNetCore.Templating.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/episerver.cms/12.28.0/lib/net6.0/EPiServer.CMS.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/episerver.cms.ui.core/12.28.0/lib/net6.0/EPiServer.Cms.Shell.UI.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/episerver.cms.tinymce/4.7.2/lib/net6.0/EPiServer.Cms.TinyMce.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/episerver.cms.tinymce/4.7.2/lib/net6.0/EPiServer.Cms.TinyMce.SpellChecker.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/episerver.cms.ui.admin/12.28.0/lib/net6.0/EPiServer.Cms.UI.Admin.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/episerver.cms.ui.aspnetidentity/12.28.0/lib/net6.0/EPiServer.Cms.UI.AspNetIdentity.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/episerver.cms.ui.settings/12.28.0/lib/net6.0/EPiServer.Cms.UI.Settings.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/episerver.cms.ui.visitorgroups/12.28.0/lib/net6.0/EPiServer.Cms.UI.VisitorGroups.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/episerver.cms.welcomeintegration.core/1.3.8/lib/net6.0/EPiServer.Cms.WelcomeIntegration.Core.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/episerver.cms.welcomeintegration.ui/1.3.8/lib/net6.0/EPiServer.Cms.WelcomeIntegration.UI.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/episerver.commerce.core/14.19.0/lib/net6.0/EPiServer.Commerce.Bolt.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/episerver.commerce/14.19.0/lib/net6.0/EPiServer.Commerce.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/episerver.commerce.core/14.19.0/lib/net6.0/EPiServer.Commerce.Internal.Migration.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/episerver.commerce.odp/14.19.0/lib/net6.0/EPiServer.Commerce.ODP.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/episerver.commerce.core/14.19.0/lib/net6.0/EPiServer.Commerce.Reporting.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/episerver.commerce.ui/14.19.0/lib/net6.0/EPiServer.Commerce.Shell.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/episerver.commerce.ui.admin/14.19.0/lib/net6.0/EPiServer.Commerce.UI.Admin.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/episerver.commerce.ui.customerservice/14.19.0/lib/net6.0/EPiServer.Commerce.UI.CustomerService.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/episerver.commerce.ui/14.19.0/lib/net6.0/EPiServer.Commerce.UI.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/episerver.contentdeliveryapi.cms/3.10.2/lib/net6.0/EPiServer.ContentApi.Cms.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/episerver.contentdeliveryapi.core/3.10.2/lib/net6.0/EPiServer.ContentApi.Core.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/episerver.contentdeliveryapi.cms/3.10.2/lib/net6.0/EPiServer.ContentApi.Routing.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/episerver.contentdeliveryapi.search/3.10.2/lib/net6.0/EPiServer.ContentApi.Search.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/episerver.contentdefinitionsapi/3.10.2/lib/net6.0/EPiServer.ContentDefinitionsApi.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/episerver.contentmanagementapi/3.10.2/lib/net6.0/EPiServer.ContentManagementApi.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/episerver.framework/12.21.2/lib/net6.0/EPiServer.Data.Cache.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/episerver.framework/12.21.2/lib/net6.0/EPiServer.Data.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/episerver.cms.core/12.21.2/lib/net6.0/EPiServer.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/episerver.cms.core/12.21.2/lib/net6.0/EPiServer.Enterprise.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/episerver.framework/12.21.2/lib/net6.0/EPiServer.Events.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/episerver.find.cms/16.1.0/lib/net6.0/EPiServer.Find.Cms.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/episerver.find.commerce/12.2.0/lib/net6.0/EPiServer.Find.Commerce.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/episerver.find/16.1.0/lib/net6.0/EPiServer.Find.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/episerver.find.framework/16.1.0/lib/net6.0/EPiServer.Find.Framework.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/episerver.find.cms/16.1.0/lib/net6.0/EPiServer.Find.Optimizations.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/episerver.find.framework/16.1.0/lib/net6.0/EPiServer.Find.Statistics.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/episerver.find.cms/16.1.0/lib/net6.0/EPiServer.Find.UI.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/episerver.forms.core/5.8.0/lib/net6.0/EPiServer.Forms.Core.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/episerver.forms/5.8.0/lib/net6.0/EPiServer.Forms.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/episerver.forms.samples/4.2.2/lib/net6.0/EPiServer.Forms.Samples.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/episerver.forms.ui/5.8.0/lib/net6.0/EPiServer.Forms.UI.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/episerver.framework.aspnetcore/12.21.2/lib/net6.0/EPiServer.Framework.AspNetCore.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/episerver.framework/12.21.2/lib/net6.0/EPiServer.Framework.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/episerver.hosting/12.21.2/lib/net6.0/EPiServer.Hosting.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/episerver.cms.core/12.21.2/lib/net6.0/EPiServer.ImageLibrary.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/episerver.imagelibrary.imagesharp/1.0.0/lib/net6.0/EPiServer.ImageLibrary.ImageSharp.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/episerver.labs.blockenhancements/1.2.3/lib/net6.0/EPiServer.Labs.BlockEnhancements.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/episerver.labs.languagemanager/5.2.0/lib/net6.0/EPiServer.Labs.LanguageManager.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/episerver.framework/12.21.2/lib/net6.0/EPiServer.Licensing.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/episerver.cms.core/12.21.2/lib/net6.0/EPiServer.LinkAnalyzer.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/episerver.connectformarketingautomation/6.1.4/lib/net6.0/Episerver.Marketing.Common.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/episerver.connectformarketingautomation/6.1.4/lib/net6.0/Episerver.Marketing.Connector.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/episerver.marketing.automation.forms/3.1.3/lib/net6.0/Episerver.Marketing.Connector.Forms.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/episerver.marketing.kpi/3.1.2/lib/net6.0/EPiServer.Marketing.KPI.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/episerver.marketing.messaging/3.1.2/lib/net6.0/EPIServer.Marketing.Messaging.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/episerver.marketing.testing/3.1.2/lib/net6.0/EPiServer.Marketing.Testing.Core.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/episerver.marketing.testing/3.1.2/lib/net6.0/EPiServer.Marketing.Testing.Dal.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/episerver.marketing.testing/3.1.2/lib/net6.0/EPiServer.Marketing.Testing.Web.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/episerver.openidconnect/3.10.2/lib/net6.0/EPiServer.OpenIDConnect.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/episerver.openidconnect.ui/3.10.2/lib/net6.0/EPiServer.OpenIDConnect.UI.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/episerver.pdfpreview/2.1.3/lib/net6.0/EPiServer.PdfPreview.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/episerver.personalization.commerce/4.1.14/lib/net6.0/EPiServer.Personalization.Commerce.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/episerver.personalization.common/4.0.3/lib/net6.0/EPiServer.Personalization.Common.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/episerver.personalization.maxmindgeolocation/2.3.0/lib/net6.0/EPiServer.Personalization.MaxMindGeolocation.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/episerver.session/2.1.0/lib/net6.0/EPiServer.Session.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/episerver.cms.ui.core/12.28.0/lib/net6.0/EPiServer.Shell.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/episerver.cms.ui.core/12.28.0/lib/net6.0/EPiServer.Shell.UI.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/episerver.social.activitystreams/2.0.2/lib/net6.0/EPiServer.Social.ActivityStreams.Core.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/episerver.social.activitystreams/2.0.2/lib/net6.0/EPiServer.Social.ActivityStreams.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/episerver.social.activitystreams/2.0.2/lib/net6.0/EPiServer.Social.ActivityStreams.Rest.Contracts.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/episerver.social.activitystreams/2.0.2/lib/net6.0/EPiServer.Social.ActivityStreams.Rest.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/episerver.social.comments/2.0.2/lib/net6.0/EPiServer.Social.Comments.Core.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/episerver.social.comments/2.0.2/lib/net6.0/EPiServer.Social.Comments.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/episerver.social.comments/2.0.2/lib/net6.0/EPiServer.Social.Comments.Rest.Contracts.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/episerver.social.comments/2.0.2/lib/net6.0/EPiServer.Social.Comments.Rest.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/episerver.social.common/2.0.2/lib/net6.0/EPiServer.Social.Common.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/episerver.social.common.rest/2.0.2/lib/net6.0/EPiServer.Social.Common.Rest.Configuration.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/episerver.social.common.rest/2.0.2/lib/net6.0/EPiServer.Social.Common.Rest.Contracts.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/episerver.social.common.rest/2.0.2/lib/net6.0/EPiServer.Social.Common.Rest.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/episerver.social.framework/2.0.2/lib/net6.0/EPiServer.Social.Framework.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/episerver.social.groups/2.0.2/lib/net6.0/EPiServer.Social.Groups.Core.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/episerver.social.groups/2.0.2/lib/net6.0/EPiServer.Social.Groups.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/episerver.social.groups/2.0.2/lib/net6.0/EPiServer.Social.Groups.Rest.Contracts.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/episerver.social.groups/2.0.2/lib/net6.0/EPiServer.Social.Groups.Rest.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/episerver.social.moderation/2.0.2/lib/net6.0/EPiServer.Social.Moderation.Core.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/episerver.social.moderation/2.0.2/lib/net6.0/EPiServer.Social.Moderation.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/episerver.social.moderation/2.0.2/lib/net6.0/EPiServer.Social.Moderation.Rest.Contracts.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/episerver.social.moderation/2.0.2/lib/net6.0/EPiServer.Social.Moderation.Rest.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/episerver.social.ratings/2.0.2/lib/net6.0/EPiServer.Social.Ratings.Core.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/episerver.social.ratings/2.0.2/lib/net6.0/EPiServer.Social.Ratings.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/episerver.social.ratings/2.0.2/lib/net6.0/EPiServer.Social.Ratings.Rest.Contracts.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/episerver.social.ratings/2.0.2/lib/net6.0/EPiServer.Social.Ratings.Rest.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/episerver.telemetry.ui.core/2.2.1/lib/net6.0/EPiServer.Telemetry.UI.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/episerver.tracking.commerce/4.1.14/lib/net6.0/EPiServer.Tracking.Commerce.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/episerver.tracking.core/2.1.0/lib/net6.0/EPiServer.Tracking.Core.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/episerver.cms.ui.core/12.28.0/lib/net6.0/EPiServer.UI.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/filehelpers/3.5.2/lib/netstandard2.0/FileHelpers.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/geta.notfoundhandler.admin/5.0.8/lib/net6.0/Geta.NotFoundHandler.Admin.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/geta.notfoundhandler/5.0.8/lib/net6.0/Geta.NotFoundHandler.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/geta.notfoundhandler.optimizely/5.0.8/lib/net6.0/Geta.NotFoundHandler.Optimizely.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/geta.optimizely.categories/1.1.1/lib/net6.0/Geta.Optimizely.Categories.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/geta.optimizely.categories.find/1.1.1/lib/net6.0/Geta.Optimizely.Categories.Find.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/graphql.client.abstractions/4.0.2/lib/netstandard2.0/GraphQL.Client.Abstractions.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/graphql.client.abstractions.websocket/4.0.2/lib/netstandard2.0/GraphQL.Client.Abstractions.Websocket.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/graphql.client/4.0.2/lib/netstandard2.0/GraphQL.Client.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/graphql.client.serializer.newtonsoft/4.0.2/lib/netstandard2.0/GraphQL.Client.Serializer.Newtonsoft.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/graphql.primitives/4.0.2/lib/netstandard2.0/GraphQL.Primitives.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/j2n/2.0.0-beta-0012/lib/net5.0/J2N.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/jetbrains.annotations/2022.1.0/lib/netstandard2.0/JetBrains.Annotations.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/lucene.net.analysis.common/4.8.0-beta00014/lib/netstandard2.1/Lucene.Net.Analysis.Common.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/lucene.net/4.8.0-beta00014/lib/netstandard2.1/Lucene.Net.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/lucene.net.queries/4.8.0-beta00014/lib/netstandard2.1/Lucene.Net.Queries.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/lucene.net.queryparser/4.8.0-beta00014/lib/netstandard2.1/Lucene.Net.QueryParser.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/lucene.net.sandbox/4.8.0-beta00014/lib/netstandard2.1/Lucene.Net.Sandbox.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/mailkit/3.0.0/lib/net5.0/MailKit.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/maxmind.db/4.0.0/lib/net6.0/MaxMind.Db.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/maxmind.geoip2/5.1.0/lib/net6.0/MaxMind.GeoIP2.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/episerver.commerce.core/14.19.0/lib/net6.0/Mediachase.BusinessFoundation.Data.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/episerver.commerce.core/14.19.0/lib/net6.0/Mediachase.Commerce.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/episerver.commerce.core/14.19.0/lib/net6.0/Mediachase.Commerce.Plugins.Payment.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/episerver.commerce.core/14.19.0/lib/net6.0/Mediachase.Commerce.Plugins.Shipping.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/episerver.commerce.core/14.19.0/lib/net6.0/Mediachase.Commerce.Website.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/episerver.commerce.core/14.19.0/lib/net6.0/Mediachase.Commerce.Workflow.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/episerver.commerce.core/14.19.0/lib/net6.0/Mediachase.DataProvider.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/episerver.commerce.core/14.19.0/lib/net6.0/Mediachase.MetaDataPlus.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/episerver.commerce.core/14.19.0/lib/net6.0/Mediachase.Search.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/episerver.commerce.core/14.19.0/lib/net6.0/Mediachase.Search.Extensions.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/episerver.commerce.core/14.19.0/lib/net6.0/Mediachase.Search.LuceneSearchProvider.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/episerver.commerce.core/14.19.0/lib/net6.0/Mediachase.SqlDataProvider.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.AspNetCore.Antiforgery.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.AspNetCore.Authentication.Abstractions.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.AspNetCore.Authentication.BearerToken.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.AspNetCore.Authentication.Cookies.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.AspNetCore.Authentication.Core.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.AspNetCore.Authentication.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.AspNetCore.Authentication.OAuth.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.AspNetCore.Authorization.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.AspNetCore.Authorization.Policy.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.AspNetCore.Components.Authorization.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.AspNetCore.Components.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.AspNetCore.Components.Endpoints.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.AspNetCore.Components.Forms.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.AspNetCore.Components.Server.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.AspNetCore.Components.Web.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.AspNetCore.Connections.Abstractions.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.AspNetCore.CookiePolicy.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.AspNetCore.Cors.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.AspNetCore.Cryptography.Internal.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.AspNetCore.Cryptography.KeyDerivation.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.AspNetCore.DataProtection.Abstractions.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.AspNetCore.DataProtection.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.AspNetCore.DataProtection.Extensions.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.AspNetCore.Diagnostics.Abstractions.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.AspNetCore.Diagnostics.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.AspNetCore.Diagnostics.HealthChecks.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.AspNetCore.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.AspNetCore.HostFiltering.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.AspNetCore.Hosting.Abstractions.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.AspNetCore.Hosting.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.AspNetCore.Hosting.Server.Abstractions.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.AspNetCore.Html.Abstractions.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.AspNetCore.Http.Abstractions.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.AspNetCore.Http.Connections.Common.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.AspNetCore.Http.Connections.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.AspNetCore.Http.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.AspNetCore.Http.Extensions.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.AspNetCore.Http.Features.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.AspNetCore.Http.Results.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.AspNetCore.HttpLogging.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.AspNetCore.HttpOverrides.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.AspNetCore.HttpsPolicy.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.AspNetCore.Identity.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/microsoft.aspnetcore.identity.entityframeworkcore/6.0.0/lib/net6.0/Microsoft.AspNetCore.Identity.EntityFrameworkCore.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/Microsoft.AspNetCore.JsonPatch/6.0.1/lib/net6.0/Microsoft.AspNetCore.JsonPatch.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.AspNetCore.Localization.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.AspNetCore.Localization.Routing.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.AspNetCore.Metadata.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.AspNetCore.Mvc.Abstractions.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.AspNetCore.Mvc.ApiExplorer.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.AspNetCore.Mvc.Core.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.AspNetCore.Mvc.Cors.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.AspNetCore.Mvc.DataAnnotations.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.AspNetCore.Mvc.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.AspNetCore.Mvc.Formatters.Json.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.AspNetCore.Mvc.Formatters.Xml.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.AspNetCore.Mvc.Localization.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/microsoft.aspnetcore.mvc.newtonsoftjson/6.0.1/lib/net6.0/Microsoft.AspNetCore.Mvc.NewtonsoftJson.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.AspNetCore.Mvc.Razor.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/microsoft.aspnetcore.mvc.razor.extensions/6.0.0/lib/netstandard2.0/Microsoft.AspNetCore.Mvc.Razor.Extensions.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.AspNetCore.Mvc.RazorPages.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.AspNetCore.Mvc.TagHelpers.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.AspNetCore.Mvc.ViewFeatures.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/microsoft.aspnetcore.odata/8.0.8/lib/net6.0/Microsoft.AspNetCore.OData.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.AspNetCore.OutputCaching.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.AspNetCore.RateLimiting.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.AspNetCore.Razor.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/microsoft.aspnetcore.razor.language/6.0.0/lib/netstandard2.0/Microsoft.AspNetCore.Razor.Language.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.AspNetCore.Razor.Runtime.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.AspNetCore.RequestDecompression.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.AspNetCore.ResponseCaching.Abstractions.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.AspNetCore.ResponseCaching.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.AspNetCore.ResponseCompression.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.AspNetCore.Rewrite.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.AspNetCore.Routing.Abstractions.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.AspNetCore.Routing.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.AspNetCore.Server.HttpSys.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.AspNetCore.Server.IIS.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.AspNetCore.Server.IISIntegration.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.AspNetCore.Server.Kestrel.Core.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.AspNetCore.Server.Kestrel.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.AspNetCore.Server.Kestrel.Transport.NamedPipes.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.AspNetCore.Server.Kestrel.Transport.Quic.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.AspNetCore.Server.Kestrel.Transport.Sockets.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.AspNetCore.Session.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.AspNetCore.SignalR.Common.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.AspNetCore.SignalR.Core.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.AspNetCore.SignalR.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.AspNetCore.SignalR.Protocols.Json.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.AspNetCore.StaticFiles.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.AspNetCore.WebSockets.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.AspNetCore.WebUtilities.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/microsoft.bcl.asyncinterfaces/6.0.0/lib/netstandard2.1/Microsoft.Bcl.AsyncInterfaces.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/Microsoft.CodeAnalysis.CSharp/4.0.0/lib/netcoreapp3.1/Microsoft.CodeAnalysis.CSharp.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/Microsoft.CodeAnalysis.Common/4.0.0/lib/netcoreapp3.1/Microsoft.CodeAnalysis.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/microsoft.codeanalysis.razor/6.0.0/lib/netstandard2.0/Microsoft.CodeAnalysis.Razor.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/Microsoft.CSharp.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/microsoft.data.sqlclient/5.1.4/ref/net6.0/Microsoft.Data.SqlClient.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/microsoft.entityframeworkcore.abstractions/6.0.0/lib/net6.0/Microsoft.EntityFrameworkCore.Abstractions.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/microsoft.entityframeworkcore/6.0.0/lib/net6.0/Microsoft.EntityFrameworkCore.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/microsoft.entityframeworkcore.relational/6.0.0/lib/net6.0/Microsoft.EntityFrameworkCore.Relational.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/microsoft.entityframeworkcore.sqlserver/6.0.0/lib/net6.0/Microsoft.EntityFrameworkCore.SqlServer.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.Extensions.Caching.Abstractions.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.Extensions.Caching.Memory.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.Extensions.Configuration.Abstractions.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.Extensions.Configuration.Binder.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.Extensions.Configuration.CommandLine.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.Extensions.Configuration.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.Extensions.Configuration.EnvironmentVariables.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.Extensions.Configuration.FileExtensions.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.Extensions.Configuration.Ini.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.Extensions.Configuration.Json.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.Extensions.Configuration.KeyPerFile.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.Extensions.Configuration.UserSecrets.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.Extensions.Configuration.Xml.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.Extensions.DependencyInjection.Abstractions.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.Extensions.DependencyInjection.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/Microsoft.Extensions.DependencyModel/6.0.0/lib/netstandard2.0/Microsoft.Extensions.DependencyModel.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.Extensions.Diagnostics.Abstractions.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.Extensions.Diagnostics.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.Extensions.Diagnostics.HealthChecks.Abstractions.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.Extensions.Diagnostics.HealthChecks.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.Extensions.Features.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.Extensions.FileProviders.Abstractions.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.Extensions.FileProviders.Composite.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.Extensions.FileProviders.Embedded.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.Extensions.FileProviders.Physical.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.Extensions.FileSystemGlobbing.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.Extensions.Hosting.Abstractions.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.Extensions.Hosting.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.Extensions.Http.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/microsoft.extensions.http.polly/3.1.13/lib/netstandard2.0/Microsoft.Extensions.Http.Polly.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.Extensions.Identity.Core.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.Extensions.Identity.Stores.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.Extensions.Localization.Abstractions.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.Extensions.Localization.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.Extensions.Logging.Abstractions.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.Extensions.Logging.Configuration.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.Extensions.Logging.Console.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.Extensions.Logging.Debug.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.Extensions.Logging.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.Extensions.Logging.EventLog.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.Extensions.Logging.EventSource.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.Extensions.Logging.TraceSource.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.Extensions.ObjectPool.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.Extensions.Options.ConfigurationExtensions.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.Extensions.Options.DataAnnotations.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.Extensions.Options.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.Extensions.Primitives.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.Extensions.WebEncoders.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/microsoft.identity.client/4.56.0/lib/net6.0/Microsoft.Identity.Client.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/microsoft.identity.client.extensions.msal/4.56.0/lib/netstandard2.0/Microsoft.Identity.Client.Extensions.Msal.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/microsoft.identitymodel.abstractions/6.24.0/lib/net6.0/Microsoft.IdentityModel.Abstractions.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/microsoft.identitymodel.jsonwebtokens/6.24.0/lib/net6.0/Microsoft.IdentityModel.JsonWebTokens.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/microsoft.identitymodel.logging/6.24.0/lib/net6.0/Microsoft.IdentityModel.Logging.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/microsoft.identitymodel.protocols/6.24.0/lib/net6.0/Microsoft.IdentityModel.Protocols.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/microsoft.identitymodel.protocols.openidconnect/6.24.0/lib/net6.0/Microsoft.IdentityModel.Protocols.OpenIdConnect.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/microsoft.identitymodel.tokens/6.24.0/lib/net6.0/Microsoft.IdentityModel.Tokens.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/microsoft.io.recyclablememorystream/2.2.0/lib/net5.0/Microsoft.IO.RecyclableMemoryStream.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.JSInterop.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.Net.Http.Headers.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/microsoft.odata.core/7.9.4/lib/netstandard2.0/Microsoft.OData.Core.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/microsoft.odata.edm/7.9.4/lib/netstandard2.0/Microsoft.OData.Edm.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/microsoft.odata.modelbuilder/1.0.8/lib/net6.0/Microsoft.OData.ModelBuilder.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/microsoft.openapi/1.2.3/lib/netstandard2.0/Microsoft.OpenApi.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/microsoft.spatial/7.9.4/lib/netstandard2.0/Microsoft.Spatial.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/microsoft.sqlserver.server/1.0.0/lib/netstandard2.0/Microsoft.SqlServer.Server.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/Microsoft.VisualBasic.Core.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/Microsoft.VisualBasic.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/Microsoft.Win32.Primitives.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/Microsoft.Win32.Registry.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/microsoft.win32.systemevents/6.0.0/lib/net6.0/Microsoft.Win32.SystemEvents.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/mimekit/3.0.0/lib/net5.0/MimeKit.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/mscorlib.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/nonfactors.grid.core.mvc6/7.0.2/lib/net6.0/Mvc.Grid.Core.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/netstandard.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/newtonsoft.json.bson/1.0.2/lib/netstandard2.0/Newtonsoft.Json.Bson.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/Newtonsoft.Json/13.0.1/lib/netstandard2.0/Newtonsoft.Json.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/openiddict.abstractions/3.1.1/lib/netstandard2.1/OpenIddict.Abstractions.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/openiddict.core/3.1.1/lib/net5.0/OpenIddict.Core.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/openiddict.entityframeworkcore/3.1.1/lib/net5.0/OpenIddict.EntityFrameworkCore.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/openiddict.entityframeworkcore.models/3.1.1/lib/netstandard2.0/OpenIddict.EntityFrameworkCore.Models.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/openiddict.server.aspnetcore/3.0.3/lib/net5.0/OpenIddict.Server.AspNetCore.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/openiddict.server.dataprotection/3.0.3/lib/net5.0/OpenIddict.Server.DataProtection.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/openiddict.server/3.0.3/lib/net5.0/OpenIddict.Server.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/openiddict.validation.aspnetcore/3.0.3/lib/net5.0/OpenIddict.Validation.AspNetCore.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/openiddict.validation.dataprotection/3.0.3/lib/net5.0/OpenIddict.Validation.DataProtection.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/openiddict.validation/3.0.3/lib/net5.0/OpenIddict.Validation.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/openiddict.validation.serverintegration/3.0.3/lib/netstandard2.1/OpenIddict.Validation.ServerIntegration.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/openiddict.validation.systemnethttp/3.0.3/lib/netstandard2.1/OpenIddict.Validation.SystemNetHttp.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/optimizely.cmp.client/0.0.2/lib/net6.0/Optimizely.Cmp.Client.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/optimizely.labs.marketingautomationintegration.odp/1.0.2/lib/net6.0/Optimizely.Labs.MarketingAutomationIntegration.ODP.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/polly/7.1.0/lib/netstandard2.0/Polly.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/polly.extensions.http/3.0.0/lib/netstandard2.0/Polly.Extensions.Http.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/powell.couponcode/1.0.3/lib/netstandard2.0/Powells.CouponCode.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/powerslice/5.2.0/lib/net6.0/PowerSlice.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/restsharp/107.3.0/lib/net6.0/RestSharp.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/schema.net/11.0.1/lib/net6.0/Schema.NET.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/serilog.aspnetcore/6.0.1/lib/net5.0/Serilog.AspNetCore.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/serilog/2.12.0/lib/net6.0/Serilog.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/serilog.extensions.hosting/5.0.1/lib/netstandard2.1/Serilog.Extensions.Hosting.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/serilog.extensions.logging/3.1.0/lib/netstandard2.0/Serilog.Extensions.Logging.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/serilog.formatting.compact/1.1.0/lib/netstandard2.0/Serilog.Formatting.Compact.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/serilog.settings.configuration/3.3.0/lib/netstandard2.0/Serilog.Settings.Configuration.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/serilog.sinks.console/4.0.1/lib/net5.0/Serilog.Sinks.Console.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/serilog.sinks.debug/2.0.0/lib/netstandard2.1/Serilog.Sinks.Debug.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/serilog.sinks.file/5.0.0/lib/net5.0/Serilog.Sinks.File.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/sixlabors.imagesharp/2.1.3/lib/netcoreapp3.1/SixLabors.ImageSharp.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/sixlabors.imagesharp.web/2.0.2/lib/netcoreapp3.1/SixLabors.ImageSharp.Web.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/skiasharp/2.80.3/lib/netstandard2.0/SkiaSharp.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/swashbuckle.aspnetcore.swagger/6.5.0/lib/net7.0/Swashbuckle.AspNetCore.Swagger.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/swashbuckle.aspnetcore.swaggergen/6.5.0/lib/net7.0/Swashbuckle.AspNetCore.SwaggerGen.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/swashbuckle.aspnetcore.swaggerui/6.5.0/lib/net7.0/Swashbuckle.AspNetCore.SwaggerUI.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.AppContext.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Buffers.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Collections.Concurrent.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Collections.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Collections.Immutable.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Collections.NonGeneric.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Collections.Specialized.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.ComponentModel.Annotations.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.ComponentModel.DataAnnotations.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.ComponentModel.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.ComponentModel.EventBasedAsync.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.ComponentModel.Primitives.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.ComponentModel.TypeConverter.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/system.configuration.configurationmanager/6.0.1/lib/net6.0/System.Configuration.ConfigurationManager.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Configuration.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Console.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Core.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Data.Common.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Data.DataSetExtensions.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Data.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Diagnostics.Contracts.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Diagnostics.Debug.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Diagnostics.DiagnosticSource.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/System.Diagnostics.EventLog.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Diagnostics.FileVersionInfo.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Diagnostics.Process.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Diagnostics.StackTrace.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Diagnostics.TextWriterTraceListener.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Diagnostics.Tools.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Diagnostics.TraceSource.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Diagnostics.Tracing.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/system.drawing.common/6.0.0/lib/net6.0/System.Drawing.Common.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Drawing.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Drawing.Primitives.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Dynamic.Runtime.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Formats.Asn1.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Formats.Tar.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Globalization.Calendars.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Globalization.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Globalization.Extensions.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/system.identitymodel.tokens.jwt/6.24.0/lib/net6.0/System.IdentityModel.Tokens.Jwt.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.IO.Compression.Brotli.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.IO.Compression.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.IO.Compression.FileSystem.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.IO.Compression.ZipFile.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.IO.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.IO.FileSystem.AccessControl.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.IO.FileSystem.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.IO.FileSystem.DriveInfo.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.IO.FileSystem.Primitives.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.IO.FileSystem.Watcher.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.IO.IsolatedStorage.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.IO.MemoryMappedFiles.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/system.io.packaging/6.0.0/lib/net6.0/System.IO.Packaging.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/System.IO.Pipelines.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.IO.Pipes.AccessControl.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.IO.Pipes.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.IO.UnmanagedMemoryStream.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/system.linq.async/6.0.1/ref/net6.0/System.Linq.Async.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Linq.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Linq.Expressions.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Linq.Parallel.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Linq.Queryable.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/system.memory.data/1.0.2/lib/netstandard2.0/System.Memory.Data.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Memory.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Net.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Net.Http.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Net.Http.Json.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Net.HttpListener.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Net.Mail.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Net.NameResolution.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Net.NetworkInformation.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Net.Ping.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Net.Primitives.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Net.Quic.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Net.Requests.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Net.Security.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Net.ServicePoint.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Net.Sockets.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Net.WebClient.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Net.WebHeaderCollection.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Net.WebProxy.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Net.WebSockets.Client.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Net.WebSockets.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Numerics.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Numerics.Vectors.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.ObjectModel.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/system.reactive/4.3.2/lib/netstandard2.0/System.Reactive.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Reflection.DispatchProxy.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Reflection.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Reflection.Emit.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Reflection.Emit.ILGeneration.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Reflection.Emit.Lightweight.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Reflection.Extensions.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Reflection.Metadata.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Reflection.Primitives.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Reflection.TypeExtensions.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Resources.Reader.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Resources.ResourceManager.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Resources.Writer.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Runtime.CompilerServices.Unsafe.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Runtime.CompilerServices.VisualC.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Runtime.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Runtime.Extensions.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Runtime.Handles.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Runtime.InteropServices.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Runtime.InteropServices.JavaScript.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Runtime.InteropServices.RuntimeInformation.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Runtime.Intrinsics.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Runtime.Loader.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Runtime.Numerics.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Runtime.Serialization.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Runtime.Serialization.Formatters.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Runtime.Serialization.Json.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Runtime.Serialization.Primitives.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Runtime.Serialization.Xml.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Security.AccessControl.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Security.Claims.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Security.Cryptography.Algorithms.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Security.Cryptography.Cng.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Security.Cryptography.Csp.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Security.Cryptography.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Security.Cryptography.Encoding.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Security.Cryptography.OpenSsl.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/system.security.cryptography.pkcs/6.0.1/lib/net6.0/System.Security.Cryptography.Pkcs.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Security.Cryptography.Primitives.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/system.security.cryptography.protecteddata/6.0.0/lib/net6.0/System.Security.Cryptography.ProtectedData.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Security.Cryptography.X509Certificates.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/System.Security.Cryptography.Xml.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Security.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/system.security.permissions/6.0.0/lib/net6.0/System.Security.Permissions.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Security.Principal.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Security.Principal.Windows.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Security.SecureString.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/system.servicemodel.syndication/6.0.0/lib/net6.0/System.ServiceModel.Syndication.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.ServiceModel.Web.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.ServiceProcess.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Text.Encoding.CodePages.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Text.Encoding.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Text.Encoding.Extensions.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Text.Encodings.Web.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Text.Json.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Text.RegularExpressions.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/system.threading.accesscontrol/6.0.0/lib/net6.0/System.Threading.AccessControl.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Threading.Channels.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Threading.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Threading.Overlapped.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/System.Threading.RateLimiting.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Threading.Tasks.Dataflow.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Threading.Tasks.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Threading.Tasks.Extensions.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Threading.Tasks.Parallel.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Threading.Thread.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Threading.ThreadPool.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Threading.Timer.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Transactions.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Transactions.Local.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.ValueTuple.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Web.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Web.HttpUtility.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Windows.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/system.windows.extensions/6.0.0/lib/net6.0/System.Windows.Extensions.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Xml.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Xml.Linq.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Xml.ReaderWriter.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Xml.Serialization.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Xml.XDocument.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Xml.XmlDocument.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Xml.XmlSerializer.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Xml.XPath.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Xml.XPath.XDocument.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/unrvld.odp.visitorgroups/1.2.0.23/lib/net6.0/UNRVLD.ODP.VisitorGroups.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/wangkanai.detection/5.7.3/lib/net6.0/Wangkanai.Detection.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/wangkanai.hosting/0.3.0/lib/net6.0/Wangkanai.Hosting.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/wangkanai.runtime/1.3.3/lib/net6.0/Wangkanai.Runtime.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/episerver.cms.tinymce/4.7.2/lib/net6.0/WeCantSpell.Hunspell.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/WindowsBase.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/x.pagedlist/8.4.3/lib/net6.0/X.PagedList.dll","Aliases":[],"Framework":null}],"Files":["/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Api/AuthorizedApiController.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Api/CatalogExportController.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Api/ExternalLoginConfirmationViewModel.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Api/PublicApiController.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Blocks/AssetsDownloadLinksBlock/AssetsDownloadLinksBlock.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Blocks/AssetsDownloadLinksBlock/AssetsDownloadLinksBlockComponent.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Blocks/AssetsDownloadLinksBlock/AssetsDownloadLinksBlockController.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Blocks/AssetsDownloadLinksBlock/AssetsDownloadLinksBlockViewModel.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Blocks/BreadcrumbBlock/BreadCrumbBlock.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Blocks/BreadcrumbBlock/BreadcrumbBlockComponent.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Blocks/BreadcrumbBlock/BreadcrumbBlockSelectionFactory.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Blocks/BreadcrumbBlock/BreadcrumbBlockViewModel.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Blocks/ButtonBlock/ButtonBlock.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Blocks/ButtonBlock/ButtonBlockStyleSelectionFactory.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Blocks/CallToActionBlock/CallToActionBlock.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Blocks/CallToActionBlock/CallToActionBlockSelectionFactory.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Blocks/CarouselBlock/CarouselBlock.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Blocks/CarouselBlock/CarouselBlockComponent.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Blocks/CarouselBlock/CarouselBlockContentTypeCheckInitialization.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Blocks/CarouselBlock/CarouselBlockViewModel.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Blocks/CategoryBlock/CategoryBlock.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Blocks/CategoryBlock/CategoryBlockComponent.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Blocks/CategoryBlock/CategoryBlockViewModel.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Blocks/CommentsBlock/CommentFormViewModel.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Blocks/CommentsBlock/CommentsBlock.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Blocks/CommentsBlock/CommentsBlockComponent.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Blocks/CommentsBlock/CommentsBlockViewModel.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Blocks/ContainerBlock/ContainerBlock.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Blocks/DefaultBlockController.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Blocks/ElevatedRoleBlock/ElevatedRoleBlock.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Blocks/ElevatedRoleBlock/ElevatedRoleBlockComponent.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Blocks/ElevatedRoleBlock/ElevatedRoleBlockViewModel.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Blocks/ElevatedRoleBlock/ElevatedRoleSelectionFactory.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Blocks/FacebookBlock/FacebookBlock.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Blocks/FeedBlock/FeedBlock.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Blocks/FeedBlock/FeedBlockComponent.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Blocks/FeedBlock/FeedBlockViewModel.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Blocks/GoogleMapsBlock/GoogleMapsBlock.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Blocks/GroupAdmissionBlock/GroupAdmissionBlock.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Blocks/GroupAdmissionBlock/GroupAdmissionBlockComponent.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Blocks/GroupAdmissionBlock/GroupAdmissionBlockViewModel.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Blocks/GroupCreationBlock/GroupCreationBlock.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Blocks/GroupCreationBlock/GroupCreationBlockComponent.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Blocks/GroupCreationBlock/GroupCreationBlockViewModel.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Blocks/Healthbot/HealthBotBlockComponent.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Blocks/Healthbot/HealthChatbotBlock.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Blocks/HeroBlock/HeroBlock.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Blocks/HeroBlock/HeroBlockSelectionFactory.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Blocks/LikeButtonBlock/LikeButtonBlock.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Blocks/LikeButtonBlock/LikeButtonBlockComponent.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Blocks/LikeButtonBlock/LikeButtonBlockViewModel.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Blocks/MembershipAffiliationBlock/MembershipAffiliationBlock.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Blocks/MembershipAffiliationBlock/MembershipAffiliationBlockComponent.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Blocks/MembershipAffiliationBlock/MembershipAffiliationBlockViewModel.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Blocks/MembershipDisplayBlock/MembershipDisplayBlock.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Blocks/MembershipDisplayBlock/MembershipDisplayBlockComponent.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Blocks/MembershipDisplayBlock/MembershipDisplayBlockViewModel.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Blocks/MenuItemBlock/MenuItemBlock.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Blocks/MenuItemBlock/MenuItemViewModel.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Blocks/NavigationBlock/NavigationBlock.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Blocks/NavigationBlock/NavigationBlockComponent.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Blocks/NavigationBlock/NavigationBlockViewModel.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Blocks/OrderSearchBlock/OrderSearchBlock.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Blocks/OrderSearchBlock/OrderSearchBlockComponent.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Blocks/OrderSearchBlock/OrderSearchBlockViewModel.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Blocks/OrderSearchBlock/OrderSearchListingComponent.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Blocks/PageListBlock/PageListBlock.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Blocks/PageListBlock/PageListBlockComponent.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Blocks/PageListBlock/PageListBlockViewModel.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Blocks/ProductFilterBlocks/ExistsFilterBlock.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Blocks/ProductFilterBlocks/FilterBaseBlock.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Blocks/ProductFilterBlocks/FilterUIDescriptor.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Blocks/ProductFilterBlocks/NumericFilterBlock.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Blocks/ProductFilterBlocks/NumericOperatorSelectionFactory.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Blocks/ProductFilterBlocks/StringFilterBlock.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Blocks/ProductHeroBlock/ProductHeroBlock.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Blocks/ProductHeroBlock/ProductHeroBlockComponent.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Blocks/ProductHeroBlock/ProductHeroBlockSelectionFactory.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Blocks/ProductHeroBlock/ProductHeroBlockViewModel.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Blocks/RatingBlock/RatingBlock.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Blocks/RatingBlock/RatingBlockComponent.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Blocks/RatingBlock/RatingBlockViewModel.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Blocks/RatingBlock/RatingSetting.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Blocks/RatingBlock/RatingSettingProperty.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Blocks/RssReaderBlock/RssReaderBlock.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Blocks/RssReaderBlock/RssReaderBlockComponent.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Blocks/RssReaderBlock/RssReaderBlockViewModel.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Blocks/SubscriptionBlock/SubscriptionBlock.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Blocks/SubscriptionBlock/SubscriptionBlockComponent.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Blocks/SubscriptionBlock/SubscriptionBlockViewModel.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Blocks/SubscriptionBlock/SubscriptionFormViewModel.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Blocks/TeaserBlock/TeaserBlock.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Blocks/TeaserBlock/TeaserBlockSelectionFactory.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Blocks/TextBlock/TextBlock.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Blocks/TwitterBlock/TwitterBlock.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Blocks/VideoBlock/VideoBlock.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Blocks/VimeoBlock/VimeoBlock.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Blocks/YouTubeBlock/YouTubeBlock.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Blog/BlogCommentBlock/BlogCommentBlock.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Blog/BlogCommentBlock/BlogCommentBlockComponent.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Blog/BlogCommentBlock/BlogCommentFormViewModel.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Blog/BlogCommentBlock/BlogCommentsBlockViewModel.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Blog/BlogItemPage/BlogItemPage.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Blog/BlogItemPage/BlogItemPageController.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Blog/BlogItemPage/BlogItemPageViewModel.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Blog/BlogItemPage/BlogTagFactory.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Blog/BlogItemPage/BlogTagItem.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Blog/BlogItemPage/BlogTagRepository.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Blog/BlogListPage/BlogListPage.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Blog/BlogListPage/BlogListPageController.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Blog/BlogListPage/BlogListPageViewModel.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/CatalogContent/Bundle/BundleController.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/CatalogContent/Bundle/BundleViewModelBase.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/CatalogContent/Bundle/DemoGenericBundleViewModel.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/CatalogContent/Bundle/GenericBundle.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/CatalogContent/Bundle/GenericBundleViewModel.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/CatalogContent/CatalogContentControllerBase.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/CatalogContent/CatalogEntryViewModelFactory.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/CatalogContent/DynamicCatalogContent/DynamicProduct/DynamicProduct.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/CatalogContent/DynamicCatalogContent/DynamicProduct/DynamicProductController.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/CatalogContent/DynamicCatalogContent/DynamicProduct/DynamicProductViewModel.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/CatalogContent/DynamicCatalogContent/DynamicVariation/DynamicVariant.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/CatalogContent/ElevatedRoles.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/CatalogContent/EntryViewModelBase.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/CatalogContent/Extensions.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/CatalogContent/IEntryViewModelBase.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/CatalogContent/IProductModel.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/CatalogContent/IProductRecommendations.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/CatalogContent/Package/GenericPackage.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/CatalogContent/Package/GenericPackageViewModel.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/CatalogContent/Package/PackageController.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/CatalogContent/Package/PackageViewModelBase.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/CatalogContent/Product/GenericProduct.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/CatalogContent/Product/GenericProductViewModel.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/CatalogContent/Product/ProductController.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/CatalogContent/Product/ProductPartialContentComponent.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/CatalogContent/Product/ProductViewModelBase.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/CatalogContent/ProductTileViewModel.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/CatalogContent/RecommendedProductTileViewModel.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/CatalogContent/Services/FoundationPromotionEngineContentLoader.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/CatalogContent/Services/PriceCalculationService.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/CatalogContent/Services/PricingService.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/CatalogContent/Services/ProductService.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/CatalogContent/Services/PromotionService.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/CatalogContent/Services/QuickOrderService.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/CatalogContent/VariantViewModel.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/CatalogContent/Variation/GenericVariant.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/CatalogContent/Variation/GenericVariantViewModel.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/CatalogContent/Variation/VariantViewModelBase.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/CatalogContent/Variation/VariationController.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Category/CategoryFoundationPageViewModel.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Category/CategorySearchViewModel.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Category/StandardCategory.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Category/StandardCategoryController.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Category/StandardCategoryViewComponent.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Category/StandardCategoryViewModel.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Checkout/AddToCartResult.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Checkout/CheckoutController.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Checkout/CheckoutMethodViewModel.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Checkout/CheckoutPage.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Checkout/ConfirmationMail/OrderConfirmationMailController.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Checkout/ConfirmationMail/OrderConfirmationMailPage.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Checkout/FoundationPlacedPriceProcessor.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Checkout/Payments/BudgetPaymentGateway.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Checkout/Payments/BudgetPaymentOption.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Checkout/Payments/CashOnDeliveryPaymentOption.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Checkout/Payments/GenericCreditCardPaymentGateway.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Checkout/Payments/GenericCreditCardPaymentOption.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Checkout/Payments/GiftCardPaymentGateway.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Checkout/Payments/GiftCardPaymentOption.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Checkout/Payments/IPaymentService.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Checkout/Payments/PaymentExtensions.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Checkout/Payments/PaymentModelBinderProvider.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Checkout/Payments/PaymentOptionBase.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Checkout/Payments/PaymentOptionViewModelBinder.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Checkout/Payments/PaymentService.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Checkout/PriceCalculationService.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Checkout/Services/AnonymousPurchaseValidation.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Checkout/Services/AuthenticatedPurchaseValidation.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Checkout/Services/CartItemViewModelFactory.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Checkout/Services/CartService.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Checkout/Services/CartViewModelFactory.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Checkout/Services/CheckoutAddressHandling.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Checkout/Services/CheckoutService.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Checkout/Services/ConfirmationService.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Checkout/Services/ICartService.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Checkout/Services/IOrdersService.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Checkout/Services/IShippingService.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Checkout/Services/OrdersService.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Checkout/Services/PurchaseValidation.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Checkout/Services/ShipmentViewModelFactory.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Checkout/Services/ShippingMethodInfo.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Checkout/Services/ShippingService.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Checkout/ViewModels/CheckoutViewModel.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Checkout/ViewModels/CheckoutViewModelFactory.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Checkout/ViewModels/MultiAddressViewModel.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Checkout/ViewModels/MultiShipmentViewModelFactory.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Checkout/ViewModels/OrderConfirmationViewModel.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Checkout/ViewModels/OrderDiscountViewModel.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Checkout/ViewModels/OrderSummaryViewModel.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Checkout/ViewModels/OrderSummaryViewModelFactory.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Checkout/ViewModels/OrderViewModel.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Checkout/ViewModels/OrganizationOrderPadViewModel.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Checkout/ViewModels/PaymentMethodViewModel.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Checkout/ViewModels/PaymentMethodViewModelFactory.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Checkout/ViewModels/SharedMiniCartViewModel.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Checkout/ViewModels/ShipmentViewModel.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Checkout/ViewModels/ShippingMethodInfoModel.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Checkout/ViewModels/ShippingMethodViewModel.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Checkout/ViewModels/UpdateAddressViewModel.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Checkout/ViewModels/UpdateShippingMethodViewModel.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Checkout/ViewModels/UsersOrderPadViewModel.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Collection/CollectionPage.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Collection/CollectionPageController.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Community/CommunittyPageController.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Community/CommunityPage.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Events/CalendarBlock/CalendarBlock.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Events/CalendarBlock/CalendarBlockComponent.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Events/CalendarBlock/CalendarBlockController.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Events/CalendarBlock/CalendarBlockData.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Events/CalendarBlock/CalendarBlockViewModel.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Events/CalendarBlock/CalendarViewModeSelectionFactory.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Events/CalendarEvent/CalendarEventController.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Events/CalendarEvent/CalendarEventPage.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Folder/FolderPage.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Folder/FolderPageUIDescriptor.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Header/DemoUserViewModel.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Header/HeaderComponent.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Header/HeaderController.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Header/HeaderLogoComponent.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Header/HeaderLogoViewModel.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Header/HeaderViewModel.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Header/HeaderViewModelFactory.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Header/IHeaderViewModelFactory.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Header/LargeCartViewModel.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Header/MegaMenuModel.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Header/MiniCartViewModel.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Header/MobileHeaderViewModel.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Header/MyAccountNavigationViewModel.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Header/NavigationViewModel.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Header/OrgNavigationViewModel.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Header/WishListMiniCartViewModel.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Home/HomeController.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Home/HomePage.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/LandingPages/LandingPage/LandingPage.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/LandingPages/LandingPage/LandingPageController.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/LandingPages/ThreeColumnLandingPage/ThreeColumnLandingPage.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/LandingPages/ThreeColumnLandingPage/ThreeColumnLandingPageController.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/LandingPages/TwoColumnLandingPage/TwoColumnLandingPage.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/LandingPages/TwoColumnLandingPage/TwoColumnLandingPageController.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Locations/Blocks/FilterActivitiesBlock.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Locations/Blocks/FilterContinentsBlock.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Locations/Blocks/FilterDistancesBlock.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Locations/Blocks/FilterLocationUIDescriptor.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Locations/Blocks/FilterTemperaturesBlock.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Locations/IFilterBlock.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Locations/LocationItemPage/LocationItemPage.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Locations/LocationItemPage/LocationItemPageController.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Locations/LocationItemPage/LocationItemViewModel.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Locations/LocationListPage/LocationListPage.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Locations/LocationListPage/LocationListPageController.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Locations/LocationListPage/LocationListViewModel.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Locations/LocationsPartialRouting.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Locations/TagPage/TagPage.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Locations/TagPage/TagPageController.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Locations/TagPage/TagsCarouselViewModel.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Locations/TagPage/TagsViewModel.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Locations/TagsPartialRouting.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Login/LoginViewModel.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Login/RegisterAccountViewModel.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Login/UserController.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Login/UserViewModel.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Markets/CurrencyController.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Markets/CurrencyViewModel.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Markets/CurrentMarketViewModel.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Markets/LanguageController.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Markets/LanguageViewModel.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Markets/MarketController.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Markets/MarketsComponent.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Markets/MarketViewModel.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Media/CodingFile.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Media/FoundationPdfFile.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Media/FoundationPdfFileViewModel.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Media/ImageMediaData.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Media/ImageMediaDataAlignmentSelectionFactory.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Media/ImageMediaDataViewModel.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Media/MediaController.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Media/StandardFile.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Media/VectorImageMediaData.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Media/VideoFile.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Media/VideoFileViewModel.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Media/WebImageMediaData.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/MyAccount/AddressBook/AddressBookController.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/MyAccount/AddressBook/AddressBookPage.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/MyAccount/AddressBook/AddressBookService.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/MyAccount/AddressBook/AddressCollectionViewModel.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/MyAccount/AddressBook/AddressModel.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/MyAccount/AddressBook/AddressViewModel.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/MyAccount/AddressBook/CountryRegionViewModel.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/MyAccount/AddressBook/CountryViewModel.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/MyAccount/AddressBook/IAddressBookService.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/MyAccount/AddressBook/NewAddressComponent.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/MyAccount/Bookmarks/BookmarksApiController.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/MyAccount/Bookmarks/BookmarksController.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/MyAccount/Bookmarks/BookmarksPage.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/MyAccount/Bookmarks/BookmarksService.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/MyAccount/Bookmarks/BookmarksViewModel.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/MyAccount/CreditCard/CreditCardCollectionViewModel.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/MyAccount/CreditCard/CreditCardController.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/MyAccount/CreditCard/CreditCardModel.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/MyAccount/CreditCard/CreditCardPage.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/MyAccount/CreditCard/CreditCardService.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/MyAccount/CreditCard/CreditCardViewModel.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/MyAccount/CreditCard/ICreditCardService.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/MyAccount/GiftCardPage/GiftCardPage.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/MyAccount/GiftCardPage/GiftCardPageController.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/MyAccount/GiftCardPage/GiftCardViewModel.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/MyAccount/IdentityControllerBase.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/MyAccount/MyAccountNavigationViewComponent.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/MyAccount/OrderConfirmation/OrderConfirmationController.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/MyAccount/OrderConfirmation/OrderConfirmationControllerBase.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/MyAccount/OrderConfirmation/OrderConfirmationPage.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/MyAccount/OrderDetails/OrderDetailsController.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/MyAccount/OrderDetails/OrderDetailsItemViewModel.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/MyAccount/OrderDetails/OrderDetailsPage.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/MyAccount/OrderDetails/OrderDetailsViewModel.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/MyAccount/OrderHistory/OrderHistoryController.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/MyAccount/OrderHistory/OrderHistoryItemViewModel.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/MyAccount/OrderHistory/OrderHistoryPage.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/MyAccount/OrderHistory/OrderHistoryViewModel.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/MyAccount/OrderHistoryBlock/OrderHistoryBlock.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/MyAccount/OrderHistoryBlock/OrderHistoryBlockComponent.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/MyAccount/ProfilePage/AccountInformationViewModel.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/MyAccount/ProfilePage/ProfilePage.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/MyAccount/ProfilePage/ProfilePageController.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/MyAccount/ProfilePage/ProfilePageViewModel.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/MyAccount/ResetPassword/ForgotPasswordViewModel.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/MyAccount/ResetPassword/MailBasePage.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/MyAccount/ResetPassword/ResetPasswordController.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/MyAccount/ResetPassword/ResetPasswordMailPage.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/MyAccount/ResetPassword/ResetPasswordPage.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/MyAccount/ResetPassword/ResetPasswordViewModel.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/MyAccount/SubscriptionDetail/SubscriptionDetailController.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/MyAccount/SubscriptionDetail/SubscriptionDetailPage.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/MyAccount/SubscriptionDetail/SubscriptionDetailViewModel.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/MyAccount/SubscriptionHistory/SubscriptionHistoryController.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/MyAccount/SubscriptionHistory/SubscriptionHistoryPage.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/MyAccount/SubscriptionHistory/SubscriptionHistoryViewModel.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/MyOrganization/B2BAddressViewModel.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/MyOrganization/B2BNavigationService.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/MyOrganization/B2BNavigationViewComponent.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/MyOrganization/B2BNavigationViewModel.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/MyOrganization/Budgeting/BudgetingController.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/MyOrganization/Budgeting/BudgetingPage.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/MyOrganization/Budgeting/BudgetingPageViewModel.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/MyOrganization/Budgeting/BudgetService.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/MyOrganization/Budgeting/BudgetViewModel.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/MyOrganization/Budgeting/IBudgetService.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/MyOrganization/ContactViewModel.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/MyOrganization/IB2BNavigationService.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/MyOrganization/Orders/OrderOrganizationViewModel.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/MyOrganization/Orders/OrdersController.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/MyOrganization/Orders/OrdersPage.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/MyOrganization/Orders/OrdersPageViewModel.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/MyOrganization/Organization/IOrganizationService.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/MyOrganization/Organization/OrganizationController.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/MyOrganization/Organization/OrganizationModel.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/MyOrganization/Organization/OrganizationPage.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/MyOrganization/Organization/OrganizationPageViewModel.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/MyOrganization/Organization/OrganizationService.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/MyOrganization/OrganizationSelectionFactory.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/MyOrganization/QuickOrderBlock/QuickOrderBlock.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/MyOrganization/QuickOrderBlock/QuickOrderBlockComponent.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/MyOrganization/QuickOrderBlock/QuickOrderProductViewModel.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/MyOrganization/QuickOrderBlock/QuickOrderViewModel.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/MyOrganization/QuickOrderPage/QuickOrderData.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/MyOrganization/QuickOrderPage/QuickOrderPage.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/MyOrganization/QuickOrderPage/QuickOrderPageController.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/MyOrganization/QuickOrderPage/QuickOrderPageViewModel.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/MyOrganization/QuickOrderPage/SkuSearchResultModel.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/MyOrganization/SubOrganization/SubOrganizationController.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/MyOrganization/SubOrganization/SubOrganizationModel.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/MyOrganization/SubOrganization/SubOrganizationPage.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/MyOrganization/SubOrganization/SubOrganizationPageViewModel.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/MyOrganization/Users/UsersController.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/MyOrganization/Users/UserSearchResultModel.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/MyOrganization/Users/UsersPage.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/MyOrganization/Users/UsersPageViewModel.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/NamedCarts/ChangeCartJsonResult.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/NamedCarts/DefaultCart/CartItemViewModel.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/NamedCarts/DefaultCart/CartPage.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/NamedCarts/DefaultCart/CartViewModelBase.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/NamedCarts/DefaultCart/CartWithValidationIssues.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/NamedCarts/DefaultCart/DefaultCartController.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/NamedCarts/OrderPadsPage/OrderPadsPage.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/NamedCarts/OrderPadsPage/OrderPadsPageController.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/NamedCarts/OrderPadsPage/OrderPadsPageViewModel.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/NamedCarts/SharedCart/SharedCartController.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/NamedCarts/SharedCart/SharedCartPage.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/NamedCarts/SharedCart/SharedCartViewModel.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/NamedCarts/Wishlist/WishlistController.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/NamedCarts/Wishlist/WishListPage.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/NamedCarts/Wishlist/WishListViewModel.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/NewProducts/NewProductsPage.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/NewProducts/NewProductsPageController.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/NewProducts/NewProductsPageViewModel.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/People/LocationsSelectionFactory.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/People/PersonItemPage/PersonItemPageController.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/People/PersonItemPage/PersonPage.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/People/PersonItemPage/PersonViewModel.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/People/PersonListPage/PersonList.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/People/PersonListPage/PersonListPageController.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/People/PersonListPage/PersonListViewModel.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/People/SectorsSelectionFactory.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Preview/CatalogPartialPreviewController.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Preview/PagePartialPreviewController.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Preview/PartialViewDisplayChannel.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Preview/PreviewController.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Preview/PreviewModel.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Recommendations/RecommendationsController.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Recommendations/RecommendationsViewComponent.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Recommendations/WidgetBlock/WidgetBlock.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Recommendations/WidgetBlock/WidgetBlockComponent.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Recommendations/WidgetBlock/WidgetBlockController.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Recommendations/WidgetBlock/WidgetSelectionFactory.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Sales/SalesPage.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Sales/SalesPageController.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Sales/SalesPageViewModel.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Search/CategoriesFilterViewModel.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Search/Category/CategoryController.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Search/Category/CategoryPartialComponent.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Search/Category/GenericNode.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Search/Category/GenericNodeSelectionFactory.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Search/ContentSearchViewModel.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Search/FilterOptionViewModel.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Search/FilterOptionViewModelBinder.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Search/FoundationCatalogContentEventListener.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Search/FoundationFindConventions.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Search/FoundationSearchProvider.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Search/ProductSearchBlock/ProductSearchBlock.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Search/ProductSearchBlock/ProductSearchBlockComponent.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Search/ProductSearchBlock/ProductSearchBlockItemsPerRowSelectionFactory.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Search/ProductSearchBlock/ProductSearchResultViewModel.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Search/ProductSearchResults.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Search/ProductSortOrder.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Search/Search/SearchController.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Search/Search/SearchPageUIDescriptor.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Search/Search/SearchResultPage.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Search/SearchService.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Search/SearchViewModel.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Search/SearchViewModelFactory.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Search/SortOrder.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Search/VariationModel.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Settings/CollectionSettings.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Settings/LabelSettings.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Settings/LayoutSettings.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Settings/ReferencePageSettings.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Settings/ScriptInjectionSettings.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Settings/SearchSettings.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Shared/BaseInclusionExclusionPage.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Shared/BlockViewModel.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Shared/Components/Dropdown/DropdownComponent.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Shared/Components/Dropdown/OptionDropdownTagHelper.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Shared/Components/Money/MoneyComponent.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Shared/ContentViewModel.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Shared/EditorDescriptor/ColorPickerEditorDescriptor.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Shared/EditorDescriptor/DisableOpeUIDescriptor.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Shared/EditorDescriptor/HideContentAreaActionsContainer.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Shared/EditorDescriptor/MoveCategoryEditorDescriptor.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Shared/FoundationBlockData.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Shared/FoundationPageData.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Shared/HtmlDownloader.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Shared/IBlockViewModel.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Shared/IContentViewModel.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Shared/IFoundationContent.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Shared/MailService.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Shared/SelectionFactories/AvailablePageTypesSelectionFactory.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Shared/SelectionFactories/BackgroundColorSelectionFactory.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Shared/SelectionFactories/BlockRatioSelectionFactory.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Shared/SelectionFactories/InclusionOrderingSelectionFactory.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Shared/SelectionFactories/MarginSelectionFactory.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Shared/SelectionFactories/PaddingSelectionFactory.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Shared/SelectionFactories/PreviewOptionSelectionFactory.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Shared/SelectionFactories/TeaserSelectionFactory.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Shared/SelectionFactories/TemplateListSelectionFactory.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/StandardPage/StandardPage.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/StandardPage/StandardPageController.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/StandardPage/StandardPageTopPaddingModeSelectionFactory.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/StandardPage/StandardPageViewModel.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Stores/IStoreService.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Stores/StorePage.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Stores/StorePageController.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Stores/StorePageViewModel.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Stores/StoreService.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Stores/StoreViewModel.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Attributes/OnlyAnonymousAttribute.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Cms/Attributes/AllowDBWriteAttribute.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Cms/Attributes/ContentImageAttribute.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Cms/Attributes/EmailAddressAttribute.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Cms/Attributes/LocalizedCompareAttribute.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Cms/Attributes/LocalizedDisplayAttribute.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Cms/Attributes/LocalizedEmailAttribute.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Cms/Attributes/LocalizedRegularExpressionAttribute.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Cms/Attributes/LocalizedRequiredAttribute.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Cms/Attributes/LocalizedStringLengthAttribute.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Cms/Attributes/MaxElementsAttribute.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Cms/BulkUpdateController.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Cms/CmsMenuProvider.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Cms/ContentLocator.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Cms/CookieService.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Cms/Extensions/AsyncHelpers.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Cms/Extensions/CategorizableExtensions.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Cms/Extensions/ContentAreaItemExtensions.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Cms/Extensions/ContentExtensions.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Cms/Extensions/ContentReferenceExtensions.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Cms/Extensions/HtmlHelperExtensions.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Cms/Extensions/IEnumerableExtensions.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Cms/Extensions/PageTypeExtensions.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Cms/Extensions/ServiceConfigurationContextExtensions.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Cms/Extensions/StringExtensions.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Cms/Extensions/UrlHelpers.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Cms/Extensions/UrlResolverExtensions.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Cms/Extensions/XElementExtensions.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Cms/Initialize.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Cms/ISchemaDataMapper.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Cms/IsInEditModeAccessor.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Cms/ModelBinders/DecimalModelBinder.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Cms/ModelBinders/DecimalModelBinderProvider.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Cms/PagingInfo.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Cms/SelectionItem.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Cms/Settings/GlobalSettingsComponent.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Cms/Settings/GlobalSettingsRepositoryDescriptor.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Cms/Settings/GlobalSettingsSearchProvider.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Cms/Settings/SettingsBase.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Cms/Settings/SettingsContentTypeAttribute.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Cms/Settings/SettingsController.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Cms/Settings/SettingsFolder.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Cms/Settings/SettingsService.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Cms/SiteImageUrl.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Cms/TrackingCookieManager.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Cms/Users/ExternalLoginConfirmationViewModel.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Cms/Users/IUserService.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Cms/Users/SiteUser.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Cms/Users/UserService.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Commerce/Constant.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Commerce/Customer/BookmarkModel.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Commerce/Customer/CustomerTiers.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Commerce/Customer/FoundationAddress.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Commerce/Customer/FoundationBudget.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Commerce/Customer/FoundationContact.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Commerce/Customer/FoundationOrganization.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Commerce/Customer/IdentityContactResult.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Commerce/Customer/Services/CustomerService.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Commerce/Customer/Services/FileHelperService.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Commerce/Customer/Services/ICustomerService.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Commerce/Customer/Services/IFileHelperService.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Commerce/Customer/Services/ILoyaltyService.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Commerce/Customer/Services/LoyaltyService.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Commerce/Customer/UserRoles.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Commerce/Extensions/AssetContainerExtensions.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Commerce/Extensions/CartExtensions.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Commerce/Extensions/CustomerAddressExtensions.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Commerce/Extensions/EntityObjectExtensions.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Commerce/Extensions/EntryContentBaseExtensions.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Commerce/Extensions/IExtendedPropertiesExtensions.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Commerce/Extensions/InitializationEngineExtensions.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Commerce/Extensions/LineItemExtensions.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Commerce/Extensions/MarketExtensions.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Commerce/Extensions/OrderGroupExtensions.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Commerce/Extensions/Price.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Commerce/GiftCard/GiftCard.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Commerce/GiftCard/GiftCardManager.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Commerce/GiftCard/GiftCardManagerController.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Commerce/GiftCard/GiftCardService.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Commerce/GiftCard/IGiftCardService.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Commerce/Initialize.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Commerce/Install/BaseInstallStep.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Commerce/Install/FoundationConfiguration.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Commerce/Install/IInstallService.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Commerce/Install/IInstallStep.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Commerce/Install/InstallMessage.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Commerce/Install/InstallProgressMessenger.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Commerce/Install/InstallService.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Commerce/Install/Steps/AddCurrencies.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Commerce/Install/Steps/AddCustomers.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Commerce/Install/Steps/AddMarkets.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Commerce/Install/Steps/AddPaymentMethods.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Commerce/Install/Steps/AddPromotions.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Commerce/Install/Steps/AddShippingMethods.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Commerce/Install/Steps/AddTaxes.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Commerce/Install/Steps/AddWarehouses.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Commerce/Marketing/DeleteExpiredCouponJob.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Commerce/Marketing/FoundationCouponFilter.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Commerce/Marketing/FoundationCouponUsage.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Commerce/Marketing/IUniqueCouponService.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Commerce/Marketing/PromotionCouponsViewModel.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Commerce/Marketing/PromotionsViewModel.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Commerce/Marketing/SingleUseCouponController.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Commerce/Marketing/UniqueCoupon.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Commerce/Marketing/UniqueCouponService.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Commerce/Markets/CurrencyService.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Commerce/Markets/CurrentMarket.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Commerce/Markets/EmptyMarket.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Commerce/Markets/ICurrencyService.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Commerce/Markets/LanguageService.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Commerce/Markets/MarketContentLoader.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Commerce/Markets/MarketEvent.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Commerce/Models/EditorDescriptors/BrandSelectionFactory.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Commerce/Models/EditorDescriptors/CatalogSelectionFactory.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Commerce/Models/EditorDescriptors/CurrencySelectionFactory.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Commerce/Models/EditorDescriptors/CurrencySelector.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Commerce/Models/EditorDescriptors/DiscontinuedProductModeSelectionFactory.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Commerce/Models/EditorDescriptors/ProductStatusSelectionFactory.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Commerce/Models/EditorDescriptors/SortOrderSelectionFactory.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Commerce/Models/EditorDescriptors/VirtualVariantTypeSelectionFactory.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Commerce/NavigationAuthorizeAttribute.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/ContentInstaller.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/CustomFormsRepository.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Display/CustomizedRenderingInitialization.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Display/DisplayExtensions.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Display/DisplayResolution.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Display/DisplayResolutionBase.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Display/FeatureConvention.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Display/FeatureViewLocationExpander.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Display/FoundationContentAreaRenderer.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Display/FoundationQuickNavigatorItemProvider.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Display/MobileChannel.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Display/RazorExtensions.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Display/ViewTemplateModelRegistrator.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Display/WebChannel.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Extensions.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/ExternalReviews/ExternalReviewsInit.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Find/Facets/Config/EnumHelpers.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Find/Facets/Config/EnumSelectionDescriptionAttribute.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Find/Facets/Config/EnumSelectionFactory.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Find/Facets/Config/FacetConfigFactory.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Find/Facets/Config/FacetEnums.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Find/Facets/Config/FacetFilterConfigurationItem.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Find/Facets/Config/FacetFilterConfigurationProperty.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Find/Facets/Config/IFacetConfigFactory.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Find/Facets/Config/IgnoreCollectionEditorDescriptor.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Find/Facets/Config/PropertyListBase.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Find/Facets/Config/SelectOneEnumAttribute.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Find/Facets/FacetAverageRatingDefinition.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Find/Facets/FacetDefinition.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Find/Facets/FacetFilterRequest.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Find/Facets/FacetGroupOption.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Find/Facets/FacetNumericRangeDefinition.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Find/Facets/FacetOption.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Find/Facets/FacetRegistry.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Find/Facets/FacetStringDefinition.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Find/Facets/FacetStringListDefinition.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Find/Facets/IFacetConfiguration.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Find/Facets/IFacetRegistry.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Find/Facets/ISelectable.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Find/Facets/MultiSelectTermCount.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Find/Facets/RangeFacetFilterRequest.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Find/Facets/RangeFacetFilterRequestConverter.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Find/Facets/SelectableNumericRange.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Find/Facets/SelectableNumericRangeResult.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Find/Facets/TermsFacetFilterRequest.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Find/Facets/TermsFacetFilterRequestConverter.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Find/GeoPosition.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Find/InitializationEngineExtensions.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Find/Initialize.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Find/SearchExtensions.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/GroupNames.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Helpers/ContextHelpers.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Helpers/Extensions.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Helpers/HtmlHelpers.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Helpers/ImageUrlHelpers.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Helpers/OpenGraphHelpers.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Helpers/ViewContextExtension.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Helpers/WebPHelper.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/InitializeSite.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Jobs/BlobJob.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Jobs/DemoIntegrationJob.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Jobs/UsersIndexJob.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/OpenGraph/Extensions/DeterminerExtensions.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/OpenGraph/Extensions/StringBuilderExtensions.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/OpenGraph/Extensions/TypeExtensions.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/OpenGraph/OpenGraphFoundationPageData.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/OpenGraph/OpenGraphGenericNode.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/OpenGraph/OpenGraphGenericProduct.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/OpenGraph/OpenGraphHomePage.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/OpenGraph/OpenGraphLocationItemPage.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Personalization/BlockView.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Personalization/CmsTrackingService.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Personalization/CommerceTrackingService.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Personalization/ICommerceTrackingService.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Personalization/ImageView.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Personalization/Initialize.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Personalization/RecommendationsExtensions.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Personalization/TrackingDataFactory.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/PowerSlices/CommerceSlices.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/PowerSlices/ContentSlices.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/PowerSlices/GeneralSlices.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/SchemaMarkup/BlogItemPageSchemaMapper.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/SchemaMarkup/GenericProductSchemaDataMapper.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/SchemaMarkup/HomePageSchemaMapper.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/SchemaMarkup/LocationItemPageSchemaDataMapper.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Social/Adapters/CommunityActivityAdapter.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Social/Adapters/CommunityMemberAdapter.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Social/Adapters/CommunityMembershipRequestAdapter.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Social/Adapters/CommunityMembershipWorkflowAdapter.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Social/Adapters/ICommunityActivityAdapter.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Social/CommentExtensions.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Social/Composites/Review.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Social/Composites/ReviewRating.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Social/ExtensionData/AddMemberRequest.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Social/ExtensionData/GroupExtensionData.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Social/ExtensionData/MemberExtensionData.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Social/ExtensionData/MembershipModeration.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Social/Initialize.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Social/IPrincipalExtensions.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Social/MessageViewModel.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Social/Models/ActivityStreams/CommunityActivity.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Social/Models/ActivityStreams/CommunityFeedFilter.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Social/Models/ActivityStreams/ICommunityActivity.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Social/Models/ActivityStreams/PageCommentActivity.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Social/Models/ActivityStreams/PageRatingActivity.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Social/Models/ActivityStreams/PageSubscription.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Social/Models/ActivityStreams/PageSubscriptionFilter.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Social/Models/ActivityStreams/ReviewActivity.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Social/Models/Comments/BlogComment.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Social/Models/Comments/PageComment.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Social/Models/Comments/PageCommentFilter.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Social/Models/Groups/Community.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Social/Models/Groups/CommunityMember.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Social/Models/Groups/CommunityMemberFilter.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Social/Models/Groups/CommunityMembershipRequest.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Social/Models/Moderation/CommunityMembershipWorkflow.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Social/Models/Ratings/PageRatingFilter.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Social/Models/Ratings/PageRatingStatistics.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Social/Models/User.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Social/Moderation/ModerationController.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Social/Moderation/ModerationViewModel.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Social/Repositories/ActivityStreams/CommunityActivityRepository.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Social/Repositories/ActivityStreams/CommunityFeedRepository.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Social/Repositories/ActivityStreams/ICommunityActivityRepository.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Social/Repositories/ActivityStreams/ICommunityFeedRepository.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Social/Repositories/ActivityStreams/IPageSubscriptionRepository.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Social/Repositories/ActivityStreams/PageSubscriptionRepository.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Social/Repositories/Comments/BlogCommentRepository.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Social/Repositories/Comments/IBlogCommentRepository.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Social/Repositories/Comments/IPageCommentRepository.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Social/Repositories/Comments/PageCommentRepository.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Social/Repositories/Common/IPageRepository.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Social/Repositories/Common/IUserRepository.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Social/Repositories/Common/PageRepository.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Social/Repositories/Common/UserRepository.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Social/Repositories/Groups/CommunityMemberRepository.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Social/Repositories/Groups/CommunityRepository.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Social/Repositories/Groups/ICommunityMemberRepository.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Social/Repositories/Groups/ICommunityRepository.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Social/Repositories/Moderation/CommunityMembershipModerationRepository.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Social/Repositories/Moderation/ICommunityMembershipModerationRepository.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Social/Repositories/Ratings/IPageRatingRepository.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Social/Repositories/Ratings/PageRatingRepository.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Social/Services/CommentManagerService.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Social/Services/ICommentManagerService.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Social/Services/IReviewActivityService.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Social/Services/IReviewService.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Social/Services/ReviewActivityService.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Social/Services/ReviewService.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Social/Services/ViewModelAdapter.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Social/SocialBlockComponent.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Social/SocialRepositoryException.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Social/ViewModels/CommunityFeedItemViewModel.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Social/ViewModels/CommunityMemberViewModel.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Social/ViewModels/CommunityModerationViewModel.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Social/ViewModels/RatingFormViewModel.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Social/ViewModels/ReviewStatisticsViewModel.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Social/ViewModels/ReviewSubmissionViewModel.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Social/ViewModels/ReviewsViewModel.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Social/ViewModels/ReviewViewModel.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/TabNames.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Program.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Startup.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Test/Comment.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Test/CommentsPaneDescriptor.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Test/CommentsPaneNavigationComponent.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/obj/Debug/net8.0/.NETCoreApp,Version=v8.0.AssemblyAttributes.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/obj/Debug/net8.0/Foundation.AssemblyInfo.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/obj/Debug/net8.0/Foundation.RazorAssemblyInfo.cs","/Users/andrewmarkham/.nuget/packages/episerver.find.cms/16.1.0/contentFiles/any/any/modules/_protected/Find/Find.zip","/Users/andrewmarkham/.nuget/packages/powerslice/5.2.0/contentFiles/any/any/modules/_protected/PowerSlice/PowerSlice.zip","/Users/andrewmarkham/.nuget/packages/episerver.cms.ui.settings/12.28.0/contentFiles/any/any/modules/_protected/EPiServer.Cms.UI.Settings/EPiServer.Cms.UI.Settings.zip","/Users/andrewmarkham/.nuget/packages/episerver.cms.ui.admin/12.28.0/contentFiles/any/any/modules/_protected/EPiServer.Cms.UI.Admin/EPiServer.Cms.UI.Admin.zip","/Users/andrewmarkham/.nuget/packages/episerver.cms.ui/12.28.0/contentFiles/any/any/modules/_protected/CMS/CMS.zip","/Users/andrewmarkham/.nuget/packages/episerver.cms.ui/12.28.0/contentFiles/any/any/modules/_protected/Shell/Shell.zip","/Users/andrewmarkham/.nuget/packages/episerver.cms.tinymce/4.7.2/contentFiles/any/any/modules/_protected/EPiServer.Cms.TinyMce/EPiServer.Cms.TinyMce.zip","/Users/andrewmarkham/.nuget/packages/episerver.forms.ui/5.8.0/contentFiles/any/any/modules/_protected/EPiServer.Forms.UI/EPiServer.Forms.UI.zip","/Users/andrewmarkham/.nuget/packages/episerver.forms/5.8.0/contentFiles/any/any/modules/_protected/EPiServer.Forms/EPiServer.Forms.zip","/Users/andrewmarkham/.nuget/packages/episerver.connectformarketingautomation/6.1.4/contentFiles/any/any/modules/_protected/Episerver.Marketing.Connector/Episerver.Marketing.Connector.zip","/Users/andrewmarkham/.nuget/packages/optimizely.labs.marketingautomationintegration.odp/1.0.2/contentFiles/any/any/Resources/Translations/Optimizely.Labs.MarketingAutomationIntegration.ODP.Forms_EN.xml","/Users/andrewmarkham/.nuget/packages/optimizely.labs.marketingautomationintegration.odp/1.0.2/contentFiles/any/any/Views/Shared/ElementBlocks/ODPListConsentFormBlock.cshtml","/Users/andrewmarkham/.nuget/packages/geta.optimizely.categories/1.1.1/contentFiles/any/any/modules/_protected/Geta.Optimizely.Categories/Geta.Optimizely.Categories.zip","/Users/andrewmarkham/.nuget/packages/geta.notfoundhandler.optimizely/5.0.8/contentFiles/any/any/modules/_protected/Geta.NotFoundHandler.Optimizely/module.config","/Users/andrewmarkham/.nuget/packages/episerver.telemetry.ui/2.2.1/contentFiles/any/any/modules/_protected/episerver-telemetry-ui/episerver-telemetry-ui.zip","/Users/andrewmarkham/.nuget/packages/episerver.pdfpreview/2.1.3/contentFiles/any/any/modules/_protected/EPiServer.PdfPreview/EPiServer.PdfPreview.zip","/Users/andrewmarkham/.nuget/packages/episerver.openidconnect.ui/3.10.2/contentFiles/any/any/modules/_protected/EPiServer.OpenIDConnect.UI/EPiServer.OpenIDConnect.UI.zip","/Users/andrewmarkham/.nuget/packages/episerver.marketing.testing/3.1.2/contentFiles/any/any/modules/_protected/EPiServer.Marketing.Testing/EPiServer.Marketing.Testing.zip","/Users/andrewmarkham/.nuget/packages/episerver.marketing.automation.forms/3.1.3/contentFiles/any/any/Resources/LanguageFiles/Episerver.Marketing.Automation.Forms_EN.xml","/Users/andrewmarkham/.nuget/packages/episerver.labs.languagemanager/5.2.0/contentFiles/any/any/modules/_protected/EPiServer.Labs.LanguageManager/EPiServer.Labs.LanguageManager.zip","/Users/andrewmarkham/.nuget/packages/episerver.labs.blockenhancements/1.2.3/contentFiles/any/any/modules/_protected/episerver-labs-block-enhancements/module.config","/Users/andrewmarkham/.nuget/packages/episerver.forms.samples/4.2.2/contentFiles/any/any/modules/_protected/EPiServer.Forms.Samples/EPiServer.Forms.Samples.zip","/Users/andrewmarkham/.nuget/packages/episerver.commerce.ui.customerservice/14.19.0/contentFiles/any/any/modules/_protected/EPiServer.Commerce.UI.CustomerService/EPiServer.Commerce.UI.CustomerService.zip","/Users/andrewmarkham/.nuget/packages/episerver.commerce.ui.admin/14.19.0/contentFiles/any/any/modules/_protected/EPiServer.Commerce.UI.Admin/EPiServer.Commerce.UI.Admin.zip","/Users/andrewmarkham/.nuget/packages/episerver.commerce.ui/14.19.0/contentFiles/any/any/modules/_protected/Commerce/Commerce.zip","/Users/andrewmarkham/.nuget/packages/episerver.commerce.ui/14.19.0/contentFiles/any/any/modules/_protected/EPiServer.Commerce.Shell/EPiServer.Commerce.Shell.zip","/Users/andrewmarkham/.nuget/packages/episerver.cms.ui.visitorgroups/12.28.0/contentFiles/any/any/modules/_protected/EPiServer.Cms.UI.VisitorGroups/EPiServer.Cms.UI.VisitorGroups.zip","/Users/andrewmarkham/.nuget/packages/episerver.cms.welcomeintegration.ui/1.3.8/contentFiles/any/any/modules/_protected/EPiServer.Cms.WelcomeIntegration.UI/EPiServer.Cms.WelcomeIntegration.UI.zip","/Users/andrewmarkham/.nuget/packages/advanced.cms.advancedreviews/1.3.6/contentFiles/any/any/modules/_protected/advanced-cms-approval-reviews/advanced-cms-approval-reviews.zip","/Users/andrewmarkham/.nuget/packages/advanced.cms.advancedreviews/1.3.6/contentFiles/any/any/modules/_protected/advanced-cms-external-reviews/advanced-cms-external-reviews.zip","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/obj/Debug/net8.0/Foundation.AssemblyInfo.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/obj/Debug/net8.0/Foundation.AssemblyInfo.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/obj/Debug/net8.0/Foundation.AssemblyInfo.cs"],"BuildActions":["Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","None","None","None","None","None","None","None","None","None","None","EmbeddedResource","None","None","None","None","None","None","None","EmbeddedResource","None","None","None","None","None","None","None","None","None","None","None","Compile","Compile","Compile"],"Analyzers":["/usr/local/share/dotnet/sdk/8.0.100/Sdks/Microsoft.NET.Sdk.Web/analyzers/cs/Microsoft.AspNetCore.Analyzers.dll","/usr/local/share/dotnet/sdk/8.0.100/Sdks/Microsoft.NET.Sdk.Web/analyzers/cs/Microsoft.AspNetCore.Mvc.Analyzers.dll","/usr/local/share/dotnet/sdk/8.0.100/Sdks/Microsoft.NET.Sdk/analyzers/Microsoft.CodeAnalysis.CSharp.NetAnalyzers.dll","/usr/local/share/dotnet/sdk/8.0.100/Sdks/Microsoft.NET.Sdk/analyzers/Microsoft.CodeAnalysis.NetAnalyzers.dll","/Users/andrewmarkham/.nuget/packages/lucene.net/4.8.0-beta00014/analyzers/dotnet/cs/Lucene.Net.CodeAnalysis.CSharp.dll","/Users/andrewmarkham/.nuget/packages/microsoft.codeanalysis.analyzers/3.3.2/analyzers/dotnet/cs/Microsoft.CodeAnalysis.Analyzers.dll","/Users/andrewmarkham/.nuget/packages/microsoft.codeanalysis.analyzers/3.3.2/analyzers/dotnet/cs/Microsoft.CodeAnalysis.CSharp.Analyzers.dll","/Users/andrewmarkham/.nuget/packages/microsoft.entityframeworkcore.analyzers/6.0.0/analyzers/dotnet/cs/Microsoft.EntityFrameworkCore.Analyzers.dll","/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/analyzers/dotnet/cs/Microsoft.Interop.ComInterfaceGenerator.dll","/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/analyzers/dotnet/cs/Microsoft.Interop.JavaScript.JSImportGenerator.dll","/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/analyzers/dotnet/cs/Microsoft.Interop.LibraryImportGenerator.dll","/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/analyzers/dotnet/cs/Microsoft.Interop.SourceGeneration.dll","/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/analyzers/dotnet/cs/System.Text.Json.SourceGeneration.dll","/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/analyzers/dotnet/cs/System.Text.RegularExpressions.Generator.dll","/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/analyzers/dotnet/cs/Microsoft.AspNetCore.App.Analyzers.dll","/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/analyzers/dotnet/cs/Microsoft.AspNetCore.App.CodeFixes.dll","/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/analyzers/dotnet/cs/Microsoft.AspNetCore.Components.Analyzers.dll","/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/analyzers/dotnet/roslyn4.4/cs/Microsoft.Extensions.Logging.Generators.dll","/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/analyzers/dotnet/roslyn4.4/cs/Microsoft.Extensions.Options.SourceGeneration.dll","/usr/local/share/dotnet/sdk/8.0.100/Sdks/Microsoft.NET.Sdk.Razor/source-generators/Microsoft.AspNetCore.Mvc.Razor.Extensions.dll","/usr/local/share/dotnet/sdk/8.0.100/Sdks/Microsoft.NET.Sdk.Razor/source-generators/Microsoft.AspNetCore.Razor.Language.dll","/usr/local/share/dotnet/sdk/8.0.100/Sdks/Microsoft.NET.Sdk.Razor/source-generators/Microsoft.AspNetCore.Razor.Utilities.Shared.dll","/usr/local/share/dotnet/sdk/8.0.100/Sdks/Microsoft.NET.Sdk.Razor/source-generators/Microsoft.CodeAnalysis.ExternalAccess.RazorCompiler.dll","/usr/local/share/dotnet/sdk/8.0.100/Sdks/Microsoft.NET.Sdk.Razor/source-generators/Microsoft.CodeAnalysis.Razor.dll","/usr/local/share/dotnet/sdk/8.0.100/Sdks/Microsoft.NET.Sdk.Razor/source-generators/Microsoft.Extensions.ObjectPool.dll","/usr/local/share/dotnet/sdk/8.0.100/Sdks/Microsoft.NET.Sdk.Razor/source-generators/Microsoft.NET.Sdk.Razor.SourceGenerators.dll","/usr/local/share/dotnet/sdk/8.0.100/Sdks/Microsoft.NET.Sdk.Razor/source-generators/System.Collections.Immutable.dll"],"AdditionalFiles":["/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Blocks/AssetsDownloadLinksBlock/AssetsDownloadLinksBlock.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Blocks/BreadcrumbBlock/BreadcrumbBlock.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Blocks/ButtonBlock/ButtonBlock.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Blocks/CallToActionBlock/CallToActionBlock.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Blocks/CarouselBlock/CarouselBlock.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Blocks/CategoryBlock/CategoryBlock.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Blocks/CommentsBlock/CommentsBlock.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Blocks/ContainerBlock/ContainerBlock.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Blocks/ElevatedRoleBlock/ElevatedRoleBlock.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Blocks/FacebookBlock/FacebookBlock.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Blocks/FeedBlock/FeedBlock.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Blocks/GoogleMapsBlock/GoogleMapsBlock.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Blocks/GroupAdmissionBlock/GroupAdmissionBlock.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Blocks/GroupCreationBlock/GroupCreationBlock.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Blocks/Healthbot/HealthChatBotBlock.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Blocks/HeroBlock/HeroBlock.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Blocks/LikeButtonBlock/LikeButtonBlock.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Blocks/MembershipAffiliationBlock/MembershipAffiliationBlock.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Blocks/MembershipDisplayBlock/MembershipDisplayBlock.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Blocks/MenuItemBlock/MenuItemBlock.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Blocks/NavigationBlock/NavigationBlock.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Blocks/OrderSearchBlock/OrderSearchBlock.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Blocks/OrderSearchBlock/_OrderSearchListing.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Blocks/PageListBlock/Views/PageListBlock.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Blocks/PageListBlock/Views/Templates/_CardTemplate.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Blocks/PageListBlock/Views/Templates/_GridTemplate.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Blocks/PageListBlock/Views/Templates/_GridTemplateComponent.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Blocks/PageListBlock/Views/Templates/_HighlightPanelTemplate.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Blocks/PageListBlock/Views/Templates/_InsightTemplate.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Blocks/PageListBlock/Views/Templates/_LeftImageTemplate.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Blocks/PageListBlock/Views/Templates/_NoImageTemplate.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Blocks/PageListBlock/Views/Templates/_TopImageTemplate.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Blocks/ProductHeroBlock/ProductHeroBlock.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Blocks/RatingBlock/RatingBlock.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Blocks/RssReaderBlock/RssReaderBlock.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Blocks/SubscriptionBlock/SubscriptionBlock.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Blocks/TeaserBlock/TeaserBlock.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Blocks/TextBlock/TextBlock.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Blocks/TwitterBlock/TwitterBlock.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Blocks/VideoBlock/VideoBlock.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Blocks/VimeoBlock/VimeoBlock.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Blocks/YouTubeBlock/YouTubeBlock.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Blog/BlogCommentBlock/Index.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Blog/BlogItemPage/Index.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Blog/BlogListPage/Index.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Blog/BlogListPage/Views/Templates/_CardTemplate.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Blog/BlogListPage/Views/Templates/_GridTemplate.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Blog/BlogListPage/Views/Templates/_GridTemplateComponent.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Blog/BlogListPage/Views/Templates/_HighLightTemplate.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Blog/BlogListPage/Views/Templates/_ImageLeftTemplate.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Blog/BlogListPage/Views/Templates/_ImageTopTemplate.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Blog/BlogListPage/Views/Templates/_InsightTemplate.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Blog/BlogListPage/Views/Templates/_NoImageTemplate.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Blog/BlogListPage/Views/_BlogList.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Blog/BlogListPage/Views/_Paging.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/CatalogContent/Bundle/Index.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/CatalogContent/Bundle/_BundleDetail.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/CatalogContent/Bundle/_Quickview.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/CatalogContent/DynamicCatalogContent/DynamicProduct/Index.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/CatalogContent/DynamicCatalogContent/DynamicProduct/_ProductDetail.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/CatalogContent/Package/Index.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/CatalogContent/Package/_PackageDetail.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/CatalogContent/Package/_Quickview.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/CatalogContent/Product/Index.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/CatalogContent/Product/_ProductDetail.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/CatalogContent/Product/_Quickview.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/CatalogContent/Variation/Index.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/CatalogContent/Variation/_VariantDetail.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/CatalogContent/_BuyNow.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/CatalogContent/_Images.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/CatalogContent/_ListVariants.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/CatalogContent/_Rating.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/CatalogContent/_SocialIconsListing.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/CatalogContent/_WarningHasSaleCode.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Category/Index.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Category/_PageListing.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Category/_Preview.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Checkout/BillingInformation.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Checkout/Checkout.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Checkout/CheckoutMethod.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Checkout/ConfirmationMail/Index.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Checkout/EmptyCart.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Checkout/Index.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Checkout/MultipleAddresses.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Checkout/Payment.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Checkout/PlaceOrder.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Checkout/ShippingInformation.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Checkout/SingleAddress.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Checkout/Subscription.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Checkout/_AddPayment.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Checkout/_BudgetPaymentPaymentMethod.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Checkout/_CashOnDeliveryPaymentMethod.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Checkout/_Coupon.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Checkout/_GenericCreditCardPaymentMethod.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Checkout/_GiftCardPaymentPaymentMethod.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Checkout/_OrderSummary.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Collection/Index.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Community/Index.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Events/CalendarBlock/Index.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Events/CalendarEvent/Index.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Home/Index.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/LandingPages/LandingPage/Index.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/LandingPages/ThreeColumnLandingPage/Index.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/LandingPages/TwoColumnLandingPage/Index.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Locations/Blocks/FilterActivitiesBlock.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Locations/Blocks/FilterContinentsBlock.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Locations/Blocks/FilterDistancesBlock.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Locations/Blocks/FilterTemperaturesBlock.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Locations/LocationItemPage/Index.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Locations/LocationItemPage/Navigation.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Locations/LocationListPage/Index.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Locations/TagPage/CarouselSimple.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Locations/TagPage/Index.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Login/Index.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Login/Register.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Markets/Index.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Media/ImageMedia.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Media/Index.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Media/PdfFile.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Media/VideoFile.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/MyAccount/AccountInformation/Index.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/MyAccount/AddressBook/EditAddress.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/MyAccount/AddressBook/EditForm.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/MyAccount/AddressBook/Index.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/MyAccount/AddressBook/ModalAddressDialog.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/MyAccount/Bookmarks/Index.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/MyAccount/CreditCard/EditForm.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/MyAccount/CreditCard/Index.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/MyAccount/GiftCardPage/Index.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/MyAccount/OrderConfirmation/Index.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/MyAccount/OrderConfirmation/_BudgetPaymentConfirmation.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/MyAccount/OrderConfirmation/_CashOnDeliveryConfirmation.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/MyAccount/OrderConfirmation/_GenericCreditCardConfirmation.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/MyAccount/OrderConfirmation/_GiftCardPaymentConfirmation.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/MyAccount/OrderDetails/Index.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/MyAccount/OrderDetails/_Discounts.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/MyAccount/OrderDetails/_ItemTemplate.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/MyAccount/OrderDetails/_QuoteNotes.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/MyAccount/OrderHistory/Detail.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/MyAccount/OrderHistory/Index.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/MyAccount/OrderHistory/_OrderFilterBox.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/MyAccount/OrderHistoryBlock/Index.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/MyAccount/ProfilePage/Index.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/MyAccount/ResetPassword/ForgotPassword.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/MyAccount/ResetPassword/ForgotPasswordConfirmation.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/MyAccount/ResetPassword/ResetPassword.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/MyAccount/ResetPassword/ResetPasswordConfirmation.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/MyAccount/SubscriptionDetail/Index.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/MyAccount/SubscriptionHistory/Index.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/MyAccount/_MyAccountLayout.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/MyAccount/_ProfileSidebar.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/MyOrganization/Budgeting/AddBudget.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/MyOrganization/Budgeting/AddBudgetToUser.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/MyOrganization/Budgeting/EditBudget.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/MyOrganization/Budgeting/EditUserBudget.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/MyOrganization/Budgeting/Index.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/MyOrganization/Orders/Index.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/MyOrganization/Organization/AddSub.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/MyOrganization/Organization/Edit.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/MyOrganization/Organization/Index.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/MyOrganization/QuickOrderBlock/Index.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/MyOrganization/QuickOrderPage/Index.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/MyOrganization/SubOrganization/Edit.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/MyOrganization/SubOrganization/Index.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/MyOrganization/Users/AddUser.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/MyOrganization/Users/EditUser.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/MyOrganization/Users/Index.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/MyOrganization/_B2BNavigation.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/MyOrganization/_MyOrganizationLayout.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/NamedCarts/DefaultCart/LargeCart.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/NamedCarts/DefaultCart/_CartItems.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/NamedCarts/DefaultCart/_CartSummary.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/NamedCarts/DefaultCart/_ItemTemplate.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/NamedCarts/DefaultCart/_ProcessCart.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/NamedCarts/OrderPadsPage/Index.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/NamedCarts/SharedCart/Index.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/NamedCarts/Wishlist/Index.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/NamedCarts/Wishlist/_WishlistListItem.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/NewProducts/Index.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/People/PersonItemPage/Index.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/People/PersonListPage/Index.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Preview/Index.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Recommendations/Index.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Recommendations/WidgetBlock/Index.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Sales/Index.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Search/Category/Index.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Search/ProductSearchBlock/EmptyResult.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Search/ProductSearchBlock/FindError.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Search/ProductSearchBlock/Index.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Search/Search/Index.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Search/_CategoriesFilter.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Search/_Facet.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Search/_FacetContent.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Search/_QuickSearch.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Search/_QuickSearchAll.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Search/_QuickSearchContent.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Search/_QuickSearchPdf.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Search/_RecentlyBrowsed.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Search/_SearchContent.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Search/_SearchPdf.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Search/_Toolbar.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Shared/Components/Dropdown/Default.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Shared/Components/Money/Default.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Shared/Views/DisplayTemplates/CountryOptions.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Shared/Views/DisplayTemplates/CountryRegionViewModel.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Shared/Views/DisplayTemplates/HeroBlockCallout.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Shared/Views/EditorTemplates/CountryRegionViewModel.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Shared/Views/ElementBlocks/ChoiceElementBlock.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Shared/Views/ElementBlocks/Components/FormContainerBlock/FormContainerBlock.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Shared/Views/ElementBlocks/SelectionElementBlock.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Shared/Views/ElementBlocks/SubmitButtonElementBlock.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Shared/Views/ElementBlocks/TextareaElementBlock.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Shared/Views/ElementBlocks/TextboxElementBlock.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Shared/Views/Header/_Header.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Shared/Views/Header/_HeaderCart.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Shared/Views/Header/_HeaderLogo.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Shared/Views/Header/_MarketList.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Shared/Views/Header/_Menu.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Shared/Views/Header/_MiniCartItems.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Shared/Views/Header/_MiniSharedCart.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Shared/Views/Header/_MiniSharedCartItems.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Shared/Views/Header/_MiniWishlist.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Shared/Views/Header/_MiniWishlistItems.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Shared/Views/Header/_MobileMiniCart.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Shared/Views/Header/_MobileMiniCartItems.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Shared/Views/Header/_MobileMiniSharedCart.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Shared/Views/Header/_MobileMiniSharedCartItems.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Shared/Views/Header/_MobileMiniWishlist.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Shared/Views/Header/_MobileMiniWishlistItems.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Shared/Views/Header/_MobileNavigation.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Shared/Views/Header/_MobileUsers.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Shared/Views/Header/_Navigation.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Shared/Views/Header/_Users.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Shared/Views/TemplateHint.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Shared/Views/_Address.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Shared/Views/_AddressRegion.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Shared/Views/_AddressSummaryLine.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Shared/Views/_BreadCrumb.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Shared/Views/_Category.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Shared/Views/_Facet.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Shared/Views/_Footer.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Shared/Views/_Grid.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Shared/Views/_Layout.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Shared/Views/_LoginLayout.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Shared/Views/_MasterLayout.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Shared/Views/_Page.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Shared/Views/_Pager.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Shared/Views/_Product.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Shared/Views/_ProductGrid.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Shared/Views/_ProductGridItem.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Shared/Views/_ProductList.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Shared/Views/_ProfileSidebar.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Shared/Views/_Promotion.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Shared/Views/_QuickViewModal.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Shared/Views/_RecentlyBrowsed.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Shared/Views/_ReviewForm.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Shared/Views/_ReviewItem.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Shared/Views/_Reviews.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Shared/Views/_Store.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Shared/Views/_WishListMiniCartDetails.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/StandardPage/Index.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Stores/Index.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/_viewImports.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/_viewstart.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Cms/Views/BulkUpdate/Index.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Cms/Views/Shared/_ShellLayout.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Cms/Views/_viewImports.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Cms/Views/_viewstart.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Commerce/Views/GiftCardManager/Index.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Commerce/Views/SingleUseCoupon/EditPromotionCoupons.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Commerce/Views/SingleUseCoupon/Index.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Commerce/Views/_viewImports.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Commerce/Views/_viewstart.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Social/Views/Moderation/Index.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Social/Views/_viewstart.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Views/Shared/ElementBlocks/ODPListConsentFormBlock.cshtml"],"EditorConfigFiles":["/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/.editorconfig","/usr/local/share/dotnet/sdk/8.0.100/Sdks/Microsoft.NET.Sdk.Razor/source-generators/RazorSourceGenerator.razorencconfig","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/obj/Debug/net8.0/Foundation.GeneratedMSBuildEditorConfig.editorconfig","/usr/local/share/dotnet/sdk/8.0.100/Sdks/Microsoft.NET.Sdk/analyzers/build/config/analysislevel_8_default.globalconfig"],"DefineConstants":["TRACE","DEBUG","NET","NET8_0","NETCOREAPP","NET5_0_OR_GREATER","NET6_0_OR_GREATER","NET7_0_OR_GREATER","NET8_0_OR_GREATER","NETCOREAPP1_0_OR_GREATER","NETCOREAPP1_1_OR_GREATER","NETCOREAPP2_0_OR_GREATER","NETCOREAPP2_1_OR_GREATER","NETCOREAPP2_2_OR_GREATER","NETCOREAPP3_0_OR_GREATER","NETCOREAPP3_1_OR_GREATER"],"IntermediateAssembly":"/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/obj/Debug/net8.0/Foundation.dll"} \ No newline at end of file diff --git a/.vs/Foundation/xs/project-cache/Jhoose.CommerceApi-Debug.json b/.vs/Foundation/xs/project-cache/Jhoose.CommerceApi-Debug.json deleted file mode 100644 index f0d8de6..0000000 --- a/.vs/Foundation/xs/project-cache/Jhoose.CommerceApi-Debug.json +++ /dev/null @@ -1 +0,0 @@ -{"Format":1,"ProjectReferences":[],"MetadataReferences":[{"FilePath":"/Users/andrewmarkham/.nuget/packages/azure.core/1.24.0/lib/net5.0/Azure.Core.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/azure.identity/1.6.0/lib/netstandard2.0/Azure.Identity.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/portable.bouncycastle/1.9.0/lib/netstandard2.0/BouncyCastle.Crypto.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/castle.core/4.4.1/lib/netstandard1.5/Castle.Core.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/castle.windsor/5.1.1/lib/netstandard1.6/Castle.Windsor.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/episerver.framework/12.17.1/lib/net6.0/EPiServer.ApplicationModules.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/episerver.commerce.core/14.19.0/lib/net6.0/EPiServer.Business.Commerce.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/episerver.cms.aspnetcore/12.17.1/lib/net6.0/EPiServer.Cms.AspNetCore.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/episerver.cms.aspnetcore.templating/12.17.1/lib/net6.0/EPiServer.Cms.AspNetCore.Templating.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/episerver.cms.ui.core/12.22.7/lib/net6.0/EPiServer.Cms.Shell.UI.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/episerver.cms.ui.aspnetidentity/12.22.7/lib/net6.0/EPiServer.Cms.UI.AspNetIdentity.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/episerver.commerce.core/14.19.0/lib/net6.0/EPiServer.Commerce.Bolt.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/episerver.commerce.core/14.19.0/lib/net6.0/EPiServer.Commerce.Internal.Migration.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/episerver.commerce.core/14.19.0/lib/net6.0/EPiServer.Commerce.ODP.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/episerver.commerce.core/14.19.0/lib/net6.0/EPiServer.Commerce.Reporting.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/episerver.framework/12.17.1/lib/net6.0/EPiServer.Data.Cache.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/episerver.framework/12.17.1/lib/net6.0/EPiServer.Data.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/episerver.cms.core/12.17.1/lib/net6.0/EPiServer.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/episerver.cms.core/12.17.1/lib/net6.0/EPiServer.Enterprise.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/episerver.framework/12.17.1/lib/net6.0/EPiServer.Events.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/episerver.framework.aspnetcore/12.17.1/lib/net6.0/EPiServer.Framework.AspNetCore.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/episerver.framework/12.17.1/lib/net6.0/EPiServer.Framework.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/episerver.cms.core/12.17.1/lib/net6.0/EPiServer.ImageLibrary.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/episerver.framework/12.17.1/lib/net6.0/EPiServer.Licensing.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/episerver.cms.core/12.17.1/lib/net6.0/EPiServer.LinkAnalyzer.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/episerver.openidconnect/3.10.2/lib/net6.0/EPiServer.OpenIDConnect.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/episerver.cms.ui.core/12.22.7/lib/net6.0/EPiServer.Shell.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/episerver.cms.ui.core/12.22.7/lib/net6.0/EPiServer.Shell.UI.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/episerver.cms.ui.core/12.22.7/lib/net6.0/EPiServer.UI.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/j2n/2.0.0-beta-0012/lib/net5.0/J2N.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/lucene.net.analysis.common/4.8.0-beta00014/lib/netstandard2.1/Lucene.Net.Analysis.Common.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/lucene.net/4.8.0-beta00014/lib/netstandard2.1/Lucene.Net.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/lucene.net.queries/4.8.0-beta00014/lib/netstandard2.1/Lucene.Net.Queries.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/lucene.net.queryparser/4.8.0-beta00014/lib/netstandard2.1/Lucene.Net.QueryParser.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/lucene.net.sandbox/4.8.0-beta00014/lib/netstandard2.1/Lucene.Net.Sandbox.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/mailkit/3.0.0/lib/net5.0/MailKit.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/episerver.commerce.core/14.19.0/lib/net6.0/Mediachase.BusinessFoundation.Data.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/episerver.commerce.core/14.19.0/lib/net6.0/Mediachase.Commerce.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/episerver.commerce.core/14.19.0/lib/net6.0/Mediachase.Commerce.Plugins.Payment.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/episerver.commerce.core/14.19.0/lib/net6.0/Mediachase.Commerce.Plugins.Shipping.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/episerver.commerce.core/14.19.0/lib/net6.0/Mediachase.Commerce.Website.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/episerver.commerce.core/14.19.0/lib/net6.0/Mediachase.Commerce.Workflow.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/episerver.commerce.core/14.19.0/lib/net6.0/Mediachase.DataProvider.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/episerver.commerce.core/14.19.0/lib/net6.0/Mediachase.MetaDataPlus.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/episerver.commerce.core/14.19.0/lib/net6.0/Mediachase.Search.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/episerver.commerce.core/14.19.0/lib/net6.0/Mediachase.Search.Extensions.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/episerver.commerce.core/14.19.0/lib/net6.0/Mediachase.Search.LuceneSearchProvider.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/episerver.commerce.core/14.19.0/lib/net6.0/Mediachase.SqlDataProvider.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.AspNetCore.Antiforgery.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.AspNetCore.Authentication.Abstractions.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.AspNetCore.Authentication.BearerToken.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.AspNetCore.Authentication.Cookies.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.AspNetCore.Authentication.Core.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.AspNetCore.Authentication.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.AspNetCore.Authentication.OAuth.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.AspNetCore.Authorization.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.AspNetCore.Authorization.Policy.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.AspNetCore.Components.Authorization.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.AspNetCore.Components.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.AspNetCore.Components.Endpoints.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.AspNetCore.Components.Forms.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.AspNetCore.Components.Server.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.AspNetCore.Components.Web.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.AspNetCore.Connections.Abstractions.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.AspNetCore.CookiePolicy.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.AspNetCore.Cors.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.AspNetCore.Cryptography.Internal.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.AspNetCore.Cryptography.KeyDerivation.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.AspNetCore.DataProtection.Abstractions.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.AspNetCore.DataProtection.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.AspNetCore.DataProtection.Extensions.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.AspNetCore.Diagnostics.Abstractions.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.AspNetCore.Diagnostics.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.AspNetCore.Diagnostics.HealthChecks.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.AspNetCore.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.AspNetCore.HostFiltering.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.AspNetCore.Hosting.Abstractions.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.AspNetCore.Hosting.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.AspNetCore.Hosting.Server.Abstractions.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.AspNetCore.Html.Abstractions.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.AspNetCore.Http.Abstractions.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.AspNetCore.Http.Connections.Common.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.AspNetCore.Http.Connections.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.AspNetCore.Http.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.AspNetCore.Http.Extensions.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.AspNetCore.Http.Features.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.AspNetCore.Http.Results.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.AspNetCore.HttpLogging.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.AspNetCore.HttpOverrides.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.AspNetCore.HttpsPolicy.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.AspNetCore.Identity.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/microsoft.aspnetcore.identity.entityframeworkcore/6.0.0/lib/net6.0/Microsoft.AspNetCore.Identity.EntityFrameworkCore.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/Microsoft.AspNetCore.JsonPatch/6.0.1/lib/net6.0/Microsoft.AspNetCore.JsonPatch.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.AspNetCore.Localization.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.AspNetCore.Localization.Routing.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.AspNetCore.Metadata.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.AspNetCore.Mvc.Abstractions.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.AspNetCore.Mvc.ApiExplorer.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.AspNetCore.Mvc.Core.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.AspNetCore.Mvc.Cors.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.AspNetCore.Mvc.DataAnnotations.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.AspNetCore.Mvc.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.AspNetCore.Mvc.Formatters.Json.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.AspNetCore.Mvc.Formatters.Xml.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.AspNetCore.Mvc.Localization.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/microsoft.aspnetcore.mvc.newtonsoftjson/6.0.1/lib/net6.0/Microsoft.AspNetCore.Mvc.NewtonsoftJson.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.AspNetCore.Mvc.Razor.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/microsoft.aspnetcore.mvc.razor.extensions/6.0.0/lib/netstandard2.0/Microsoft.AspNetCore.Mvc.Razor.Extensions.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.AspNetCore.Mvc.RazorPages.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.AspNetCore.Mvc.TagHelpers.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.AspNetCore.Mvc.ViewFeatures.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.AspNetCore.OutputCaching.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.AspNetCore.RateLimiting.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.AspNetCore.Razor.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/microsoft.aspnetcore.razor.language/6.0.0/lib/netstandard2.0/Microsoft.AspNetCore.Razor.Language.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.AspNetCore.Razor.Runtime.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.AspNetCore.RequestDecompression.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.AspNetCore.ResponseCaching.Abstractions.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.AspNetCore.ResponseCaching.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.AspNetCore.ResponseCompression.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.AspNetCore.Rewrite.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.AspNetCore.Routing.Abstractions.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.AspNetCore.Routing.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.AspNetCore.Server.HttpSys.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.AspNetCore.Server.IIS.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.AspNetCore.Server.IISIntegration.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.AspNetCore.Server.Kestrel.Core.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.AspNetCore.Server.Kestrel.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.AspNetCore.Server.Kestrel.Transport.NamedPipes.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.AspNetCore.Server.Kestrel.Transport.Quic.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.AspNetCore.Server.Kestrel.Transport.Sockets.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.AspNetCore.Session.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.AspNetCore.SignalR.Common.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.AspNetCore.SignalR.Core.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.AspNetCore.SignalR.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.AspNetCore.SignalR.Protocols.Json.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.AspNetCore.StaticFiles.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.AspNetCore.WebSockets.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.AspNetCore.WebUtilities.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/microsoft.bcl.asyncinterfaces/6.0.0/lib/netstandard2.1/Microsoft.Bcl.AsyncInterfaces.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/Microsoft.CodeAnalysis.CSharp/4.0.0/lib/netcoreapp3.1/Microsoft.CodeAnalysis.CSharp.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/Microsoft.CodeAnalysis.Common/4.0.0/lib/netcoreapp3.1/Microsoft.CodeAnalysis.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/microsoft.codeanalysis.razor/6.0.0/lib/netstandard2.0/Microsoft.CodeAnalysis.Razor.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/Microsoft.CSharp.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/microsoft.data.sqlclient/5.0.1/ref/netcoreapp3.1/Microsoft.Data.SqlClient.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/microsoft.entityframeworkcore.abstractions/6.0.0/lib/net6.0/Microsoft.EntityFrameworkCore.Abstractions.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/microsoft.entityframeworkcore/6.0.0/lib/net6.0/Microsoft.EntityFrameworkCore.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/microsoft.entityframeworkcore.relational/6.0.0/lib/net6.0/Microsoft.EntityFrameworkCore.Relational.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/microsoft.entityframeworkcore.sqlserver/6.0.0/lib/net6.0/Microsoft.EntityFrameworkCore.SqlServer.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.Extensions.Caching.Abstractions.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.Extensions.Caching.Memory.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.Extensions.Configuration.Abstractions.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.Extensions.Configuration.Binder.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.Extensions.Configuration.CommandLine.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.Extensions.Configuration.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.Extensions.Configuration.EnvironmentVariables.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.Extensions.Configuration.FileExtensions.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.Extensions.Configuration.Ini.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.Extensions.Configuration.Json.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.Extensions.Configuration.KeyPerFile.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.Extensions.Configuration.UserSecrets.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.Extensions.Configuration.Xml.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.Extensions.DependencyInjection.Abstractions.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.Extensions.DependencyInjection.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/Microsoft.Extensions.DependencyModel/6.0.0/lib/netstandard2.0/Microsoft.Extensions.DependencyModel.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.Extensions.Diagnostics.Abstractions.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.Extensions.Diagnostics.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.Extensions.Diagnostics.HealthChecks.Abstractions.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.Extensions.Diagnostics.HealthChecks.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.Extensions.Features.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.Extensions.FileProviders.Abstractions.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.Extensions.FileProviders.Composite.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.Extensions.FileProviders.Embedded.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.Extensions.FileProviders.Physical.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.Extensions.FileSystemGlobbing.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.Extensions.Hosting.Abstractions.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.Extensions.Hosting.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.Extensions.Http.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/microsoft.extensions.http.polly/3.1.13/lib/netstandard2.0/Microsoft.Extensions.Http.Polly.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.Extensions.Identity.Core.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.Extensions.Identity.Stores.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.Extensions.Localization.Abstractions.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.Extensions.Localization.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.Extensions.Logging.Abstractions.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.Extensions.Logging.Configuration.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.Extensions.Logging.Console.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.Extensions.Logging.Debug.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.Extensions.Logging.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.Extensions.Logging.EventLog.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.Extensions.Logging.EventSource.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.Extensions.Logging.TraceSource.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.Extensions.ObjectPool.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.Extensions.Options.ConfigurationExtensions.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.Extensions.Options.DataAnnotations.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.Extensions.Options.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.Extensions.Primitives.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.Extensions.WebEncoders.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/microsoft.identity.client/4.45.0/lib/netcoreapp2.1/Microsoft.Identity.Client.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/microsoft.identity.client.extensions.msal/2.19.3/lib/netcoreapp2.1/Microsoft.Identity.Client.Extensions.Msal.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/microsoft.identitymodel.abstractions/6.21.0/lib/net6.0/Microsoft.IdentityModel.Abstractions.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/microsoft.identitymodel.jsonwebtokens/6.21.0/lib/net6.0/Microsoft.IdentityModel.JsonWebTokens.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/microsoft.identitymodel.logging/6.21.0/lib/net6.0/Microsoft.IdentityModel.Logging.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/microsoft.identitymodel.protocols/6.21.0/lib/net6.0/Microsoft.IdentityModel.Protocols.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/microsoft.identitymodel.protocols.openidconnect/6.21.0/lib/net6.0/Microsoft.IdentityModel.Protocols.OpenIdConnect.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/microsoft.identitymodel.tokens/6.21.0/lib/net6.0/Microsoft.IdentityModel.Tokens.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.JSInterop.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.Net.Http.Headers.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/microsoft.openapi/1.2.3/lib/netstandard2.0/Microsoft.OpenApi.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/microsoft.sqlserver.server/1.0.0/lib/netstandard2.0/Microsoft.SqlServer.Server.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/Microsoft.VisualBasic.Core.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/Microsoft.VisualBasic.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/Microsoft.Win32.Primitives.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/Microsoft.Win32.Registry.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/microsoft.win32.systemevents/6.0.0/lib/net6.0/Microsoft.Win32.SystemEvents.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/mimekit/3.0.0/lib/net5.0/MimeKit.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/mscorlib.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/netstandard.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/newtonsoft.json.bson/1.0.2/lib/netstandard2.0/Newtonsoft.Json.Bson.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/Newtonsoft.Json/13.0.1/lib/netstandard2.0/Newtonsoft.Json.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/openiddict.abstractions/3.1.1/lib/netstandard2.1/OpenIddict.Abstractions.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/openiddict.core/3.1.1/lib/net5.0/OpenIddict.Core.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/openiddict.entityframeworkcore/3.1.1/lib/net5.0/OpenIddict.EntityFrameworkCore.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/openiddict.entityframeworkcore.models/3.1.1/lib/netstandard2.0/OpenIddict.EntityFrameworkCore.Models.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/openiddict.server.aspnetcore/3.0.3/lib/net5.0/OpenIddict.Server.AspNetCore.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/openiddict.server.dataprotection/3.0.3/lib/net5.0/OpenIddict.Server.DataProtection.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/openiddict.server/3.0.3/lib/net5.0/OpenIddict.Server.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/openiddict.validation.aspnetcore/3.0.3/lib/net5.0/OpenIddict.Validation.AspNetCore.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/openiddict.validation.dataprotection/3.0.3/lib/net5.0/OpenIddict.Validation.DataProtection.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/openiddict.validation/3.0.3/lib/net5.0/OpenIddict.Validation.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/openiddict.validation.serverintegration/3.0.3/lib/netstandard2.1/OpenIddict.Validation.ServerIntegration.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/openiddict.validation.systemnethttp/3.0.3/lib/netstandard2.1/OpenIddict.Validation.SystemNetHttp.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/polly/7.1.0/lib/netstandard2.0/Polly.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/polly.extensions.http/3.0.0/lib/netstandard2.0/Polly.Extensions.Http.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/swashbuckle.aspnetcore.swagger/6.5.0/lib/net7.0/Swashbuckle.AspNetCore.Swagger.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/swashbuckle.aspnetcore.swaggergen/6.5.0/lib/net7.0/Swashbuckle.AspNetCore.SwaggerGen.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/swashbuckle.aspnetcore.swaggerui/6.5.0/lib/net7.0/Swashbuckle.AspNetCore.SwaggerUI.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.AppContext.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Buffers.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Collections.Concurrent.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Collections.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Collections.Immutable.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Collections.NonGeneric.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Collections.Specialized.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.ComponentModel.Annotations.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.ComponentModel.DataAnnotations.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.ComponentModel.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.ComponentModel.EventBasedAsync.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.ComponentModel.Primitives.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.ComponentModel.TypeConverter.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/system.configuration.configurationmanager/6.0.0/lib/net6.0/System.Configuration.ConfigurationManager.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Configuration.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Console.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Core.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Data.Common.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Data.DataSetExtensions.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Data.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Diagnostics.Contracts.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Diagnostics.Debug.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Diagnostics.DiagnosticSource.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/System.Diagnostics.EventLog.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Diagnostics.FileVersionInfo.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Diagnostics.Process.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Diagnostics.StackTrace.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Diagnostics.TextWriterTraceListener.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Diagnostics.Tools.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Diagnostics.TraceSource.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Diagnostics.Tracing.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/system.drawing.common/6.0.0/lib/net6.0/System.Drawing.Common.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Drawing.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Drawing.Primitives.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Dynamic.Runtime.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Formats.Asn1.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Formats.Tar.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Globalization.Calendars.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Globalization.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Globalization.Extensions.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/system.identitymodel.tokens.jwt/6.21.0/lib/net6.0/System.IdentityModel.Tokens.Jwt.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.IO.Compression.Brotli.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.IO.Compression.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.IO.Compression.FileSystem.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.IO.Compression.ZipFile.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.IO.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.IO.FileSystem.AccessControl.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.IO.FileSystem.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.IO.FileSystem.DriveInfo.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.IO.FileSystem.Primitives.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.IO.FileSystem.Watcher.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.IO.IsolatedStorage.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.IO.MemoryMappedFiles.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/system.io.packaging/6.0.0/lib/net6.0/System.IO.Packaging.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/System.IO.Pipelines.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.IO.Pipes.AccessControl.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.IO.Pipes.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.IO.UnmanagedMemoryStream.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/system.linq.async/6.0.1/ref/net6.0/System.Linq.Async.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Linq.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Linq.Expressions.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Linq.Parallel.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Linq.Queryable.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/system.memory.data/1.0.2/lib/netstandard2.0/System.Memory.Data.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Memory.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Net.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Net.Http.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Net.Http.Json.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Net.HttpListener.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Net.Mail.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Net.NameResolution.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Net.NetworkInformation.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Net.Ping.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Net.Primitives.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Net.Quic.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Net.Requests.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Net.Security.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Net.ServicePoint.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Net.Sockets.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Net.WebClient.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Net.WebHeaderCollection.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Net.WebProxy.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Net.WebSockets.Client.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Net.WebSockets.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Numerics.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Numerics.Vectors.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.ObjectModel.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Reflection.DispatchProxy.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Reflection.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Reflection.Emit.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Reflection.Emit.ILGeneration.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Reflection.Emit.Lightweight.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Reflection.Extensions.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Reflection.Metadata.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Reflection.Primitives.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Reflection.TypeExtensions.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Resources.Reader.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Resources.ResourceManager.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Resources.Writer.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Runtime.CompilerServices.Unsafe.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Runtime.CompilerServices.VisualC.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Runtime.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Runtime.Extensions.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Runtime.Handles.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Runtime.InteropServices.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Runtime.InteropServices.JavaScript.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Runtime.InteropServices.RuntimeInformation.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Runtime.Intrinsics.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Runtime.Loader.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Runtime.Numerics.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Runtime.Serialization.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Runtime.Serialization.Formatters.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Runtime.Serialization.Json.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Runtime.Serialization.Primitives.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Runtime.Serialization.Xml.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Security.AccessControl.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Security.Claims.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Security.Cryptography.Algorithms.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Security.Cryptography.Cng.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Security.Cryptography.Csp.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Security.Cryptography.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Security.Cryptography.Encoding.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Security.Cryptography.OpenSsl.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/system.security.cryptography.pkcs/6.0.0/lib/net6.0/System.Security.Cryptography.Pkcs.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Security.Cryptography.Primitives.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/system.security.cryptography.protecteddata/6.0.0/lib/net6.0/System.Security.Cryptography.ProtectedData.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Security.Cryptography.X509Certificates.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/System.Security.Cryptography.Xml.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Security.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/system.security.permissions/6.0.0/lib/net6.0/System.Security.Permissions.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Security.Principal.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Security.Principal.Windows.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Security.SecureString.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/system.servicemodel.syndication/6.0.0/lib/net6.0/System.ServiceModel.Syndication.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.ServiceModel.Web.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.ServiceProcess.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Text.Encoding.CodePages.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Text.Encoding.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Text.Encoding.Extensions.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Text.Encodings.Web.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Text.Json.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Text.RegularExpressions.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/system.threading.accesscontrol/6.0.0/lib/net6.0/System.Threading.AccessControl.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Threading.Channels.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Threading.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Threading.Overlapped.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/System.Threading.RateLimiting.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Threading.Tasks.Dataflow.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Threading.Tasks.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Threading.Tasks.Extensions.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Threading.Tasks.Parallel.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Threading.Thread.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Threading.ThreadPool.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Threading.Timer.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Transactions.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Transactions.Local.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.ValueTuple.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Web.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Web.HttpUtility.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Windows.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/system.windows.extensions/6.0.0/lib/net6.0/System.Windows.Extensions.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Xml.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Xml.Linq.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Xml.ReaderWriter.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Xml.Serialization.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Xml.XDocument.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Xml.XmlDocument.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Xml.XmlSerializer.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Xml.XPath.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Xml.XPath.XDocument.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/WindowsBase.dll","Aliases":[],"Framework":null}],"Files":["/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Jhoose.CommerceApi/Configuration/AllowListConfiguration.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Jhoose.CommerceApi/Configuration/CommerceApiExtensions.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Jhoose.CommerceApi/Configuration/CommerceApiMiddleware.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Jhoose.CommerceApi/Configuration/CommerceApiOptions.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Jhoose.CommerceApi/Features/Authentication/AuthenticationController.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Jhoose.CommerceApi/Features/Authentication/CommerceApiOptionsDefaults.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Jhoose.CommerceApi/Features/Cart/CartController.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Jhoose.CommerceApi/Features/Cart/CartExtensions.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Jhoose.CommerceApi/Features/Cart/Models/Cart.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Jhoose.CommerceApi/Features/Cart/Models/CartLine.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Jhoose.CommerceApi/Features/Markets/MarketController.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Jhoose.CommerceApi/Features/Markets/Models/Market.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Jhoose.CommerceApi/Infrastructure/CurrentMarket.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Jhoose.CommerceApi/Infrastructure/ProxyCurrentMarket.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Jhoose.CommerceApi/obj/Debug/net8.0/Jhoose.CommerceApi.GlobalUsings.g.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Jhoose.CommerceApi/obj/Debug/net8.0/.NETCoreApp,Version=v8.0.AssemblyAttributes.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Jhoose.CommerceApi/obj/Debug/net8.0/Jhoose.CommerceApi.AssemblyInfo.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Jhoose.CommerceApi/obj/Debug/net8.0/Jhoose.CommerceApi.AssemblyInfo.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Jhoose.CommerceApi/obj/Debug/net8.0/Jhoose.CommerceApi.AssemblyInfo.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Jhoose.CommerceApi/obj/Debug/net8.0/Jhoose.CommerceApi.AssemblyInfo.cs"],"BuildActions":["Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile"],"Analyzers":["/usr/local/share/dotnet/sdk/8.0.100/Sdks/Microsoft.NET.Sdk/analyzers/Microsoft.CodeAnalysis.CSharp.NetAnalyzers.dll","/usr/local/share/dotnet/sdk/8.0.100/Sdks/Microsoft.NET.Sdk/analyzers/Microsoft.CodeAnalysis.NetAnalyzers.dll","/Users/andrewmarkham/.nuget/packages/lucene.net/4.8.0-beta00014/analyzers/dotnet/cs/Lucene.Net.CodeAnalysis.CSharp.dll","/Users/andrewmarkham/.nuget/packages/microsoft.codeanalysis.analyzers/3.3.2/analyzers/dotnet/cs/Microsoft.CodeAnalysis.Analyzers.dll","/Users/andrewmarkham/.nuget/packages/microsoft.codeanalysis.analyzers/3.3.2/analyzers/dotnet/cs/Microsoft.CodeAnalysis.CSharp.Analyzers.dll","/Users/andrewmarkham/.nuget/packages/microsoft.entityframeworkcore.analyzers/6.0.0/analyzers/dotnet/cs/Microsoft.EntityFrameworkCore.Analyzers.dll","/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/analyzers/dotnet/cs/Microsoft.Interop.ComInterfaceGenerator.dll","/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/analyzers/dotnet/cs/Microsoft.Interop.JavaScript.JSImportGenerator.dll","/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/analyzers/dotnet/cs/Microsoft.Interop.LibraryImportGenerator.dll","/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/analyzers/dotnet/cs/Microsoft.Interop.SourceGeneration.dll","/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/analyzers/dotnet/cs/System.Text.Json.SourceGeneration.dll","/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/analyzers/dotnet/cs/System.Text.RegularExpressions.Generator.dll","/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/analyzers/dotnet/cs/Microsoft.AspNetCore.App.Analyzers.dll","/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/analyzers/dotnet/cs/Microsoft.AspNetCore.App.CodeFixes.dll","/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/analyzers/dotnet/cs/Microsoft.AspNetCore.Components.Analyzers.dll","/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/analyzers/dotnet/roslyn4.4/cs/Microsoft.Extensions.Logging.Generators.dll","/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/analyzers/dotnet/roslyn4.4/cs/Microsoft.Extensions.Options.SourceGeneration.dll"],"AdditionalFiles":[],"EditorConfigFiles":["/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/.editorconfig","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Jhoose.CommerceApi/obj/Debug/net8.0/Jhoose.CommerceApi.GeneratedMSBuildEditorConfig.editorconfig","/usr/local/share/dotnet/sdk/8.0.100/Sdks/Microsoft.NET.Sdk/analyzers/build/config/analysislevel_8_default.globalconfig"],"DefineConstants":["TRACE","DEBUG","NET","NET8_0","NETCOREAPP","NET5_0_OR_GREATER","NET6_0_OR_GREATER","NET7_0_OR_GREATER","NET8_0_OR_GREATER","NETCOREAPP1_0_OR_GREATER","NETCOREAPP1_1_OR_GREATER","NETCOREAPP2_0_OR_GREATER","NETCOREAPP2_1_OR_GREATER","NETCOREAPP2_2_OR_GREATER","NETCOREAPP3_0_OR_GREATER","NETCOREAPP3_1_OR_GREATER"],"IntermediateAssembly":"/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Jhoose.CommerceApi/obj/Debug/net8.0/Jhoose.CommerceApi.dll"} \ No newline at end of file diff --git a/.vs/Foundation/xs/project-cache/Jhoose.Search.Core-Debug.json b/.vs/Foundation/xs/project-cache/Jhoose.Search.Core-Debug.json deleted file mode 100644 index eadfadb..0000000 --- a/.vs/Foundation/xs/project-cache/Jhoose.Search.Core-Debug.json +++ /dev/null @@ -1 +0,0 @@ -{"Format":1,"ProjectReferences":[],"MetadataReferences":[{"FilePath":"/Users/andrewmarkham/.nuget/packages/elastic.clients.elasticsearch/8.0.0-rc.1/lib/netstandard2.1/Elastic.Clients.Elasticsearch.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/elastic.transport/0.3.2/lib/netstandard2.1/Elastic.Transport.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/microsoft.bcl.asyncinterfaces/6.0.0/lib/netstandard2.1/Microsoft.Bcl.AsyncInterfaces.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/Microsoft.CSharp/4.7.0/ref/netstandard2.0/Microsoft.CSharp.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/NETStandard.Library.Ref/2.1.0/ref/netstandard2.1/Microsoft.Win32.Primitives.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/NETStandard.Library.Ref/2.1.0/ref/netstandard2.1/mscorlib.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/NETStandard.Library.Ref/2.1.0/ref/netstandard2.1/netstandard.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/NETStandard.Library.Ref/2.1.0/ref/netstandard2.1/System.AppContext.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/NETStandard.Library.Ref/2.1.0/ref/netstandard2.1/System.Buffers.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/NETStandard.Library.Ref/2.1.0/ref/netstandard2.1/System.Collections.Concurrent.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/NETStandard.Library.Ref/2.1.0/ref/netstandard2.1/System.Collections.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/NETStandard.Library.Ref/2.1.0/ref/netstandard2.1/System.Collections.NonGeneric.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/NETStandard.Library.Ref/2.1.0/ref/netstandard2.1/System.Collections.Specialized.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/NETStandard.Library.Ref/2.1.0/ref/netstandard2.1/System.ComponentModel.Composition.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/NETStandard.Library.Ref/2.1.0/ref/netstandard2.1/System.ComponentModel.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/NETStandard.Library.Ref/2.1.0/ref/netstandard2.1/System.ComponentModel.EventBasedAsync.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/NETStandard.Library.Ref/2.1.0/ref/netstandard2.1/System.ComponentModel.Primitives.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/NETStandard.Library.Ref/2.1.0/ref/netstandard2.1/System.ComponentModel.TypeConverter.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/NETStandard.Library.Ref/2.1.0/ref/netstandard2.1/System.Console.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/NETStandard.Library.Ref/2.1.0/ref/netstandard2.1/System.Core.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/NETStandard.Library.Ref/2.1.0/ref/netstandard2.1/System.Data.Common.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/NETStandard.Library.Ref/2.1.0/ref/netstandard2.1/System.Data.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/NETStandard.Library.Ref/2.1.0/ref/netstandard2.1/System.Diagnostics.Contracts.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/NETStandard.Library.Ref/2.1.0/ref/netstandard2.1/System.Diagnostics.Debug.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/System.Diagnostics.DiagnosticSource/5.0.1/lib/netstandard1.3/System.Diagnostics.DiagnosticSource.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/NETStandard.Library.Ref/2.1.0/ref/netstandard2.1/System.Diagnostics.FileVersionInfo.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/NETStandard.Library.Ref/2.1.0/ref/netstandard2.1/System.Diagnostics.Process.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/NETStandard.Library.Ref/2.1.0/ref/netstandard2.1/System.Diagnostics.StackTrace.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/NETStandard.Library.Ref/2.1.0/ref/netstandard2.1/System.Diagnostics.TextWriterTraceListener.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/NETStandard.Library.Ref/2.1.0/ref/netstandard2.1/System.Diagnostics.Tools.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/NETStandard.Library.Ref/2.1.0/ref/netstandard2.1/System.Diagnostics.TraceSource.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/NETStandard.Library.Ref/2.1.0/ref/netstandard2.1/System.Diagnostics.Tracing.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/NETStandard.Library.Ref/2.1.0/ref/netstandard2.1/System.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/NETStandard.Library.Ref/2.1.0/ref/netstandard2.1/System.Drawing.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/NETStandard.Library.Ref/2.1.0/ref/netstandard2.1/System.Drawing.Primitives.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/NETStandard.Library.Ref/2.1.0/ref/netstandard2.1/System.Dynamic.Runtime.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/NETStandard.Library.Ref/2.1.0/ref/netstandard2.1/System.Globalization.Calendars.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/NETStandard.Library.Ref/2.1.0/ref/netstandard2.1/System.Globalization.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/NETStandard.Library.Ref/2.1.0/ref/netstandard2.1/System.Globalization.Extensions.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/NETStandard.Library.Ref/2.1.0/ref/netstandard2.1/System.IO.Compression.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/NETStandard.Library.Ref/2.1.0/ref/netstandard2.1/System.IO.Compression.FileSystem.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/NETStandard.Library.Ref/2.1.0/ref/netstandard2.1/System.IO.Compression.ZipFile.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/NETStandard.Library.Ref/2.1.0/ref/netstandard2.1/System.IO.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/NETStandard.Library.Ref/2.1.0/ref/netstandard2.1/System.IO.FileSystem.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/NETStandard.Library.Ref/2.1.0/ref/netstandard2.1/System.IO.FileSystem.DriveInfo.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/NETStandard.Library.Ref/2.1.0/ref/netstandard2.1/System.IO.FileSystem.Primitives.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/NETStandard.Library.Ref/2.1.0/ref/netstandard2.1/System.IO.FileSystem.Watcher.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/NETStandard.Library.Ref/2.1.0/ref/netstandard2.1/System.IO.IsolatedStorage.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/NETStandard.Library.Ref/2.1.0/ref/netstandard2.1/System.IO.MemoryMappedFiles.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/NETStandard.Library.Ref/2.1.0/ref/netstandard2.1/System.IO.Pipes.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/NETStandard.Library.Ref/2.1.0/ref/netstandard2.1/System.IO.UnmanagedMemoryStream.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/NETStandard.Library.Ref/2.1.0/ref/netstandard2.1/System.Linq.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/NETStandard.Library.Ref/2.1.0/ref/netstandard2.1/System.Linq.Expressions.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/NETStandard.Library.Ref/2.1.0/ref/netstandard2.1/System.Linq.Parallel.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/NETStandard.Library.Ref/2.1.0/ref/netstandard2.1/System.Linq.Queryable.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/NETStandard.Library.Ref/2.1.0/ref/netstandard2.1/System.Memory.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/NETStandard.Library.Ref/2.1.0/ref/netstandard2.1/System.Net.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/NETStandard.Library.Ref/2.1.0/ref/netstandard2.1/System.Net.Http.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/system.net.http.json/6.0.0/lib/netstandard2.0/System.Net.Http.Json.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/NETStandard.Library.Ref/2.1.0/ref/netstandard2.1/System.Net.NameResolution.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/NETStandard.Library.Ref/2.1.0/ref/netstandard2.1/System.Net.NetworkInformation.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/NETStandard.Library.Ref/2.1.0/ref/netstandard2.1/System.Net.Ping.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/NETStandard.Library.Ref/2.1.0/ref/netstandard2.1/System.Net.Primitives.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/NETStandard.Library.Ref/2.1.0/ref/netstandard2.1/System.Net.Requests.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/NETStandard.Library.Ref/2.1.0/ref/netstandard2.1/System.Net.Security.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/NETStandard.Library.Ref/2.1.0/ref/netstandard2.1/System.Net.Sockets.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/NETStandard.Library.Ref/2.1.0/ref/netstandard2.1/System.Net.WebHeaderCollection.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/NETStandard.Library.Ref/2.1.0/ref/netstandard2.1/System.Net.WebSockets.Client.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/NETStandard.Library.Ref/2.1.0/ref/netstandard2.1/System.Net.WebSockets.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/NETStandard.Library.Ref/2.1.0/ref/netstandard2.1/System.Numerics.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/NETStandard.Library.Ref/2.1.0/ref/netstandard2.1/System.Numerics.Vectors.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/NETStandard.Library.Ref/2.1.0/ref/netstandard2.1/System.ObjectModel.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/NETStandard.Library.Ref/2.1.0/ref/netstandard2.1/System.Reflection.DispatchProxy.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/NETStandard.Library.Ref/2.1.0/ref/netstandard2.1/System.Reflection.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/NETStandard.Library.Ref/2.1.0/ref/netstandard2.1/System.Reflection.Emit.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/NETStandard.Library.Ref/2.1.0/ref/netstandard2.1/System.Reflection.Emit.ILGeneration.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/NETStandard.Library.Ref/2.1.0/ref/netstandard2.1/System.Reflection.Emit.Lightweight.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/NETStandard.Library.Ref/2.1.0/ref/netstandard2.1/System.Reflection.Extensions.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/NETStandard.Library.Ref/2.1.0/ref/netstandard2.1/System.Reflection.Primitives.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/NETStandard.Library.Ref/2.1.0/ref/netstandard2.1/System.Resources.Reader.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/NETStandard.Library.Ref/2.1.0/ref/netstandard2.1/System.Resources.ResourceManager.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/NETStandard.Library.Ref/2.1.0/ref/netstandard2.1/System.Resources.Writer.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/system.runtime.compilerservices.unsafe/6.0.0/lib/netstandard2.0/System.Runtime.CompilerServices.Unsafe.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/NETStandard.Library.Ref/2.1.0/ref/netstandard2.1/System.Runtime.CompilerServices.VisualC.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/NETStandard.Library.Ref/2.1.0/ref/netstandard2.1/System.Runtime.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/NETStandard.Library.Ref/2.1.0/ref/netstandard2.1/System.Runtime.Extensions.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/NETStandard.Library.Ref/2.1.0/ref/netstandard2.1/System.Runtime.Handles.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/NETStandard.Library.Ref/2.1.0/ref/netstandard2.1/System.Runtime.InteropServices.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/NETStandard.Library.Ref/2.1.0/ref/netstandard2.1/System.Runtime.InteropServices.RuntimeInformation.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/NETStandard.Library.Ref/2.1.0/ref/netstandard2.1/System.Runtime.Numerics.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/NETStandard.Library.Ref/2.1.0/ref/netstandard2.1/System.Runtime.Serialization.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/NETStandard.Library.Ref/2.1.0/ref/netstandard2.1/System.Runtime.Serialization.Formatters.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/NETStandard.Library.Ref/2.1.0/ref/netstandard2.1/System.Runtime.Serialization.Json.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/NETStandard.Library.Ref/2.1.0/ref/netstandard2.1/System.Runtime.Serialization.Primitives.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/NETStandard.Library.Ref/2.1.0/ref/netstandard2.1/System.Runtime.Serialization.Xml.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/NETStandard.Library.Ref/2.1.0/ref/netstandard2.1/System.Security.Claims.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/NETStandard.Library.Ref/2.1.0/ref/netstandard2.1/System.Security.Cryptography.Algorithms.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/NETStandard.Library.Ref/2.1.0/ref/netstandard2.1/System.Security.Cryptography.Csp.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/NETStandard.Library.Ref/2.1.0/ref/netstandard2.1/System.Security.Cryptography.Encoding.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/NETStandard.Library.Ref/2.1.0/ref/netstandard2.1/System.Security.Cryptography.Primitives.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/NETStandard.Library.Ref/2.1.0/ref/netstandard2.1/System.Security.Cryptography.X509Certificates.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/NETStandard.Library.Ref/2.1.0/ref/netstandard2.1/System.Security.Principal.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/NETStandard.Library.Ref/2.1.0/ref/netstandard2.1/System.Security.SecureString.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/NETStandard.Library.Ref/2.1.0/ref/netstandard2.1/System.ServiceModel.Web.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/NETStandard.Library.Ref/2.1.0/ref/netstandard2.1/System.Text.Encoding.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/NETStandard.Library.Ref/2.1.0/ref/netstandard2.1/System.Text.Encoding.Extensions.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/System.Text.Encodings.Web/6.0.0/lib/netstandard2.0/System.Text.Encodings.Web.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/system.text.json/6.0.6/lib/netstandard2.0/System.Text.Json.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/NETStandard.Library.Ref/2.1.0/ref/netstandard2.1/System.Text.RegularExpressions.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/NETStandard.Library.Ref/2.1.0/ref/netstandard2.1/System.Threading.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/NETStandard.Library.Ref/2.1.0/ref/netstandard2.1/System.Threading.Overlapped.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/NETStandard.Library.Ref/2.1.0/ref/netstandard2.1/System.Threading.Tasks.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/NETStandard.Library.Ref/2.1.0/ref/netstandard2.1/System.Threading.Tasks.Extensions.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/NETStandard.Library.Ref/2.1.0/ref/netstandard2.1/System.Threading.Tasks.Parallel.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/NETStandard.Library.Ref/2.1.0/ref/netstandard2.1/System.Threading.Thread.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/NETStandard.Library.Ref/2.1.0/ref/netstandard2.1/System.Threading.ThreadPool.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/NETStandard.Library.Ref/2.1.0/ref/netstandard2.1/System.Threading.Timer.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/NETStandard.Library.Ref/2.1.0/ref/netstandard2.1/System.Transactions.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/NETStandard.Library.Ref/2.1.0/ref/netstandard2.1/System.ValueTuple.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/NETStandard.Library.Ref/2.1.0/ref/netstandard2.1/System.Web.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/NETStandard.Library.Ref/2.1.0/ref/netstandard2.1/System.Windows.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/NETStandard.Library.Ref/2.1.0/ref/netstandard2.1/System.Xml.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/NETStandard.Library.Ref/2.1.0/ref/netstandard2.1/System.Xml.Linq.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/NETStandard.Library.Ref/2.1.0/ref/netstandard2.1/System.Xml.ReaderWriter.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/NETStandard.Library.Ref/2.1.0/ref/netstandard2.1/System.Xml.Serialization.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/NETStandard.Library.Ref/2.1.0/ref/netstandard2.1/System.Xml.XDocument.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/NETStandard.Library.Ref/2.1.0/ref/netstandard2.1/System.Xml.XmlDocument.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/NETStandard.Library.Ref/2.1.0/ref/netstandard2.1/System.Xml.XmlSerializer.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/NETStandard.Library.Ref/2.1.0/ref/netstandard2.1/System.Xml.XPath.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/NETStandard.Library.Ref/2.1.0/ref/netstandard2.1/System.Xml.XPath.XDocument.dll","Aliases":[],"Framework":null}],"Files":["/Users/andrewmarkham/DevRoot/Optimizley/Foundation/Jhoose.Search.Core/HealthResponse.cs","/Users/andrewmarkham/DevRoot/Optimizley/Foundation/Jhoose.Search.Core/Requests/BaseSearchRequest.cs","/Users/andrewmarkham/DevRoot/Optimizley/Foundation/Jhoose.Search.Core/Requests/HealthSearchRequest.cs","/Users/andrewmarkham/DevRoot/Optimizley/Foundation/Jhoose.Search.Core/Requests/ISearchRequest.cs","/Users/andrewmarkham/DevRoot/Optimizley/Foundation/Jhoose.Search.Core/SearchClientSettings.cs","/Users/andrewmarkham/DevRoot/Optimizley/Foundation/Jhoose.Search.Core/SearchRequestHandler.cs","/Users/andrewmarkham/DevRoot/Optimizley/Foundation/Jhoose.Search.Core/SearchResponse.cs","/Users/andrewmarkham/DevRoot/Optimizley/Foundation/Jhoose.Search.Core/obj/Debug/netstandard2.1/.NETStandard,Version=v2.1.AssemblyAttributes.cs","/Users/andrewmarkham/DevRoot/Optimizley/Foundation/Jhoose.Search.Core/obj/Debug/netstandard2.1/Jhoose.Search.Core.AssemblyInfo.cs","/Users/andrewmarkham/DevRoot/Optimizley/Foundation/Jhoose.Search.Core/obj/Debug/netstandard2.1/Jhoose.Search.Core.AssemblyInfo.cs","/Users/andrewmarkham/DevRoot/Optimizley/Foundation/Jhoose.Search.Core/obj/Debug/netstandard2.1/Jhoose.Search.Core.AssemblyInfo.cs","/Users/andrewmarkham/DevRoot/Optimizley/Foundation/Jhoose.Search.Core/obj/Debug/netstandard2.1/Jhoose.Search.Core.AssemblyInfo.cs"],"BuildActions":["Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile"],"Analyzers":["/Users/andrewmarkham/.nuget/packages/system.text.json/6.0.6/analyzers/dotnet/roslyn4.0/cs/System.Text.Json.SourceGeneration.dll"],"AdditionalFiles":[],"EditorConfigFiles":["/Users/andrewmarkham/DevRoot/Optimizley/Foundation/.editorconfig","/Users/andrewmarkham/DevRoot/Optimizley/Foundation/Jhoose.Search.Core/obj/Debug/netstandard2.1/Jhoose.Search.Core.GeneratedMSBuildEditorConfig.editorconfig"],"DefineConstants":["TRACE","DEBUG","NETSTANDARD","NETSTANDARD2_1","","NETSTANDARD1_0_OR_GREATER","NETSTANDARD1_1_OR_GREATER","NETSTANDARD1_2_OR_GREATER","NETSTANDARD1_3_OR_GREATER","NETSTANDARD1_4_OR_GREATER","NETSTANDARD1_5_OR_GREATER","NETSTANDARD1_6_OR_GREATER","NETSTANDARD2_0_OR_GREATER","NETSTANDARD2_1_OR_GREATER"]} \ No newline at end of file diff --git a/.vscode/tasks.json b/.vscode/tasks.json index eff0cb8..194740c 100644 --- a/.vscode/tasks.json +++ b/.vscode/tasks.json @@ -20,7 +20,7 @@ "args": [ "watch", "run", - "${workspaceFolder}/src/Sample/DemoSite/DemoSite.csproj", + "${workspaceFolder}/src/Jhoose.Demo/Jhoose.Demo.csproj", "/property:GenerateFullPaths=true", "/consoleloggerparameters:NoSummary" ], diff --git a/Developer Notes.md b/Developer Notes.md index 97a9639..6099cbf 100644 --- a/Developer Notes.md +++ b/Developer Notes.md @@ -81,7 +81,7 @@ COMMERCE_AUTHORIZATION_KEY = ... - npm run build - builds and packages the project. - npm run test - runs the unit tests - npm run testf - runs the unit functional tests, requires the Rest API to be running - - npm run doc - creates the documentation + - npm run doc - creates the documentation ### components This is the reactjs component library diff --git a/README.md b/README.md index 048c822..c7b9b6b 100644 --- a/README.md +++ b/README.md @@ -12,11 +12,15 @@ A Rest API layer that supports these common eCommerce journies - Pricing - Markets +See [Customer Rest API](./docs/customerRestapi.md) + #### Javascript/Typescript Customer API Layer -This library provides an abstration of the Rest API which simplifies the approach when developing either clientside components in Vanilla JS or more complex applications via Frameworks such as NEXT.js or Angular. +This library provides an abstration of the Rest API which simplifies the approach when developing either client-side components in Vanilla JS or more complex applications via Frameworks such as NEXT.js, React or Angular. - Parity functionality to the Customer Rest API - Caching to enhance performance +See [Javascript Customer API Layer](https://github.com/andrewmarkham/CommerceApi.Frontend/blob/main/docs/javascriptapi.md) + #### Microfront UI Layer This is a React framework that delivers a core set of components that can be used to accelerate development. @@ -28,6 +32,8 @@ This is a React framework that delivers a core set of components that can be use The components can be styled to match designs. +See [Micro UI Layer](https://github.com/andrewmarkham/CommerceApi.Frontend/blob/main/docs/microfrontend.md) + --- ## Why @@ -53,6 +59,20 @@ The Rest API can be used by Websites, POS, Mobile apps, surfacing the same Cart, ### Authentication See [Authentication](./docs/authentication.md) +### Markets +See [Markets](./docs/markets.md) + +### Extensibility +Feature [Extensibility](https://github.com/andrewmarkham/CommerceApi/issues/2) + +--- +## Getting Started +Please read the [Customer Rest API](./docs/customerRestapi.md) documentation to understand how to add the framework to an existing Optimizely Commerce solution. + +For an example api site please see [Jhoose Demo](./src/Jhoose.Demo/README.md) + +For an example headless site (Next.js) please see [Ozone Clothing](https://github.com/andrewmarkham/OzoneClothing) + --- ## API Documentation @@ -60,10 +80,10 @@ See [Authentication](./docs/authentication.md) See [Customer Rest API](./docs/customerRestapi.md) ### Javascript Customer API Layer -See [Javascript Customer API Layer](./docs/javascriptapi.md) +See [Javascript Customer API Layer](https://github.com/andrewmarkham/CommerceApi.Frontend/blob/main/docs/javascriptapi.md) ### Micro UI Layer -See [Micro UI Layer](./docs/microfrontend.md) +See [Micro UI Layer](https://github.com/andrewmarkham/CommerceApi.Frontend/blob/main/docs/microfrontend.md) --- diff --git a/build/SqlScripts/FoundationConfigurationSchema.sql b/build/SqlScripts/FoundationConfigurationSchema.sql deleted file mode 100644 index b1a10b5..0000000 --- a/build/SqlScripts/FoundationConfigurationSchema.sql +++ /dev/null @@ -1,41 +0,0 @@ -CREATE TABLE [dbo].[FoundationConfiguration] -( - [Id] [bigint] IDENTITY(1,1) NOT NULL, - [AppName] NVARCHAR(250) NOT NULL, - [IsInstalled] BIT NOT NULL DEFAULT(0), - CONSTRAINT [PK_FoundationConfiguration] PRIMARY KEY CLUSTERED ([Id] ASC) -); -GO - -CREATE PROCEDURE [dbo].[FoundationConfiguration_List] -AS -BEGIN - SELECT * FROM FoundationConfiguration -END -GO - -CREATE PROCEDURE [dbo].[FoundationConfiguration_SetInstalled] -AS -BEGIN - UPDATE FoundationConfiguration SET IsInstalled = 1 -END -GO - -CREATE PROCEDURE [dbo].[FoundationConfiguration_Save] -( - @Id INT = 0, - @AppName NVARCHAR(250), - @IsInstalled BIT = 0 -) -AS -BEGIN - IF @Id > 0 - UPDATE FoundationConfiguration SET AppName = @AppName, IsInstalled = @IsInstalled WHERE Id = @Id - ELSE - INSERT INTO FoundationConfiguration (AppName, IsInstalled) VALUES (@AppName, @IsInstalled) - -END -GO - -INSERT INTO FoundationConfiguration (AppName) VALUES ( '$(appname)') -GO diff --git a/build/SqlScripts/ServiceApiCms.sql b/build/SqlScripts/ServiceApiCms.sql deleted file mode 100644 index 082c7f2..0000000 --- a/build/SqlScripts/ServiceApiCms.sql +++ /dev/null @@ -1,38 +0,0 @@ ---beginvalidatingquery -IF EXISTS (SELECT 1 FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = 'dbo' AND TABLE_NAME = 'tblUserPermission') - BEGIN - IF NOT EXISTS (SELECT pkid FROM dbo.tblUserPermission WHERE Permission = 'WriteAccess' and GroupName = 'EPiServerServiceApi') - SELECT 1, 'Installing Permissions' - ELSE - SELECT 0, 'Already installed default permissions' - END -ELSE - select -1, 'Not an EPiServer CMS database' ---endvalidatingquery - -GO - -INSERT INTO [dbo].[tblUserPermission] - ([Name] - ,[IsRole] - ,[Permission] - ,[GroupName]) -VALUES - ('Administrators' - ,1 - ,'WriteAccess' - ,'EPiServerServiceApi') -GO - -INSERT INTO [dbo].[tblUserPermission] - ([Name] - ,[IsRole] - ,[Permission] - ,[GroupName]) -VALUES - ('Administrators' - ,1 - ,'ReadAccess' - ,'EPiServerServiceApi') - -GO diff --git a/build/SqlScripts/ServiceApiCommerce.sql b/build/SqlScripts/ServiceApiCommerce.sql deleted file mode 100644 index 4810584..0000000 --- a/build/SqlScripts/ServiceApiCommerce.sql +++ /dev/null @@ -1,37 +0,0 @@ ---beginvalidatingquery -IF EXISTS (SELECT 1 FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = 'dbo' AND TABLE_NAME = 'SchemaVersion') - BEGIN - IF EXISTS (SELECT * FROM dbo.sysobjects WHERE id = object_id (N'[dbo].[ecf_CatalogEntry_Paging]') AND OBJECTPROPERTY(id, N'IsProcedure') = 1) - select 0,'Already correct database version' - ELSE - select 1, 'Upgrading database' - END -ELSE - select -1, 'Not an EPiServer Commerce database' -go ---endvalidatingquery - --- ecf_CatalogEntry_Paging.sql -CREATE PROCEDURE [dbo].[ecf_CatalogEntry_Paging] - @StartPage int, - @PageSize int, - @ReturnInactive bit = 0 -AS -BEGIN - DECLARE @intStartRow int; - DECLARE @intEndRow int; - - SET @intStartRow = (@StartPage -1) * @PageSize + 1; - SET @intEndRow = @StartPage * @PageSize; - - WITH entries AS - (SELECT CatalogEntryId, - ROW_NUMBER() OVER(ORDER BY CatalogEntryId) as intRow, - COUNT(CatalogEntryId) OVER() AS intTotalHits - FROM CatalogEntry) - - SELECT CatalogEntryId, intTotalHits FROM entries - WHERE intRow BETWEEN @intStartRow AND @intEndRow -END -go --- END OF ecf_CatalogEntry_Paging.sql diff --git a/build/SqlScripts/UniqueCouponSchema.sql b/build/SqlScripts/UniqueCouponSchema.sql deleted file mode 100644 index 5cb24f0..0000000 --- a/build/SqlScripts/UniqueCouponSchema.sql +++ /dev/null @@ -1,116 +0,0 @@ -CREATE TABLE [dbo].[UniqueCoupons] -( - [Id] [bigint] IDENTITY(1,1) NOT NULL, - [PromotionId] [int] NOT NULL, - [Code] [nvarchar](max) NOT NULL, - [Valid] [datetime2](7) NOT NULL, - [Expiration] [datetime2](7) NULL, - [CustomerId] [uniqueidentifier] NULL, - [Created] [datetime2](7) NULL, - [MaxRedemptions] [int] NULL, - [UsedRedemptions] [int] NULL, - CONSTRAINT [PK_UniqueCoupons] PRIMARY KEY CLUSTERED ([Id] ASC) -); -GO - -CREATE NONCLUSTERED INDEX [IDX_UniqueCoupons_PromotionId] ON [dbo].[UniqueCoupons] -( - [PromotionId] ASC -) -GO - -CREATE TYPE [dbo].[udttUniqueCoupons] AS TABLE -( - [Id] [bigint] NOT NULL, - [PromotionId] [int] NOT NULL, - [Code] [nvarchar](max) NOT NULL, - [Valid] [datetime2](7) NOT NULL, - [Expiration] [datetime2](7) NULL, - [CustomerId] [uniqueidentifier] NULL, - [Created] [datetime2](7) NOT NULL, - [MaxRedemptions] [int] NOT NULL, - [UsedRedemptions] [int] NOT NULL -); -GO - -CREATE PROCEDURE [dbo].[UniqueCoupons_DeleteById] -( - @Id BIGINT -) -AS -BEGIN - DELETE FROM UniqueCoupons - WHERE Id = @Id -END -GO - -CREATE PROCEDURE [dbo].[UniqueCoupons_DeleteByPromotionId] -( - @PromotionId INT -) -AS -BEGIN - DELETE FROM UniqueCoupons - WHERE PromotionId = @PromotionId -END -GO - -CREATE PROCEDURE [dbo].[UniqueCoupons_GetById] -( - @Id BIGINT -) -AS -BEGIN - SELECT * FROM UniqueCoupons - WHERE Id = @Id -END -GO - -CREATE PROCEDURE [dbo].[UniqueCoupons_GetByPromotionId] -( - @PromotionId INT -) -AS -BEGIN - SELECT * FROM UniqueCoupons - WHERE PromotionId = @PromotionId -END -GO - -CREATE PROCEDURE [dbo].[UniqueCoupons_Save] -( - @Data dbo.[udttUniqueCoupons] readonly -) -AS -BEGIN - MERGE dbo.UniqueCoupons AS TARGET - USING @Data AS SOURCE - On (TARGET.Id = SOURCE.Id) - WHEN MATCHED THEN - UPDATE SET PromotionId = SOURCE.PromotionId, - Code = SOURCE.Code, - Valid = SOURCE.Valid, - Expiration = SOURCE.Expiration, - CustomerId = SOURCE.CustomerId, - Created = SOURCE.Created, - MaxRedemptions = SOURCE.MaxRedemptions, - UsedRedemptions = SOURCE.UsedRedemptions - - WHEN NOT MATCHED THEN - INSERT (PromotionId, Code, Valid, Expiration, CustomerId, Created, MaxRedemptions, UsedRedemptions) - VALUES (SOURCE.PromotionId, SOURCE.Code, SOURCE.Valid, SOURCE.Expiration, SOURCE.CustomerId, SOURCE.Created, SOURCE.MaxRedemptions, SOURCE.UsedRedemptions); -END -GO - - -SET ANSI_NULLS ON -GO -SET QUOTED_IDENTIFIER OFF -GO - -Create PROCEDURE [dbo].[UniqueCoupons_DeleteExpiredCoupons] -AS -BEGIN - DELETE FROM UniqueCoupons - WHERE Expiration < GETDATE() -END diff --git a/build/appsettings.json b/build/appsettings.json deleted file mode 100644 index e5eb0d3..0000000 --- a/build/appsettings.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "Logging": { - "LogLevel": { - "Default": "Information", - "Microsoft": "Warning", - "Microsoft.Hosting.Lifetime": "Information", - "EPiServer.Commerce": "Debug" - } - }, - "AllowedHosts": "*", - "ConnectionStrings": { - "EPiServerDB": "Data Source=.;Database=netcore.qs.Cms;User Id=netcoreUser;Password=epi#Server7Local;MultipleActiveResultSets=True" - } -} \ No newline at end of file diff --git a/build/icon.png b/build/icon.png deleted file mode 100644 index b3a65a2..0000000 Binary files a/build/icon.png and /dev/null differ diff --git a/build/nuget.exe b/build/nuget.exe deleted file mode 100644 index 606c36a..0000000 Binary files a/build/nuget.exe and /dev/null differ diff --git a/build/version.props b/build/version.props deleted file mode 100644 index 8a9ecc2..0000000 --- a/build/version.props +++ /dev/null @@ -1 +0,0 @@ -0.0.1 \ No newline at end of file diff --git a/build/vswhere.exe b/build/vswhere.exe deleted file mode 100644 index 5e701ae..0000000 Binary files a/build/vswhere.exe and /dev/null differ diff --git a/docs/CONTRIBUTING.md b/docs/CONTRIBUTING.md deleted file mode 100644 index 00a15cf..0000000 --- a/docs/CONTRIBUTING.md +++ /dev/null @@ -1,89 +0,0 @@ -# Contribution Guide -Before -contributing, please read the [code of conduct](https://github.com/episerver/Foundation/blob/develop/docs/code-of-conduct.md). Contributions are greatly appreciated via forks. Episerver retains control of the direction of the project and reserves the right to close issues and PR:s that don’t align with the project roadmap. - - -* First, if you found a bug yourself you need to report it and let it as an issue in Github. -* Then, assign it you. -* Read through this document to make sure you follow the practices for developing on Foundation. -* __Test__, code, __test__, code, __test__ -* Create a pull request with your changes, squash your changes to a single commit (unless multiple commits makes sense for some reason) - ---- - -## Changing code in Foundation - -* Create branch off develop named XXX-shortname where XXX is the issue number in Github, for example "bugfix/1231-thumbnails-for-media". See branching chapter for details. -* For bug fixes add a unit test to catch the bug before continuing -* Write tests, code, write tests, code :) -* Make sure you have the latest code from develop -* Write a commit message according to the commit message guidelines below -* Make sure builds are green, Foundation CI runs on every checkin -* Create a pull requests form your branch to develop and add reviewer if you know who should review, otherwise leave blank - ---- - -## Before submitting a pull-request -* Make sure the code is documented -* Make sure the tests are up to date and test the new code -* Make sure the correct issue ids are present in the commit message -* Follow the commit message guideline - ---- - -## Accepting pull requests - -Pull request are the official code review where someone on the team signs off on the code. It is encouraged to do code reviews continuously before you push to the repository but this is not enforced and up to every developer to choose to do so. - -All developers are encourage to read, review, and comment on pull requests to make sure code reviews are a collaborate effort. - -When merging, always delete source branch. - ---- - -## Branching model in Foundation - -We are using the workflow as described in https://www.atlassian.com/git/workflows#!workflow-gitflow with some minor modifications. - -### Master branch - -Should always contain tested, working, releasable code. You can only get code onto master by creating pull requests that then needs to be reviewed and accepted. - -### Develop branch - -Acts as integration branch for feature and bugfix branches that should go into the next release. You can only get code onto master by creating pull requests that then needs to be reviewed and accepted. Should only contain completely implemented work items. - -### Feature branches - -Created from develop and should be named feature/`-`. For example to work on "User Story 35: Remove the 'Classic' link stage in the API and only use permanent links" you would create a branch from develop named "feature/35-remove-classic-links". Note that the `` is all lower-case with hyphens. - -Merge to the develop branch by creating a pull request. - -### Bugfix branches - -Created from develop and should be named bugfix/`-`. For example to work on "Bug 111571: MVC rendering of built-in properties" you should create a branch named something like "bugfix/111571-mvc-rendering-properties". Note that the `` is all lower-case with hyphens. - -Merge to the develop branch by creating a pull request. - ---- - -## Commit Message Guidelines ## - -To make the history easier to read and the changes easier to understand a commit message should be created according to the rules below, which are a slightly modified version of [these seven rules](http://chris.beams.io/posts/git-commit/#seven-rules). - -* Separate subject from body with a blank line -* Limit the subject to 50 characters -* Capitalize the subject line -* Do not end the subject line with a period -* Wrap the body at 72 characters -* Use the body to explain what and why vs. how -* Add a reference to the associated task - -**Example** -Handle multiple errors from the server - -Extended the message view model to have additional information which -will be displayed beneath the error message in the alert dialog. Used -the additional information in the mark as ready to publish method to -handle errors that may occur when dealing with multiple items. - diff --git a/docs/authentication.md b/docs/authentication.md index c336527..5571c33 100644 --- a/docs/authentication.md +++ b/docs/authentication.md @@ -8,15 +8,22 @@ Authorization: Bearer ...eyJhbGciOiJIUzI... ``` ## Known Customers -Customers must authenticate via an external identity provider, such as Entra ID or Okta. +Customers must authenticate via an external identity provider, such as Entra ID or Okta. The bearer token returned by the external provider is then used by all the api requests. ## Anonymous Users -Users are 'anonymous' until they authenticate via an external provider. In this scenario, a request to the endpoint `/commerceapi/authentication/` is required to create a bearer token for the anonymous user. The `jti` claim will hold the anonymous ID. To maintain a consistent anonymous ID between subsequent authentication requests, you can include in the request body the current ID, which will be used instead of generating a new ID. +Users are 'anonymous' until they authenticate via an external provider. In this scenario, a request to the endpoint `/commerceapi/authentication/` is required to create a bearer token for the anonymous user. The `jti` claim will hold the anonymous ID. + +To maintain a consistent anonymous ID between subsequent authentication requests, you must include in the request body the current ID. This will be returned instead of generating a new ID. ``` http POST /commerceapi/authentication/ HTTP/1.1 X-Auth-Key: ...2ODQ5NDg1MGEzYzI4MGFkZGE2M... ``` +```json +{ + "anonymousAuthenticationRequest": "{{$guid}}" +} +``` This returns a bearer token that can be used by all the api requests ```json @@ -30,6 +37,9 @@ This returns a bearer token that can be used by all the api requests > **Note:** The value in the `X-Auth-Key` header must match the appSetting `JhooseCommerceApiOptions.AuthorizationKey`. +Once the user has authenticated, the next step is to create the customer context. +> **Note:** When the authentication token expires and is recreated, you must also recreate the customer context. + ## Customer Context The customer context is a secure token which provides additional information about the customer. @@ -47,5 +57,19 @@ Authorization: Bearer ...eyJhbGciOiJIUzI1NiIsInR5cCI6I... } ``` -Once the user has authenticated, the next step is to create the customer context. -> **Note:** When the authentication token expires and is recreated, you must also recreate the customer context. \ No newline at end of file +## Migrate Cart +When a user authenticates it is important to maintain the state of the cart. To support this journey you must call the cart migrate endpoint. + +The Customer context must be for the newly authenticated user, and the anonymousId is from the previoud state. + +``` http +POST /commerceapi/cart/migrate HTTP/1.1 +X-Customer-Context: ...vyVMCy1ZFjhTWub3QW6aJzKqPi... +Authorization: Bearer ...eyJhbGciOiJIUzI... +``` + +```json +{ + "anonymousId": "...a12d-4356..." +} +``` diff --git a/docs/code-of-conduct.md b/docs/code-of-conduct.md deleted file mode 100644 index 81b217c..0000000 --- a/docs/code-of-conduct.md +++ /dev/null @@ -1,76 +0,0 @@ -# Contributor Covenant Code of Conduct - -## Our Pledge - -In the interest of fostering an open and welcoming environment, we as -contributors and maintainers pledge to make participation in our project and -our community a harassment-free experience for everyone, regardless of age, body -size, disability, ethnicity, sex characteristics, gender identity and expression, -level of experience, education, socio-economic status, nationality, personal -appearance, race, religion, or sexual identity and orientation. - -## Our Standards - -Examples of behavior that contributes to creating a positive environment -include: - -* Using welcoming and inclusive language -* Being respectful of differing viewpoints and experiences -* Gracefully accepting constructive criticism -* Focusing on what is best for the community -* Showing empathy towards other community members - -Examples of unacceptable behavior by participants include: - -* The use of sexualized language or imagery and unwelcome sexual attention or - advances -* Trolling, insulting/derogatory comments, and personal or political attacks -* Public or private harassment -* Publishing others' private information, such as a physical or electronic - address, without explicit permission -* Other conduct which could reasonably be considered inappropriate in a - professional setting - -## Our Responsibilities - -Project maintainers are responsible for clarifying the standards of acceptable -behavior and are expected to take appropriate and fair corrective action in -response to any instances of unacceptable behavior. - -Project maintainers have the right and responsibility to remove, edit, or -reject comments, commits, code, wiki edits, issues, and other contributions -that are not aligned to this Code of Conduct, or to ban temporarily or -permanently any contributor for other behaviors that they deem inappropriate, -threatening, offensive, or harmful. - -## Scope - -This Code of Conduct applies within all project spaces, and it also applies when -an individual is representing the project or its community in public spaces. -Examples of representing a project or community include using an official -project e-mail address, posting via an official social media account, or acting -as an appointed representative at an online or offline event. Representation of -a project may be further defined and clarified by project maintainers. - -## Enforcement - -Instances of abusive, harassing, or otherwise unacceptable behavior may be -reported by contacting the project team at [INSERT EMAIL ADDRESS]. All -complaints will be reviewed and investigated and will result in a response that -is deemed necessary and appropriate to the circumstances. The project team is -obligated to maintain confidentiality with regard to the reporter of an incident. -Further details of specific enforcement policies may be posted separately. - -Project maintainers who do not follow or enforce the Code of Conduct in good -faith may face temporary or permanent repercussions as determined by other -members of the project's leadership. - -## Attribution - -This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4, -available at https://www.contributor-covenant.org/version/1/4/code-of-conduct.html - -[homepage]: https://www.contributor-covenant.org - -For answers to common questions about this code of conduct, see -https://www.contributor-covenant.org/faq diff --git a/docs/customerRestapi.md b/docs/customerRestapi.md index 4f079a1..f7a6561 100644 --- a/docs/customerRestapi.md +++ b/docs/customerRestapi.md @@ -18,12 +18,13 @@ All requests (unless otherwise specified) work in the scope of the currently aut ## Installation -__*TBC*__ - +```bash +dotnet add package Jhoose.CommerceApi +``` ## Getting Started -API Layer -``` c# +Modify `startup.cs` `ConfigureServices` method. +```C# // add authentication services .AddAuthentication() @@ -40,16 +41,23 @@ API Layer o.CreateAbsoluteUrls = true; }); +``` - +Modify `startup.cs` `Configure` method. +```C# + // Add after UseRouting, but before UseAuthentication and UseAuthorization, else will have CORS issues + app.UseJhooseCommerceApi(); ``` +Settings can also be managed in `appSettings.json` ``` json "JhooseCommerceApiOptions": { "JwtKey": "cd1b757768494850a3c280adda607373", "AuthorizationKey": "Y2QxYjc1Nzc2ODQ5NDg1MGEzYzI4MGFkZGE2MDczNzM=", "ProxyCurrentMarket": true, + "CreateAbsoluteUrls": true, + "SiteHostname": "http://localhost:3000", "Encryption": { "Key": "cd1b757768494850a3c280adda607373", "IV": "cd1b757768494850" @@ -57,6 +65,44 @@ API Layer } ``` +The framework also expects the MSRP Sales Price type to exist and is required for the standard pricing to work. +``` json + "EPiServer": { + "Commerce": { + + "CatalogOptions": { + + // Add the MSRP Sales price type + "SalePriceTypes": [ + { + "Key": "MSRP", + "Value": "4", + "Description": "MSRP" + } + ] + } + } +``` + +## JwtBearer Options +Used to configure the external authentication provider. + +| Property | Description | +| -- | -- | +| Audience | As supplied by external provider | +| Authority | As supplied by external provider | +| Issuer | As supplied by external provider | + +## JhooseCommerceApiOptions +| Property | Description | +| -- | -- | +| SiteHostname | This is the hostname of the external site that is using the CommerceApi. Include the protocol and (port if necessary). This is used by CORS | +| JwtKey | This is the key used to sign the JWT token used for anonymous authentication. See: [JWT Keys](https://jwtsecretkeygenerator.com)| +| AuthorizationKey | This is the key used to authenticate for anonymous authentication.| +| ProxyCurrentMarket | If true, the local ICurrentMarket implementation will be proxied with the CommerceApi implementation. See [Markets](./markets.md) | +| CreateAbsoluteUrls | If true, all urls will be created as absolute urls.| +| Encryption.Key | AES Encryption Key used See: [Encryption Keys](https://generate-random.org/encryption-keys)| +| Encryption.IV | AES Initilization Vector used| diff --git a/docs/javascriptapi.md b/docs/javascriptapi.md deleted file mode 100644 index e1cf7aa..0000000 --- a/docs/javascriptapi.md +++ /dev/null @@ -1,6 +0,0 @@ -## Javascript API Layer -Low level javascript wrapper for the rest api - -https://typedoc.org - -[Documentation](../src/eCommerce/site/packages/core/docs/README.md) diff --git a/docs/markets.md b/docs/markets.md new file mode 100644 index 0000000..269aa3e --- /dev/null +++ b/docs/markets.md @@ -0,0 +1,31 @@ +# Markets + +The Jhoose Commerce Framework will automatically register an implementation of ICurrentMarket. If you wish to use your own implementation then register your own instance and then set the configuration option `ProxyCurrentMarket` to true. + +## IMarketManager +The Jhoose Commerce Framework requires you to register your own implementation of `IMarketManager`. For the majority of time you can inherit from the base class `BaseMarketManager` and then implement the method `DetermineMarket`. This method is used to calculate the commerce market from the request. + +```c# +/// +/// Provides market resolution and mapping helpers for the commerce API. +/// +public interface IMarketManager +{ + /// + /// Builds the public URL for a given market. + /// + string BuildMarketUrl(IMarket market); + + /// + /// Determines the market that applies to the supplied request metadata. + /// + MarketDetails DetermineMarket(MarketRequest request); + + /// + /// Converts platform markets into API market models. + /// + List GetMarkets(List markets); +} +``` + +See: [Market API](./restapi/markets.md) \ No newline at end of file diff --git a/docs/microfrontend.md b/docs/microfrontend.md deleted file mode 100644 index 6accf8e..0000000 --- a/docs/microfrontend.md +++ /dev/null @@ -1,44 +0,0 @@ -## Micro UI Layer - -``` json - "dependencies": { - "@jhoose-commerce/components": "^1.0.0", - "react": "^18", - "react-dom": "^18" - }, -``` - -Add css to global.css -`@import '@jhoose-commerce/components/dist/style.css'; -` -### Providers -``` html - - - - {props.children} - - -``` - -### Hooks -``` js - const { client, marketContext } = useJhooseCommerce(); -``` - -### Components - -``` html - - - setShowMiniCart(false)}> - - - - - - -``` \ No newline at end of file diff --git a/src/Jhoose.CommerceApi.Stripe/README.md b/src/Jhoose.CommerceApi.Stripe/README.md new file mode 100644 index 0000000..3c31ef0 --- /dev/null +++ b/src/Jhoose.CommerceApi.Stripe/README.md @@ -0,0 +1,156 @@ +# Jhoose.CommerceApi.Stripe + +Stripe payment integration module for Jhoose Commerce API. This library provides Stripe payment processing capabilities for Optimizely Commerce applications. + +## Features + +- **Payment Intent Creation**: Create Stripe payment intents for shopping carts +- **Webhook Processing**: Handle Stripe webhook events for payment completion +- **Payment Gateway Integration**: Seamless integration with Optimizely Commerce order pipeline +- **Multi-target Support**: Compatible with .NET 8.0, 9.0, and 10.0 + +## Installation + +This library depends on: +- `Stripe.net` - Official Stripe .NET SDK +- `Jhoose.CommerceApi` - Core Commerce API library +- Microsoft ASP.NET Core framework + +## Configuration + +### appsettings.json + +Add the following configuration section to your `appsettings.json`: + +```json +{ + "Stripe": { + "PublishableKey": "pk_test_your_publishable_key", + "SecretKey": "sk_test_your_secret_key", + "WebhookSecret": "whsec_your_webhook_secret" + } +} +``` + +### Service Registration + +Register Stripe payment services in your `Startup.cs` or `Program.cs`: + +```csharp +using Jhoose.CommerceApi.Stripe.Configuration; + +// In ConfigureServices or WebApplicationBuilder +services.AddStripePayment(configuration); + +// Or with custom options +services.AddStripePayment(configuration, options => +{ + // Customize StripeOptions if needed +}); +``` + +## Usage + +### Creating a Payment Intent + +The `PaymentIntentController` provides an endpoint to create Stripe payment intents: + +**Endpoint**: `POST /commerceapi/stripe/PaymentIntent/{cartId}` + +**Headers**: +- `Authorization`: Bearer JWT token +- `X-Customer-Context`: Customer context information + +**Request Body**: +```json +{ + "marketId": "en-US", + "language": "en" +} +``` + +**Response**: +```json +{ + "clientSecret": "pi_xxx_secret_xxx", + "paymentId": "pi_xxx", + "paymentMethodId": "guid-of-payment-method" +} +``` + +### Webhook Handling + +The `StripePaymentWebHook` controller processes Stripe webhook events: + +**Endpoint**: `POST /api/StripePaymentWebHook` + +**Supported Events**: +- `payment_intent.processing` - Payment is being processed +- `payment_intent.payment_failed` - Payment has failed +- `payment_intent.succeeded` - Payment completed successfully + +When a payment succeeds, the webhook automatically: +1. Adds the payment to the cart +2. Converts the cart to a purchase order +3. Updates the Stripe payment intent with order information + +### Payment Method Setup + +In Optimizely Commerce, configure a payment method with the system keyword `StripePayment`. This keyword is used to identify and retrieve the Stripe payment method for processing. + +## Components + +### Controllers + +- **PaymentIntentController**: Handles payment intent creation for carts +- **StripePaymentWebHook**: Processes Stripe webhook notifications + +### Payment Processing + +- **StripePaymentGateway**: Payment gateway implementation for Optimizely Commerce pipeline +- **StripePaymentMethod**: Payment method implementation that creates and validates Stripe payments + +### Configuration + +- **StripePaymentExtensions**: Service collection extensions for dependency injection +- **StripeOptions**: Configuration model for Stripe API keys and webhook secrets + +### Models + +- **PaymentIntentRequest**: Request model containing market and language information +- **PaymentIntentResponse**: Response model with payment intent details + +## Security + +- All payment intent endpoints require JWT authentication +- CORS is configured via `JhooseCommerceApiOptions.CommerceApiCorsPolicy` +- Webhook signatures are validated using the configured webhook secret +- Cart ownership is validated before creating payment intents + +## Important Notes + +1. **Amount Conversion**: Stripe requires amounts in the smallest currency unit (cents). The library automatically multiplies cart totals by 100. + +2. **Metadata**: Payment intents include metadata for cart tracking: + - `cartId` - Commerce cart identifier + - `email` - Customer email from shipping address + - `marketId` - Market identifier + - `language` - Language code + - `paymentMethodId` - Commerce payment method ID + +3. **Automatic Payment Methods**: Payment intents are configured with automatic payment method detection enabled. + +4. **Webhook Requirements**: Configure your Stripe webhook endpoint in the Stripe Dashboard to point to `/api/StripePaymentWebHook`. + +## Dependencies + +- EPiServer.Commerce.Order +- Mediachase.Commerce +- Stripe.net +- Microsoft.AspNetCore.App + +## Target Frameworks + +- .NET 8.0 +- .NET 9.0 +- .NET 10.0 diff --git a/src/Jhoose.CommerceApi/Configuration/AddCommerceClaimsTransformation.cs b/src/Jhoose.CommerceApi/Configuration/AddCommerceClaimsTransformation.cs deleted file mode 100644 index be72e42..0000000 --- a/src/Jhoose.CommerceApi/Configuration/AddCommerceClaimsTransformation.cs +++ /dev/null @@ -1,76 +0,0 @@ -using Mediachase.BusinessFoundation.Data; -using Mediachase.BusinessFoundation.Data.Business; -using Mediachase.BusinessFoundation.Data.Meta; -using Mediachase.Commerce.Customers; -using Microsoft.AspNetCore.Authentication; -using OpenIddict.Abstractions; -using System.Security.Claims; - -/* -namespace Jhoose.CommerceApi.Configuration -{ - public static class CommerceClaims { - public const string CustomerId = "CustomerId"; - public const string OrganisationId = "OrganisationId"; - } - - public class AddCommerceClaimsTransformation : IClaimsTransformation - { - private readonly CustomerContext _customerContext; - - public AddCommerceClaimsTransformation(CustomerContext customerContext) - { - _customerContext = customerContext; - } - - public Task TransformAsync(ClaimsPrincipal principal) - { - ClaimsIdentity claimsIdentity = new ClaimsIdentity(); - - var emailAddress = principal?.Identity?.Name ?? principal?.GetClaim(ClaimTypes.Name) ?? principal.GetClaim("name"); - - if (string.IsNullOrEmpty(emailAddress)) - { - return Task.FromResult(principal); - } - - var customer = GetContactByEmail(emailAddress); - - if (customer == null) - { - return Task.FromResult(principal); - } - - if (!principal.HasClaim(claim => claim.Type == CommerceClaims.CustomerId)) - { - claimsIdentity.AddClaim(new Claim(CommerceClaims.CustomerId, customer.PrimaryKeyId.Value.ToString())); - } - - if (!principal.HasClaim(claim => claim.Type == CommerceClaims.OrganisationId) && customer.ContactOrganization != null) - { - claimsIdentity.AddClaim(new Claim(CommerceClaims.OrganisationId, customer.ContactOrganization.PrimaryKeyId.Value.ToString())); - } - - principal.AddIdentity(claimsIdentity); - return Task.FromResult(principal); - } - - private CustomerContact? GetContactByEmail(string email) - { - try - { - var filterEl = new FilterElement("Email", FilterElementType.Equal, email); - return - BusinessManager.List(ContactEntity.ClassName, new[] { filterEl }) - .OfType() - .FirstOrDefault(); - } - catch (ObjectNotFoundException) - { - //Safe guard - return null; - } - } - } -} -*/ diff --git a/src/Jhoose.CommerceApi/Configuration/Models/JhooseCommerceApiOptions.cs b/src/Jhoose.CommerceApi/Configuration/Models/JhooseCommerceApiOptions.cs index 72a4092..f068acb 100644 --- a/src/Jhoose.CommerceApi/Configuration/Models/JhooseCommerceApiOptions.cs +++ b/src/Jhoose.CommerceApi/Configuration/Models/JhooseCommerceApiOptions.cs @@ -24,7 +24,7 @@ public class JhooseCommerceApiOptions public required string SiteHostname { get; set; } /// - /// if true, the local ICurrentMarket implementation will be proxied the CommerceApi implementation. + /// if true, the local ICurrentMarket implementation will be proxied with the CommerceApi implementation. /// public bool ProxyCurrentMarket { get; set; } = false; diff --git a/src/Jhoose.CommerceApi/Features/Cart/Services/ICartModelBinderService.cs b/src/Jhoose.CommerceApi/Features/Cart/Services/ICartModelBinderService.cs index bad7e6c..93a341a 100644 --- a/src/Jhoose.CommerceApi/Features/Cart/Services/ICartModelBinderService.cs +++ b/src/Jhoose.CommerceApi/Features/Cart/Services/ICartModelBinderService.cs @@ -16,57 +16,3 @@ public interface ICartModelBinderService: IOrderGroupModelBinderService /// Models.Cart BindCart(IOrderGroup cart); } - -/// -/// Maps purchase order entities to API models. -/// -public interface IPurchaseOrderModelBinderService : IOrderGroupModelBinderService -{ - /// - /// Converts a platform purchase order to an API purchase order model. - /// - PurchaseOrder BindOrder(IPurchaseOrder order); - -} - -/// -/// Base contract for mapping order group components between platform and API. -/// -public interface IOrderGroupModelBinderService -{ - - /// - /// Converts a platform order form to an API order form. - /// - OrderForm BindOrderForm(IOrderForm form, IMarket market, Currency currency); - - /// - /// Converts a platform shipment to an API shipment. - /// - Shipment BindShipment(IShipment shipment, IMarket market, Currency currency); - - /// - /// Converts a platform payment to an API payment model. - /// - Payment BindPayment(IPayment payment); - - /// - /// Converts a platform order address to an API commerce address. - /// - CommerceAddress BindCommerceAddress(IOrderAddress address); - - /// - /// Copies API commerce address data onto a platform order address. - /// - IOrderAddress BindOrderAddress(IOrderAddress address, CommerceAddress commerceAddress); - - /// - /// Converts a platform line item to an API cart line. - /// - CartLine BindLineItem(ILineItem lineItem, Currency currency); - - /// - /// Converts a platform order note to an API note. - /// - Note BindNote(IOrderNote note); -} diff --git a/src/Jhoose.CommerceApi/Features/Cart/Services/IOrderGroupModelBinderService.cs b/src/Jhoose.CommerceApi/Features/Cart/Services/IOrderGroupModelBinderService.cs new file mode 100644 index 0000000..e1d4ef9 --- /dev/null +++ b/src/Jhoose.CommerceApi/Features/Cart/Services/IOrderGroupModelBinderService.cs @@ -0,0 +1,49 @@ +using EPiServer.Commerce.Order; +using Mediachase.Commerce; +using Jhoose.CommerceApi.Features.Cart.Models; +using Currency = Mediachase.Commerce.Currency; +using Jhoose.CommerceApi.Features.Checkout.Models; + +namespace Jhoose.CommerceApi.Features.Cart.Services; + +/// +/// Base contract for mapping order group components between platform and API. +/// +public interface IOrderGroupModelBinderService +{ + + /// + /// Converts a platform order form to an API order form. + /// + OrderForm BindOrderForm(IOrderForm form, IMarket market, Currency currency); + + /// + /// Converts a platform shipment to an API shipment. + /// + Shipment BindShipment(IShipment shipment, IMarket market, Currency currency); + + /// + /// Converts a platform payment to an API payment model. + /// + Payment BindPayment(IPayment payment); + + /// + /// Converts a platform order address to an API commerce address. + /// + CommerceAddress BindCommerceAddress(IOrderAddress address); + + /// + /// Copies API commerce address data onto a platform order address. + /// + IOrderAddress BindOrderAddress(IOrderAddress address, CommerceAddress commerceAddress); + + /// + /// Converts a platform line item to an API cart line. + /// + CartLine BindLineItem(ILineItem lineItem, Currency currency); + + /// + /// Converts a platform order note to an API note. + /// + Note BindNote(IOrderNote note); +} diff --git a/src/Jhoose.CommerceApi/Features/Cart/Services/IPurchaseOrderModelBinderService.cs b/src/Jhoose.CommerceApi/Features/Cart/Services/IPurchaseOrderModelBinderService.cs new file mode 100644 index 0000000..20727fb --- /dev/null +++ b/src/Jhoose.CommerceApi/Features/Cart/Services/IPurchaseOrderModelBinderService.cs @@ -0,0 +1,16 @@ +using EPiServer.Commerce.Order; +using Jhoose.CommerceApi.Features.Checkout.Models; + +namespace Jhoose.CommerceApi.Features.Cart.Services; + +/// +/// Maps purchase order entities to API models. +/// +public interface IPurchaseOrderModelBinderService : IOrderGroupModelBinderService +{ + /// + /// Converts a platform purchase order to an API purchase order model. + /// + PurchaseOrder BindOrder(IPurchaseOrder order); + +} diff --git a/src/Jhoose.CommerceApi/Features/Markets/Services/BaseMarketManager.cs b/src/Jhoose.CommerceApi/Features/Markets/Services/BaseMarketManager.cs index da4d719..60f2ab5 100644 --- a/src/Jhoose.CommerceApi/Features/Markets/Services/BaseMarketManager.cs +++ b/src/Jhoose.CommerceApi/Features/Markets/Services/BaseMarketManager.cs @@ -52,7 +52,7 @@ public virtual string BuildMarketUrl(IMarket market) site.Hosts.First(); - var url = "https://localhost:3000/";//host.Url.AbsoluteUri; + var url = host.Url.AbsoluteUri; return $"{url}{market.DefaultLanguage.Name.ToLower()}/"; } diff --git a/src/Jhoose.CommerceApi/Jhoose.CommerceApi.csproj b/src/Jhoose.CommerceApi/Jhoose.CommerceApi.csproj index d963cf7..a6dc0c2 100644 --- a/src/Jhoose.CommerceApi/Jhoose.CommerceApi.csproj +++ b/src/Jhoose.CommerceApi/Jhoose.CommerceApi.csproj @@ -6,6 +6,20 @@ enable true false + latest + + Jhoose.CommerceApi + https://github.com/andrewmarkham/CommerceApi + https://github.com/andrewmarkham/CommerceApi + 1.0.0.0 + Andrew Markham + A RestFull Commerce API for Optimizely Commerce Connect + Jhoose CommerceApi + Jhoose;Episerver;Optimizely;Commerce RESTFull API + true + + 1.0.0.0 - Initial Release + diff --git a/src/Jhoose.CommerceApi/README.md b/src/Jhoose.CommerceApi/README.md new file mode 100644 index 0000000..d817785 --- /dev/null +++ b/src/Jhoose.CommerceApi/README.md @@ -0,0 +1,489 @@ +# Jhoose.CommerceApi + +A RESTful Commerce API for Optimizely Commerce Connect that provides comprehensive e-commerce functionality including cart management, checkout, product catalog, customer management, and market operations. + +## Overview + +Jhoose.CommerceApi is a complete REST API solution built on top of Optimizely Commerce, designed to enable headless commerce implementations. It provides a modern, secure, and feature-rich API for building e-commerce applications using any frontend technology. + +## Features + +- **Cart Management**: Full CRUD operations for shopping carts and cart lines +- **Checkout Operations**: Shipping and payment method selection, order placement +- **Product Catalog**: Product inventory and pricing queries +- **Customer Management**: Customer registration, profile management, and addresses +- **Market Management**: Multi-market support with currency and language handling +- **Authentication**: JWT-based authentication for both anonymous and registered users +- **Security**: OAuth/OpenID Connect integration, encrypted customer context +- **CORS Support**: Configurable cross-origin resource sharing +- **API Documentation**: Swagger/OpenAPI integration +- **Multi-target Support**: Compatible with .NET 8.0, 9.0, and 10.0 + +## Installation + +### NuGet Package + +```bash +dotnet add package Jhoose.CommerceApi +``` + +### Dependencies + +This library requires: +- `EPiServer.Commerce.Core` - Optimizely Commerce platform +- `EPiServer.Cms.AspNetCore.Mvc` - Optimizely CMS MVC framework +- `EPiServer.OpenIDConnect` - OpenID Connect authentication +- `Microsoft.AspNetCore.Authentication.JwtBearer` - JWT authentication +- `Swashbuckle.AspNetCore` - API documentation +- `MimeKit` - Email and encryption utilities + +## Configuration + +### appsettings.json + +Add the following configuration section: + +```json +{ + "JhooseCommerceApiOptions": { + "SiteHostname": "https://your-frontend-app.com", + "ProxyCurrentMarket": false, + "CreateAbsoluteUrls": true, + "JwtKey": "your-secret-jwt-signing-key-min-32-chars", + "AuthorizationKey": "your-api-authorization-key", + "Encryption": { + "Certificate": { + "Thumbprint": "your-certificate-thumbprint", + "StoreName": "My", + "StoreLocation": "LocalMachine" + } + } + } +} +``` + +### Configuration Options + +- **SiteHostname**: The frontend application URL (includes protocol and port) +- **ProxyCurrentMarket**: Whether to proxy the default ICurrentMarket implementation (default: false) +- **CreateAbsoluteUrls**: Generate absolute URLs for resources (default: true) +- **JwtKey**: Secret key for signing JWT tokens (minimum 32 characters) +- **AuthorizationKey**: API key for anonymous authentication +- **Encryption**: Certificate configuration for encrypting customer context + +### Service Registration + +In your `Program.cs` or `Startup.cs`: + +```csharp +using Jhoose.CommerceApi.Configuration; + +// Add services +services.AddJhooseCommerceApi(configuration); + +// Add authentication +services.AddAuthentication() + .AddJhooseCommerceAuthentication(bearer => + { + bearer.Issuer = "https://your-identity-provider.com"; + bearer.Authority = "https://your-identity-provider.com"; + bearer.Audience = new[] { "your-api-audience" }; + }); + +// Configure application +app.UseJhooseCommerceApi(); +``` + +### Custom Configuration + +You can provide post-configuration options: + +```csharp +services.AddJhooseCommerceApi(configuration, options => +{ + options.CreateAbsoluteUrls = false; + options.ProxyCurrentMarket = true; +}); +``` + +## API Endpoints + +### Authentication + +#### Anonymous Authentication +``` +POST /commerceapi/Authentication +Headers: X-Auth-Key: {your-authorization-key} +Body: { "anonymousId": "optional-guid" } +Response: { "accessToken": "jwt-token", "expiresIn": 3600 } +``` + +#### Customer Context +``` +GET /commerceapi/Authentication +Headers: Authorization: Bearer {jwt-token} +Response: Customer context details +``` + +### Cart Operations + +#### Get Carts +``` +GET /commerceapi/Cart +GET /commerceapi/Cart/{cartId} +Headers: + - Authorization: Bearer {jwt-token} + - X-Customer-Context: {encrypted-customer-context} +``` + +#### Create Cart +``` +POST /commerceapi/Cart +Headers: + - Authorization: Bearer {jwt-token} + - X-Customer-Context: {encrypted-customer-context} +Body: { "name": "default", "market": "en-US" } +``` + +#### Delete Cart +``` +DELETE /commerceapi/Cart/{cartId} +``` + +#### Add Line Items +``` +POST /commerceapi/Cart/{cartId}/lines +Body: [ + { + "code": "SKU-001", + "quantity": 2, + "displayName": "Product Name" + } +] +``` + +#### Update Line Item +``` +PUT /commerceapi/Cart/{cartId}/lines/{lineItemId} +Body: { "quantity": 5 } +``` + +#### Delete Line Item +``` +DELETE /commerceapi/Cart/{cartId}/lines/{lineItemId} +``` + +#### Apply Coupon +``` +POST /commerceapi/Cart/{cartId}/coupon +Body: { "couponCode": "SAVE10" } +``` + +#### Update Billing Address +``` +PUT /commerceapi/Cart/{cartId}/billingaddress +Body: { address details } +``` + +### Checkout Operations + +#### Get Shipping Methods +``` +POST /commerceapi/Checkout/shippingmethods +Body: { + "cartId": 123, + "marketId": "en-US", + "language": "en", + "zipCode": "12345", + "city": "New York", + "countryCode": "US" +} +``` + +#### Get Payment Methods +``` +POST /commerceapi/Checkout/paymentmethods +Body: { + "cartId": 123, + "marketId": "en-US", + "language": "en" +} +``` + +#### Add Shipment +``` +POST /commerceapi/Checkout/{cartId}/shipping +Body: { + "shippingMethodId": "guid", + "address": { shipping address details } +} +``` + +#### Add Payment +``` +POST /commerceapi/Checkout/{cartId}/payment +Body: { + "amount": 99.99, + "paymentMethodId": "guid", + "status": "Pending", + "transactionType": "Authorization" +} +``` + +#### Convert to Purchase Order +``` +POST /commerceapi/Checkout/{cartId}/placeorder +``` + +### Products + +#### Get Product Pricing and Inventory +``` +POST /commerceapi/Product/{productCode} +Headers: X-Customer-Context: {encrypted-customer-context} +Body: { + "marketId": "en-US", + "currencyCode": "USD", + "warehouse": "default" +} +Response: { + "skuWithPriceAndInventory": [ + { + "sku": "SKU-001", + "listPrice": 99.99, + "salePrice": 79.99, + "discountPrice": 69.99, + "inStock": true, + "inventoryStatus": "InStock" + } + ] +} +``` + +### Markets + +#### Get All Markets +``` +GET /commerceapi/Market +Response: { + "markets": [ + { + "marketId": "en-US", + "marketName": "United States", + "defaultLanguage": "en", + "languages": ["en"], + "currencies": ["USD"], + "countries": ["US"] + } + ] +} +``` + +#### Determine Market +``` +POST /commerceapi/Market/determinemarket +Body: { + "languageId": "en", + "currencyCode": "USD", + "countryCode": "US" +} +``` + +### Customer Management + +#### Get Customer Details +``` +GET /commerceapi/Customer +Headers: X-Customer-Context: {encrypted-customer-context} +``` + +#### Register Customer +``` +POST /commerceapi/Customer +Body: { customer details } +``` + +#### Add Customer Address +``` +POST /commerceapi/Customer/address +Body: { address details } +``` + +#### Update Customer Address +``` +PUT /commerceapi/Customer/address/{addressId} +Body: { updated address details } +``` + +#### Delete Customer Address +``` +DELETE /commerceapi/Customer/address/{addressId} +``` + +#### Get Orders +``` +GET /commerceapi/Customer/orders +``` + +## Authentication & Security + +### JWT Authentication + +The API supports two authentication modes: + +1. **Anonymous Authentication**: Uses a shared authorization key to obtain a JWT token +2. **OpenID Connect**: Integrates with external identity providers + +### Customer Context + +The `X-Customer-Context` header contains encrypted customer information including: +- Customer ID +- Contact ID +- Organization ID +- User ID +- Timestamps + +This context is encrypted using X.509 certificates and validated on each request. + +### CORS Configuration + +CORS is automatically configured based on the `SiteHostname` setting. The policy allows: +- Credentials +- Any header +- Any method +- Specified origins + +## Architecture + +### Services + +- **ICartService**: Cart operations and validation +- **ICheckoutService**: Checkout workflow management +- **ICustomerService**: Customer CRUD operations +- **IPaymentMethodService**: Payment method resolution +- **IShippingService**: Shipping method calculation +- **IJhoosePriceService**: Pricing with customer-specific logic +- **IProductImageService**: Product image URL generation +- **IEncryptionHelper**: Customer context encryption/decryption +- **ICustomerContextHelper**: Customer context creation and validation + +### Model Binders + +Custom model binders handle serialization: +- **CustomerContextBinder**: Binds encrypted customer context from headers +- **ICartModelBinderService**: Transforms ICart to API models +- **IOrderGroupModelBinderService**: Transforms order groups to API models +- **ICustomerModelBinderService**: Transforms customer entities to API models + +### Middleware + +**CommerceApiMiddleware**: Handles response formatting and error handling + +### Filters + +**ValidateCustomerContextActionFilter**: Validates customer context on protected endpoints + +## Response Caching + +The API leverages ASP.NET Core response caching for: +- Market listings (15 minutes) +- Customer details (15 minutes) + +## Extensibility + +### Custom Services + +Override default service implementations by registering your own: + +```csharp +services.AddSingleton(); +``` + +### Custom Pricing + +Implement `IJhoosePriceService` for custom pricing logic: + +```csharp +public class MyPricingService : IJhoosePriceService +{ + public IEnumerable GetDiscountPrices( + IMarket market, + IEnumerable contentLinks, + string currency) + { + // Custom pricing logic + } +} +``` + +### Custom Product Images + +Implement `IProductImageService` to customize image URL generation: + +```csharp +public class MyImageService : IProductImageService +{ + public string GetDefaultImageUrl(VariationContent variation) + { + // Custom image logic + } +} +``` + +## Swagger Documentation + +When configured, Swagger UI is available at `/swagger` and includes: +- All API endpoints +- Request/response models +- Authentication requirements +- Status codes + +## Error Handling + +The API returns standard HTTP status codes: +- **200 OK**: Successful request +- **201 Created**: Resource created +- **204 No Content**: Successful deletion +- **400 Bad Request**: Invalid request data +- **401 Unauthorized**: Missing or invalid authentication +- **403 Forbidden**: Insufficient permissions +- **404 Not Found**: Resource not found +- **500 Internal Server Error**: Server error + +## Postman Collection + +A complete Postman collection is available at: +`/postman/Commerce API.postman_collection.json` + +## Best Practices + +1. **Always use HTTPS** in production environments +2. **Rotate JWT keys** regularly +3. **Use certificate-based encryption** for customer context +4. **Enable response caching** where appropriate +5. **Implement rate limiting** for public endpoints +6. **Validate input data** on the client side +7. **Handle errors gracefully** in client applications + +## Target Frameworks + +- .NET 8.0 +- .NET 9.0 +- .NET 10.0 + +## License + +See the LICENSE file in the repository root. + +## Repository + +- GitHub: https://github.com/andrewmarkham/CommerceApi +- Issues: https://github.com/andrewmarkham/CommerceApi/issues + +## Author + +Andrew Markham + +## Version History + +- **1.0.0.0** - Initial Release diff --git a/src/Jhoose.Demo/Features/Graph/DefaultCategoryImageContentApiModel.cs b/src/Jhoose.Demo/Features/Graph/DefaultCategoryImageContentApiModel.cs index 99f357f..736d4d6 100644 --- a/src/Jhoose.Demo/Features/Graph/DefaultCategoryImageContentApiModel.cs +++ b/src/Jhoose.Demo/Features/Graph/DefaultCategoryImageContentApiModel.cs @@ -1,4 +1,3 @@ -using EPiServer.Commerce.Catalog.ContentTypes; using EPiServer.Commerce.Catalog.Linking; using EPiServer.ContentApi.Core.Serialization.Models; using EPiServer.ServiceLocation; @@ -63,92 +62,3 @@ public object GetValue(ContentApiModel contentApiModel) } } - -[ServiceConfiguration(typeof(IContentApiModelProperty), Lifecycle = ServiceInstanceScope.Singleton)] -public class ProductParentCategoriesContentApiModel : ITypedContentApiModelProperty, IContentApiModelProperty -{ - private readonly ContentTypeModelRepository _contentTypeModelRepository; - private readonly IContentLoader _contentLoader; - private readonly IUrlResolver _urlHelper; - - public ProductParentCategoriesContentApiModel(ContentTypeModelRepository contentTypeModelRepository, - IContentLoader contentLoader, - IUrlResolver urlHelper) - { - _contentTypeModelRepository = contentTypeModelRepository; - _contentLoader = contentLoader; - _urlHelper = urlHelper; - } - - public string Name => "ParentCategories"; - - public Type[] ContentTypes => [typeof(GenericProduct)]; - - public object GetValue(ContentApiModel contentApiModel) - { - var parentCategories = new List(); - - Guid? guid = contentApiModel.ContentLink?.GuidValue; - if (!guid.HasValue || guid.Value == Guid.Empty) - { - return parentCategories; - } - - IContent content; - try - { - content = _contentLoader.Get(guid.Value); - } - catch (ContentNotFoundException) - { - return parentCategories; - } - - if (content is GenericProduct nodeProduct) - { - parentCategories.AddRange(GetNodes(nodeProduct)); - } - - return parentCategories; - } - - private List GetNodes(ProductContent currentContent) - { - List nodeList = []; - - foreach (var nodeRelation in currentContent.GetCategories()) - { - var currentNode = _contentLoader.Get(nodeRelation); - if (currentNode != null) - { - AddParentNodes(currentNode, nodeList); - } - } - - return nodeList; - } - - private void AddParentNodes(NodeContent currentNode, List nodeList) - { - if (currentNode == null) - { - return; - } - - if (!nodeList.Contains(currentNode.Code)) - { - nodeList.Add(currentNode.Code); - } - var nodeRelations = currentNode.GetCategories().ToList(); - nodeRelations.Add(currentNode.ParentLink); - - foreach (var nodeRef in nodeRelations) - { - var node = _contentLoader.Get(nodeRef); - if (node is NodeContent nodeContent ) - { - AddParentNodes(nodeContent, nodeList); - } - } - } -} \ No newline at end of file diff --git a/src/Jhoose.Demo/Features/Graph/ProductParentCategoriesContentApiModel.cs b/src/Jhoose.Demo/Features/Graph/ProductParentCategoriesContentApiModel.cs new file mode 100644 index 0000000..f14f64c --- /dev/null +++ b/src/Jhoose.Demo/Features/Graph/ProductParentCategoriesContentApiModel.cs @@ -0,0 +1,97 @@ +using EPiServer.Commerce.Catalog.ContentTypes; +using EPiServer.ContentApi.Core.Serialization.Models; +using EPiServer.ServiceLocation; +using EPiServer.Web.Routing; +using Jhoose.Demo.Models.Commerce; +using Optimizely.ContentGraph.Cms.Core.ContentApiModelProperties; + +namespace Jhoose.Demo.Features.Graph; + +[ServiceConfiguration(typeof(IContentApiModelProperty), Lifecycle = ServiceInstanceScope.Singleton)] +public class ProductParentCategoriesContentApiModel : ITypedContentApiModelProperty, IContentApiModelProperty +{ + private readonly ContentTypeModelRepository _contentTypeModelRepository; + private readonly IContentLoader _contentLoader; + private readonly IUrlResolver _urlHelper; + + public ProductParentCategoriesContentApiModel(ContentTypeModelRepository contentTypeModelRepository, + IContentLoader contentLoader, + IUrlResolver urlHelper) + { + _contentTypeModelRepository = contentTypeModelRepository; + _contentLoader = contentLoader; + _urlHelper = urlHelper; + } + + public string Name => "ParentCategories"; + + public Type[] ContentTypes => [typeof(GenericProduct)]; + + public object GetValue(ContentApiModel contentApiModel) + { + var parentCategories = new List(); + + Guid? guid = contentApiModel.ContentLink?.GuidValue; + if (!guid.HasValue || guid.Value == Guid.Empty) + { + return parentCategories; + } + + IContent content; + try + { + content = _contentLoader.Get(guid.Value); + } + catch (ContentNotFoundException) + { + return parentCategories; + } + + if (content is GenericProduct nodeProduct) + { + parentCategories.AddRange(GetNodes(nodeProduct)); + } + + return parentCategories; + } + + private List GetNodes(ProductContent currentContent) + { + List nodeList = []; + + foreach (var nodeRelation in currentContent.GetCategories()) + { + var currentNode = _contentLoader.Get(nodeRelation); + if (currentNode != null) + { + AddParentNodes(currentNode, nodeList); + } + } + + return nodeList; + } + + private void AddParentNodes(NodeContent currentNode, List nodeList) + { + if (currentNode == null) + { + return; + } + + if (!nodeList.Contains(currentNode.Code)) + { + nodeList.Add(currentNode.Code); + } + var nodeRelations = currentNode.GetCategories().ToList(); + nodeRelations.Add(currentNode.ParentLink); + + foreach (var nodeRef in nodeRelations) + { + var node = _contentLoader.Get(nodeRef); + if (node is NodeContent nodeContent ) + { + AddParentNodes(nodeContent, nodeList); + } + } + } +} \ No newline at end of file diff --git a/src/Jhoose.Demo/README.md b/src/Jhoose.Demo/README.md index ce6c7af..64272aa 100644 --- a/src/Jhoose.Demo/README.md +++ b/src/Jhoose.Demo/README.md @@ -1,46 +1,308 @@ -# Empty Commerce template +# Jhoose Demo -## How to run +A demonstration Optimizely CMS and Commerce site showcasing the **Jhoose Commerce API** with Stripe payment integration. This backend powers the [Ozone Clothing](https://github.com/andrewmarkham/OzoneClothing) Next.js headless storefront. -Chose one of the following options to get started. +## Overview -### Windows +This demo site demonstrates a complete headless commerce architecture using: +- **Jhoose.CommerceApi** - RESTful API for cart, checkout, products, and customer management +- **Jhoose.CommerceApi.Stripe** - Stripe payment processing integration +- **Optimizely Commerce** - Product catalog and order management +- **Optimizely Content Graph** - Product indexing and delivery +- **Auth0** - JWT-based authentication for registered users -Prerequisities -- .NET SDK 8+ -- SQL Server 2016 Express LocalDB (or later) +## Project Structure -```bash -$ dotnet run -```` +The solution was created using `dotnet new epi-commerce-empty` and enhanced with: +- Foundation commerce models and supporting code +- HomePage content type for basic CMS functionality +- Custom Content Graph API models for enhanced product data +- Custom market manager for multi-market routing -### Any OS with Docker +### Key Components -Prerequisities -- Docker -- Enable Docker support when applying the template -- Review the .env file and make changes where necessary to the Docker-related variables +#### Configuration (`appsettings.json`) +- **JhooseCommerceApiOptions**: API keys, encryption, and CORS settings +- **Stripe**: Payment gateway credentials +- **Jwt**: Auth0 authentication configuration +- **Optimizely.ContentGraph**: Content Graph connection settings +- **EPiServer.Commerce**: Catalog search and indexing configuration -```bash -$ docker-compose up -```` +#### Startup Configuration (`Startup.cs`) -> Note that this Docker setup is just configured for local development. Follow this [guide to enable HTTPS](https://github.com/dotnet/dotnet-docker/blob/main/samples/run-aspnetcore-https-development.md). +The demo configures several key services: -#### Reclaiming Docker Image Space +```csharp +// Jhoose Commerce API with custom options +services.AddJhooseCommerceApi(_configuration, o => +{ + o.ProxyCurrentMarket = true; +}); -1. Backup the App_Data/\${DB_NAME}.mdf and App_Data/\${DB_NAME}.ldf DB restoration files for safety -2. Run `docker compose down --rmi all` to remove containers, networks, and images associated with the specific project instance -3. In the future, run `docker compose up` anytime you want to recreate the images and containers +// Stripe payment integration +services.AddStripePayment(_configuration); -### Any OS with external database server +// JWT authentication with Auth0 +services.AddAuthentication() + .AddJhooseCommerceAuthentication(o => { + o.Audience = _configuration.GetSection("Jwt:Audience").Get>(); + o.Authority = _configuration["Jwt:Authority"]; + o.Issuer = _configuration["Jwt:Issuer"]; + }); -Prerequisities -- .NET SDK 8+ -- SQL Server 2016 (or later) on a external server, e.g. Azure SQL +// Custom market manager +services.AddTransient(); -Create two empty databases on the external database server and update the connection strings accordingly. +// Content Graph for CMS and Commerce +services.AddContentGraph(x => +{ + x.IncludeInheritanceInContentType = true; + x.PreventFieldCollision = true; +}) +.AddCommerceGraph(); +``` -```bash -$ dotnet run -```` +## Setup Instructions + +### Prerequisites + +- .NET 8.0 SDK or later +- SQL Server (local or Docker) +- Optimizely Content Graph account (optional, for product indexing) +- Stripe account (for payment processing) +- Auth0 account (for user authentication) + +### Database Setup + +1. **Restore Databases** + + The `Databases` folder contains two BACPAC files with the Foundation product catalog: + - `Jhoose.Demo.CMS.bacpac` - CMS database + - `Jhoose.Demo.Commerce.bacpac` - Commerce database + +2. **Update Connection Strings** + + In `appsettings.json`, update the connection strings: + ```json + "ConnectionStrings": { + "EPiServerDB": "Server=localhost;Database=Jhoose.Demo.Cms;Trusted_Connection=True;", + "EcfSqlConnection": "Server=localhost;Database=Jhoose.Demo.Commerce;Trusted_Connection=True;" + } + ``` + +### Configuration Setup + +#### 1. Jhoose Commerce API + +Update `JhooseCommerceApiOptions` in `appsettings.json`: + +```json +"JhooseCommerceApiOptions": { + "JwtKey": "your-32-character-secret-key", + "AuthorizationKey": "base64-encoded-authorization-key", + "SiteHostname": "http://localhost:3000", + "ProxyCurrentMarket": true, + "Encryption": { + "Key": "your-32-character-encryption-key", + "IV": "your-16-character-iv" + } +} +``` + +- **JwtKey**: Used for anonymous JWT token signing +- **AuthorizationKey**: Required for anonymous authentication endpoint +- **SiteHostname**: Your frontend application URL (enables CORS) +- **Encryption.Key/IV**: Used for encrypting customer context headers + +#### 2. Stripe Configuration + +Add your Stripe credentials: + +```json +"Stripe": { + "PublishableKey": "pk_test_your_publishable_key", + "SecretKey": "sk_test_your_secret_key", + "WebhookSecret": "whsec_your_webhook_secret" +} +``` + +Get these from your [Stripe Dashboard](https://dashboard.stripe.com/test/apikeys). + +#### 3. Auth0 Configuration + +Configure JWT authentication: + +```json +"Jwt": { + "Issuer": "https://your-tenant.auth0.com/", + "Authority": "https://your-tenant.auth0.com/", + "Audience": ["https://your-api-identifier", "your-client-id"] +} +``` + +#### 4. Content Graph (Optional) + +For product indexing and GraphQL queries: + +```json +"Optimizely": { + "ContentGraph": { + "GatewayAddress": "https://cg.optimizely.com", + "AppKey": "your-app-key", + "Secret": "your-secret", + "SingleKey": "your-single-key" + } +} +``` + +## Features & Customizations + +### Custom Market Manager + +`Features/Headless/FoundationMarketManager.cs` implements URL-based market routing: + +- `/en/*` routes to US market +- `/fr/*` routes to FR market +- `/sv/*` routes to SWE market + +This allows the headless frontend to use URL segments for market selection. + +### Content Graph API Models + +The `Features/Graph` folder contains custom API models for enhanced product data: + +- **ColorContentApiModel.cs** - Product color variations +- **SizeContentApiModel.cs** - Product size variations +- **ProductParentCategoriesContentApiModel.cs** - Category hierarchy +- **DefaultCategoryImageContentApiModel.cs** - Category images + +These extend the standard Content Graph schema with commerce-specific fields needed by the frontend. + +### Commerce Models + +The project includes Foundation commerce models: +- Product variations (color, size) +- Category structures +- Media assets +- Custom metadata + +## Running the Solution + +### Development Mode + +1. **Start the application**: + ```bash + dotnet run + ``` + +2. **Access the CMS**: + ``` + http://localhost:5001/util/login + ``` + + **Credentials**: + - Username: `admin` + - Password: `Episerver123!` + +3. **Important**: The site must run on HTTP (not HTTPS) for local development with the demo frontend. + +### API Endpoints + +Once running, the Commerce API is available at: +- `http://localhost:5001/commerceapi/authentication` - Anonymous/customer authentication +- `http://localhost:5001/commerceapi/cart` - Cart operations +- `http://localhost:5001/commerceapi/checkout` - Checkout operations +- `http://localhost:5001/commerceapi/product/{code}` - Product pricing/inventory +- `http://localhost:5001/commerceapi/market` - Market information +- `http://localhost:5001/commerceapi/customer` - Customer management +- `http://localhost:5001/commerceapi/stripe/paymentintent/{cartId}` - Stripe payments + +### Swagger Documentation + +API documentation is available at: +``` +http://localhost:5001/swagger +``` + +## Integration with Frontend + +This backend is designed to work with the [Ozone Clothing](https://github.com/andrewmarkham/OzoneClothing) Next.js demo, which demonstrates: + +- Anonymous and authenticated user flows +- Product browsing with Content Graph +- Shopping cart management +- Multi-step checkout process +- Stripe payment integration +- Multi-market/multi-currency support + +### Authentication Flow + +1. **Anonymous Users**: Frontend calls `/commerceapi/authentication` with `X-Auth-Key` header +2. **Registered Users**: Frontend uses Auth0 for authentication, receives JWT token +3. **Customer Context**: API encrypts customer data in `X-Customer-Context` header +4. **Subsequent Requests**: Frontend includes both `Authorization` and `X-Customer-Context` headers + +## Development Notes + +### Content Graph Requirement + +The demo site requires a Content Graph index as products are indexed to Content Graph for the Next.js frontend. **Note**: Content Graph is **not required** to use the Jhoose Commerce API - it's only used by the demo frontend for product discovery and searching. + +### Scheduler Disabled + +In development mode, the Optimizely Scheduler is disabled to prevent background jobs from running during debugging. + +### Payment Method Configuration + +Ensure a payment method with the system keyword `StripePayment` is configured in the Optimizely Commerce admin interface for Stripe integration to work. + +### Webhook Configuration + +Configure your Stripe webhook endpoint to: +``` +http://your-domain/api/StripePaymentWebHook +``` + +## Project Dependencies + +### NuGet Packages + +- **EPiServer.CMS** - Content management system +- **EPiServer.Commerce** - E-commerce platform +- **EPiServer.ContentDeliveryApi.Cms** - Content delivery API +- **Optimizely.ContentGraph.Cms** - Content Graph CMS integration +- **Optimizely.Graph.Commerce** - Content Graph Commerce integration +- **Microsoft.AspNetCore.Authentication.OpenIdConnect** - OpenID authentication + +### Project References + +- **Jhoose.CommerceApi** - Core commerce REST API +- **Jhoose.CommerceApi.Stripe** - Stripe payment integration + +## Additional Resources + +- **API Documentation**: See [Jhoose.CommerceApi README](../Jhoose.CommerceApi/README.md) +- **Stripe Integration**: See [Jhoose.CommerceApi.Stripe README](../Jhoose.CommerceApi.Stripe/README.md) +- **Headless Frontend**: [Ozone Clothing Demo](https://github.com/andrewmarkham/OzoneClothing) +- **Optimizely Documentation**: [Optimizely Commerce](https://docs.developers.optimizely.com/commerce-cloud/) + +## Troubleshooting + +### CORS Issues +- Ensure `SiteHostname` in configuration matches your frontend URL exactly +- Verify `UseJhooseCommerceApi()` is called after `UseRouting()` but before `UseAuthentication()` + +### Authentication Issues +- Check JWT configuration matches your Auth0 tenant +- Verify `JwtKey` and `AuthorizationKey` are set correctly +- Ensure anonymous ID cookies are enabled in your frontend + +### Database Connection Issues +- Verify SQL Server is running +- Check connection strings in `appsettings.json` +- Restore databases from BACPAC files if needed + +### Stripe Payment Issues +- Confirm payment method with keyword `StripePayment` exists +- Verify Stripe keys are for the correct environment (test/live) +- Check webhook secret matches Stripe dashboard configuration diff --git a/src/Jhoose.Demo/appsettings.json b/src/Jhoose.Demo/appsettings.json index 3afdd2e..a434f8b 100644 --- a/src/Jhoose.Demo/appsettings.json +++ b/src/Jhoose.Demo/appsettings.json @@ -75,9 +75,9 @@ "Optimizely": { "ContentGraph": { "GatewayAddress": "https://cg.optimizely.com", - "AppKey": "MzMgHrqKxlvz5MsFApgPfIvoIkJEAgvbfOnCLuXhDEmWAafs", - "Secret": "8HajQPAuaWzP4SV6zoJUHTLVaJqZdJmhMnOS6BL4aSo5IqMcIg3uMDqLmFtkXNDP", - "SingleKey": "5yqTqf0yPQTBov4GrbIKHqzV4IbUiIGqQOKbtNAEEgqZtzJq", + "AppKey": "", + "Secret": "", + "SingleKey": "", "AllowSendingLog": "true" } },