From 2bd01edda951bbcfa83ad8e96abf4d4c208de5e8 Mon Sep 17 00:00:00 2001 From: Daniel Schmidt Date: Sat, 18 Jul 2026 01:54:09 +0200 Subject: [PATCH] Prepare Vercel Analytics for marketplace readiness --- .gitignore | 11 ++-- .impeccable/design.json | 4 +- DESIGN.md | 6 +- PRODUCT.md | 2 +- README.md | 26 ++++----- TheBuilder.WebAnalytics.slnx | 11 ++++ Umbraco.VercelAnalytics.slnx | 11 ---- icon.png | Bin 0 -> 251927 bytes .../.gitignore | 0 .../Program.cs | 0 .../Properties/launchSettings.json | 0 .../TheBuilder.WebAnalytics.Example.csproj} | 4 +- .../VercelAnalyticsOpenApiComposer.cs | 12 ++-- .../Views/Partials/blockgrid/area.cshtml | 0 .../Views/Partials/blockgrid/areas.cshtml | 0 .../Views/Partials/blockgrid/default.cshtml | 0 .../Views/Partials/blockgrid/items.cshtml | 0 .../Views/Partials/blocklist/default.cshtml | 0 .../Views/Partials/singleblock/default.cshtml | 0 .../Views/_ViewImports.cshtml | 0 .../appsettings.Development.json | 0 .../appsettings.json | 0 .../wwwroot/favicon.ico | Bin .../wwwroot/media/.gitkeep | 0 .../Client/.vscode/extensions.json | 0 .../Client/package.json | 2 +- .../Client/pnpm-lock.yaml | 0 .../Client/pnpm-workspace.yaml | 2 + .../Client/public/umbraco-package.json | 14 +++++ .../Client/scripts/generate-openapi.js | 4 +- .../analytics-breakdown-grid.element.ts | 0 .../analytics/analytics-components.test.ts | 2 +- .../analytics-dashboard-header.element.ts | 0 .../analytics-dashboard.controller.test.ts | 0 .../analytics-dashboard.controller.ts | 4 +- .../analytics/analytics-dashboard.element.ts | 0 .../analytics/analytics-dashboard.styles.ts | 0 .../analytics/analytics-summary.element.ts | 0 .../Client/src/analytics/async-state.ts | 0 .../src/analytics/breakdown-dialog.element.ts | 0 .../src/analytics/breakdown-rows.test.ts | 0 .../Client/src/analytics/breakdown-rows.ts | 0 .../src/analytics/breakdown-table.element.ts | 0 .../Client/src/analytics/chart-value.test.ts | 0 .../Client/src/analytics/chart-value.ts | 0 .../src/analytics/country-display.test.ts | 0 .../Client/src/analytics/country-display.ts | 0 .../Client/src/analytics/dashboard-api.ts | 37 +++++++++++++ .../src/analytics/dashboard-cards.test.ts | 0 .../Client/src/analytics/dashboard-cards.ts | 0 .../analytics/dashboard-report-loader.test.ts | 2 +- .../src/analytics/dashboard-report-loader.ts | 0 .../src/analytics/dashboard-url-state.test.ts | 0 .../src/analytics/dashboard-url-state.ts | 0 .../analytics/date-range-picker.element.ts | 0 .../Client/src/analytics/date-range.test.ts | 0 .../Client/src/analytics/date-range.ts | 0 .../src/analytics/document-route.test.ts | 0 .../Client/src/analytics/document-route.ts | 0 .../analytics/event-details-dialog.element.ts | 0 .../src/analytics/event-dialog.element.ts | 0 .../Client/src/analytics/event-rows.test.ts | 0 .../Client/src/analytics/event-rows.ts | 0 .../src/analytics/event-table.element.ts | 0 .../Client/src/analytics/flag-card.element.ts | 0 .../src/analytics/history-chart.element.ts | 0 .../src/analytics/metric-comparison.test.ts | 0 .../Client/src/analytics/metric-comparison.ts | 0 .../Client/src/analytics/report-error.test.ts | 0 .../Client/src/analytics/report-error.ts | 0 .../src/analytics/request-coordinator.test.ts | 0 .../src/analytics/request-coordinator.ts | 0 .../src/analytics/utm-capability.test.ts | 0 .../Client/src/analytics/utm-capability.ts | 0 .../Client/src/api/client.gen.ts | 0 .../Client/src/api/client/client.gen.ts | 0 .../Client/src/api/client/index.ts | 0 .../Client/src/api/client/types.gen.ts | 0 .../Client/src/api/client/utils.gen.ts | 0 .../Client/src/api/core/auth.gen.ts | 0 .../Client/src/api/core/bodySerializer.gen.ts | 0 .../Client/src/api/core/params.gen.ts | 0 .../Client/src/api/core/pathSerializer.gen.ts | 0 .../src/api/core/queryKeySerializer.gen.ts | 0 .../src/api/core/serverSentEvents.gen.ts | 0 .../Client/src/api/core/types.gen.ts | 0 .../Client/src/api/core/utils.gen.ts | 0 .../Client/src/api/index.ts | 0 .../Client/src/api/sdk.gen.ts | 2 +- .../Client/src/api/types.gen.ts | 0 .../Client/src/bundle.manifests.ts | 0 .../Client/src/entrypoints/entrypoint.ts | 0 .../Client/src/entrypoints/manifest.ts | 4 +- .../Client/src/manifests.test.ts | 8 +-- .../Client/src/manifests.ts | 30 +++++----- .../src/section/analytics-availability.ts | 0 .../analytics-enabled.condition.test.ts | 6 +- .../section/analytics-enabled.condition.ts | 4 +- .../src/section/analytics-section.element.ts | 0 .../src/settings/connection-editor.element.ts | 0 .../Client/src/settings/mock-scenarios.ts | 0 .../settings/settings-dashboard.element.ts | 20 +++---- .../src/settings/settings-dashboard.test.ts | 4 +- .../src/settings/settings-model.test.ts | 0 .../Client/src/settings/settings-model.ts | 0 .../workspace/analytics-workspace.element.ts | 0 .../workspace/document-analytics.condition.ts | 4 +- .../Client/tsconfig.json | 0 .../Client/vite.config.ts | 4 +- .../Composers/WebAnalyticsApiComposer.cs} | 10 ++-- .../MockAnalyticsScenarioMetadata.cs | 4 +- .../VercelAnalyticsConnectionRegistry.cs | 4 +- .../Configuration/VercelAnalyticsOptions.cs | 4 +- .../VercelAnalyticsOptionsValidator.cs | 2 +- .../Configuration/VercelAnalyticsSettings.cs | 6 +- .../VercelAnalyticsSettingsValidator.cs | 2 +- src/TheBuilder.WebAnalytics/Constants.cs | 7 +++ .../Controllers/AnalyticsApiConventions.cs | 4 +- .../VercelAnalyticsExceptionFilter.cs | 6 +- .../Controllers/WebAnalyticsApiController.cs} | 14 ++--- .../WebAnalyticsApiControllerBase.cs} | 4 +- .../WebAnalyticsSettingsApiController.cs} | 14 ++--- .../Models/AnalyticsModels.cs | 2 +- .../README.txt | 2 +- .../Services/AnalyticsAuthorizationService.cs | 2 +- .../Services/AnalyticsDocumentRouteService.cs | 6 +- .../Services/AnalyticsFilterParser.cs | 4 +- .../AnalyticsPublishedContentAccessor.cs | 2 +- .../Services/AnalyticsRequestPath.cs | 2 +- .../AnalyticsSectionAccessInitializer.cs | 8 +-- .../Services/IVercelAnalyticsClient.cs | 6 +- .../Services/MockVercelAnalyticsClient.cs | 6 +- .../Services/VercelAnalyticsApiException.cs | 2 +- .../Services/VercelAnalyticsClient.cs | 6 +- .../Services/VercelAnalyticsClientRouter.cs | 6 +- .../Services/VercelAnalyticsReportService.cs | 6 +- .../Services/VercelProjectNameService.cs | 4 +- .../TheBuilder.WebAnalytics.csproj} | 32 ++++++----- .../Client/public/umbraco-package.json | 14 ----- .../Client/src/analytics/dashboard-api.ts | 37 ------------- src/Umbraco.VercelAnalytics/Constants.cs | 7 --- tasks/plan.md | 52 ++++++++++++++++++ tasks/todo.md | 12 ++++ .../VercelAnalyticsOptionsValidatorTests.cs | 4 +- .../VercelAnalyticsSettingsValidatorTests.cs | 6 +- .../VercelAnalyticsProblemFactoryTests.cs | 8 +-- .../WebAnalyticsApiControllerTests.cs} | 28 +++++----- ...WebAnalyticsSettingsApiControllerTests.cs} | 14 ++--- .../AnalyticsAuthorizationServiceTests.cs | 4 +- .../AnalyticsDocumentRouteServiceTests.cs | 6 +- .../Services/AnalyticsFilterParserTests.cs | 6 +- .../AnalyticsPublishedCulturesTests.cs | 4 +- .../Services/AnalyticsRequestPathTests.cs | 4 +- .../AnalyticsSectionAccessInitializerTests.cs | 4 +- .../MockVercelAnalyticsClientTests.cs | 8 +-- .../Services/VercelAnalyticsClientTests.cs | 8 +-- .../VercelAnalyticsReportServiceTests.cs | 8 +-- .../Services/VercelProjectNameServiceTests.cs | 8 +-- .../TheBuilder.WebAnalytics.Tests.csproj} | 2 +- umbraco-marketplace-readme.md | 30 ++++++++++ umbraco-marketplace.json | 40 ++++++++++++++ 161 files changed, 437 insertions(+), 294 deletions(-) create mode 100644 TheBuilder.WebAnalytics.slnx delete mode 100644 Umbraco.VercelAnalytics.slnx create mode 100644 icon.png rename samples/{Umbraco.VercelAnalytics.Example => TheBuilder.WebAnalytics.Example}/.gitignore (100%) rename samples/{Umbraco.VercelAnalytics.Example => TheBuilder.WebAnalytics.Example}/Program.cs (100%) rename samples/{Umbraco.VercelAnalytics.Example => TheBuilder.WebAnalytics.Example}/Properties/launchSettings.json (100%) rename samples/{Umbraco.VercelAnalytics.Example/Umbraco.VercelAnalytics.Example.csproj => TheBuilder.WebAnalytics.Example/TheBuilder.WebAnalytics.Example.csproj} (93%) rename samples/{Umbraco.VercelAnalytics.Example => TheBuilder.WebAnalytics.Example}/VercelAnalyticsOpenApiComposer.cs (89%) rename samples/{Umbraco.VercelAnalytics.Example => TheBuilder.WebAnalytics.Example}/Views/Partials/blockgrid/area.cshtml (100%) rename samples/{Umbraco.VercelAnalytics.Example => TheBuilder.WebAnalytics.Example}/Views/Partials/blockgrid/areas.cshtml (100%) rename samples/{Umbraco.VercelAnalytics.Example => TheBuilder.WebAnalytics.Example}/Views/Partials/blockgrid/default.cshtml (100%) rename samples/{Umbraco.VercelAnalytics.Example => TheBuilder.WebAnalytics.Example}/Views/Partials/blockgrid/items.cshtml (100%) rename samples/{Umbraco.VercelAnalytics.Example => TheBuilder.WebAnalytics.Example}/Views/Partials/blocklist/default.cshtml (100%) rename samples/{Umbraco.VercelAnalytics.Example => TheBuilder.WebAnalytics.Example}/Views/Partials/singleblock/default.cshtml (100%) rename samples/{Umbraco.VercelAnalytics.Example => TheBuilder.WebAnalytics.Example}/Views/_ViewImports.cshtml (100%) rename samples/{Umbraco.VercelAnalytics.Example => TheBuilder.WebAnalytics.Example}/appsettings.Development.json (100%) rename samples/{Umbraco.VercelAnalytics.Example => TheBuilder.WebAnalytics.Example}/appsettings.json (100%) rename samples/{Umbraco.VercelAnalytics.Example => TheBuilder.WebAnalytics.Example}/wwwroot/favicon.ico (100%) rename samples/{Umbraco.VercelAnalytics.Example => TheBuilder.WebAnalytics.Example}/wwwroot/media/.gitkeep (100%) rename src/{Umbraco.VercelAnalytics => TheBuilder.WebAnalytics}/Client/.vscode/extensions.json (100%) rename src/{Umbraco.VercelAnalytics => TheBuilder.WebAnalytics}/Client/package.json (93%) rename src/{Umbraco.VercelAnalytics => TheBuilder.WebAnalytics}/Client/pnpm-lock.yaml (100%) create mode 100644 src/TheBuilder.WebAnalytics/Client/pnpm-workspace.yaml create mode 100644 src/TheBuilder.WebAnalytics/Client/public/umbraco-package.json rename src/{Umbraco.VercelAnalytics => TheBuilder.WebAnalytics}/Client/scripts/generate-openapi.js (90%) rename src/{Umbraco.VercelAnalytics => TheBuilder.WebAnalytics}/Client/src/analytics/analytics-breakdown-grid.element.ts (100%) rename src/{Umbraco.VercelAnalytics => TheBuilder.WebAnalytics}/Client/src/analytics/analytics-components.test.ts (99%) rename src/{Umbraco.VercelAnalytics => TheBuilder.WebAnalytics}/Client/src/analytics/analytics-dashboard-header.element.ts (100%) rename src/{Umbraco.VercelAnalytics => TheBuilder.WebAnalytics}/Client/src/analytics/analytics-dashboard.controller.test.ts (100%) rename src/{Umbraco.VercelAnalytics => TheBuilder.WebAnalytics}/Client/src/analytics/analytics-dashboard.controller.ts (99%) rename src/{Umbraco.VercelAnalytics => TheBuilder.WebAnalytics}/Client/src/analytics/analytics-dashboard.element.ts (100%) rename src/{Umbraco.VercelAnalytics => TheBuilder.WebAnalytics}/Client/src/analytics/analytics-dashboard.styles.ts (100%) rename src/{Umbraco.VercelAnalytics => TheBuilder.WebAnalytics}/Client/src/analytics/analytics-summary.element.ts (100%) rename src/{Umbraco.VercelAnalytics => TheBuilder.WebAnalytics}/Client/src/analytics/async-state.ts (100%) rename src/{Umbraco.VercelAnalytics => TheBuilder.WebAnalytics}/Client/src/analytics/breakdown-dialog.element.ts (100%) rename src/{Umbraco.VercelAnalytics => TheBuilder.WebAnalytics}/Client/src/analytics/breakdown-rows.test.ts (100%) rename src/{Umbraco.VercelAnalytics => TheBuilder.WebAnalytics}/Client/src/analytics/breakdown-rows.ts (100%) rename src/{Umbraco.VercelAnalytics => TheBuilder.WebAnalytics}/Client/src/analytics/breakdown-table.element.ts (100%) rename src/{Umbraco.VercelAnalytics => TheBuilder.WebAnalytics}/Client/src/analytics/chart-value.test.ts (100%) rename src/{Umbraco.VercelAnalytics => TheBuilder.WebAnalytics}/Client/src/analytics/chart-value.ts (100%) rename src/{Umbraco.VercelAnalytics => TheBuilder.WebAnalytics}/Client/src/analytics/country-display.test.ts (100%) rename src/{Umbraco.VercelAnalytics => TheBuilder.WebAnalytics}/Client/src/analytics/country-display.ts (100%) create mode 100644 src/TheBuilder.WebAnalytics/Client/src/analytics/dashboard-api.ts rename src/{Umbraco.VercelAnalytics => TheBuilder.WebAnalytics}/Client/src/analytics/dashboard-cards.test.ts (100%) rename src/{Umbraco.VercelAnalytics => TheBuilder.WebAnalytics}/Client/src/analytics/dashboard-cards.ts (100%) rename src/{Umbraco.VercelAnalytics => TheBuilder.WebAnalytics}/Client/src/analytics/dashboard-report-loader.test.ts (98%) rename src/{Umbraco.VercelAnalytics => TheBuilder.WebAnalytics}/Client/src/analytics/dashboard-report-loader.ts (100%) rename src/{Umbraco.VercelAnalytics => TheBuilder.WebAnalytics}/Client/src/analytics/dashboard-url-state.test.ts (100%) rename src/{Umbraco.VercelAnalytics => TheBuilder.WebAnalytics}/Client/src/analytics/dashboard-url-state.ts (100%) rename src/{Umbraco.VercelAnalytics => TheBuilder.WebAnalytics}/Client/src/analytics/date-range-picker.element.ts (100%) rename src/{Umbraco.VercelAnalytics => TheBuilder.WebAnalytics}/Client/src/analytics/date-range.test.ts (100%) rename src/{Umbraco.VercelAnalytics => TheBuilder.WebAnalytics}/Client/src/analytics/date-range.ts (100%) rename src/{Umbraco.VercelAnalytics => TheBuilder.WebAnalytics}/Client/src/analytics/document-route.test.ts (100%) rename src/{Umbraco.VercelAnalytics => TheBuilder.WebAnalytics}/Client/src/analytics/document-route.ts (100%) rename src/{Umbraco.VercelAnalytics => TheBuilder.WebAnalytics}/Client/src/analytics/event-details-dialog.element.ts (100%) rename src/{Umbraco.VercelAnalytics => TheBuilder.WebAnalytics}/Client/src/analytics/event-dialog.element.ts (100%) rename src/{Umbraco.VercelAnalytics => TheBuilder.WebAnalytics}/Client/src/analytics/event-rows.test.ts (100%) rename src/{Umbraco.VercelAnalytics => TheBuilder.WebAnalytics}/Client/src/analytics/event-rows.ts (100%) rename src/{Umbraco.VercelAnalytics => TheBuilder.WebAnalytics}/Client/src/analytics/event-table.element.ts (100%) rename src/{Umbraco.VercelAnalytics => TheBuilder.WebAnalytics}/Client/src/analytics/flag-card.element.ts (100%) rename src/{Umbraco.VercelAnalytics => TheBuilder.WebAnalytics}/Client/src/analytics/history-chart.element.ts (100%) rename src/{Umbraco.VercelAnalytics => TheBuilder.WebAnalytics}/Client/src/analytics/metric-comparison.test.ts (100%) rename src/{Umbraco.VercelAnalytics => TheBuilder.WebAnalytics}/Client/src/analytics/metric-comparison.ts (100%) rename src/{Umbraco.VercelAnalytics => TheBuilder.WebAnalytics}/Client/src/analytics/report-error.test.ts (100%) rename src/{Umbraco.VercelAnalytics => TheBuilder.WebAnalytics}/Client/src/analytics/report-error.ts (100%) rename src/{Umbraco.VercelAnalytics => TheBuilder.WebAnalytics}/Client/src/analytics/request-coordinator.test.ts (100%) rename src/{Umbraco.VercelAnalytics => TheBuilder.WebAnalytics}/Client/src/analytics/request-coordinator.ts (100%) rename src/{Umbraco.VercelAnalytics => TheBuilder.WebAnalytics}/Client/src/analytics/utm-capability.test.ts (100%) rename src/{Umbraco.VercelAnalytics => TheBuilder.WebAnalytics}/Client/src/analytics/utm-capability.ts (100%) rename src/{Umbraco.VercelAnalytics => TheBuilder.WebAnalytics}/Client/src/api/client.gen.ts (100%) rename src/{Umbraco.VercelAnalytics => TheBuilder.WebAnalytics}/Client/src/api/client/client.gen.ts (100%) rename src/{Umbraco.VercelAnalytics => TheBuilder.WebAnalytics}/Client/src/api/client/index.ts (100%) rename src/{Umbraco.VercelAnalytics => TheBuilder.WebAnalytics}/Client/src/api/client/types.gen.ts (100%) rename src/{Umbraco.VercelAnalytics => TheBuilder.WebAnalytics}/Client/src/api/client/utils.gen.ts (100%) rename src/{Umbraco.VercelAnalytics => TheBuilder.WebAnalytics}/Client/src/api/core/auth.gen.ts (100%) rename src/{Umbraco.VercelAnalytics => TheBuilder.WebAnalytics}/Client/src/api/core/bodySerializer.gen.ts (100%) rename src/{Umbraco.VercelAnalytics => TheBuilder.WebAnalytics}/Client/src/api/core/params.gen.ts (100%) rename src/{Umbraco.VercelAnalytics => TheBuilder.WebAnalytics}/Client/src/api/core/pathSerializer.gen.ts (100%) rename src/{Umbraco.VercelAnalytics => TheBuilder.WebAnalytics}/Client/src/api/core/queryKeySerializer.gen.ts (100%) rename src/{Umbraco.VercelAnalytics => TheBuilder.WebAnalytics}/Client/src/api/core/serverSentEvents.gen.ts (100%) rename src/{Umbraco.VercelAnalytics => TheBuilder.WebAnalytics}/Client/src/api/core/types.gen.ts (100%) rename src/{Umbraco.VercelAnalytics => TheBuilder.WebAnalytics}/Client/src/api/core/utils.gen.ts (100%) rename src/{Umbraco.VercelAnalytics => TheBuilder.WebAnalytics}/Client/src/api/index.ts (100%) rename src/{Umbraco.VercelAnalytics => TheBuilder.WebAnalytics}/Client/src/api/sdk.gen.ts (99%) rename src/{Umbraco.VercelAnalytics => TheBuilder.WebAnalytics}/Client/src/api/types.gen.ts (100%) rename src/{Umbraco.VercelAnalytics => TheBuilder.WebAnalytics}/Client/src/bundle.manifests.ts (100%) rename src/{Umbraco.VercelAnalytics => TheBuilder.WebAnalytics}/Client/src/entrypoints/entrypoint.ts (100%) rename src/{Umbraco.VercelAnalytics => TheBuilder.WebAnalytics}/Client/src/entrypoints/manifest.ts (57%) rename src/{Umbraco.VercelAnalytics => TheBuilder.WebAnalytics}/Client/src/manifests.test.ts (61%) rename src/{Umbraco.VercelAnalytics => TheBuilder.WebAnalytics}/Client/src/manifests.ts (60%) rename src/{Umbraco.VercelAnalytics => TheBuilder.WebAnalytics}/Client/src/section/analytics-availability.ts (100%) rename src/{Umbraco.VercelAnalytics => TheBuilder.WebAnalytics}/Client/src/section/analytics-enabled.condition.test.ts (90%) rename src/{Umbraco.VercelAnalytics => TheBuilder.WebAnalytics}/Client/src/section/analytics-enabled.condition.ts (90%) rename src/{Umbraco.VercelAnalytics => TheBuilder.WebAnalytics}/Client/src/section/analytics-section.element.ts (100%) rename src/{Umbraco.VercelAnalytics => TheBuilder.WebAnalytics}/Client/src/settings/connection-editor.element.ts (100%) rename src/{Umbraco.VercelAnalytics => TheBuilder.WebAnalytics}/Client/src/settings/mock-scenarios.ts (100%) rename src/{Umbraco.VercelAnalytics => TheBuilder.WebAnalytics}/Client/src/settings/settings-dashboard.element.ts (96%) rename src/{Umbraco.VercelAnalytics => TheBuilder.WebAnalytics}/Client/src/settings/settings-dashboard.test.ts (98%) rename src/{Umbraco.VercelAnalytics => TheBuilder.WebAnalytics}/Client/src/settings/settings-model.test.ts (100%) rename src/{Umbraco.VercelAnalytics => TheBuilder.WebAnalytics}/Client/src/settings/settings-model.ts (100%) rename src/{Umbraco.VercelAnalytics => TheBuilder.WebAnalytics}/Client/src/workspace/analytics-workspace.element.ts (100%) rename src/{Umbraco.VercelAnalytics => TheBuilder.WebAnalytics}/Client/src/workspace/document-analytics.condition.ts (88%) rename src/{Umbraco.VercelAnalytics => TheBuilder.WebAnalytics}/Client/tsconfig.json (100%) rename src/{Umbraco.VercelAnalytics => TheBuilder.WebAnalytics}/Client/vite.config.ts (64%) rename src/{Umbraco.VercelAnalytics/Composers/UmbracoVercelAnalyticsApiComposer.cs => TheBuilder.WebAnalytics/Composers/WebAnalyticsApiComposer.cs} (90%) rename src/{Umbraco.VercelAnalytics => TheBuilder.WebAnalytics}/Configuration/MockAnalyticsScenarioMetadata.cs (84%) rename src/{Umbraco.VercelAnalytics => TheBuilder.WebAnalytics}/Configuration/VercelAnalyticsConnectionRegistry.cs (98%) rename src/{Umbraco.VercelAnalytics => TheBuilder.WebAnalytics}/Configuration/VercelAnalyticsOptions.cs (92%) rename src/{Umbraco.VercelAnalytics => TheBuilder.WebAnalytics}/Configuration/VercelAnalyticsOptionsValidator.cs (92%) rename src/{Umbraco.VercelAnalytics => TheBuilder.WebAnalytics}/Configuration/VercelAnalyticsSettings.cs (97%) rename src/{Umbraco.VercelAnalytics => TheBuilder.WebAnalytics}/Configuration/VercelAnalyticsSettingsValidator.cs (98%) create mode 100644 src/TheBuilder.WebAnalytics/Constants.cs rename src/{Umbraco.VercelAnalytics => TheBuilder.WebAnalytics}/Controllers/AnalyticsApiConventions.cs (88%) rename src/{Umbraco.VercelAnalytics => TheBuilder.WebAnalytics}/Controllers/VercelAnalyticsExceptionFilter.cs (96%) rename src/{Umbraco.VercelAnalytics/Controllers/UmbracoVercelAnalyticsApiController.cs => TheBuilder.WebAnalytics/Controllers/WebAnalyticsApiController.cs} (97%) rename src/{Umbraco.VercelAnalytics/Controllers/UmbracoVercelAnalyticsApiControllerBase.cs => TheBuilder.WebAnalytics/Controllers/WebAnalyticsApiControllerBase.cs} (77%) rename src/{Umbraco.VercelAnalytics/Controllers/UmbracoVercelAnalyticsSettingsApiController.cs => TheBuilder.WebAnalytics/Controllers/WebAnalyticsSettingsApiController.cs} (94%) rename src/{Umbraco.VercelAnalytics => TheBuilder.WebAnalytics}/Models/AnalyticsModels.cs (99%) rename src/{Umbraco.VercelAnalytics => TheBuilder.WebAnalytics}/README.txt (93%) rename src/{Umbraco.VercelAnalytics => TheBuilder.WebAnalytics}/Services/AnalyticsAuthorizationService.cs (97%) rename src/{Umbraco.VercelAnalytics => TheBuilder.WebAnalytics}/Services/AnalyticsDocumentRouteService.cs (95%) rename src/{Umbraco.VercelAnalytics => TheBuilder.WebAnalytics}/Services/AnalyticsFilterParser.cs (95%) rename src/{Umbraco.VercelAnalytics => TheBuilder.WebAnalytics}/Services/AnalyticsPublishedContentAccessor.cs (99%) rename src/{Umbraco.VercelAnalytics => TheBuilder.WebAnalytics}/Services/AnalyticsRequestPath.cs (88%) rename src/{Umbraco.VercelAnalytics => TheBuilder.WebAnalytics}/Services/AnalyticsSectionAccessInitializer.cs (82%) rename src/{Umbraco.VercelAnalytics => TheBuilder.WebAnalytics}/Services/IVercelAnalyticsClient.cs (94%) rename src/{Umbraco.VercelAnalytics => TheBuilder.WebAnalytics}/Services/MockVercelAnalyticsClient.cs (99%) rename src/{Umbraco.VercelAnalytics => TheBuilder.WebAnalytics}/Services/VercelAnalyticsApiException.cs (83%) rename src/{Umbraco.VercelAnalytics => TheBuilder.WebAnalytics}/Services/VercelAnalyticsClient.cs (99%) rename src/{Umbraco.VercelAnalytics => TheBuilder.WebAnalytics}/Services/VercelAnalyticsClientRouter.cs (96%) rename src/{Umbraco.VercelAnalytics => TheBuilder.WebAnalytics}/Services/VercelAnalyticsReportService.cs (98%) rename src/{Umbraco.VercelAnalytics => TheBuilder.WebAnalytics}/Services/VercelProjectNameService.cs (95%) rename src/{Umbraco.VercelAnalytics/Umbraco.VercelAnalytics.csproj => TheBuilder.WebAnalytics/TheBuilder.WebAnalytics.csproj} (63%) delete mode 100644 src/Umbraco.VercelAnalytics/Client/public/umbraco-package.json delete mode 100644 src/Umbraco.VercelAnalytics/Client/src/analytics/dashboard-api.ts delete mode 100644 src/Umbraco.VercelAnalytics/Constants.cs create mode 100644 tasks/plan.md create mode 100644 tasks/todo.md rename tests/{Umbraco.VercelAnalytics.Tests => TheBuilder.WebAnalytics.Tests}/Configuration/VercelAnalyticsOptionsValidatorTests.cs (98%) rename tests/{Umbraco.VercelAnalytics.Tests => TheBuilder.WebAnalytics.Tests}/Configuration/VercelAnalyticsSettingsValidatorTests.cs (98%) rename tests/{Umbraco.VercelAnalytics.Tests => TheBuilder.WebAnalytics.Tests}/Controllers/VercelAnalyticsProblemFactoryTests.cs (95%) rename tests/{Umbraco.VercelAnalytics.Tests/Controllers/UmbracoVercelAnalyticsApiControllerTests.cs => TheBuilder.WebAnalytics.Tests/Controllers/WebAnalyticsApiControllerTests.cs} (93%) rename tests/{Umbraco.VercelAnalytics.Tests/Controllers/UmbracoVercelAnalyticsSettingsApiControllerTests.cs => TheBuilder.WebAnalytics.Tests/Controllers/WebAnalyticsSettingsApiControllerTests.cs} (86%) rename tests/{Umbraco.VercelAnalytics.Tests => TheBuilder.WebAnalytics.Tests}/Services/AnalyticsAuthorizationServiceTests.cs (90%) rename tests/{Umbraco.VercelAnalytics.Tests => TheBuilder.WebAnalytics.Tests}/Services/AnalyticsDocumentRouteServiceTests.cs (98%) rename tests/{Umbraco.VercelAnalytics.Tests => TheBuilder.WebAnalytics.Tests}/Services/AnalyticsFilterParserTests.cs (91%) rename tests/{Umbraco.VercelAnalytics.Tests => TheBuilder.WebAnalytics.Tests}/Services/AnalyticsPublishedCulturesTests.cs (94%) rename tests/{Umbraco.VercelAnalytics.Tests => TheBuilder.WebAnalytics.Tests}/Services/AnalyticsRequestPathTests.cs (82%) rename tests/{Umbraco.VercelAnalytics.Tests => TheBuilder.WebAnalytics.Tests}/Services/AnalyticsSectionAccessInitializerTests.cs (86%) rename tests/{Umbraco.VercelAnalytics.Tests => TheBuilder.WebAnalytics.Tests}/Services/MockVercelAnalyticsClientTests.cs (97%) rename tests/{Umbraco.VercelAnalytics.Tests => TheBuilder.WebAnalytics.Tests}/Services/VercelAnalyticsClientTests.cs (99%) rename tests/{Umbraco.VercelAnalytics.Tests => TheBuilder.WebAnalytics.Tests}/Services/VercelAnalyticsReportServiceTests.cs (98%) rename tests/{Umbraco.VercelAnalytics.Tests => TheBuilder.WebAnalytics.Tests}/Services/VercelProjectNameServiceTests.cs (95%) rename tests/{Umbraco.VercelAnalytics.Tests/Umbraco.VercelAnalytics.Tests.csproj => TheBuilder.WebAnalytics.Tests/TheBuilder.WebAnalytics.Tests.csproj} (87%) create mode 100644 umbraco-marketplace-readme.md create mode 100644 umbraco-marketplace.json diff --git a/.gitignore b/.gitignore index 2dced08..be98c26 100644 --- a/.gitignore +++ b/.gitignore @@ -1,14 +1,15 @@ **/bin/ **/obj/ **/node_modules/ +.pnpm-store/ **/coverage/ **/.vite/ artifacts/ -src/Umbraco.VercelAnalytics/wwwroot/App_Plugins/ -samples/Umbraco.VercelAnalytics.Example/umbraco/Data/ -samples/Umbraco.VercelAnalytics.Example/umbraco/Logs/ -samples/Umbraco.VercelAnalytics.Example/wwwroot/App_Plugins/ -samples/Umbraco.VercelAnalytics.Example/appsettings-schema.json +src/TheBuilder.WebAnalytics/wwwroot/App_Plugins/ +samples/TheBuilder.WebAnalytics.Example/umbraco/Data/ +samples/TheBuilder.WebAnalytics.Example/umbraco/Logs/ +samples/TheBuilder.WebAnalytics.Example/wwwroot/App_Plugins/ +samples/TheBuilder.WebAnalytics.Example/appsettings-schema.json *.db *.db-shm *.db-wal diff --git a/.impeccable/design.json b/.impeccable/design.json index 9a932af..209c127 100644 --- a/.impeccable/design.json +++ b/.impeccable/design.json @@ -1,7 +1,7 @@ { "schemaVersion": 2, "generatedAt": "2026-07-16T19:48:26Z", - "title": "Design System: Umbraco Vercel Analytics", + "title": "Design System: Web Analytics", "extensions": { "colorMeta": { "backoffice-ink": { @@ -172,7 +172,7 @@ ], "narrative": { "northStar": "The Editorial Instrument", - "overview": "Umbraco Vercel Analytics is a precise but approachable instrument inside the editorial workspace. It should reveal the traffic signal an editor needs, then get out of the way. The visual language is friendly and conversational, but its structure is disciplined: familiar Umbraco controls, clear hierarchy, compact reporting, and feedback close to the action that caused it. The extension belongs to the backoffice rather than merely living inside it. It inherits Umbraco UI Library semantics, Lato typography, spacing, focus treatment, and surface hierarchy. Custom analytics patterns may borrow the clarity of Vercel Analytics, but they must be translated into Umbraco's interaction language. The system explicitly rejects the density, configuration burden, and specialist terminology of an overly dense enterprise analytics platform. It is not Google Analytics, and it must never feel like a separate third-party dashboard embedded in Umbraco.", + "overview": "Web Analytics is a precise but approachable instrument inside the editorial workspace. It should reveal the traffic signal an editor needs, then get out of the way. The visual language is friendly and conversational, but its structure is disciplined: familiar Umbraco controls, clear hierarchy, compact reporting, and feedback close to the action that caused it. The extension belongs to the backoffice rather than merely living inside it. It inherits Umbraco UI Library semantics, Lato typography, spacing, focus treatment, and surface hierarchy. Custom analytics patterns may borrow the clarity of Vercel Analytics, but they must be translated into Umbraco's interaction language. The system explicitly rejects the density, configuration burden, and specialist terminology of an overly dense enterprise analytics platform. It is not Google Analytics, and it must never feel like a separate third-party dashboard embedded in Umbraco.", "keyCharacteristics": [ "Native to Umbraco and visually continuous with the backoffice.", "Compact, calm, and focused on decisions rather than exhaustive data.", diff --git a/DESIGN.md b/DESIGN.md index 626b798..37ed6d4 100644 --- a/DESIGN.md +++ b/DESIGN.md @@ -1,5 +1,5 @@ --- -name: Umbraco Vercel Analytics +name: Web Analytics description: A native editorial instrument for clear Vercel traffic insight inside Umbraco. colors: backoffice-ink: "#060606" @@ -82,13 +82,13 @@ components: padding: "6px 9px" --- -# Design System: Umbraco Vercel Analytics +# Design System: Web Analytics ## Overview **Creative North Star: "The Editorial Instrument"** -Umbraco Vercel Analytics is a precise but approachable instrument inside the editorial workspace. It should reveal the traffic signal an editor needs, then get out of the way. The visual language is friendly and conversational, but its structure is disciplined: familiar Umbraco controls, clear hierarchy, compact reporting, and feedback close to the action that caused it. +Web Analytics is a precise but approachable instrument inside the editorial workspace. It should reveal the traffic signal an editor needs, then get out of the way. The visual language is friendly and conversational, but its structure is disciplined: familiar Umbraco controls, clear hierarchy, compact reporting, and feedback close to the action that caused it. The extension belongs to the backoffice rather than merely living inside it. It inherits Umbraco UI Library semantics, Lato typography, spacing, focus treatment, and surface hierarchy. Custom analytics patterns may borrow the clarity of Vercel Analytics, but they must be translated into Umbraco's interaction language. diff --git a/PRODUCT.md b/PRODUCT.md index 0b2392a..d741252 100644 --- a/PRODUCT.md +++ b/PRODUCT.md @@ -14,7 +14,7 @@ The primary users are content editors and marketing staff working in the authent ## Product Purpose -Umbraco Vercel Analytics brings Vercel Web Analytics into the Umbraco backoffice. It helps editors understand site and page traffic where they already manage content, while administrators retain secure control of project connections and server-side credentials. +Web Analytics brings Vercel Web Analytics into the Umbraco backoffice. It helps editors understand site and page traffic where they already manage content, while administrators retain secure control of project connections and server-side credentials. Success means that an editor can open Analytics, understand the important traffic signals quickly, and return to their content work without needing to visit Vercel or a separate analytics suite. diff --git a/README.md b/README.md index 3dfd132..a408c3c 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ -# Umbraco Vercel Analytics +# Web Analytics -`Umbraco.VercelAnalytics` displays Vercel Web Analytics in the Umbraco 17 and 18 backoffice. +`TheBuilder.WebAnalytics` displays Vercel Web Analytics in the Umbraco 17 and 18 backoffice. It provides: @@ -23,7 +23,7 @@ The package reads analytics already collected by Vercel. It does not add Vercel Add the package to the Umbraco web project: ```sh -dotnet add path/to/Your.Umbraco.Web.csproj package Umbraco.VercelAnalytics +dotnet add path/to/Your.Umbraco.Web.csproj package TheBuilder.WebAnalytics ``` The package registers its services and backoffice extensions automatically. No changes to `Program.cs` are required. @@ -75,7 +75,7 @@ The shared token is used by every connection. If a project must use a different ### 3. Configure the connection in Umbraco -Sign in as an administrator and open **Settings → Vercel Analytics**. +Sign in as an administrator and open **Settings → Web Analytics**. 1. Select **Add connection**. 2. Enter the Vercel project ID. The project name is loaded from Vercel. @@ -106,7 +106,7 @@ On the first successful package startup, the Analytics section is added to the b To give other users access, add the **Analytics** section to their Umbraco user group. Global reports require Analytics-section access. Document reports additionally require Content-section access and document read permission. -Only administrators can open or update **Settings → Vercel Analytics**. +Only administrators can open or update **Settings → Web Analytics**. ## Configuration-only setup @@ -176,7 +176,7 @@ The default cache duration is five minutes. Each Umbraco instance maintains its After deployment: -1. Open **Settings → Vercel Analytics** and confirm the shared access token says **Configured on the server**. +1. Open **Settings → Web Analytics** and confirm the shared access token says **Configured on the server**. 2. Select **Save settings**, then **Test connection**. 3. Open the global **Analytics** section and confirm totals and history load. 4. If document analytics is enabled, open a mapped published document and select its **Analytics** workspace view. @@ -198,9 +198,9 @@ The available reporting window and some dimensions depend on the Vercel plan and ## Development -When the example host runs with `ASPNETCORE_ENVIRONMENT=Development`, **Settings → Vercel Analytics** includes development data presets for a full demo, UTM campaigns, feature flags, and custom events. Add and save a mock connection like any other connection, then select it in the Analytics dashboard. Mock reports are deterministic, require no access token, and never call Vercel. Persisted mock connections become inactive when the host is not running in Development. +When the example host runs with `ASPNETCORE_ENVIRONMENT=Development`, **Settings → Web Analytics** includes development data presets for a full demo, UTM campaigns, feature flags, and custom events. Add and save a mock connection like any other connection, then select it in the Analytics dashboard. Mock reports are deterministic, require no access token, and never call Vercel. Persisted mock connections become inactive when the host is not running in Development. -The client uses pnpm 11. From `src/Umbraco.VercelAnalytics/Client`: +The client uses pnpm 11. From `src/TheBuilder.WebAnalytics/Client`: ```sh pnpm install @@ -216,12 +216,12 @@ Run the example host against the Umbraco version whose document you want to use: ```sh # Umbraco 17 dotnet run \ - --project samples/Umbraco.VercelAnalytics.Example \ + --project samples/TheBuilder.WebAnalytics.Example \ -p:UmbracoVersion=17.1.0 # Umbraco 18 dotnet run \ - --project samples/Umbraco.VercelAnalytics.Example \ + --project samples/TheBuilder.WebAnalytics.Example \ -p:UmbracoVersion=18.0.0 ``` @@ -230,13 +230,13 @@ Use a separate database for each major when switching the example host between v Then regenerate the client from the matching development endpoint: ```sh -cd src/Umbraco.VercelAnalytics/Client +cd src/TheBuilder.WebAnalytics/Client # Umbraco 17 corepack pnpm generate-client -- \ - https://localhost:44389/umbraco/swagger/umbracovercelanalytics/swagger.json + https://localhost:44389/umbraco/swagger/thebuilderwebanalytics/swagger.json # Umbraco 18 corepack pnpm generate-client -- \ - https://localhost:44389/umbraco/openapi/umbracovercelanalytics.json + https://localhost:44389/umbraco/openapi/thebuilderwebanalytics.json ``` diff --git a/TheBuilder.WebAnalytics.slnx b/TheBuilder.WebAnalytics.slnx new file mode 100644 index 0000000..ea531ca --- /dev/null +++ b/TheBuilder.WebAnalytics.slnx @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/Umbraco.VercelAnalytics.slnx b/Umbraco.VercelAnalytics.slnx deleted file mode 100644 index 0d6c13f..0000000 --- a/Umbraco.VercelAnalytics.slnx +++ /dev/null @@ -1,11 +0,0 @@ - - - - - - - - - - - diff --git a/icon.png b/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..072f5d71bd1171bb6b67e7077524aada2a5cad81 GIT binary patch literal 251927 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

>_Wv1*ald}D^zn%6Uw9w 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

=y?iz39FQkV&-%*QdDbsFy05SWCJZxRO196@Tz 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 IM6N<$f|$8@J^%m! literal 0 HcmV?d00001 diff --git a/samples/Umbraco.VercelAnalytics.Example/.gitignore b/samples/TheBuilder.WebAnalytics.Example/.gitignore similarity index 100% rename from samples/Umbraco.VercelAnalytics.Example/.gitignore rename to samples/TheBuilder.WebAnalytics.Example/.gitignore diff --git a/samples/Umbraco.VercelAnalytics.Example/Program.cs b/samples/TheBuilder.WebAnalytics.Example/Program.cs similarity index 100% rename from samples/Umbraco.VercelAnalytics.Example/Program.cs rename to samples/TheBuilder.WebAnalytics.Example/Program.cs diff --git a/samples/Umbraco.VercelAnalytics.Example/Properties/launchSettings.json b/samples/TheBuilder.WebAnalytics.Example/Properties/launchSettings.json similarity index 100% rename from samples/Umbraco.VercelAnalytics.Example/Properties/launchSettings.json rename to samples/TheBuilder.WebAnalytics.Example/Properties/launchSettings.json diff --git a/samples/Umbraco.VercelAnalytics.Example/Umbraco.VercelAnalytics.Example.csproj b/samples/TheBuilder.WebAnalytics.Example/TheBuilder.WebAnalytics.Example.csproj similarity index 93% rename from samples/Umbraco.VercelAnalytics.Example/Umbraco.VercelAnalytics.Example.csproj rename to samples/TheBuilder.WebAnalytics.Example/TheBuilder.WebAnalytics.Example.csproj index c112aab..012a9c4 100644 --- a/samples/Umbraco.VercelAnalytics.Example/Umbraco.VercelAnalytics.Example.csproj +++ b/samples/TheBuilder.WebAnalytics.Example/TheBuilder.WebAnalytics.Example.csproj @@ -2,7 +2,7 @@ net10.0 enable - enable + enable false 17.1.0 $(DefineConstants);UMBRACO_18_OR_LATER @@ -20,7 +20,7 @@ - + diff --git a/samples/Umbraco.VercelAnalytics.Example/VercelAnalyticsOpenApiComposer.cs b/samples/TheBuilder.WebAnalytics.Example/VercelAnalyticsOpenApiComposer.cs similarity index 89% rename from samples/Umbraco.VercelAnalytics.Example/VercelAnalyticsOpenApiComposer.cs rename to samples/TheBuilder.WebAnalytics.Example/VercelAnalyticsOpenApiComposer.cs index c08b38c..0259a45 100644 --- a/samples/Umbraco.VercelAnalytics.Example/VercelAnalyticsOpenApiComposer.cs +++ b/samples/TheBuilder.WebAnalytics.Example/VercelAnalyticsOpenApiComposer.cs @@ -14,9 +14,9 @@ #endif using Umbraco.Cms.Core.Composing; using Umbraco.Cms.Core.DependencyInjection; -using Umbraco.VercelAnalytics; +using TheBuilder.WebAnalytics; -namespace Umbraco.VercelAnalytics.Example; +namespace TheBuilder.WebAnalytics.Example; public sealed class VercelAnalyticsOpenApiComposer : IComposer { @@ -26,14 +26,14 @@ public void Compose(IUmbracoBuilder builder) builder.AddBackOfficeOpenApiDocument( Constants.ApiName, document => document - .WithTitle("Umbraco Vercel Analytics Backoffice API") + .WithTitle("Web Analytics Backoffice API") .WithBackOfficeAuthentication() .ConfigureOpenApiOptions(options => options.AddOperationTransformer( (operation, context, _) => { if (context.Description.ActionDescriptor is ControllerActionDescriptor controller && controller.ControllerTypeInfo.Namespace?.StartsWith( - "Umbraco.VercelAnalytics.Controllers", + "TheBuilder.WebAnalytics.Controllers", StringComparison.InvariantCultureIgnoreCase) is true) { operation.OperationId = context.Description.ActionDescriptor.RouteValues["action"]; @@ -49,7 +49,7 @@ public void Compose(IUmbracoBuilder builder) Constants.ApiName, new OpenApiInfo { - Title = "Umbraco Vercel Analytics Backoffice API", + Title = "Web Analytics Backoffice API", Version = "1.0", }); options.OperationFilter(); @@ -70,7 +70,7 @@ protected override bool CanHandle( ApiDescription apiDescription, ControllerActionDescriptor controllerActionDescriptor) => controllerActionDescriptor.ControllerTypeInfo.Namespace?.StartsWith( - "Umbraco.VercelAnalytics.Controllers", + "TheBuilder.WebAnalytics.Controllers", StringComparison.InvariantCultureIgnoreCase) is true; public override string Handle(ApiDescription apiDescription) diff --git a/samples/Umbraco.VercelAnalytics.Example/Views/Partials/blockgrid/area.cshtml b/samples/TheBuilder.WebAnalytics.Example/Views/Partials/blockgrid/area.cshtml similarity index 100% rename from samples/Umbraco.VercelAnalytics.Example/Views/Partials/blockgrid/area.cshtml rename to samples/TheBuilder.WebAnalytics.Example/Views/Partials/blockgrid/area.cshtml diff --git a/samples/Umbraco.VercelAnalytics.Example/Views/Partials/blockgrid/areas.cshtml b/samples/TheBuilder.WebAnalytics.Example/Views/Partials/blockgrid/areas.cshtml similarity index 100% rename from samples/Umbraco.VercelAnalytics.Example/Views/Partials/blockgrid/areas.cshtml rename to samples/TheBuilder.WebAnalytics.Example/Views/Partials/blockgrid/areas.cshtml diff --git a/samples/Umbraco.VercelAnalytics.Example/Views/Partials/blockgrid/default.cshtml b/samples/TheBuilder.WebAnalytics.Example/Views/Partials/blockgrid/default.cshtml similarity index 100% rename from samples/Umbraco.VercelAnalytics.Example/Views/Partials/blockgrid/default.cshtml rename to samples/TheBuilder.WebAnalytics.Example/Views/Partials/blockgrid/default.cshtml diff --git a/samples/Umbraco.VercelAnalytics.Example/Views/Partials/blockgrid/items.cshtml b/samples/TheBuilder.WebAnalytics.Example/Views/Partials/blockgrid/items.cshtml similarity index 100% rename from samples/Umbraco.VercelAnalytics.Example/Views/Partials/blockgrid/items.cshtml rename to samples/TheBuilder.WebAnalytics.Example/Views/Partials/blockgrid/items.cshtml diff --git a/samples/Umbraco.VercelAnalytics.Example/Views/Partials/blocklist/default.cshtml b/samples/TheBuilder.WebAnalytics.Example/Views/Partials/blocklist/default.cshtml similarity index 100% rename from samples/Umbraco.VercelAnalytics.Example/Views/Partials/blocklist/default.cshtml rename to samples/TheBuilder.WebAnalytics.Example/Views/Partials/blocklist/default.cshtml diff --git a/samples/Umbraco.VercelAnalytics.Example/Views/Partials/singleblock/default.cshtml b/samples/TheBuilder.WebAnalytics.Example/Views/Partials/singleblock/default.cshtml similarity index 100% rename from samples/Umbraco.VercelAnalytics.Example/Views/Partials/singleblock/default.cshtml rename to samples/TheBuilder.WebAnalytics.Example/Views/Partials/singleblock/default.cshtml diff --git a/samples/Umbraco.VercelAnalytics.Example/Views/_ViewImports.cshtml b/samples/TheBuilder.WebAnalytics.Example/Views/_ViewImports.cshtml similarity index 100% rename from samples/Umbraco.VercelAnalytics.Example/Views/_ViewImports.cshtml rename to samples/TheBuilder.WebAnalytics.Example/Views/_ViewImports.cshtml diff --git a/samples/Umbraco.VercelAnalytics.Example/appsettings.Development.json b/samples/TheBuilder.WebAnalytics.Example/appsettings.Development.json similarity index 100% rename from samples/Umbraco.VercelAnalytics.Example/appsettings.Development.json rename to samples/TheBuilder.WebAnalytics.Example/appsettings.Development.json diff --git a/samples/Umbraco.VercelAnalytics.Example/appsettings.json b/samples/TheBuilder.WebAnalytics.Example/appsettings.json similarity index 100% rename from samples/Umbraco.VercelAnalytics.Example/appsettings.json rename to samples/TheBuilder.WebAnalytics.Example/appsettings.json diff --git a/samples/Umbraco.VercelAnalytics.Example/wwwroot/favicon.ico b/samples/TheBuilder.WebAnalytics.Example/wwwroot/favicon.ico similarity index 100% rename from samples/Umbraco.VercelAnalytics.Example/wwwroot/favicon.ico rename to samples/TheBuilder.WebAnalytics.Example/wwwroot/favicon.ico diff --git a/samples/Umbraco.VercelAnalytics.Example/wwwroot/media/.gitkeep b/samples/TheBuilder.WebAnalytics.Example/wwwroot/media/.gitkeep similarity index 100% rename from samples/Umbraco.VercelAnalytics.Example/wwwroot/media/.gitkeep rename to samples/TheBuilder.WebAnalytics.Example/wwwroot/media/.gitkeep diff --git a/src/Umbraco.VercelAnalytics/Client/.vscode/extensions.json b/src/TheBuilder.WebAnalytics/Client/.vscode/extensions.json similarity index 100% rename from src/Umbraco.VercelAnalytics/Client/.vscode/extensions.json rename to src/TheBuilder.WebAnalytics/Client/.vscode/extensions.json diff --git a/src/Umbraco.VercelAnalytics/Client/package.json b/src/TheBuilder.WebAnalytics/Client/package.json similarity index 93% rename from src/Umbraco.VercelAnalytics/Client/package.json rename to src/TheBuilder.WebAnalytics/Client/package.json index f8e450a..b08cca0 100644 --- a/src/Umbraco.VercelAnalytics/Client/package.json +++ b/src/TheBuilder.WebAnalytics/Client/package.json @@ -1,5 +1,5 @@ { - "name": "umbraco-vercel-analytics", + "name": "thebuilder-web-analytics", "private": true, "version": "0.1.0", "type": "module", diff --git a/src/Umbraco.VercelAnalytics/Client/pnpm-lock.yaml b/src/TheBuilder.WebAnalytics/Client/pnpm-lock.yaml similarity index 100% rename from src/Umbraco.VercelAnalytics/Client/pnpm-lock.yaml rename to src/TheBuilder.WebAnalytics/Client/pnpm-lock.yaml diff --git a/src/TheBuilder.WebAnalytics/Client/pnpm-workspace.yaml b/src/TheBuilder.WebAnalytics/Client/pnpm-workspace.yaml new file mode 100644 index 0000000..5ed0b5a --- /dev/null +++ b/src/TheBuilder.WebAnalytics/Client/pnpm-workspace.yaml @@ -0,0 +1,2 @@ +allowBuilds: + esbuild: true diff --git a/src/TheBuilder.WebAnalytics/Client/public/umbraco-package.json b/src/TheBuilder.WebAnalytics/Client/public/umbraco-package.json new file mode 100644 index 0000000..afd1af9 --- /dev/null +++ b/src/TheBuilder.WebAnalytics/Client/public/umbraco-package.json @@ -0,0 +1,14 @@ +{ + "id": "TheBuilder.WebAnalytics", + "name": "Web Analytics", + "version": "0.1.0", + "allowTelemetry": false, + "extensions": [ + { + "name": "Web Analytics Bundle", + "alias": "TheBuilder.WebAnalytics.Bundle", + "type": "bundle", + "js": "/App_Plugins/TheBuilder.WebAnalytics/web-analytics.js" + } + ] +} diff --git a/src/Umbraco.VercelAnalytics/Client/scripts/generate-openapi.js b/src/TheBuilder.WebAnalytics/Client/scripts/generate-openapi.js similarity index 90% rename from src/Umbraco.VercelAnalytics/Client/scripts/generate-openapi.js rename to src/TheBuilder.WebAnalytics/Client/scripts/generate-openapi.js index 73d6cd0..64f63cc 100644 --- a/src/Umbraco.VercelAnalytics/Client/scripts/generate-openapi.js +++ b/src/TheBuilder.WebAnalytics/Client/scripts/generate-openapi.js @@ -9,8 +9,8 @@ const swaggerUrl = process.argv.slice(2).find((argument) => argument !== '--'); if (swaggerUrl === undefined) { console.error(chalk.red(`ERROR: Missing URL to OpenAPI spec`)); console.error(`Please provide the URL to the OpenAPI spec as the first argument found in ${chalk.yellow('package.json')}`); - console.error(`Umbraco 17 example: node generate-openapi.js ${chalk.yellow('https://localhost:44389/umbraco/swagger/umbracovercelanalytics/swagger.json')}`); - console.error(`Umbraco 18 example: node generate-openapi.js ${chalk.yellow('https://localhost:44389/umbraco/openapi/umbracovercelanalytics.json')}`); + console.error(`Umbraco 17 example: node generate-openapi.js ${chalk.yellow('https://localhost:44389/umbraco/swagger/thebuilderwebanalytics/swagger.json')}`); + console.error(`Umbraco 18 example: node generate-openapi.js ${chalk.yellow('https://localhost:44389/umbraco/openapi/thebuilderwebanalytics.json')}`); process.exit(); } diff --git a/src/Umbraco.VercelAnalytics/Client/src/analytics/analytics-breakdown-grid.element.ts b/src/TheBuilder.WebAnalytics/Client/src/analytics/analytics-breakdown-grid.element.ts similarity index 100% rename from src/Umbraco.VercelAnalytics/Client/src/analytics/analytics-breakdown-grid.element.ts rename to src/TheBuilder.WebAnalytics/Client/src/analytics/analytics-breakdown-grid.element.ts diff --git a/src/Umbraco.VercelAnalytics/Client/src/analytics/analytics-components.test.ts b/src/TheBuilder.WebAnalytics/Client/src/analytics/analytics-components.test.ts similarity index 99% rename from src/Umbraco.VercelAnalytics/Client/src/analytics/analytics-components.test.ts rename to src/TheBuilder.WebAnalytics/Client/src/analytics/analytics-components.test.ts index ed3cb0b..29ac0e9 100644 --- a/src/Umbraco.VercelAnalytics/Client/src/analytics/analytics-components.test.ts +++ b/src/TheBuilder.WebAnalytics/Client/src/analytics/analytics-components.test.ts @@ -11,7 +11,7 @@ const sdk = vi.hoisted(() => ({ eventDetails: vi.fn(), eventPropertyValues: vi.fn(), })); -vi.mock("../api/sdk.gen.js", () => ({ UmbracoVercelAnalyticsService: sdk })); +vi.mock("../api/sdk.gen.js", () => ({ WebAnalyticsService: sdk })); vi.mock("@umbraco-cms/backoffice/element-api", () => ({ UmbElementMixin: (base: T) => class extends base { readonly localize = { diff --git a/src/Umbraco.VercelAnalytics/Client/src/analytics/analytics-dashboard-header.element.ts b/src/TheBuilder.WebAnalytics/Client/src/analytics/analytics-dashboard-header.element.ts similarity index 100% rename from src/Umbraco.VercelAnalytics/Client/src/analytics/analytics-dashboard-header.element.ts rename to src/TheBuilder.WebAnalytics/Client/src/analytics/analytics-dashboard-header.element.ts diff --git a/src/Umbraco.VercelAnalytics/Client/src/analytics/analytics-dashboard.controller.test.ts b/src/TheBuilder.WebAnalytics/Client/src/analytics/analytics-dashboard.controller.test.ts similarity index 100% rename from src/Umbraco.VercelAnalytics/Client/src/analytics/analytics-dashboard.controller.test.ts rename to src/TheBuilder.WebAnalytics/Client/src/analytics/analytics-dashboard.controller.test.ts diff --git a/src/Umbraco.VercelAnalytics/Client/src/analytics/analytics-dashboard.controller.ts b/src/TheBuilder.WebAnalytics/Client/src/analytics/analytics-dashboard.controller.ts similarity index 99% rename from src/Umbraco.VercelAnalytics/Client/src/analytics/analytics-dashboard.controller.ts rename to src/TheBuilder.WebAnalytics/Client/src/analytics/analytics-dashboard.controller.ts index 966d732..8c877a1 100644 --- a/src/Umbraco.VercelAnalytics/Client/src/analytics/analytics-dashboard.controller.ts +++ b/src/TheBuilder.WebAnalytics/Client/src/analytics/analytics-dashboard.controller.ts @@ -79,8 +79,8 @@ export type DashboardEnvironment = { const defaultEnvironment = (): DashboardEnvironment => ({ currentUrl: () => new URL(window.location.href), replaceUrl: (url) => window.history.replaceState(window.history.state, "", url), - getStoredConnection: () => localStorage.getItem("umbraco-vercel-analytics:connection"), - setStoredConnection: (connection) => localStorage.setItem("umbraco-vercel-analytics:connection", connection), + getStoredConnection: () => localStorage.getItem("thebuilder-web-analytics:connection"), + setStoredConnection: (connection) => localStorage.setItem("thebuilder-web-analytics:connection", connection), languages: navigator.languages, }); diff --git a/src/Umbraco.VercelAnalytics/Client/src/analytics/analytics-dashboard.element.ts b/src/TheBuilder.WebAnalytics/Client/src/analytics/analytics-dashboard.element.ts similarity index 100% rename from src/Umbraco.VercelAnalytics/Client/src/analytics/analytics-dashboard.element.ts rename to src/TheBuilder.WebAnalytics/Client/src/analytics/analytics-dashboard.element.ts diff --git a/src/Umbraco.VercelAnalytics/Client/src/analytics/analytics-dashboard.styles.ts b/src/TheBuilder.WebAnalytics/Client/src/analytics/analytics-dashboard.styles.ts similarity index 100% rename from src/Umbraco.VercelAnalytics/Client/src/analytics/analytics-dashboard.styles.ts rename to src/TheBuilder.WebAnalytics/Client/src/analytics/analytics-dashboard.styles.ts diff --git a/src/Umbraco.VercelAnalytics/Client/src/analytics/analytics-summary.element.ts b/src/TheBuilder.WebAnalytics/Client/src/analytics/analytics-summary.element.ts similarity index 100% rename from src/Umbraco.VercelAnalytics/Client/src/analytics/analytics-summary.element.ts rename to src/TheBuilder.WebAnalytics/Client/src/analytics/analytics-summary.element.ts diff --git a/src/Umbraco.VercelAnalytics/Client/src/analytics/async-state.ts b/src/TheBuilder.WebAnalytics/Client/src/analytics/async-state.ts similarity index 100% rename from src/Umbraco.VercelAnalytics/Client/src/analytics/async-state.ts rename to src/TheBuilder.WebAnalytics/Client/src/analytics/async-state.ts diff --git a/src/Umbraco.VercelAnalytics/Client/src/analytics/breakdown-dialog.element.ts b/src/TheBuilder.WebAnalytics/Client/src/analytics/breakdown-dialog.element.ts similarity index 100% rename from src/Umbraco.VercelAnalytics/Client/src/analytics/breakdown-dialog.element.ts rename to src/TheBuilder.WebAnalytics/Client/src/analytics/breakdown-dialog.element.ts diff --git a/src/Umbraco.VercelAnalytics/Client/src/analytics/breakdown-rows.test.ts b/src/TheBuilder.WebAnalytics/Client/src/analytics/breakdown-rows.test.ts similarity index 100% rename from src/Umbraco.VercelAnalytics/Client/src/analytics/breakdown-rows.test.ts rename to src/TheBuilder.WebAnalytics/Client/src/analytics/breakdown-rows.test.ts diff --git a/src/Umbraco.VercelAnalytics/Client/src/analytics/breakdown-rows.ts b/src/TheBuilder.WebAnalytics/Client/src/analytics/breakdown-rows.ts similarity index 100% rename from src/Umbraco.VercelAnalytics/Client/src/analytics/breakdown-rows.ts rename to src/TheBuilder.WebAnalytics/Client/src/analytics/breakdown-rows.ts diff --git a/src/Umbraco.VercelAnalytics/Client/src/analytics/breakdown-table.element.ts b/src/TheBuilder.WebAnalytics/Client/src/analytics/breakdown-table.element.ts similarity index 100% rename from src/Umbraco.VercelAnalytics/Client/src/analytics/breakdown-table.element.ts rename to src/TheBuilder.WebAnalytics/Client/src/analytics/breakdown-table.element.ts diff --git a/src/Umbraco.VercelAnalytics/Client/src/analytics/chart-value.test.ts b/src/TheBuilder.WebAnalytics/Client/src/analytics/chart-value.test.ts similarity index 100% rename from src/Umbraco.VercelAnalytics/Client/src/analytics/chart-value.test.ts rename to src/TheBuilder.WebAnalytics/Client/src/analytics/chart-value.test.ts diff --git a/src/Umbraco.VercelAnalytics/Client/src/analytics/chart-value.ts b/src/TheBuilder.WebAnalytics/Client/src/analytics/chart-value.ts similarity index 100% rename from src/Umbraco.VercelAnalytics/Client/src/analytics/chart-value.ts rename to src/TheBuilder.WebAnalytics/Client/src/analytics/chart-value.ts diff --git a/src/Umbraco.VercelAnalytics/Client/src/analytics/country-display.test.ts b/src/TheBuilder.WebAnalytics/Client/src/analytics/country-display.test.ts similarity index 100% rename from src/Umbraco.VercelAnalytics/Client/src/analytics/country-display.test.ts rename to src/TheBuilder.WebAnalytics/Client/src/analytics/country-display.test.ts diff --git a/src/Umbraco.VercelAnalytics/Client/src/analytics/country-display.ts b/src/TheBuilder.WebAnalytics/Client/src/analytics/country-display.ts similarity index 100% rename from src/Umbraco.VercelAnalytics/Client/src/analytics/country-display.ts rename to src/TheBuilder.WebAnalytics/Client/src/analytics/country-display.ts diff --git a/src/TheBuilder.WebAnalytics/Client/src/analytics/dashboard-api.ts b/src/TheBuilder.WebAnalytics/Client/src/analytics/dashboard-api.ts new file mode 100644 index 0000000..b9cb164 --- /dev/null +++ b/src/TheBuilder.WebAnalytics/Client/src/analytics/dashboard-api.ts @@ -0,0 +1,37 @@ +import { WebAnalyticsService } from "../api/sdk.gen.js"; +import type { + AnalyticsBreakdown, + AnalyticsConnectionsResponse, + AnalyticsDocumentRoute, + AnalyticsEventDetails, + AnalyticsEventProperty, + AnalyticsEventsReport, + AnalyticsFlagsReport, + AnalyticsSummary, + FlagsData, +} from "../api/types.gen.js"; + +type ApiResponse = Promise<{ data?: T; error?: unknown; response: Response }>; +type FlagsOptions = { query?: FlagsData["query"]; signal?: AbortSignal }; + +export type DashboardApi = { + connections: (options?: Parameters>[0]) => ApiResponse; + documentRoutes: (options: Parameters>[0]) => ApiResponse; + summary: (options?: Parameters>[0]) => ApiResponse; + events: (options?: Parameters>[0]) => ApiResponse; + flags: (options?: FlagsOptions) => ApiResponse; + breakdown: (options: Parameters>[0]) => ApiResponse; + eventDetails: (options?: Parameters>[0]) => ApiResponse; + eventPropertyValues: (options?: Parameters>[0]) => ApiResponse; +}; + +export const dashboardApi: DashboardApi = { + connections: (options) => WebAnalyticsService.connections(options), + documentRoutes: (options) => WebAnalyticsService.documentRoutes(options), + summary: (options) => WebAnalyticsService.summary(options), + events: (options) => WebAnalyticsService.events(options), + flags: (options) => WebAnalyticsService.flags(options), + breakdown: (options) => WebAnalyticsService.breakdown(options), + eventDetails: (options) => WebAnalyticsService.eventDetails(options), + eventPropertyValues: (options) => WebAnalyticsService.eventPropertyValues(options), +}; diff --git a/src/Umbraco.VercelAnalytics/Client/src/analytics/dashboard-cards.test.ts b/src/TheBuilder.WebAnalytics/Client/src/analytics/dashboard-cards.test.ts similarity index 100% rename from src/Umbraco.VercelAnalytics/Client/src/analytics/dashboard-cards.test.ts rename to src/TheBuilder.WebAnalytics/Client/src/analytics/dashboard-cards.test.ts diff --git a/src/Umbraco.VercelAnalytics/Client/src/analytics/dashboard-cards.ts b/src/TheBuilder.WebAnalytics/Client/src/analytics/dashboard-cards.ts similarity index 100% rename from src/Umbraco.VercelAnalytics/Client/src/analytics/dashboard-cards.ts rename to src/TheBuilder.WebAnalytics/Client/src/analytics/dashboard-cards.ts diff --git a/src/Umbraco.VercelAnalytics/Client/src/analytics/dashboard-report-loader.test.ts b/src/TheBuilder.WebAnalytics/Client/src/analytics/dashboard-report-loader.test.ts similarity index 98% rename from src/Umbraco.VercelAnalytics/Client/src/analytics/dashboard-report-loader.test.ts rename to src/TheBuilder.WebAnalytics/Client/src/analytics/dashboard-report-loader.test.ts index 2bd4103..bffafb8 100644 --- a/src/Umbraco.VercelAnalytics/Client/src/analytics/dashboard-report-loader.test.ts +++ b/src/TheBuilder.WebAnalytics/Client/src/analytics/dashboard-report-loader.test.ts @@ -1,7 +1,7 @@ import { beforeEach, describe, expect, it, vi } from "vitest"; const sdk = vi.hoisted(() => ({ summary: vi.fn(), events: vi.fn(), flags: vi.fn(), breakdown: vi.fn() })); -vi.mock("../api/sdk.gen.js", () => ({ UmbracoVercelAnalyticsService: sdk })); +vi.mock("../api/sdk.gen.js", () => ({ WebAnalyticsService: sdk })); import { loadDashboardReports, type DashboardReportQuery, type DashboardReportUpdate } from "./dashboard-report-loader.js"; diff --git a/src/Umbraco.VercelAnalytics/Client/src/analytics/dashboard-report-loader.ts b/src/TheBuilder.WebAnalytics/Client/src/analytics/dashboard-report-loader.ts similarity index 100% rename from src/Umbraco.VercelAnalytics/Client/src/analytics/dashboard-report-loader.ts rename to src/TheBuilder.WebAnalytics/Client/src/analytics/dashboard-report-loader.ts diff --git a/src/Umbraco.VercelAnalytics/Client/src/analytics/dashboard-url-state.test.ts b/src/TheBuilder.WebAnalytics/Client/src/analytics/dashboard-url-state.test.ts similarity index 100% rename from src/Umbraco.VercelAnalytics/Client/src/analytics/dashboard-url-state.test.ts rename to src/TheBuilder.WebAnalytics/Client/src/analytics/dashboard-url-state.test.ts diff --git a/src/Umbraco.VercelAnalytics/Client/src/analytics/dashboard-url-state.ts b/src/TheBuilder.WebAnalytics/Client/src/analytics/dashboard-url-state.ts similarity index 100% rename from src/Umbraco.VercelAnalytics/Client/src/analytics/dashboard-url-state.ts rename to src/TheBuilder.WebAnalytics/Client/src/analytics/dashboard-url-state.ts diff --git a/src/Umbraco.VercelAnalytics/Client/src/analytics/date-range-picker.element.ts b/src/TheBuilder.WebAnalytics/Client/src/analytics/date-range-picker.element.ts similarity index 100% rename from src/Umbraco.VercelAnalytics/Client/src/analytics/date-range-picker.element.ts rename to src/TheBuilder.WebAnalytics/Client/src/analytics/date-range-picker.element.ts diff --git a/src/Umbraco.VercelAnalytics/Client/src/analytics/date-range.test.ts b/src/TheBuilder.WebAnalytics/Client/src/analytics/date-range.test.ts similarity index 100% rename from src/Umbraco.VercelAnalytics/Client/src/analytics/date-range.test.ts rename to src/TheBuilder.WebAnalytics/Client/src/analytics/date-range.test.ts diff --git a/src/Umbraco.VercelAnalytics/Client/src/analytics/date-range.ts b/src/TheBuilder.WebAnalytics/Client/src/analytics/date-range.ts similarity index 100% rename from src/Umbraco.VercelAnalytics/Client/src/analytics/date-range.ts rename to src/TheBuilder.WebAnalytics/Client/src/analytics/date-range.ts diff --git a/src/Umbraco.VercelAnalytics/Client/src/analytics/document-route.test.ts b/src/TheBuilder.WebAnalytics/Client/src/analytics/document-route.test.ts similarity index 100% rename from src/Umbraco.VercelAnalytics/Client/src/analytics/document-route.test.ts rename to src/TheBuilder.WebAnalytics/Client/src/analytics/document-route.test.ts diff --git a/src/Umbraco.VercelAnalytics/Client/src/analytics/document-route.ts b/src/TheBuilder.WebAnalytics/Client/src/analytics/document-route.ts similarity index 100% rename from src/Umbraco.VercelAnalytics/Client/src/analytics/document-route.ts rename to src/TheBuilder.WebAnalytics/Client/src/analytics/document-route.ts diff --git a/src/Umbraco.VercelAnalytics/Client/src/analytics/event-details-dialog.element.ts b/src/TheBuilder.WebAnalytics/Client/src/analytics/event-details-dialog.element.ts similarity index 100% rename from src/Umbraco.VercelAnalytics/Client/src/analytics/event-details-dialog.element.ts rename to src/TheBuilder.WebAnalytics/Client/src/analytics/event-details-dialog.element.ts diff --git a/src/Umbraco.VercelAnalytics/Client/src/analytics/event-dialog.element.ts b/src/TheBuilder.WebAnalytics/Client/src/analytics/event-dialog.element.ts similarity index 100% rename from src/Umbraco.VercelAnalytics/Client/src/analytics/event-dialog.element.ts rename to src/TheBuilder.WebAnalytics/Client/src/analytics/event-dialog.element.ts diff --git a/src/Umbraco.VercelAnalytics/Client/src/analytics/event-rows.test.ts b/src/TheBuilder.WebAnalytics/Client/src/analytics/event-rows.test.ts similarity index 100% rename from src/Umbraco.VercelAnalytics/Client/src/analytics/event-rows.test.ts rename to src/TheBuilder.WebAnalytics/Client/src/analytics/event-rows.test.ts diff --git a/src/Umbraco.VercelAnalytics/Client/src/analytics/event-rows.ts b/src/TheBuilder.WebAnalytics/Client/src/analytics/event-rows.ts similarity index 100% rename from src/Umbraco.VercelAnalytics/Client/src/analytics/event-rows.ts rename to src/TheBuilder.WebAnalytics/Client/src/analytics/event-rows.ts diff --git a/src/Umbraco.VercelAnalytics/Client/src/analytics/event-table.element.ts b/src/TheBuilder.WebAnalytics/Client/src/analytics/event-table.element.ts similarity index 100% rename from src/Umbraco.VercelAnalytics/Client/src/analytics/event-table.element.ts rename to src/TheBuilder.WebAnalytics/Client/src/analytics/event-table.element.ts diff --git a/src/Umbraco.VercelAnalytics/Client/src/analytics/flag-card.element.ts b/src/TheBuilder.WebAnalytics/Client/src/analytics/flag-card.element.ts similarity index 100% rename from src/Umbraco.VercelAnalytics/Client/src/analytics/flag-card.element.ts rename to src/TheBuilder.WebAnalytics/Client/src/analytics/flag-card.element.ts diff --git a/src/Umbraco.VercelAnalytics/Client/src/analytics/history-chart.element.ts b/src/TheBuilder.WebAnalytics/Client/src/analytics/history-chart.element.ts similarity index 100% rename from src/Umbraco.VercelAnalytics/Client/src/analytics/history-chart.element.ts rename to src/TheBuilder.WebAnalytics/Client/src/analytics/history-chart.element.ts diff --git a/src/Umbraco.VercelAnalytics/Client/src/analytics/metric-comparison.test.ts b/src/TheBuilder.WebAnalytics/Client/src/analytics/metric-comparison.test.ts similarity index 100% rename from src/Umbraco.VercelAnalytics/Client/src/analytics/metric-comparison.test.ts rename to src/TheBuilder.WebAnalytics/Client/src/analytics/metric-comparison.test.ts diff --git a/src/Umbraco.VercelAnalytics/Client/src/analytics/metric-comparison.ts b/src/TheBuilder.WebAnalytics/Client/src/analytics/metric-comparison.ts similarity index 100% rename from src/Umbraco.VercelAnalytics/Client/src/analytics/metric-comparison.ts rename to src/TheBuilder.WebAnalytics/Client/src/analytics/metric-comparison.ts diff --git a/src/Umbraco.VercelAnalytics/Client/src/analytics/report-error.test.ts b/src/TheBuilder.WebAnalytics/Client/src/analytics/report-error.test.ts similarity index 100% rename from src/Umbraco.VercelAnalytics/Client/src/analytics/report-error.test.ts rename to src/TheBuilder.WebAnalytics/Client/src/analytics/report-error.test.ts diff --git a/src/Umbraco.VercelAnalytics/Client/src/analytics/report-error.ts b/src/TheBuilder.WebAnalytics/Client/src/analytics/report-error.ts similarity index 100% rename from src/Umbraco.VercelAnalytics/Client/src/analytics/report-error.ts rename to src/TheBuilder.WebAnalytics/Client/src/analytics/report-error.ts diff --git a/src/Umbraco.VercelAnalytics/Client/src/analytics/request-coordinator.test.ts b/src/TheBuilder.WebAnalytics/Client/src/analytics/request-coordinator.test.ts similarity index 100% rename from src/Umbraco.VercelAnalytics/Client/src/analytics/request-coordinator.test.ts rename to src/TheBuilder.WebAnalytics/Client/src/analytics/request-coordinator.test.ts diff --git a/src/Umbraco.VercelAnalytics/Client/src/analytics/request-coordinator.ts b/src/TheBuilder.WebAnalytics/Client/src/analytics/request-coordinator.ts similarity index 100% rename from src/Umbraco.VercelAnalytics/Client/src/analytics/request-coordinator.ts rename to src/TheBuilder.WebAnalytics/Client/src/analytics/request-coordinator.ts diff --git a/src/Umbraco.VercelAnalytics/Client/src/analytics/utm-capability.test.ts b/src/TheBuilder.WebAnalytics/Client/src/analytics/utm-capability.test.ts similarity index 100% rename from src/Umbraco.VercelAnalytics/Client/src/analytics/utm-capability.test.ts rename to src/TheBuilder.WebAnalytics/Client/src/analytics/utm-capability.test.ts diff --git a/src/Umbraco.VercelAnalytics/Client/src/analytics/utm-capability.ts b/src/TheBuilder.WebAnalytics/Client/src/analytics/utm-capability.ts similarity index 100% rename from src/Umbraco.VercelAnalytics/Client/src/analytics/utm-capability.ts rename to src/TheBuilder.WebAnalytics/Client/src/analytics/utm-capability.ts diff --git a/src/Umbraco.VercelAnalytics/Client/src/api/client.gen.ts b/src/TheBuilder.WebAnalytics/Client/src/api/client.gen.ts similarity index 100% rename from src/Umbraco.VercelAnalytics/Client/src/api/client.gen.ts rename to src/TheBuilder.WebAnalytics/Client/src/api/client.gen.ts diff --git a/src/Umbraco.VercelAnalytics/Client/src/api/client/client.gen.ts b/src/TheBuilder.WebAnalytics/Client/src/api/client/client.gen.ts similarity index 100% rename from src/Umbraco.VercelAnalytics/Client/src/api/client/client.gen.ts rename to src/TheBuilder.WebAnalytics/Client/src/api/client/client.gen.ts diff --git a/src/Umbraco.VercelAnalytics/Client/src/api/client/index.ts b/src/TheBuilder.WebAnalytics/Client/src/api/client/index.ts similarity index 100% rename from src/Umbraco.VercelAnalytics/Client/src/api/client/index.ts rename to src/TheBuilder.WebAnalytics/Client/src/api/client/index.ts diff --git a/src/Umbraco.VercelAnalytics/Client/src/api/client/types.gen.ts b/src/TheBuilder.WebAnalytics/Client/src/api/client/types.gen.ts similarity index 100% rename from src/Umbraco.VercelAnalytics/Client/src/api/client/types.gen.ts rename to src/TheBuilder.WebAnalytics/Client/src/api/client/types.gen.ts diff --git a/src/Umbraco.VercelAnalytics/Client/src/api/client/utils.gen.ts b/src/TheBuilder.WebAnalytics/Client/src/api/client/utils.gen.ts similarity index 100% rename from src/Umbraco.VercelAnalytics/Client/src/api/client/utils.gen.ts rename to src/TheBuilder.WebAnalytics/Client/src/api/client/utils.gen.ts diff --git a/src/Umbraco.VercelAnalytics/Client/src/api/core/auth.gen.ts b/src/TheBuilder.WebAnalytics/Client/src/api/core/auth.gen.ts similarity index 100% rename from src/Umbraco.VercelAnalytics/Client/src/api/core/auth.gen.ts rename to src/TheBuilder.WebAnalytics/Client/src/api/core/auth.gen.ts diff --git a/src/Umbraco.VercelAnalytics/Client/src/api/core/bodySerializer.gen.ts b/src/TheBuilder.WebAnalytics/Client/src/api/core/bodySerializer.gen.ts similarity index 100% rename from src/Umbraco.VercelAnalytics/Client/src/api/core/bodySerializer.gen.ts rename to src/TheBuilder.WebAnalytics/Client/src/api/core/bodySerializer.gen.ts diff --git a/src/Umbraco.VercelAnalytics/Client/src/api/core/params.gen.ts b/src/TheBuilder.WebAnalytics/Client/src/api/core/params.gen.ts similarity index 100% rename from src/Umbraco.VercelAnalytics/Client/src/api/core/params.gen.ts rename to src/TheBuilder.WebAnalytics/Client/src/api/core/params.gen.ts diff --git a/src/Umbraco.VercelAnalytics/Client/src/api/core/pathSerializer.gen.ts b/src/TheBuilder.WebAnalytics/Client/src/api/core/pathSerializer.gen.ts similarity index 100% rename from src/Umbraco.VercelAnalytics/Client/src/api/core/pathSerializer.gen.ts rename to src/TheBuilder.WebAnalytics/Client/src/api/core/pathSerializer.gen.ts diff --git a/src/Umbraco.VercelAnalytics/Client/src/api/core/queryKeySerializer.gen.ts b/src/TheBuilder.WebAnalytics/Client/src/api/core/queryKeySerializer.gen.ts similarity index 100% rename from src/Umbraco.VercelAnalytics/Client/src/api/core/queryKeySerializer.gen.ts rename to src/TheBuilder.WebAnalytics/Client/src/api/core/queryKeySerializer.gen.ts diff --git a/src/Umbraco.VercelAnalytics/Client/src/api/core/serverSentEvents.gen.ts b/src/TheBuilder.WebAnalytics/Client/src/api/core/serverSentEvents.gen.ts similarity index 100% rename from src/Umbraco.VercelAnalytics/Client/src/api/core/serverSentEvents.gen.ts rename to src/TheBuilder.WebAnalytics/Client/src/api/core/serverSentEvents.gen.ts diff --git a/src/Umbraco.VercelAnalytics/Client/src/api/core/types.gen.ts b/src/TheBuilder.WebAnalytics/Client/src/api/core/types.gen.ts similarity index 100% rename from src/Umbraco.VercelAnalytics/Client/src/api/core/types.gen.ts rename to src/TheBuilder.WebAnalytics/Client/src/api/core/types.gen.ts diff --git a/src/Umbraco.VercelAnalytics/Client/src/api/core/utils.gen.ts b/src/TheBuilder.WebAnalytics/Client/src/api/core/utils.gen.ts similarity index 100% rename from src/Umbraco.VercelAnalytics/Client/src/api/core/utils.gen.ts rename to src/TheBuilder.WebAnalytics/Client/src/api/core/utils.gen.ts diff --git a/src/Umbraco.VercelAnalytics/Client/src/api/index.ts b/src/TheBuilder.WebAnalytics/Client/src/api/index.ts similarity index 100% rename from src/Umbraco.VercelAnalytics/Client/src/api/index.ts rename to src/TheBuilder.WebAnalytics/Client/src/api/index.ts diff --git a/src/Umbraco.VercelAnalytics/Client/src/api/sdk.gen.ts b/src/TheBuilder.WebAnalytics/Client/src/api/sdk.gen.ts similarity index 99% rename from src/Umbraco.VercelAnalytics/Client/src/api/sdk.gen.ts rename to src/TheBuilder.WebAnalytics/Client/src/api/sdk.gen.ts index 64c5ac8..c63e797 100644 --- a/src/Umbraco.VercelAnalytics/Client/src/api/sdk.gen.ts +++ b/src/TheBuilder.WebAnalytics/Client/src/api/sdk.gen.ts @@ -18,7 +18,7 @@ export type Options; }; -export class UmbracoVercelAnalyticsService { +export class WebAnalyticsService { public static connections(options?: Options) { return (options?.client ?? client).get({ security: [ diff --git a/src/Umbraco.VercelAnalytics/Client/src/api/types.gen.ts b/src/TheBuilder.WebAnalytics/Client/src/api/types.gen.ts similarity index 100% rename from src/Umbraco.VercelAnalytics/Client/src/api/types.gen.ts rename to src/TheBuilder.WebAnalytics/Client/src/api/types.gen.ts diff --git a/src/Umbraco.VercelAnalytics/Client/src/bundle.manifests.ts b/src/TheBuilder.WebAnalytics/Client/src/bundle.manifests.ts similarity index 100% rename from src/Umbraco.VercelAnalytics/Client/src/bundle.manifests.ts rename to src/TheBuilder.WebAnalytics/Client/src/bundle.manifests.ts diff --git a/src/Umbraco.VercelAnalytics/Client/src/entrypoints/entrypoint.ts b/src/TheBuilder.WebAnalytics/Client/src/entrypoints/entrypoint.ts similarity index 100% rename from src/Umbraco.VercelAnalytics/Client/src/entrypoints/entrypoint.ts rename to src/TheBuilder.WebAnalytics/Client/src/entrypoints/entrypoint.ts diff --git a/src/Umbraco.VercelAnalytics/Client/src/entrypoints/manifest.ts b/src/TheBuilder.WebAnalytics/Client/src/entrypoints/manifest.ts similarity index 57% rename from src/Umbraco.VercelAnalytics/Client/src/entrypoints/manifest.ts rename to src/TheBuilder.WebAnalytics/Client/src/entrypoints/manifest.ts index 09639d2..631aa12 100644 --- a/src/Umbraco.VercelAnalytics/Client/src/entrypoints/manifest.ts +++ b/src/TheBuilder.WebAnalytics/Client/src/entrypoints/manifest.ts @@ -1,7 +1,7 @@ export const manifests: Array = [ { - name: "Umbraco Vercel Analytics Entrypoint", - alias: "Umbraco.VercelAnalytics.Entrypoint", + name: "Web Analytics Entrypoint", + alias: "TheBuilder.WebAnalytics.Entrypoint", type: "backofficeEntryPoint", js: () => import("./entrypoint.js"), }, diff --git a/src/Umbraco.VercelAnalytics/Client/src/manifests.test.ts b/src/TheBuilder.WebAnalytics/Client/src/manifests.test.ts similarity index 61% rename from src/Umbraco.VercelAnalytics/Client/src/manifests.test.ts rename to src/TheBuilder.WebAnalytics/Client/src/manifests.test.ts index c12a72c..e5e6680 100644 --- a/src/Umbraco.VercelAnalytics/Client/src/manifests.test.ts +++ b/src/TheBuilder.WebAnalytics/Client/src/manifests.test.ts @@ -1,14 +1,14 @@ import { describe, expect, it } from "vitest"; import { manifests } from "./manifests.js"; -describe("Vercel Analytics manifests", () => { +describe("Web Analytics manifests", () => { it("only exposes the Analytics section when the package is enabled", () => { - const section = manifests.find((manifest) => manifest.alias === "Umbraco.VercelAnalytics.Section") as + const section = manifests.find((manifest) => manifest.alias === "TheBuilder.WebAnalytics.Section") as | { conditions?: Array<{ alias: string }> } | undefined; - const condition = manifests.find((manifest) => manifest.alias === "Umbraco.VercelAnalytics.Condition.AnalyticsEnabled"); + const condition = manifests.find((manifest) => manifest.alias === "TheBuilder.WebAnalytics.Condition.AnalyticsEnabled"); expect(condition?.type).toBe("condition"); - expect(section?.conditions).toContainEqual({ alias: "Umbraco.VercelAnalytics.Condition.AnalyticsEnabled" }); + expect(section?.conditions).toContainEqual({ alias: "TheBuilder.WebAnalytics.Condition.AnalyticsEnabled" }); }); }); diff --git a/src/Umbraco.VercelAnalytics/Client/src/manifests.ts b/src/TheBuilder.WebAnalytics/Client/src/manifests.ts similarity index 60% rename from src/Umbraco.VercelAnalytics/Client/src/manifests.ts rename to src/TheBuilder.WebAnalytics/Client/src/manifests.ts index 064c01b..e24a8e1 100644 --- a/src/Umbraco.VercelAnalytics/Client/src/manifests.ts +++ b/src/TheBuilder.WebAnalytics/Client/src/manifests.ts @@ -1,32 +1,32 @@ export const manifests: Array = [ { type: "condition", - alias: "Umbraco.VercelAnalytics.Condition.AnalyticsEnabled", - name: "Vercel Analytics Enabled Condition", + alias: "TheBuilder.WebAnalytics.Condition.AnalyticsEnabled", + name: "Web Analytics Enabled Condition", api: () => import("./section/analytics-enabled.condition.js"), }, { type: "section", - alias: "Umbraco.VercelAnalytics.Section", - name: "Vercel Analytics Section", + alias: "TheBuilder.WebAnalytics.Section", + name: "Web Analytics Section", meta: { label: "Analytics", pathname: "analytics" }, - conditions: [{ alias: "Umbraco.VercelAnalytics.Condition.AnalyticsEnabled" }], + conditions: [{ alias: "TheBuilder.WebAnalytics.Condition.AnalyticsEnabled" }], }, { type: "sectionView", - alias: "Umbraco.VercelAnalytics.SectionView", - name: "Vercel Analytics Section View", + alias: "TheBuilder.WebAnalytics.SectionView", + name: "Web Analytics Section View", js: () => import("./section/analytics-section.element.js"), meta: { label: "Analytics", pathname: "overview", icon: "icon-chart-curve" }, - conditions: [{ alias: "Umb.Condition.SectionAlias", match: "Umbraco.VercelAnalytics.Section" }], + conditions: [{ alias: "Umb.Condition.SectionAlias", match: "TheBuilder.WebAnalytics.Section" }], }, { type: "dashboard", - alias: "Umbraco.VercelAnalytics.SettingsDashboard", - name: "Vercel Analytics Settings Dashboard", + alias: "TheBuilder.WebAnalytics.SettingsDashboard", + name: "Web Analytics Settings Dashboard", js: () => import("./settings/settings-dashboard.element.js"), weight: 25, - meta: { label: "Vercel Analytics", pathname: "vercel-analytics" }, + meta: { label: "Web Analytics", pathname: "vercel-analytics" }, conditions: [ { alias: "Umb.Condition.SectionAlias", match: "Umb.Section.Settings" }, { alias: "Umb.Condition.CurrentUser.IsAdmin" }, @@ -34,19 +34,19 @@ export const manifests: Array = [ }, { type: "condition", - alias: "Umbraco.VercelAnalytics.Condition.DocumentAnalytics", + alias: "TheBuilder.WebAnalytics.Condition.DocumentAnalytics", name: "Document Analytics Availability Condition", api: () => import("./workspace/document-analytics.condition.js"), }, { type: "workspaceView", - alias: "Umbraco.VercelAnalytics.DocumentWorkspaceView", - name: "Vercel Analytics Document Workspace View", + alias: "TheBuilder.WebAnalytics.DocumentWorkspaceView", + name: "Web Analytics Document Workspace View", js: () => import("./workspace/analytics-workspace.element.js"), meta: { label: "Analytics", pathname: "analytics", icon: "icon-chart-curve" }, conditions: [ { alias: "Umb.Condition.WorkspaceAlias", match: "Umb.Workspace.Document" }, - { alias: "Umbraco.VercelAnalytics.Condition.DocumentAnalytics" }, + { alias: "TheBuilder.WebAnalytics.Condition.DocumentAnalytics" }, ], }, ]; diff --git a/src/Umbraco.VercelAnalytics/Client/src/section/analytics-availability.ts b/src/TheBuilder.WebAnalytics/Client/src/section/analytics-availability.ts similarity index 100% rename from src/Umbraco.VercelAnalytics/Client/src/section/analytics-availability.ts rename to src/TheBuilder.WebAnalytics/Client/src/section/analytics-availability.ts diff --git a/src/Umbraco.VercelAnalytics/Client/src/section/analytics-enabled.condition.test.ts b/src/TheBuilder.WebAnalytics/Client/src/section/analytics-enabled.condition.test.ts similarity index 90% rename from src/Umbraco.VercelAnalytics/Client/src/section/analytics-enabled.condition.test.ts rename to src/TheBuilder.WebAnalytics/Client/src/section/analytics-enabled.condition.test.ts index 298f450..3759875 100644 --- a/src/Umbraco.VercelAnalytics/Client/src/section/analytics-enabled.condition.test.ts +++ b/src/TheBuilder.WebAnalytics/Client/src/section/analytics-enabled.condition.test.ts @@ -3,7 +3,7 @@ import { afterEach, describe, expect, it, vi } from "vitest"; const sdk = vi.hoisted(() => ({ connections: vi.fn() })); -vi.mock("../api/sdk.gen.js", () => ({ UmbracoVercelAnalyticsService: sdk })); +vi.mock("../api/sdk.gen.js", () => ({ WebAnalyticsService: sdk })); vi.mock("@umbraco-cms/backoffice/extension-registry", () => ({ UmbConditionBase: class { #permitted = false; @@ -39,7 +39,7 @@ describe("AnalyticsEnabledCondition", () => { it("permits the section only when saved settings are enabled", async () => { sdk.connections.mockResolvedValue({ data: { enabled: true }, error: undefined }); condition = new AnalyticsEnabledCondition({} as never, { - config: { alias: "Umbraco.VercelAnalytics.Condition.AnalyticsEnabled" }, + config: { alias: "TheBuilder.WebAnalytics.Condition.AnalyticsEnabled" }, onChange: vi.fn(), }); @@ -52,7 +52,7 @@ describe("AnalyticsEnabledCondition", () => { it("fails closed when availability cannot be loaded", async () => { sdk.connections.mockResolvedValue({ data: undefined, error: { status: 403 } }); condition = new AnalyticsEnabledCondition({} as never, { - config: { alias: "Umbraco.VercelAnalytics.Condition.AnalyticsEnabled" }, + config: { alias: "TheBuilder.WebAnalytics.Condition.AnalyticsEnabled" }, onChange: vi.fn(), }); diff --git a/src/Umbraco.VercelAnalytics/Client/src/section/analytics-enabled.condition.ts b/src/TheBuilder.WebAnalytics/Client/src/section/analytics-enabled.condition.ts similarity index 90% rename from src/Umbraco.VercelAnalytics/Client/src/section/analytics-enabled.condition.ts rename to src/TheBuilder.WebAnalytics/Client/src/section/analytics-enabled.condition.ts index 0c60594..abd2ae3 100644 --- a/src/Umbraco.VercelAnalytics/Client/src/section/analytics-enabled.condition.ts +++ b/src/TheBuilder.WebAnalytics/Client/src/section/analytics-enabled.condition.ts @@ -1,6 +1,6 @@ import { UmbConditionBase } from "@umbraco-cms/backoffice/extension-registry"; import type { UmbConditionConfigBase, UmbExtensionCondition } from "@umbraco-cms/backoffice/extension-api"; -import { UmbracoVercelAnalyticsService } from "../api/sdk.gen.js"; +import { WebAnalyticsService } from "../api/sdk.gen.js"; import { ANALYTICS_AVAILABILITY_CHANGED_EVENT, type AnalyticsAvailabilityChangedDetail, @@ -26,7 +26,7 @@ export class AnalyticsEnabledCondition extends UmbConditionBase { const request = ++this.#request; - const { data, error } = await UmbracoVercelAnalyticsService.connections(); + const { data, error } = await WebAnalyticsService.connections(); if (request === this.#request) this.permitted = !error && data?.enabled === true; } diff --git a/src/Umbraco.VercelAnalytics/Client/src/section/analytics-section.element.ts b/src/TheBuilder.WebAnalytics/Client/src/section/analytics-section.element.ts similarity index 100% rename from src/Umbraco.VercelAnalytics/Client/src/section/analytics-section.element.ts rename to src/TheBuilder.WebAnalytics/Client/src/section/analytics-section.element.ts diff --git a/src/Umbraco.VercelAnalytics/Client/src/settings/connection-editor.element.ts b/src/TheBuilder.WebAnalytics/Client/src/settings/connection-editor.element.ts similarity index 100% rename from src/Umbraco.VercelAnalytics/Client/src/settings/connection-editor.element.ts rename to src/TheBuilder.WebAnalytics/Client/src/settings/connection-editor.element.ts diff --git a/src/Umbraco.VercelAnalytics/Client/src/settings/mock-scenarios.ts b/src/TheBuilder.WebAnalytics/Client/src/settings/mock-scenarios.ts similarity index 100% rename from src/Umbraco.VercelAnalytics/Client/src/settings/mock-scenarios.ts rename to src/TheBuilder.WebAnalytics/Client/src/settings/mock-scenarios.ts diff --git a/src/Umbraco.VercelAnalytics/Client/src/settings/settings-dashboard.element.ts b/src/TheBuilder.WebAnalytics/Client/src/settings/settings-dashboard.element.ts similarity index 96% rename from src/Umbraco.VercelAnalytics/Client/src/settings/settings-dashboard.element.ts rename to src/TheBuilder.WebAnalytics/Client/src/settings/settings-dashboard.element.ts index 81d9d11..6c89fd8 100644 --- a/src/Umbraco.VercelAnalytics/Client/src/settings/settings-dashboard.element.ts +++ b/src/TheBuilder.WebAnalytics/Client/src/settings/settings-dashboard.element.ts @@ -8,7 +8,7 @@ import { import { UmbElementMixin } from "@umbraco-cms/backoffice/element-api"; import { UmbTextStyles } from "@umbraco-cms/backoffice/style"; import type { UUIInputElement, UUIToggleElement } from "@umbraco-cms/backoffice/external/uui"; -import { UmbracoVercelAnalyticsService } from "../api/sdk.gen.js"; +import { WebAnalyticsService } from "../api/sdk.gen.js"; import type { AnalyticsConnectionSettingsResponse, AnalyticsSettingsResponse, @@ -43,7 +43,7 @@ export class VercelAnalyticsSettingsDashboardElement extends UmbElementMixin(Lit async #load(): Promise { this._loading = true; - const { data, error } = await UmbracoVercelAnalyticsService.settings(); + const { data, error } = await WebAnalyticsService.settings(); this._loading = false; if (error || !data) { this._status = { type: "error", message: "Analytics settings could not be loaded. Administrator access is required." }; @@ -126,7 +126,7 @@ export class VercelAnalyticsSettingsDashboardElement extends UmbElementMixin(Lit } this._testingKey = key; this._connectionStatuses = { ...this._connectionStatuses, [key]: { type: "info", message: "Testing the saved connection…" } }; - const { data, error } = await UmbracoVercelAnalyticsService.testConnection({ path: { key } }); + const { data, error } = await WebAnalyticsService.testConnection({ path: { key } }); this._testingKey = undefined; this._connectionStatuses = { ...this._connectionStatuses, @@ -138,7 +138,7 @@ export class VercelAnalyticsSettingsDashboardElement extends UmbElementMixin(Lit async #save(event?: Event): Promise { event?.preventDefault(); - await this.#persistSettings("Vercel Analytics settings saved."); + await this.#persistSettings("Web Analytics settings saved."); } async #persistSettings(successMessage?: string): Promise { @@ -155,7 +155,7 @@ export class VercelAnalyticsSettingsDashboardElement extends UmbElementMixin(Lit this._saving = true; this._status = undefined; const body: UpdateAnalyticsSettingsRequest = createSettingsUpdate(this._settings); - const { data, error } = await UmbracoVercelAnalyticsService.saveSettings({ body }); + const { data, error } = await WebAnalyticsService.saveSettings({ body }); this._saving = false; if (error || !data) { this._status = { type: "error", message: "Settings were not saved. Check the connection fields and mapping values." }; @@ -188,13 +188,13 @@ export class VercelAnalyticsSettingsDashboardElement extends UmbElementMixin(Lit return html`
-

Vercel Analytics

Connect Vercel projects and choose where page analytics appears.

+

Web Analytics

Connect Vercel projects and choose where page analytics appears.

${this._dirty ? html` -
+
Unsaved changes - Save settings + Save settings
` : ""} @@ -205,10 +205,10 @@ export class VercelAnalyticsSettingsDashboardElement extends UmbElementMixin(Lit Package status this.#patch({ enabled: (event.target as UUIToggleElement).checked })}> - Enable Vercel Analytics + Enable Web Analytics diff --git a/src/Umbraco.VercelAnalytics/Client/src/settings/settings-dashboard.test.ts b/src/TheBuilder.WebAnalytics/Client/src/settings/settings-dashboard.test.ts similarity index 98% rename from src/Umbraco.VercelAnalytics/Client/src/settings/settings-dashboard.test.ts rename to src/TheBuilder.WebAnalytics/Client/src/settings/settings-dashboard.test.ts index e228481..6f353a2 100644 --- a/src/Umbraco.VercelAnalytics/Client/src/settings/settings-dashboard.test.ts +++ b/src/TheBuilder.WebAnalytics/Client/src/settings/settings-dashboard.test.ts @@ -7,7 +7,7 @@ const sdk = vi.hoisted(() => ({ testConnection: vi.fn(), })); -vi.mock("../api/sdk.gen.js", () => ({ UmbracoVercelAnalyticsService: sdk })); +vi.mock("../api/sdk.gen.js", () => ({ WebAnalyticsService: sdk })); vi.mock("@umbraco-cms/backoffice/element-api", () => ({ UmbElementMixin: (base: T) => base, })); @@ -58,7 +58,7 @@ describe("analytics settings onboarding", () => { .toBe(`VercelAnalytics__ConnectionAccessTokens__${generatedKey}`); expect(dashboard.shadowRoot?.querySelector(".unsaved-indicator")?.textContent?.trim()).toBe("Unsaved changes"); expect(dashboard.shadowRoot?.querySelector(".save-bar")).not.toBeNull(); - expect(dashboard.shadowRoot?.querySelectorAll('[label="Save Vercel Analytics settings"]')).toHaveLength(1); + expect(dashboard.shadowRoot?.querySelectorAll('[label="Save Web Analytics settings"]')).toHaveLength(1); expect(Array.from(editor?.shadowRoot?.querySelectorAll(".essentials uui-input") ?? []).map((input) => input.getAttribute("name"))).toEqual([ "projectId", "teamReference", diff --git a/src/Umbraco.VercelAnalytics/Client/src/settings/settings-model.test.ts b/src/TheBuilder.WebAnalytics/Client/src/settings/settings-model.test.ts similarity index 100% rename from src/Umbraco.VercelAnalytics/Client/src/settings/settings-model.test.ts rename to src/TheBuilder.WebAnalytics/Client/src/settings/settings-model.test.ts diff --git a/src/Umbraco.VercelAnalytics/Client/src/settings/settings-model.ts b/src/TheBuilder.WebAnalytics/Client/src/settings/settings-model.ts similarity index 100% rename from src/Umbraco.VercelAnalytics/Client/src/settings/settings-model.ts rename to src/TheBuilder.WebAnalytics/Client/src/settings/settings-model.ts diff --git a/src/Umbraco.VercelAnalytics/Client/src/workspace/analytics-workspace.element.ts b/src/TheBuilder.WebAnalytics/Client/src/workspace/analytics-workspace.element.ts similarity index 100% rename from src/Umbraco.VercelAnalytics/Client/src/workspace/analytics-workspace.element.ts rename to src/TheBuilder.WebAnalytics/Client/src/workspace/analytics-workspace.element.ts diff --git a/src/Umbraco.VercelAnalytics/Client/src/workspace/document-analytics.condition.ts b/src/TheBuilder.WebAnalytics/Client/src/workspace/document-analytics.condition.ts similarity index 88% rename from src/Umbraco.VercelAnalytics/Client/src/workspace/document-analytics.condition.ts rename to src/TheBuilder.WebAnalytics/Client/src/workspace/document-analytics.condition.ts index 5238f63..588f117 100644 --- a/src/Umbraco.VercelAnalytics/Client/src/workspace/document-analytics.condition.ts +++ b/src/TheBuilder.WebAnalytics/Client/src/workspace/document-analytics.condition.ts @@ -1,7 +1,7 @@ import { UMB_DOCUMENT_WORKSPACE_CONTEXT } from "@umbraco-cms/backoffice/document"; import { UmbConditionBase } from "@umbraco-cms/backoffice/extension-registry"; import type { UmbConditionConfigBase, UmbExtensionCondition } from "@umbraco-cms/backoffice/extension-api"; -import { UmbracoVercelAnalyticsService } from "../api/sdk.gen.js"; +import { WebAnalyticsService } from "../api/sdk.gen.js"; export class DocumentAnalyticsCondition extends UmbConditionBase implements UmbExtensionCondition { #request = 0; @@ -22,7 +22,7 @@ export class DocumentAnalyticsCondition extends UmbConditionBase { diff --git a/src/Umbraco.VercelAnalytics/Configuration/VercelAnalyticsSettings.cs b/src/TheBuilder.WebAnalytics/Configuration/VercelAnalyticsSettings.cs similarity index 97% rename from src/Umbraco.VercelAnalytics/Configuration/VercelAnalyticsSettings.cs rename to src/TheBuilder.WebAnalytics/Configuration/VercelAnalyticsSettings.cs index ec45c78..369fbba 100644 --- a/src/Umbraco.VercelAnalytics/Configuration/VercelAnalyticsSettings.cs +++ b/src/TheBuilder.WebAnalytics/Configuration/VercelAnalyticsSettings.cs @@ -4,9 +4,9 @@ using System.Text.Json; using System.Text.Json.Serialization; using Umbraco.Cms.Core.Services; -using Umbraco.VercelAnalytics.Models; +using TheBuilder.WebAnalytics.Models; -namespace Umbraco.VercelAnalytics.Configuration; +namespace TheBuilder.WebAnalytics.Configuration; public sealed class VercelAnalyticsSettings { @@ -46,7 +46,7 @@ public sealed class VercelAnalyticsConnectionSettings public sealed class VercelAnalyticsSettingsStore { - private const string StorageKey = "Umbraco.VercelAnalytics.Settings.v2"; + private const string StorageKey = "TheBuilder.WebAnalytics.Settings.v2"; private static readonly JsonSerializerOptions SerializerOptions = new(JsonSerializerDefaults.Web); private readonly Lock _lock = new(); private readonly IKeyValueService? _keyValueService; diff --git a/src/Umbraco.VercelAnalytics/Configuration/VercelAnalyticsSettingsValidator.cs b/src/TheBuilder.WebAnalytics/Configuration/VercelAnalyticsSettingsValidator.cs similarity index 98% rename from src/Umbraco.VercelAnalytics/Configuration/VercelAnalyticsSettingsValidator.cs rename to src/TheBuilder.WebAnalytics/Configuration/VercelAnalyticsSettingsValidator.cs index 70c4f1d..3ca61b1 100644 --- a/src/Umbraco.VercelAnalytics/Configuration/VercelAnalyticsSettingsValidator.cs +++ b/src/TheBuilder.WebAnalytics/Configuration/VercelAnalyticsSettingsValidator.cs @@ -1,4 +1,4 @@ -namespace Umbraco.VercelAnalytics.Configuration; +namespace TheBuilder.WebAnalytics.Configuration; public static class VercelAnalyticsSettingsValidator { diff --git a/src/TheBuilder.WebAnalytics/Constants.cs b/src/TheBuilder.WebAnalytics/Constants.cs new file mode 100644 index 0000000..a947b04 --- /dev/null +++ b/src/TheBuilder.WebAnalytics/Constants.cs @@ -0,0 +1,7 @@ +namespace TheBuilder.WebAnalytics; + +public static class Constants +{ + public const string ApiName = "thebuilderwebanalytics"; + public const string SectionAlias = "TheBuilder.WebAnalytics.Section"; +} diff --git a/src/Umbraco.VercelAnalytics/Controllers/AnalyticsApiConventions.cs b/src/TheBuilder.WebAnalytics/Controllers/AnalyticsApiConventions.cs similarity index 88% rename from src/Umbraco.VercelAnalytics/Controllers/AnalyticsApiConventions.cs rename to src/TheBuilder.WebAnalytics/Controllers/AnalyticsApiConventions.cs index 9f01cc1..f4499a4 100644 --- a/src/Umbraco.VercelAnalytics/Controllers/AnalyticsApiConventions.cs +++ b/src/TheBuilder.WebAnalytics/Controllers/AnalyticsApiConventions.cs @@ -1,8 +1,8 @@ using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Mvc; -using Umbraco.VercelAnalytics.Models; +using TheBuilder.WebAnalytics.Models; -namespace Umbraco.VercelAnalytics.Controllers; +namespace TheBuilder.WebAnalytics.Controllers; public static class AnalyticsApiConventions { diff --git a/src/Umbraco.VercelAnalytics/Controllers/VercelAnalyticsExceptionFilter.cs b/src/TheBuilder.WebAnalytics/Controllers/VercelAnalyticsExceptionFilter.cs similarity index 96% rename from src/Umbraco.VercelAnalytics/Controllers/VercelAnalyticsExceptionFilter.cs rename to src/TheBuilder.WebAnalytics/Controllers/VercelAnalyticsExceptionFilter.cs index f202b2d..b35e4dd 100644 --- a/src/Umbraco.VercelAnalytics/Controllers/VercelAnalyticsExceptionFilter.cs +++ b/src/TheBuilder.WebAnalytics/Controllers/VercelAnalyticsExceptionFilter.cs @@ -3,10 +3,10 @@ using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Mvc.Filters; -using Umbraco.VercelAnalytics.Models; -using Umbraco.VercelAnalytics.Services; +using TheBuilder.WebAnalytics.Models; +using TheBuilder.WebAnalytics.Services; -namespace Umbraco.VercelAnalytics.Controllers; +namespace TheBuilder.WebAnalytics.Controllers; internal static class VercelAnalyticsProblemCodes { diff --git a/src/Umbraco.VercelAnalytics/Controllers/UmbracoVercelAnalyticsApiController.cs b/src/TheBuilder.WebAnalytics/Controllers/WebAnalyticsApiController.cs similarity index 97% rename from src/Umbraco.VercelAnalytics/Controllers/UmbracoVercelAnalyticsApiController.cs rename to src/TheBuilder.WebAnalytics/Controllers/WebAnalyticsApiController.cs index 063e65a..2d550ab 100644 --- a/src/Umbraco.VercelAnalytics/Controllers/UmbracoVercelAnalyticsApiController.cs +++ b/src/TheBuilder.WebAnalytics/Controllers/WebAnalyticsApiController.cs @@ -3,20 +3,20 @@ using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Mvc; using Umbraco.Cms.Web.Common.Authorization; -using Umbraco.VercelAnalytics.Configuration; -using Umbraco.VercelAnalytics.Models; -using Umbraco.VercelAnalytics.Services; +using TheBuilder.WebAnalytics.Configuration; +using TheBuilder.WebAnalytics.Models; +using TheBuilder.WebAnalytics.Services; -namespace Umbraco.VercelAnalytics.Controllers; +namespace TheBuilder.WebAnalytics.Controllers; [ApiVersion("1.0")] -[ApiExplorerSettings(GroupName = "Umbraco.VercelAnalytics")] -public sealed class UmbracoVercelAnalyticsApiController( +[ApiExplorerSettings(GroupName = "TheBuilder.WebAnalytics")] +public sealed class WebAnalyticsApiController( IAnalyticsAuthorizationService authorizationService, VercelAnalyticsConnectionRegistry registry, VercelAnalyticsReportService reportService, IAnalyticsDocumentRouteService routeService, - IVercelProjectNameService projectNames) : UmbracoVercelAnalyticsApiControllerBase + IVercelProjectNameService projectNames) : WebAnalyticsApiControllerBase { private enum ReportScope { diff --git a/src/Umbraco.VercelAnalytics/Controllers/UmbracoVercelAnalyticsApiControllerBase.cs b/src/TheBuilder.WebAnalytics/Controllers/WebAnalyticsApiControllerBase.cs similarity index 77% rename from src/Umbraco.VercelAnalytics/Controllers/UmbracoVercelAnalyticsApiControllerBase.cs rename to src/TheBuilder.WebAnalytics/Controllers/WebAnalyticsApiControllerBase.cs index 09acaf1..9f6e34e 100644 --- a/src/Umbraco.VercelAnalytics/Controllers/UmbracoVercelAnalyticsApiControllerBase.cs +++ b/src/TheBuilder.WebAnalytics/Controllers/WebAnalyticsApiControllerBase.cs @@ -4,14 +4,14 @@ using Umbraco.Cms.Web.Common.Authorization; using Umbraco.Cms.Web.Common.Routing; -namespace Umbraco.VercelAnalytics.Controllers +namespace TheBuilder.WebAnalytics.Controllers { [ApiController] [BackOfficeRoute("management/api/v{version:apiVersion}/vercel-analytics")] [Authorize(Policy = AuthorizationPolicies.BackOfficeAccess)] [TypeFilter(typeof(VercelAnalyticsExceptionFilter))] [MapToApi(Constants.ApiName)] - public class UmbracoVercelAnalyticsApiControllerBase : ControllerBase + public class WebAnalyticsApiControllerBase : ControllerBase { } } diff --git a/src/Umbraco.VercelAnalytics/Controllers/UmbracoVercelAnalyticsSettingsApiController.cs b/src/TheBuilder.WebAnalytics/Controllers/WebAnalyticsSettingsApiController.cs similarity index 94% rename from src/Umbraco.VercelAnalytics/Controllers/UmbracoVercelAnalyticsSettingsApiController.cs rename to src/TheBuilder.WebAnalytics/Controllers/WebAnalyticsSettingsApiController.cs index 2c9c1ce..1701d22 100644 --- a/src/Umbraco.VercelAnalytics/Controllers/UmbracoVercelAnalyticsSettingsApiController.cs +++ b/src/TheBuilder.WebAnalytics/Controllers/WebAnalyticsSettingsApiController.cs @@ -4,21 +4,21 @@ using Microsoft.Extensions.Options; using Umbraco.Cms.Core.Security; using Umbraco.Extensions; -using Umbraco.VercelAnalytics.Configuration; -using Umbraco.VercelAnalytics.Models; -using Umbraco.VercelAnalytics.Services; +using TheBuilder.WebAnalytics.Configuration; +using TheBuilder.WebAnalytics.Models; +using TheBuilder.WebAnalytics.Services; -namespace Umbraco.VercelAnalytics.Controllers; +namespace TheBuilder.WebAnalytics.Controllers; [ApiVersion("1.0")] -[ApiExplorerSettings(GroupName = "Umbraco.VercelAnalytics")] -public sealed class UmbracoVercelAnalyticsSettingsApiController( +[ApiExplorerSettings(GroupName = "TheBuilder.WebAnalytics")] +public sealed class WebAnalyticsSettingsApiController( IBackOfficeSecurityAccessor backOfficeSecurityAccessor, VercelAnalyticsSettingsStore settingsStore, VercelAnalyticsConnectionRegistry registry, IOptions serverOptions, IVercelAnalyticsClient vercelClient, - IVercelProjectNameService projectNames) : UmbracoVercelAnalyticsApiControllerBase + IVercelProjectNameService projectNames) : WebAnalyticsApiControllerBase { [HttpGet("settings")] [ProducesResponseType(StatusCodes.Status200OK)] diff --git a/src/Umbraco.VercelAnalytics/Models/AnalyticsModels.cs b/src/TheBuilder.WebAnalytics/Models/AnalyticsModels.cs similarity index 99% rename from src/Umbraco.VercelAnalytics/Models/AnalyticsModels.cs rename to src/TheBuilder.WebAnalytics/Models/AnalyticsModels.cs index 0d22607..4cb4775 100644 --- a/src/Umbraco.VercelAnalytics/Models/AnalyticsModels.cs +++ b/src/TheBuilder.WebAnalytics/Models/AnalyticsModels.cs @@ -1,7 +1,7 @@ using System.Text.Json.Serialization; using Microsoft.AspNetCore.Mvc; -namespace Umbraco.VercelAnalytics.Models; +namespace TheBuilder.WebAnalytics.Models; public sealed class AnalyticsProblemDetails : ProblemDetails { diff --git a/src/Umbraco.VercelAnalytics/README.txt b/src/TheBuilder.WebAnalytics/README.txt similarity index 93% rename from src/Umbraco.VercelAnalytics/README.txt rename to src/TheBuilder.WebAnalytics/README.txt index 4342ac3..1d82a75 100644 --- a/src/Umbraco.VercelAnalytics/README.txt +++ b/src/TheBuilder.WebAnalytics/README.txt @@ -24,7 +24,7 @@ * Open a terminal inside the `\Client` folder * Run `npm install` to install all the dependencies * Run `npm run build` to build the project -* The build output is copied to `wwwroot\App_Plugins\UmbracoVercelAnalytics\umbraco-vercel-analytics.js` +* The build output is copied to `wwwroot\App_Plugins\TheBuilder.WebAnalytics\web-analytics.js` == File Watching == * Add this Razor Class Library Project as a project reference to an Umbraco Website project diff --git a/src/Umbraco.VercelAnalytics/Services/AnalyticsAuthorizationService.cs b/src/TheBuilder.WebAnalytics/Services/AnalyticsAuthorizationService.cs similarity index 97% rename from src/Umbraco.VercelAnalytics/Services/AnalyticsAuthorizationService.cs rename to src/TheBuilder.WebAnalytics/Services/AnalyticsAuthorizationService.cs index ec5afca..c008173 100644 --- a/src/Umbraco.VercelAnalytics/Services/AnalyticsAuthorizationService.cs +++ b/src/TheBuilder.WebAnalytics/Services/AnalyticsAuthorizationService.cs @@ -3,7 +3,7 @@ using Umbraco.Cms.Core.Services; using Umbraco.Cms.Core.Services.AuthorizationStatus; -namespace Umbraco.VercelAnalytics.Services; +namespace TheBuilder.WebAnalytics.Services; public interface IAnalyticsAuthorizationService { diff --git a/src/Umbraco.VercelAnalytics/Services/AnalyticsDocumentRouteService.cs b/src/TheBuilder.WebAnalytics/Services/AnalyticsDocumentRouteService.cs similarity index 95% rename from src/Umbraco.VercelAnalytics/Services/AnalyticsDocumentRouteService.cs rename to src/TheBuilder.WebAnalytics/Services/AnalyticsDocumentRouteService.cs index 18a6deb..0252876 100644 --- a/src/Umbraco.VercelAnalytics/Services/AnalyticsDocumentRouteService.cs +++ b/src/TheBuilder.WebAnalytics/Services/AnalyticsDocumentRouteService.cs @@ -1,9 +1,9 @@ using Umbraco.Cms.Core.Models; using Umbraco.Cms.Core.Services; -using Umbraco.VercelAnalytics.Configuration; -using Umbraco.VercelAnalytics.Models; +using TheBuilder.WebAnalytics.Configuration; +using TheBuilder.WebAnalytics.Models; -namespace Umbraco.VercelAnalytics.Services; +namespace TheBuilder.WebAnalytics.Services; public interface IAnalyticsDocumentRouteService { diff --git a/src/Umbraco.VercelAnalytics/Services/AnalyticsFilterParser.cs b/src/TheBuilder.WebAnalytics/Services/AnalyticsFilterParser.cs similarity index 95% rename from src/Umbraco.VercelAnalytics/Services/AnalyticsFilterParser.cs rename to src/TheBuilder.WebAnalytics/Services/AnalyticsFilterParser.cs index 8d91378..ce3f12e 100644 --- a/src/Umbraco.VercelAnalytics/Services/AnalyticsFilterParser.cs +++ b/src/TheBuilder.WebAnalytics/Services/AnalyticsFilterParser.cs @@ -1,6 +1,6 @@ -using Umbraco.VercelAnalytics.Models; +using TheBuilder.WebAnalytics.Models; -namespace Umbraco.VercelAnalytics.Services; +namespace TheBuilder.WebAnalytics.Services; public static class AnalyticsFilterParser { diff --git a/src/Umbraco.VercelAnalytics/Services/AnalyticsPublishedContentAccessor.cs b/src/TheBuilder.WebAnalytics/Services/AnalyticsPublishedContentAccessor.cs similarity index 99% rename from src/Umbraco.VercelAnalytics/Services/AnalyticsPublishedContentAccessor.cs rename to src/TheBuilder.WebAnalytics/Services/AnalyticsPublishedContentAccessor.cs index fe3148e..0f97315 100644 --- a/src/Umbraco.VercelAnalytics/Services/AnalyticsPublishedContentAccessor.cs +++ b/src/TheBuilder.WebAnalytics/Services/AnalyticsPublishedContentAccessor.cs @@ -3,7 +3,7 @@ using Umbraco.Cms.Core.Web; using Umbraco.Extensions; -namespace Umbraco.VercelAnalytics.Services; +namespace TheBuilder.WebAnalytics.Services; public interface IAnalyticsPublishedContentAccessor { diff --git a/src/Umbraco.VercelAnalytics/Services/AnalyticsRequestPath.cs b/src/TheBuilder.WebAnalytics/Services/AnalyticsRequestPath.cs similarity index 88% rename from src/Umbraco.VercelAnalytics/Services/AnalyticsRequestPath.cs rename to src/TheBuilder.WebAnalytics/Services/AnalyticsRequestPath.cs index a9120ab..e13964a 100644 --- a/src/Umbraco.VercelAnalytics/Services/AnalyticsRequestPath.cs +++ b/src/TheBuilder.WebAnalytics/Services/AnalyticsRequestPath.cs @@ -1,4 +1,4 @@ -namespace Umbraco.VercelAnalytics.Services; +namespace TheBuilder.WebAnalytics.Services; internal static class AnalyticsRequestPath { diff --git a/src/Umbraco.VercelAnalytics/Services/AnalyticsSectionAccessInitializer.cs b/src/TheBuilder.WebAnalytics/Services/AnalyticsSectionAccessInitializer.cs similarity index 82% rename from src/Umbraco.VercelAnalytics/Services/AnalyticsSectionAccessInitializer.cs rename to src/TheBuilder.WebAnalytics/Services/AnalyticsSectionAccessInitializer.cs index f9828d0..95a8e63 100644 --- a/src/Umbraco.VercelAnalytics/Services/AnalyticsSectionAccessInitializer.cs +++ b/src/TheBuilder.WebAnalytics/Services/AnalyticsSectionAccessInitializer.cs @@ -4,7 +4,7 @@ using Umbraco.Cms.Core.Notifications; using Umbraco.Cms.Core.Services; -namespace Umbraco.VercelAnalytics.Services; +namespace TheBuilder.WebAnalytics.Services; public sealed class AnalyticsSectionAccessInitializer( IUserGroupService userGroupService, @@ -13,7 +13,7 @@ public sealed class AnalyticsSectionAccessInitializer( ILogger logger) : INotificationAsyncHandler { - private const string InitializationKey = "Umbraco.VercelAnalytics.AdministratorSectionAccess.v1"; + private const string InitializationKey = "TheBuilder.WebAnalytics.AdministratorSectionAccess.v1"; public async Task HandleAsync( UmbracoApplicationStartedNotification notification, @@ -27,7 +27,7 @@ public async Task HandleAsync( var administrators = await userGroupService.GetAsync(Umbraco.Cms.Core.Constants.Security.AdminGroupAlias); if (administrators is null) { - logger.LogWarning("Could not grant the Vercel Analytics section because the Administrators group was not found."); + logger.LogWarning("Could not grant the Web Analytics section because the Administrators group was not found."); return; } @@ -39,7 +39,7 @@ public async Task HandleAsync( Umbraco.Cms.Core.Constants.Security.SuperUserKey); if (!result.Success) { - logger.LogWarning("Could not grant the Vercel Analytics section to the Administrators group."); + logger.LogWarning("Could not grant the Web Analytics section to the Administrators group."); return; } } diff --git a/src/Umbraco.VercelAnalytics/Services/IVercelAnalyticsClient.cs b/src/TheBuilder.WebAnalytics/Services/IVercelAnalyticsClient.cs similarity index 94% rename from src/Umbraco.VercelAnalytics/Services/IVercelAnalyticsClient.cs rename to src/TheBuilder.WebAnalytics/Services/IVercelAnalyticsClient.cs index a9fcbbf..02eb37e 100644 --- a/src/Umbraco.VercelAnalytics/Services/IVercelAnalyticsClient.cs +++ b/src/TheBuilder.WebAnalytics/Services/IVercelAnalyticsClient.cs @@ -1,7 +1,7 @@ -using Umbraco.VercelAnalytics.Configuration; -using Umbraco.VercelAnalytics.Models; +using TheBuilder.WebAnalytics.Configuration; +using TheBuilder.WebAnalytics.Models; -namespace Umbraco.VercelAnalytics.Services; +namespace TheBuilder.WebAnalytics.Services; public interface IVercelAnalyticsClient { diff --git a/src/Umbraco.VercelAnalytics/Services/MockVercelAnalyticsClient.cs b/src/TheBuilder.WebAnalytics/Services/MockVercelAnalyticsClient.cs similarity index 99% rename from src/Umbraco.VercelAnalytics/Services/MockVercelAnalyticsClient.cs rename to src/TheBuilder.WebAnalytics/Services/MockVercelAnalyticsClient.cs index d3ada9f..5c9c851 100644 --- a/src/Umbraco.VercelAnalytics/Services/MockVercelAnalyticsClient.cs +++ b/src/TheBuilder.WebAnalytics/Services/MockVercelAnalyticsClient.cs @@ -1,7 +1,7 @@ -using Umbraco.VercelAnalytics.Configuration; -using Umbraco.VercelAnalytics.Models; +using TheBuilder.WebAnalytics.Configuration; +using TheBuilder.WebAnalytics.Models; -namespace Umbraco.VercelAnalytics.Services; +namespace TheBuilder.WebAnalytics.Services; public sealed class MockVercelAnalyticsClient : IVercelAnalyticsClient { diff --git a/src/Umbraco.VercelAnalytics/Services/VercelAnalyticsApiException.cs b/src/TheBuilder.WebAnalytics/Services/VercelAnalyticsApiException.cs similarity index 83% rename from src/Umbraco.VercelAnalytics/Services/VercelAnalyticsApiException.cs rename to src/TheBuilder.WebAnalytics/Services/VercelAnalyticsApiException.cs index 1f63cf9..58a9ab4 100644 --- a/src/Umbraco.VercelAnalytics/Services/VercelAnalyticsApiException.cs +++ b/src/TheBuilder.WebAnalytics/Services/VercelAnalyticsApiException.cs @@ -1,6 +1,6 @@ using System.Net; -namespace Umbraco.VercelAnalytics.Services; +namespace TheBuilder.WebAnalytics.Services; public sealed class VercelAnalyticsApiException(HttpStatusCode statusCode) : Exception($"Vercel Analytics returned HTTP {(int)statusCode}.") diff --git a/src/Umbraco.VercelAnalytics/Services/VercelAnalyticsClient.cs b/src/TheBuilder.WebAnalytics/Services/VercelAnalyticsClient.cs similarity index 99% rename from src/Umbraco.VercelAnalytics/Services/VercelAnalyticsClient.cs rename to src/TheBuilder.WebAnalytics/Services/VercelAnalyticsClient.cs index c0e3537..4a79e04 100644 --- a/src/Umbraco.VercelAnalytics/Services/VercelAnalyticsClient.cs +++ b/src/TheBuilder.WebAnalytics/Services/VercelAnalyticsClient.cs @@ -3,10 +3,10 @@ using System.Net.Http.Json; using System.Text.Json; using Microsoft.AspNetCore.WebUtilities; -using Umbraco.VercelAnalytics.Configuration; -using Umbraco.VercelAnalytics.Models; +using TheBuilder.WebAnalytics.Configuration; +using TheBuilder.WebAnalytics.Models; -namespace Umbraco.VercelAnalytics.Services; +namespace TheBuilder.WebAnalytics.Services; public sealed class VercelAnalyticsClient(HttpClient httpClient) : IVercelAnalyticsClient { diff --git a/src/Umbraco.VercelAnalytics/Services/VercelAnalyticsClientRouter.cs b/src/TheBuilder.WebAnalytics/Services/VercelAnalyticsClientRouter.cs similarity index 96% rename from src/Umbraco.VercelAnalytics/Services/VercelAnalyticsClientRouter.cs rename to src/TheBuilder.WebAnalytics/Services/VercelAnalyticsClientRouter.cs index 48e72cf..261967f 100644 --- a/src/Umbraco.VercelAnalytics/Services/VercelAnalyticsClientRouter.cs +++ b/src/TheBuilder.WebAnalytics/Services/VercelAnalyticsClientRouter.cs @@ -1,7 +1,7 @@ -using Umbraco.VercelAnalytics.Configuration; -using Umbraco.VercelAnalytics.Models; +using TheBuilder.WebAnalytics.Configuration; +using TheBuilder.WebAnalytics.Models; -namespace Umbraco.VercelAnalytics.Services; +namespace TheBuilder.WebAnalytics.Services; public sealed class VercelAnalyticsClientRouter( VercelAnalyticsClient vercelClient, diff --git a/src/Umbraco.VercelAnalytics/Services/VercelAnalyticsReportService.cs b/src/TheBuilder.WebAnalytics/Services/VercelAnalyticsReportService.cs similarity index 98% rename from src/Umbraco.VercelAnalytics/Services/VercelAnalyticsReportService.cs rename to src/TheBuilder.WebAnalytics/Services/VercelAnalyticsReportService.cs index 8816750..a999e9d 100644 --- a/src/Umbraco.VercelAnalytics/Services/VercelAnalyticsReportService.cs +++ b/src/TheBuilder.WebAnalytics/Services/VercelAnalyticsReportService.cs @@ -1,8 +1,8 @@ using Microsoft.Extensions.Caching.Memory; -using Umbraco.VercelAnalytics.Configuration; -using Umbraco.VercelAnalytics.Models; +using TheBuilder.WebAnalytics.Configuration; +using TheBuilder.WebAnalytics.Models; -namespace Umbraco.VercelAnalytics.Services; +namespace TheBuilder.WebAnalytics.Services; public sealed class VercelAnalyticsReportService( VercelAnalyticsConnectionRegistry registry, diff --git a/src/Umbraco.VercelAnalytics/Services/VercelProjectNameService.cs b/src/TheBuilder.WebAnalytics/Services/VercelProjectNameService.cs similarity index 95% rename from src/Umbraco.VercelAnalytics/Services/VercelProjectNameService.cs rename to src/TheBuilder.WebAnalytics/Services/VercelProjectNameService.cs index 0364de6..cb86934 100644 --- a/src/Umbraco.VercelAnalytics/Services/VercelProjectNameService.cs +++ b/src/TheBuilder.WebAnalytics/Services/VercelProjectNameService.cs @@ -1,8 +1,8 @@ using System.Text.Json; using Microsoft.Extensions.Caching.Memory; -using Umbraco.VercelAnalytics.Configuration; +using TheBuilder.WebAnalytics.Configuration; -namespace Umbraco.VercelAnalytics.Services; +namespace TheBuilder.WebAnalytics.Services; public interface IVercelProjectNameService { diff --git a/src/Umbraco.VercelAnalytics/Umbraco.VercelAnalytics.csproj b/src/TheBuilder.WebAnalytics/TheBuilder.WebAnalytics.csproj similarity index 63% rename from src/Umbraco.VercelAnalytics/Umbraco.VercelAnalytics.csproj rename to src/TheBuilder.WebAnalytics/TheBuilder.WebAnalytics.csproj index ff6aad2..5cce5d2 100644 --- a/src/Umbraco.VercelAnalytics/Umbraco.VercelAnalytics.csproj +++ b/src/TheBuilder.WebAnalytics/TheBuilder.WebAnalytics.csproj @@ -8,19 +8,24 @@ - Umbraco.VercelAnalytics - Umbraco.VercelAnalytics - Umbraco.VercelAnalytics + TheBuilder.WebAnalytics + Web Analytics + Web Analytics 0.1.0 - Vercel Web Analytics reports inside the Umbraco 17 and 18 backoffice. - umbraco;vercel;analytics;backoffice + Daniel Schmidt + View Vercel Web Analytics directly inside the Umbraco backoffice. + umbraco;umbraco-marketplace;analytics;web analytics;vercel;vercel analytics;traffic;visitors;referrers;utm;dashboard;reporting;content analytics;page analytics;custom events;multi-site + https://github.com/thebuilder/umbraco-vercel-analytics + https://github.com/thebuilder/umbraco-vercel-analytics.git + git + icon.png MIT README.md $(MSBuildProjectDirectory)/Client - wwwroot/App_Plugins/UmbracoVercelAnalytics/**/* - $(MSBuildProjectDirectory)/wwwroot/App_Plugins/UmbracoVercelAnalytics + wwwroot/App_Plugins/TheBuilder.WebAnalytics/**/* + $(MSBuildProjectDirectory)/wwwroot/App_Plugins/TheBuilder.WebAnalytics $(BackofficeAssetsDirectory)/umbraco-package.json - $(BackofficeAssetsDirectory)/umbraco-vercel-analytics.js + $(BackofficeAssetsDirectory)/web-analytics.js @@ -35,21 +40,22 @@ - + + - + - + + Text="Cannot pack TheBuilder.WebAnalytics because the backoffice manifest is missing. Build the client first." /> + Text="Cannot pack TheBuilder.WebAnalytics because the backoffice entry point is missing. Build the client first." /> diff --git a/src/Umbraco.VercelAnalytics/Client/public/umbraco-package.json b/src/Umbraco.VercelAnalytics/Client/public/umbraco-package.json deleted file mode 100644 index 525f73d..0000000 --- a/src/Umbraco.VercelAnalytics/Client/public/umbraco-package.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "id": "Umbraco.VercelAnalytics", - "name": "Umbraco.VercelAnalytics", - "version": "0.1.0", - "allowTelemetry": false, - "extensions": [ - { - "name": "Umbraco Vercel Analytics Bundle", - "alias": "Umbraco.VercelAnalytics.Bundle", - "type": "bundle", - "js": "/App_Plugins/UmbracoVercelAnalytics/umbraco-vercel-analytics.js" - } - ] -} diff --git a/src/Umbraco.VercelAnalytics/Client/src/analytics/dashboard-api.ts b/src/Umbraco.VercelAnalytics/Client/src/analytics/dashboard-api.ts deleted file mode 100644 index fb7e33c..0000000 --- a/src/Umbraco.VercelAnalytics/Client/src/analytics/dashboard-api.ts +++ /dev/null @@ -1,37 +0,0 @@ -import { UmbracoVercelAnalyticsService } from "../api/sdk.gen.js"; -import type { - AnalyticsBreakdown, - AnalyticsConnectionsResponse, - AnalyticsDocumentRoute, - AnalyticsEventDetails, - AnalyticsEventProperty, - AnalyticsEventsReport, - AnalyticsFlagsReport, - AnalyticsSummary, - FlagsData, -} from "../api/types.gen.js"; - -type ApiResponse = Promise<{ data?: T; error?: unknown; response: Response }>; -type FlagsOptions = { query?: FlagsData["query"]; signal?: AbortSignal }; - -export type DashboardApi = { - connections: (options?: Parameters>[0]) => ApiResponse; - documentRoutes: (options: Parameters>[0]) => ApiResponse; - summary: (options?: Parameters>[0]) => ApiResponse; - events: (options?: Parameters>[0]) => ApiResponse; - flags: (options?: FlagsOptions) => ApiResponse; - breakdown: (options: Parameters>[0]) => ApiResponse; - eventDetails: (options?: Parameters>[0]) => ApiResponse; - eventPropertyValues: (options?: Parameters>[0]) => ApiResponse; -}; - -export const dashboardApi: DashboardApi = { - connections: (options) => UmbracoVercelAnalyticsService.connections(options), - documentRoutes: (options) => UmbracoVercelAnalyticsService.documentRoutes(options), - summary: (options) => UmbracoVercelAnalyticsService.summary(options), - events: (options) => UmbracoVercelAnalyticsService.events(options), - flags: (options) => UmbracoVercelAnalyticsService.flags(options), - breakdown: (options) => UmbracoVercelAnalyticsService.breakdown(options), - eventDetails: (options) => UmbracoVercelAnalyticsService.eventDetails(options), - eventPropertyValues: (options) => UmbracoVercelAnalyticsService.eventPropertyValues(options), -}; diff --git a/src/Umbraco.VercelAnalytics/Constants.cs b/src/Umbraco.VercelAnalytics/Constants.cs deleted file mode 100644 index ed70eb8..0000000 --- a/src/Umbraco.VercelAnalytics/Constants.cs +++ /dev/null @@ -1,7 +0,0 @@ -namespace Umbraco.VercelAnalytics; - -public static class Constants -{ - public const string ApiName = "umbracovercelanalytics"; - public const string SectionAlias = "Umbraco.VercelAnalytics.Section"; -} diff --git a/tasks/plan.md b/tasks/plan.md new file mode 100644 index 0000000..b1a66a1 --- /dev/null +++ b/tasks/plan.md @@ -0,0 +1,52 @@ +# Implementation Plan: Web Analytics Marketplace readiness + +## Overview + +Prepare the installable NuGet package and repository metadata for Umbraco Marketplace discovery, add focused listing copy and a package icon, document a privacy-safe screenshot workflow, and verify the packed artifact before publication. + +## Architecture decisions + +- Keep the GitHub repository as the NuGet project URL so the Marketplace can discover root-level metadata files from the default branch. +- Treat this as an Integration because it connects Umbraco to a third-party Vercel account and service. +- Do not add screenshot URLs until approved files exist on the default branch; broken image URLs are worse than an initially text-only listing. +- Use a disposable browser state or DOM-only label replacement for captures so the package does not gain a production-facing screenshot/demo mode. + +## Task list + +### Phase 1: Discovery metadata + +- [x] Add the `umbraco-marketplace` tag to the installable NuGet project. +- [x] Add NuGet author, project, repository, description, title, and icon metadata. +- [x] Add root-level Marketplace JSON and tailored Marketplace README content. + +### Checkpoint: Metadata + +- [x] The packed nuspec contains the expected Marketplace and NuGet metadata. +- [x] The Marketplace JSON conforms to the published schema. + +### Phase 2: Screenshot preparation + +- [x] Define a five-shot Marketplace story with exact captions and framing. +- [x] Define fictional paths, names, campaigns, and identifiers for anonymization. +- [x] Define capture, review, naming, and Marketplace JSON update steps. + +### Checkpoint: Complete + +- [x] Client tests and build pass. +- [x] .NET tests and NuGet pack pass. +- [x] The final package contains the README, icon, manifest, and backoffice assets. +- [ ] Approved screenshots are captured and added in a follow-up change. + +## Risks and mitigations + +| Risk | Impact | Mitigation | +| --- | --- | --- | +| A screenshot exposes a real route or identifier | High | Use the fixed fictional vocabulary and require a 200% visual review by a second person. | +| Marketplace imports incomplete metadata | Medium | Keep the project URL at the repository root and validate both JSON and the packed nuspec. | +| Screenshot URLs are broken before merge | Medium | Omit `Screenshots` until approved files are committed to the default branch. | +| NuGet package omits its icon or client assets | Medium | Inspect the generated `.nupkg` as part of verification. | + +## Open questions + +- Whether the first public release should remain `0.1.0` or be published as a prerelease version. +- Whether to capture optional event and UTM panels when the connected project's Vercel plan does not provide useful populated examples. diff --git a/tasks/todo.md b/tasks/todo.md new file mode 100644 index 0000000..a35e364 --- /dev/null +++ b/tasks/todo.md @@ -0,0 +1,12 @@ +# Web Analytics Marketplace readiness + +- [x] Audit current Marketplace requirements. +- [x] Add NuGet discovery and presentation metadata. +- [x] Add Marketplace listing metadata and copy. +- [x] Add a package icon source and packed PNG. +- [x] Document the anonymized screenshot plan. +- [x] Validate Marketplace JSON against the published schema. +- [x] Run client checks, tests, and build. +- [x] Run .NET tests and pack the NuGet package. +- [x] Inspect the packed nuspec and file list. +- [ ] Capture and review screenshots in a follow-up change. diff --git a/tests/Umbraco.VercelAnalytics.Tests/Configuration/VercelAnalyticsOptionsValidatorTests.cs b/tests/TheBuilder.WebAnalytics.Tests/Configuration/VercelAnalyticsOptionsValidatorTests.cs similarity index 98% rename from tests/Umbraco.VercelAnalytics.Tests/Configuration/VercelAnalyticsOptionsValidatorTests.cs rename to tests/TheBuilder.WebAnalytics.Tests/Configuration/VercelAnalyticsOptionsValidatorTests.cs index 036f782..48b9730 100644 --- a/tests/Umbraco.VercelAnalytics.Tests/Configuration/VercelAnalyticsOptionsValidatorTests.cs +++ b/tests/TheBuilder.WebAnalytics.Tests/Configuration/VercelAnalyticsOptionsValidatorTests.cs @@ -1,7 +1,7 @@ using Microsoft.Extensions.Options; -using Umbraco.VercelAnalytics.Configuration; +using TheBuilder.WebAnalytics.Configuration; -namespace Umbraco.VercelAnalytics.Tests.Configuration; +namespace TheBuilder.WebAnalytics.Tests.Configuration; public sealed class VercelAnalyticsOptionsValidatorTests { diff --git a/tests/Umbraco.VercelAnalytics.Tests/Configuration/VercelAnalyticsSettingsValidatorTests.cs b/tests/TheBuilder.WebAnalytics.Tests/Configuration/VercelAnalyticsSettingsValidatorTests.cs similarity index 98% rename from tests/Umbraco.VercelAnalytics.Tests/Configuration/VercelAnalyticsSettingsValidatorTests.cs rename to tests/TheBuilder.WebAnalytics.Tests/Configuration/VercelAnalyticsSettingsValidatorTests.cs index 6b9d4d2..cf04461 100644 --- a/tests/Umbraco.VercelAnalytics.Tests/Configuration/VercelAnalyticsSettingsValidatorTests.cs +++ b/tests/TheBuilder.WebAnalytics.Tests/Configuration/VercelAnalyticsSettingsValidatorTests.cs @@ -1,9 +1,9 @@ -using Umbraco.VercelAnalytics.Configuration; +using TheBuilder.WebAnalytics.Configuration; using Microsoft.Extensions.Options; using Umbraco.Cms.Core.Services; -using Umbraco.VercelAnalytics.Models; +using TheBuilder.WebAnalytics.Models; -namespace Umbraco.VercelAnalytics.Tests.Configuration; +namespace TheBuilder.WebAnalytics.Tests.Configuration; public sealed class VercelAnalyticsSettingsValidatorTests { diff --git a/tests/Umbraco.VercelAnalytics.Tests/Controllers/VercelAnalyticsProblemFactoryTests.cs b/tests/TheBuilder.WebAnalytics.Tests/Controllers/VercelAnalyticsProblemFactoryTests.cs similarity index 95% rename from tests/Umbraco.VercelAnalytics.Tests/Controllers/VercelAnalyticsProblemFactoryTests.cs rename to tests/TheBuilder.WebAnalytics.Tests/Controllers/VercelAnalyticsProblemFactoryTests.cs index c321a2e..5204883 100644 --- a/tests/Umbraco.VercelAnalytics.Tests/Controllers/VercelAnalyticsProblemFactoryTests.cs +++ b/tests/TheBuilder.WebAnalytics.Tests/Controllers/VercelAnalyticsProblemFactoryTests.cs @@ -5,11 +5,11 @@ using Microsoft.AspNetCore.Mvc.Abstractions; using Microsoft.AspNetCore.Mvc.Filters; using Microsoft.AspNetCore.Routing; -using Umbraco.VercelAnalytics.Controllers; -using Umbraco.VercelAnalytics.Models; -using Umbraco.VercelAnalytics.Services; +using TheBuilder.WebAnalytics.Controllers; +using TheBuilder.WebAnalytics.Models; +using TheBuilder.WebAnalytics.Services; -namespace Umbraco.VercelAnalytics.Tests.Controllers; +namespace TheBuilder.WebAnalytics.Tests.Controllers; public sealed class VercelAnalyticsProblemFactoryTests { diff --git a/tests/Umbraco.VercelAnalytics.Tests/Controllers/UmbracoVercelAnalyticsApiControllerTests.cs b/tests/TheBuilder.WebAnalytics.Tests/Controllers/WebAnalyticsApiControllerTests.cs similarity index 93% rename from tests/Umbraco.VercelAnalytics.Tests/Controllers/UmbracoVercelAnalyticsApiControllerTests.cs rename to tests/TheBuilder.WebAnalytics.Tests/Controllers/WebAnalyticsApiControllerTests.cs index f35d7fc..a29d039 100644 --- a/tests/Umbraco.VercelAnalytics.Tests/Controllers/UmbracoVercelAnalyticsApiControllerTests.cs +++ b/tests/TheBuilder.WebAnalytics.Tests/Controllers/WebAnalyticsApiControllerTests.cs @@ -5,14 +5,14 @@ using Microsoft.Extensions.Options; using Moq; using Umbraco.Cms.Web.Common.Authorization; -using Umbraco.VercelAnalytics.Configuration; -using Umbraco.VercelAnalytics.Controllers; -using Umbraco.VercelAnalytics.Models; -using Umbraco.VercelAnalytics.Services; +using TheBuilder.WebAnalytics.Configuration; +using TheBuilder.WebAnalytics.Controllers; +using TheBuilder.WebAnalytics.Models; +using TheBuilder.WebAnalytics.Services; -namespace Umbraco.VercelAnalytics.Tests.Controllers; +namespace TheBuilder.WebAnalytics.Tests.Controllers; -public sealed class UmbracoVercelAnalyticsApiControllerTests +public sealed class WebAnalyticsApiControllerTests { private static readonly Guid MainKey = Guid.Parse("11111111-1111-1111-1111-111111111110"); private static readonly Guid SecondaryKey = Guid.Parse("22222222-2222-2222-2222-222222222220"); @@ -20,7 +20,7 @@ public sealed class UmbracoVercelAnalyticsApiControllerTests public void Base_controller_requires_authenticated_backoffice_access() { var authorize = Assert.Single( - typeof(UmbracoVercelAnalyticsApiControllerBase) + typeof(WebAnalyticsApiControllerBase) .GetCustomAttributes()); Assert.Equal(AuthorizationPolicies.BackOfficeAccess, authorize.Policy); @@ -31,7 +31,7 @@ public async Task Connections_forbids_users_without_analytics_section_access() { var authorization = new Mock(MockBehavior.Strict); authorization.Setup(service => service.HasAnalyticsSectionAccess()).Returns(false); - var controller = new UmbracoVercelAnalyticsApiController( + var controller = new WebAnalyticsApiController( authorization.Object, null!, null!, @@ -68,7 +68,7 @@ public async Task Connections_resolves_connection_base_urls_concurrently() await release.Task; return "https://example.com"; }); - var controller = new UmbracoVercelAnalyticsApiController( + var controller = new WebAnalyticsApiController( authorization.Object, EnabledRegistry("main", "secondary"), null!, @@ -119,7 +119,7 @@ public async Task Mock_connection_without_token_or_document_mappings_is_ready_wi ] }); var registry = new VercelAnalyticsConnectionRegistry(store, options, mockConnectionsEnabled: true); - var controller = new UmbracoVercelAnalyticsApiController( + var controller = new WebAnalyticsApiController( authorization.Object, registry, null!, @@ -142,7 +142,7 @@ public async Task Document_routes_forbid_users_without_document_browse_permissio authorization .Setup(service => service.CanBrowseDocumentAsync(documentId)) .ReturnsAsync(false); - var controller = new UmbracoVercelAnalyticsApiController( + var controller = new WebAnalyticsApiController( authorization.Object, null!, null!, @@ -177,7 +177,7 @@ public async Task Document_summary_rejects_a_path_not_returned_for_the_document( true, []) ]); - var controller = new UmbracoVercelAnalyticsApiController( + var controller = new WebAnalyticsApiController( authorization.Object, EnabledRegistry(), null!, @@ -208,7 +208,7 @@ public async Task Document_summary_forbids_users_without_content_section_access_ authorization .Setup(service => service.HasContentSectionAccess()) .Returns(false); - var controller = new UmbracoVercelAnalyticsApiController( + var controller = new WebAnalyticsApiController( authorization.Object, EnabledRegistry(), null!, @@ -318,7 +318,7 @@ public async Task Event_property_values_reject_event_name_filter_from_the_shared AssertInvalidQuery(response.Result); } - private static UmbracoVercelAnalyticsApiController CreateBoundaryOnlyController() => + private static WebAnalyticsApiController CreateBoundaryOnlyController() => new(null!, null!, null!, null!, null!); private static DateTimeOffset UtcDate(int year, int month, int day) => diff --git a/tests/Umbraco.VercelAnalytics.Tests/Controllers/UmbracoVercelAnalyticsSettingsApiControllerTests.cs b/tests/TheBuilder.WebAnalytics.Tests/Controllers/WebAnalyticsSettingsApiControllerTests.cs similarity index 86% rename from tests/Umbraco.VercelAnalytics.Tests/Controllers/UmbracoVercelAnalyticsSettingsApiControllerTests.cs rename to tests/TheBuilder.WebAnalytics.Tests/Controllers/WebAnalyticsSettingsApiControllerTests.cs index 4421e61..0e3718e 100644 --- a/tests/Umbraco.VercelAnalytics.Tests/Controllers/UmbracoVercelAnalyticsSettingsApiControllerTests.cs +++ b/tests/TheBuilder.WebAnalytics.Tests/Controllers/WebAnalyticsSettingsApiControllerTests.cs @@ -3,14 +3,14 @@ using Moq; using Umbraco.Cms.Core.Models.Membership; using Umbraco.Cms.Core.Security; -using Umbraco.VercelAnalytics.Configuration; -using Umbraco.VercelAnalytics.Controllers; -using Umbraco.VercelAnalytics.Models; -using Umbraco.VercelAnalytics.Services; +using TheBuilder.WebAnalytics.Configuration; +using TheBuilder.WebAnalytics.Controllers; +using TheBuilder.WebAnalytics.Models; +using TheBuilder.WebAnalytics.Services; -namespace Umbraco.VercelAnalytics.Tests.Controllers; +namespace TheBuilder.WebAnalytics.Tests.Controllers; -public sealed class UmbracoVercelAnalyticsSettingsApiControllerTests +public sealed class WebAnalyticsSettingsApiControllerTests { private static readonly Guid MockKey = Guid.Parse("aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa"); @@ -35,7 +35,7 @@ public async Task Settings_preserve_mock_identity_and_report_runtime_availabilit ] }); var registry = new VercelAnalyticsConnectionRegistry(store, options, mockConnectionsEnabled); - var controller = new UmbracoVercelAnalyticsSettingsApiController( + var controller = new WebAnalyticsSettingsApiController( CreateAdministratorSecurityAccessor(), store, registry, diff --git a/tests/Umbraco.VercelAnalytics.Tests/Services/AnalyticsAuthorizationServiceTests.cs b/tests/TheBuilder.WebAnalytics.Tests/Services/AnalyticsAuthorizationServiceTests.cs similarity index 90% rename from tests/Umbraco.VercelAnalytics.Tests/Services/AnalyticsAuthorizationServiceTests.cs rename to tests/TheBuilder.WebAnalytics.Tests/Services/AnalyticsAuthorizationServiceTests.cs index 51714aa..965ce05 100644 --- a/tests/Umbraco.VercelAnalytics.Tests/Services/AnalyticsAuthorizationServiceTests.cs +++ b/tests/TheBuilder.WebAnalytics.Tests/Services/AnalyticsAuthorizationServiceTests.cs @@ -1,9 +1,9 @@ using Moq; using Umbraco.Cms.Core.Security; using Umbraco.Cms.Core.Services; -using Umbraco.VercelAnalytics.Services; +using TheBuilder.WebAnalytics.Services; -namespace Umbraco.VercelAnalytics.Tests.Services; +namespace TheBuilder.WebAnalytics.Tests.Services; public sealed class AnalyticsAuthorizationServiceTests { diff --git a/tests/Umbraco.VercelAnalytics.Tests/Services/AnalyticsDocumentRouteServiceTests.cs b/tests/TheBuilder.WebAnalytics.Tests/Services/AnalyticsDocumentRouteServiceTests.cs similarity index 98% rename from tests/Umbraco.VercelAnalytics.Tests/Services/AnalyticsDocumentRouteServiceTests.cs rename to tests/TheBuilder.WebAnalytics.Tests/Services/AnalyticsDocumentRouteServiceTests.cs index 2c8e2f1..86119f5 100644 --- a/tests/Umbraco.VercelAnalytics.Tests/Services/AnalyticsDocumentRouteServiceTests.cs +++ b/tests/TheBuilder.WebAnalytics.Tests/Services/AnalyticsDocumentRouteServiceTests.cs @@ -2,10 +2,10 @@ using Moq; using Umbraco.Cms.Core.Models; using Umbraco.Cms.Core.Services; -using Umbraco.VercelAnalytics.Configuration; -using Umbraco.VercelAnalytics.Services; +using TheBuilder.WebAnalytics.Configuration; +using TheBuilder.WebAnalytics.Services; -namespace Umbraco.VercelAnalytics.Tests.Services; +namespace TheBuilder.WebAnalytics.Tests.Services; public sealed class AnalyticsDocumentRouteServiceTests { diff --git a/tests/Umbraco.VercelAnalytics.Tests/Services/AnalyticsFilterParserTests.cs b/tests/TheBuilder.WebAnalytics.Tests/Services/AnalyticsFilterParserTests.cs similarity index 91% rename from tests/Umbraco.VercelAnalytics.Tests/Services/AnalyticsFilterParserTests.cs rename to tests/TheBuilder.WebAnalytics.Tests/Services/AnalyticsFilterParserTests.cs index 14402ba..dc3a3f7 100644 --- a/tests/Umbraco.VercelAnalytics.Tests/Services/AnalyticsFilterParserTests.cs +++ b/tests/TheBuilder.WebAnalytics.Tests/Services/AnalyticsFilterParserTests.cs @@ -1,7 +1,7 @@ -using Umbraco.VercelAnalytics.Models; -using Umbraco.VercelAnalytics.Services; +using TheBuilder.WebAnalytics.Models; +using TheBuilder.WebAnalytics.Services; -namespace Umbraco.VercelAnalytics.Tests.Services; +namespace TheBuilder.WebAnalytics.Tests.Services; public sealed class AnalyticsFilterParserTests { diff --git a/tests/Umbraco.VercelAnalytics.Tests/Services/AnalyticsPublishedCulturesTests.cs b/tests/TheBuilder.WebAnalytics.Tests/Services/AnalyticsPublishedCulturesTests.cs similarity index 94% rename from tests/Umbraco.VercelAnalytics.Tests/Services/AnalyticsPublishedCulturesTests.cs rename to tests/TheBuilder.WebAnalytics.Tests/Services/AnalyticsPublishedCulturesTests.cs index 5cdc278..d07f950 100644 --- a/tests/Umbraco.VercelAnalytics.Tests/Services/AnalyticsPublishedCulturesTests.cs +++ b/tests/TheBuilder.WebAnalytics.Tests/Services/AnalyticsPublishedCulturesTests.cs @@ -1,6 +1,6 @@ -using Umbraco.VercelAnalytics.Services; +using TheBuilder.WebAnalytics.Services; -namespace Umbraco.VercelAnalytics.Tests.Services; +namespace TheBuilder.WebAnalytics.Tests.Services; public sealed class AnalyticsPublishedCulturesTests { diff --git a/tests/Umbraco.VercelAnalytics.Tests/Services/AnalyticsRequestPathTests.cs b/tests/TheBuilder.WebAnalytics.Tests/Services/AnalyticsRequestPathTests.cs similarity index 82% rename from tests/Umbraco.VercelAnalytics.Tests/Services/AnalyticsRequestPathTests.cs rename to tests/TheBuilder.WebAnalytics.Tests/Services/AnalyticsRequestPathTests.cs index 563199d..a639d65 100644 --- a/tests/Umbraco.VercelAnalytics.Tests/Services/AnalyticsRequestPathTests.cs +++ b/tests/TheBuilder.WebAnalytics.Tests/Services/AnalyticsRequestPathTests.cs @@ -1,6 +1,6 @@ -using Umbraco.VercelAnalytics.Services; +using TheBuilder.WebAnalytics.Services; -namespace Umbraco.VercelAnalytics.Tests.Services; +namespace TheBuilder.WebAnalytics.Tests.Services; public sealed class AnalyticsRequestPathTests { diff --git a/tests/Umbraco.VercelAnalytics.Tests/Services/AnalyticsSectionAccessInitializerTests.cs b/tests/TheBuilder.WebAnalytics.Tests/Services/AnalyticsSectionAccessInitializerTests.cs similarity index 86% rename from tests/Umbraco.VercelAnalytics.Tests/Services/AnalyticsSectionAccessInitializerTests.cs rename to tests/TheBuilder.WebAnalytics.Tests/Services/AnalyticsSectionAccessInitializerTests.cs index a56de01..672e736 100644 --- a/tests/Umbraco.VercelAnalytics.Tests/Services/AnalyticsSectionAccessInitializerTests.cs +++ b/tests/TheBuilder.WebAnalytics.Tests/Services/AnalyticsSectionAccessInitializerTests.cs @@ -1,6 +1,6 @@ -using Umbraco.VercelAnalytics.Services; +using TheBuilder.WebAnalytics.Services; -namespace Umbraco.VercelAnalytics.Tests.Services; +namespace TheBuilder.WebAnalytics.Tests.Services; public sealed class AnalyticsSectionAccessInitializerTests { diff --git a/tests/Umbraco.VercelAnalytics.Tests/Services/MockVercelAnalyticsClientTests.cs b/tests/TheBuilder.WebAnalytics.Tests/Services/MockVercelAnalyticsClientTests.cs similarity index 97% rename from tests/Umbraco.VercelAnalytics.Tests/Services/MockVercelAnalyticsClientTests.cs rename to tests/TheBuilder.WebAnalytics.Tests/Services/MockVercelAnalyticsClientTests.cs index 402146a..ddd5caa 100644 --- a/tests/Umbraco.VercelAnalytics.Tests/Services/MockVercelAnalyticsClientTests.cs +++ b/tests/TheBuilder.WebAnalytics.Tests/Services/MockVercelAnalyticsClientTests.cs @@ -1,10 +1,10 @@ using Microsoft.Extensions.Caching.Memory; using Microsoft.Extensions.Options; -using Umbraco.VercelAnalytics.Configuration; -using Umbraco.VercelAnalytics.Models; -using Umbraco.VercelAnalytics.Services; +using TheBuilder.WebAnalytics.Configuration; +using TheBuilder.WebAnalytics.Models; +using TheBuilder.WebAnalytics.Services; -namespace Umbraco.VercelAnalytics.Tests.Services; +namespace TheBuilder.WebAnalytics.Tests.Services; public sealed class MockVercelAnalyticsClientTests { diff --git a/tests/Umbraco.VercelAnalytics.Tests/Services/VercelAnalyticsClientTests.cs b/tests/TheBuilder.WebAnalytics.Tests/Services/VercelAnalyticsClientTests.cs similarity index 99% rename from tests/Umbraco.VercelAnalytics.Tests/Services/VercelAnalyticsClientTests.cs rename to tests/TheBuilder.WebAnalytics.Tests/Services/VercelAnalyticsClientTests.cs index dcca8df..201cc07 100644 --- a/tests/Umbraco.VercelAnalytics.Tests/Services/VercelAnalyticsClientTests.cs +++ b/tests/TheBuilder.WebAnalytics.Tests/Services/VercelAnalyticsClientTests.cs @@ -1,10 +1,10 @@ using System.Net; using System.Text; -using Umbraco.VercelAnalytics.Configuration; -using Umbraco.VercelAnalytics.Models; -using Umbraco.VercelAnalytics.Services; +using TheBuilder.WebAnalytics.Configuration; +using TheBuilder.WebAnalytics.Models; +using TheBuilder.WebAnalytics.Services; -namespace Umbraco.VercelAnalytics.Tests.Services; +namespace TheBuilder.WebAnalytics.Tests.Services; public sealed class VercelAnalyticsClientTests { diff --git a/tests/Umbraco.VercelAnalytics.Tests/Services/VercelAnalyticsReportServiceTests.cs b/tests/TheBuilder.WebAnalytics.Tests/Services/VercelAnalyticsReportServiceTests.cs similarity index 98% rename from tests/Umbraco.VercelAnalytics.Tests/Services/VercelAnalyticsReportServiceTests.cs rename to tests/TheBuilder.WebAnalytics.Tests/Services/VercelAnalyticsReportServiceTests.cs index 4925d56..dd5cd3a 100644 --- a/tests/Umbraco.VercelAnalytics.Tests/Services/VercelAnalyticsReportServiceTests.cs +++ b/tests/TheBuilder.WebAnalytics.Tests/Services/VercelAnalyticsReportServiceTests.cs @@ -1,10 +1,10 @@ using Microsoft.Extensions.Caching.Memory; using Microsoft.Extensions.Options; -using Umbraco.VercelAnalytics.Configuration; -using Umbraco.VercelAnalytics.Models; -using Umbraco.VercelAnalytics.Services; +using TheBuilder.WebAnalytics.Configuration; +using TheBuilder.WebAnalytics.Models; +using TheBuilder.WebAnalytics.Services; -namespace Umbraco.VercelAnalytics.Tests.Services; +namespace TheBuilder.WebAnalytics.Tests.Services; public sealed class VercelAnalyticsReportServiceTests { diff --git a/tests/Umbraco.VercelAnalytics.Tests/Services/VercelProjectNameServiceTests.cs b/tests/TheBuilder.WebAnalytics.Tests/Services/VercelProjectNameServiceTests.cs similarity index 95% rename from tests/Umbraco.VercelAnalytics.Tests/Services/VercelProjectNameServiceTests.cs rename to tests/TheBuilder.WebAnalytics.Tests/Services/VercelProjectNameServiceTests.cs index d26efb4..701a085 100644 --- a/tests/Umbraco.VercelAnalytics.Tests/Services/VercelProjectNameServiceTests.cs +++ b/tests/TheBuilder.WebAnalytics.Tests/Services/VercelProjectNameServiceTests.cs @@ -1,10 +1,10 @@ using Microsoft.Extensions.Caching.Memory; using Moq; -using Umbraco.VercelAnalytics.Configuration; -using Umbraco.VercelAnalytics.Models; -using Umbraco.VercelAnalytics.Services; +using TheBuilder.WebAnalytics.Configuration; +using TheBuilder.WebAnalytics.Models; +using TheBuilder.WebAnalytics.Services; -namespace Umbraco.VercelAnalytics.Tests.Services; +namespace TheBuilder.WebAnalytics.Tests.Services; public sealed class VercelProjectNameServiceTests { diff --git a/tests/Umbraco.VercelAnalytics.Tests/Umbraco.VercelAnalytics.Tests.csproj b/tests/TheBuilder.WebAnalytics.Tests/TheBuilder.WebAnalytics.Tests.csproj similarity index 87% rename from tests/Umbraco.VercelAnalytics.Tests/Umbraco.VercelAnalytics.Tests.csproj rename to tests/TheBuilder.WebAnalytics.Tests/TheBuilder.WebAnalytics.Tests.csproj index 906c37a..61c3c33 100644 --- a/tests/Umbraco.VercelAnalytics.Tests/Umbraco.VercelAnalytics.Tests.csproj +++ b/tests/TheBuilder.WebAnalytics.Tests/TheBuilder.WebAnalytics.Tests.csproj @@ -20,7 +20,7 @@ - + diff --git a/umbraco-marketplace-readme.md b/umbraco-marketplace-readme.md new file mode 100644 index 0000000..3dc845d --- /dev/null +++ b/umbraco-marketplace-readme.md @@ -0,0 +1,30 @@ +# Web Analytics + +> Vercel Web Analytics inside the Umbraco backoffice. + +**Web Analytics brings Vercel Web Analytics into the Umbraco backoffice.** View traffic, audience, referrers, pages, campaigns, and custom events without leaving Umbraco. + +## Features + +- Analytics section with totals, traffic history, audience, referrers, pages, routes, campaigns, and custom events. +- Page-level analytics in the document workspace, automatically filtered to the published route. +- Clear date controls and drill-down views that follow familiar Umbraco backoffice patterns. + +## Built for real Umbraco installations + +- Map multiple Umbraco sites to different Vercel projects. +- Choose which document types expose page-level analytics. +- Control global Analytics access through Umbraco user groups and preserve normal document permissions. +- Store Vercel access tokens in server-side configuration. Tokens are never sent to the browser or stored in Umbraco. + +The package reads analytics already collected by Vercel. **It does not add tracking scripts to your website.** + +## Requirements + +- Umbraco CMS 17.1–18.x +- A Vercel project with Web Analytics enabled +- A Vercel access token + +Installation, configuration, permissions, and troubleshooting are covered in the [documentation](https://github.com/thebuilder/umbraco-vercel-analytics#readme). + +Web Analytics is open source under the MIT License. Bugs and feature requests are welcome on [GitHub](https://github.com/thebuilder/umbraco-vercel-analytics/issues). diff --git a/umbraco-marketplace.json b/umbraco-marketplace.json new file mode 100644 index 0000000..6c4e142 --- /dev/null +++ b/umbraco-marketplace.json @@ -0,0 +1,40 @@ +{ + "$schema": "https://marketplace.umbraco.com/umbraco-marketplace-schema.json", + "AuthorDetails": { + "Name": "Daniel Schmidt", + "Description": "Open-source Umbraco package developer focused on useful, editor-friendly backoffice integrations.", + "Url": "https://github.com/thebuilder", + "ImageUrl": "https://github.com/thebuilder.png", + "SyncContributorsFromRepository": true + }, + "Category": "Analytics & Insights", + "Title": "Web Analytics", + "Description": "View Vercel Web Analytics inside the Umbraco backoffice. Explore traffic, visitors, referrers, pages, routes, campaigns, UTM parameters, and custom events, with route-filtered analytics available directly on published documents.", + "DocumentationUrl": "https://github.com/thebuilder/umbraco-vercel-analytics#readme", + "IssueTrackerUrl": "https://github.com/thebuilder/umbraco-vercel-analytics/issues", + "LicenseTypes": [ + "Free" + ], + "PackageType": "Integration", + "Tags": [ + "analytics", + "web analytics", + "Vercel", + "Vercel Web Analytics", + "traffic analytics", + "website traffic", + "visitors", + "referrers", + "pages", + "routes", + "campaigns", + "UTM", + "dashboard", + "reporting", + "content analytics", + "page analytics", + "custom events", + "multisite", + "multi-site" + ] +}