unleash-server 5.4.3 → 5.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +5 -3
- package/dist/lib/addons/addon-schema.js +2 -1
- package/dist/lib/addons/addon-schema.js.map +1 -1
- package/dist/lib/addons/datadog-definition.js +22 -7
- package/dist/lib/addons/datadog-definition.js.map +1 -1
- package/dist/lib/addons/datadog.d.ts +7 -1
- package/dist/lib/addons/datadog.js +16 -3
- package/dist/lib/addons/datadog.js.map +1 -1
- package/dist/lib/addons/datadog.test.js +62 -0
- package/dist/lib/addons/datadog.test.js.map +1 -1
- package/dist/lib/addons/index.js +3 -11
- package/dist/lib/addons/index.js.map +1 -1
- package/dist/lib/addons/slack-app-definition.js +5 -24
- package/dist/lib/addons/slack-app-definition.js.map +1 -1
- package/dist/lib/addons/slack-app.d.ts +0 -1
- package/dist/lib/addons/slack-app.js +5 -17
- package/dist/lib/addons/slack-app.js.map +1 -1
- package/dist/lib/addons/slack-app.test.js +39 -25
- package/dist/lib/addons/slack-app.test.js.map +1 -1
- package/dist/lib/addons/slack-definition.js +11 -4
- package/dist/lib/addons/slack-definition.js.map +1 -1
- package/dist/lib/addons/teams-definition.js +5 -4
- package/dist/lib/addons/teams-definition.js.map +1 -1
- package/dist/lib/addons/webhook-definition.js +10 -12
- package/dist/lib/addons/webhook-definition.js.map +1 -1
- package/dist/lib/create-config.js +13 -1
- package/dist/lib/create-config.js.map +1 -1
- package/dist/lib/create-config.test.js +14 -0
- package/dist/lib/create-config.test.js.map +1 -1
- package/dist/lib/db/access-store.d.ts +23 -5
- package/dist/lib/db/access-store.js +263 -17
- package/dist/lib/db/access-store.js.map +1 -1
- package/dist/lib/db/access-store.test.js +83 -0
- package/dist/lib/db/access-store.test.js.map +1 -0
- package/dist/lib/db/client-applications-store.d.ts +1 -3
- package/dist/lib/db/client-applications-store.js +13 -24
- package/dist/lib/db/client-applications-store.js.map +1 -1
- package/dist/lib/db/event-store.js +1 -0
- package/dist/lib/db/event-store.js.map +1 -1
- package/dist/lib/db/feature-toggle-client-store.js +17 -4
- package/dist/lib/db/feature-toggle-client-store.js.map +1 -1
- package/dist/lib/db/feature-toggle-store.js +1 -1
- package/dist/lib/db/feature-toggle-store.js.map +1 -1
- package/dist/lib/db/group-store.d.ts +4 -2
- package/dist/lib/db/group-store.js +24 -0
- package/dist/lib/db/group-store.js.map +1 -1
- package/dist/lib/db/index.d.ts +1 -2
- package/dist/lib/db/index.js +5 -1
- package/dist/lib/db/index.js.map +1 -1
- package/dist/lib/db/project-stats-store.d.ts +2 -0
- package/dist/lib/db/project-stats-store.js +27 -0
- package/dist/lib/db/project-stats-store.js.map +1 -1
- package/dist/lib/db/project-store.d.ts +7 -1
- package/dist/lib/db/project-store.js +34 -1
- package/dist/lib/db/project-store.js.map +1 -1
- package/dist/lib/error/bad-data-error.d.ts +1 -1
- package/dist/lib/error/index.d.ts +2 -1
- package/dist/lib/error/index.js +3 -1
- package/dist/lib/error/index.js.map +1 -1
- package/dist/lib/error/pattern-error.d.ts +10 -0
- package/dist/lib/error/pattern-error.js +20 -0
- package/dist/lib/error/pattern-error.js.map +1 -0
- package/dist/lib/features/dependent-features/createDependentFeaturesService.d.ts +3 -0
- package/dist/lib/features/dependent-features/createDependentFeaturesService.js +11 -0
- package/dist/lib/features/dependent-features/createDependentFeaturesService.js.map +1 -0
- package/dist/lib/features/dependent-features/dependent-features-controller.d.ts +28 -0
- package/dist/lib/features/dependent-features/dependent-features-controller.js +151 -0
- package/dist/lib/features/dependent-features/dependent-features-controller.js.map +1 -0
- package/dist/lib/features/dependent-features/dependent-features-service.d.ts +11 -0
- package/dist/lib/features/dependent-features/dependent-features-service.js +40 -0
- package/dist/lib/features/dependent-features/dependent-features-service.js.map +1 -0
- package/dist/lib/features/dependent-features/dependent-features-store-type.d.ts +8 -0
- package/dist/lib/features/dependent-features/dependent-features-store-type.js +3 -0
- package/dist/lib/features/dependent-features/dependent-features-store-type.js.map +1 -0
- package/dist/lib/features/dependent-features/dependent-features-store.d.ts +12 -0
- package/dist/lib/features/dependent-features/dependent-features-store.js +56 -0
- package/dist/lib/features/dependent-features/dependent-features-store.js.map +1 -0
- package/dist/lib/features/dependent-features/dependent-features.d.ts +14 -0
- package/dist/lib/features/dependent-features/dependent-features.js +3 -0
- package/dist/lib/features/dependent-features/dependent-features.js.map +1 -0
- package/dist/lib/features/dependent-features/dependent.features.e2e.test.d.ts +1 -0
- package/dist/lib/features/dependent-features/dependent.features.e2e.test.js +82 -0
- package/dist/lib/features/dependent-features/dependent.features.e2e.test.js.map +1 -0
- package/dist/lib/features/dependent-features/fake-dependent-features-store.d.ts +8 -0
- package/dist/lib/features/dependent-features/fake-dependent-features-store.js +22 -0
- package/dist/lib/features/dependent-features/fake-dependent-features-store.js.map +1 -0
- package/dist/lib/features/export-import-toggles/createExportImportService.js +6 -3
- package/dist/lib/features/export-import-toggles/createExportImportService.js.map +1 -1
- package/dist/lib/features/export-import-toggles/export-import-service.d.ts +9 -3
- package/dist/lib/features/export-import-toggles/export-import-service.js +51 -21
- package/dist/lib/features/export-import-toggles/export-import-service.js.map +1 -1
- package/dist/lib/features/export-import-toggles/export-import.e2e.test.js +120 -50
- package/dist/lib/features/export-import-toggles/export-import.e2e.test.js.map +1 -1
- package/dist/lib/features/export-import-toggles/import-permissions-service.d.ts +1 -2
- package/dist/lib/features/export-import-toggles/import-toggles-store-type.d.ts +6 -0
- package/dist/lib/features/export-import-toggles/import-toggles-store.d.ts +2 -1
- package/dist/lib/features/export-import-toggles/import-toggles-store.js +25 -0
- package/dist/lib/features/export-import-toggles/import-toggles-store.js.map +1 -1
- package/dist/lib/features/export-import-toggles/import-validation-messages.d.ts +18 -2
- package/dist/lib/features/export-import-toggles/import-validation-messages.js +27 -11
- package/dist/lib/features/export-import-toggles/import-validation-messages.js.map +1 -1
- package/dist/lib/features/feature-naming-pattern/feature-naming-validation.d.ts +14 -0
- package/dist/lib/features/feature-naming-pattern/feature-naming-validation.js +46 -0
- package/dist/lib/features/feature-naming-pattern/feature-naming-validation.js.map +1 -0
- package/dist/lib/features/feature-naming-pattern/feature-naming-validation.test.d.ts +1 -0
- package/dist/lib/features/feature-naming-pattern/feature-naming-validation.test.js +116 -0
- package/dist/lib/features/feature-naming-pattern/feature-naming-validation.test.js.map +1 -0
- package/dist/lib/features/feature-toggle/createFeatureToggleService.js +11 -2
- package/dist/lib/features/feature-toggle/createFeatureToggleService.js.map +1 -1
- package/dist/lib/features/instance-stats/getActiveUsers.d.ts +9 -0
- package/dist/lib/features/instance-stats/getActiveUsers.e2e.test.d.ts +1 -0
- package/dist/lib/features/instance-stats/getActiveUsers.e2e.test.js +141 -0
- package/dist/lib/features/instance-stats/getActiveUsers.e2e.test.js.map +1 -0
- package/dist/lib/features/instance-stats/getActiveUsers.js +33 -0
- package/dist/lib/features/instance-stats/getActiveUsers.js.map +1 -0
- package/dist/lib/{services → features/instance-stats}/instance-stats-service.d.ts +13 -7
- package/dist/lib/{services → features/instance-stats}/instance-stats-service.js +16 -7
- package/dist/lib/features/instance-stats/instance-stats-service.js.map +1 -0
- package/dist/lib/features/instance-stats/instance-stats-service.test.d.ts +1 -0
- package/dist/lib/{services → features/instance-stats}/instance-stats-service.test.js +6 -5
- package/dist/lib/features/instance-stats/instance-stats-service.test.js.map +1 -0
- package/dist/lib/features/playground/advanced-playground.test.js +2 -3
- package/dist/lib/features/playground/advanced-playground.test.js.map +1 -1
- package/dist/lib/features/playground/feature-evaluator/variant.d.ts +1 -1
- package/dist/lib/features/playground/generateObjectCombinations.d.ts +1 -1
- package/dist/lib/features/playground/generateObjectCombinations.js +14 -4
- package/dist/lib/features/playground/generateObjectCombinations.js.map +1 -1
- package/dist/lib/features/playground/generateObjectCombinations.test.js +21 -0
- package/dist/lib/features/playground/generateObjectCombinations.test.js.map +1 -1
- package/dist/lib/features/playground/playground-service.d.ts +5 -3
- package/dist/lib/features/playground/playground-service.js +18 -3
- package/dist/lib/features/playground/playground-service.js.map +1 -1
- package/dist/lib/features/playground/playground.d.ts +2 -1
- package/dist/lib/features/playground/playground.js +2 -1
- package/dist/lib/features/playground/playground.js.map +1 -1
- package/dist/lib/features/private-project/createPrivateProjectChecker.d.ts +5 -0
- package/dist/lib/features/private-project/createPrivateProjectChecker.js +22 -0
- package/dist/lib/features/private-project/createPrivateProjectChecker.js.map +1 -0
- package/dist/lib/features/private-project/fakePrivateProjectChecker.d.ts +7 -0
- package/dist/lib/features/private-project/fakePrivateProjectChecker.js +15 -0
- package/dist/lib/features/private-project/fakePrivateProjectChecker.js.map +1 -0
- package/dist/lib/features/private-project/privateProjectChecker.d.ts +10 -0
- package/dist/lib/features/private-project/privateProjectChecker.js +22 -0
- package/dist/lib/features/private-project/privateProjectChecker.js.map +1 -0
- package/dist/lib/features/private-project/privateProjectCheckerType.d.ts +5 -0
- package/dist/lib/features/private-project/privateProjectCheckerType.js +3 -0
- package/dist/lib/features/private-project/privateProjectCheckerType.js.map +1 -0
- package/dist/lib/features/private-project/privateProjectStore.d.ts +18 -0
- package/dist/lib/features/private-project/privateProjectStore.js +70 -0
- package/dist/lib/features/private-project/privateProjectStore.js.map +1 -0
- package/dist/lib/features/private-project/privateProjectStoreType.d.ts +4 -0
- package/dist/lib/features/private-project/privateProjectStoreType.js +3 -0
- package/dist/lib/features/private-project/privateProjectStoreType.js.map +1 -0
- package/dist/lib/features/project/createProjectService.js +5 -8
- package/dist/lib/features/project/createProjectService.js.map +1 -1
- package/dist/lib/features/segment/createSegmentService.js +5 -2
- package/dist/lib/features/segment/createSegmentService.js.map +1 -1
- package/dist/lib/features/segment/segment-controller.d.ts +39 -0
- package/dist/lib/features/segment/segment-controller.js +291 -0
- package/dist/lib/features/segment/segment-controller.js.map +1 -0
- package/dist/lib/metrics.d.ts +1 -1
- package/dist/lib/metrics.js +30 -1
- package/dist/lib/metrics.js.map +1 -1
- package/dist/lib/metrics.test.js +3 -2
- package/dist/lib/metrics.test.js.map +1 -1
- package/dist/lib/middleware/rbac-middleware.d.ts +2 -0
- package/dist/lib/middleware/rbac-middleware.js +2 -0
- package/dist/lib/middleware/rbac-middleware.js.map +1 -1
- package/dist/lib/middleware/secure-headers.js +18 -0
- package/dist/lib/middleware/secure-headers.js.map +1 -1
- package/dist/lib/openapi/index.js +13 -0
- package/dist/lib/openapi/index.js.map +1 -1
- package/dist/lib/openapi/meta-schema-rules.test.js +14 -4
- package/dist/lib/openapi/meta-schema-rules.test.js.map +1 -1
- package/dist/lib/openapi/spec/addon-type-schema.d.ts +6 -1
- package/dist/lib/openapi/spec/addon-type-schema.js +6 -1
- package/dist/lib/openapi/spec/addon-type-schema.js.map +1 -1
- package/dist/lib/openapi/spec/addons-schema.d.ts +8 -3
- package/dist/lib/openapi/spec/addons-schema.js +8 -3
- package/dist/lib/openapi/spec/addons-schema.js.map +1 -1
- package/dist/lib/openapi/spec/admin-segment-schema.d.ts +115 -0
- package/dist/lib/openapi/spec/admin-segment-schema.js +75 -0
- package/dist/lib/openapi/spec/admin-segment-schema.js.map +1 -0
- package/dist/lib/openapi/spec/admin-segment-schema.test.d.ts +1 -0
- package/dist/lib/openapi/spec/admin-segment-schema.test.js +39 -0
- package/dist/lib/openapi/spec/admin-segment-schema.test.js.map +1 -0
- package/dist/lib/openapi/spec/admin-strategies-schema.d.ts +46 -0
- package/dist/lib/openapi/spec/admin-strategies-schema.js +54 -0
- package/dist/lib/openapi/spec/admin-strategies-schema.js.map +1 -0
- package/dist/lib/openapi/spec/admin-strategies-schema.test.d.ts +1 -0
- package/dist/lib/openapi/spec/admin-strategies-schema.test.js +40 -0
- package/dist/lib/openapi/spec/admin-strategies-schema.test.js.map +1 -0
- package/dist/lib/openapi/spec/advanced-playground-environment-feature-schema.d.ts +51 -6
- package/dist/lib/openapi/spec/advanced-playground-environment-feature-schema.js +3 -1
- package/dist/lib/openapi/spec/advanced-playground-environment-feature-schema.js.map +1 -1
- package/dist/lib/openapi/spec/advanced-playground-feature-schema.d.ts +101 -11
- package/dist/lib/openapi/spec/advanced-playground-feature-schema.js +2 -0
- package/dist/lib/openapi/spec/advanced-playground-feature-schema.js.map +1 -1
- package/dist/lib/openapi/spec/advanced-playground-request-schema.d.ts +1 -0
- package/dist/lib/openapi/spec/advanced-playground-response-schema.d.ts +203 -22
- package/dist/lib/openapi/spec/advanced-playground-response-schema.js +2 -0
- package/dist/lib/openapi/spec/advanced-playground-response-schema.js.map +1 -1
- package/dist/lib/openapi/spec/client-feature-schema.d.ts +41 -6
- package/dist/lib/openapi/spec/client-feature-schema.js +9 -0
- package/dist/lib/openapi/spec/client-feature-schema.js.map +1 -1
- package/dist/lib/openapi/spec/client-features-schema.d.ts +75 -12
- package/dist/lib/openapi/spec/client-features-schema.js +2 -0
- package/dist/lib/openapi/spec/client-features-schema.js.map +1 -1
- package/dist/lib/openapi/spec/context-field-strategies-schema.d.ts +1 -1
- package/dist/lib/openapi/spec/context-field-strategies-schema.js +1 -1
- package/dist/lib/openapi/spec/context-field-strategies-schema.js.map +1 -1
- package/dist/lib/openapi/spec/create-api-token-schema.d.ts +1 -139
- package/dist/lib/openapi/spec/create-api-token-schema.js +16 -20
- package/dist/lib/openapi/spec/create-api-token-schema.js.map +1 -1
- package/dist/lib/openapi/spec/create-dependent-feature-schema.d.ts +29 -0
- package/dist/lib/openapi/spec/create-dependent-feature-schema.js +31 -0
- package/dist/lib/openapi/spec/create-dependent-feature-schema.js.map +1 -0
- package/dist/lib/openapi/spec/create-feature-naming-pattern-schema.d.ts +29 -0
- package/dist/lib/openapi/spec/create-feature-naming-pattern-schema.js +33 -0
- package/dist/lib/openapi/spec/create-feature-naming-pattern-schema.js.map +1 -0
- package/dist/lib/openapi/spec/create-feature-strategy-schema.d.ts +2 -2
- package/dist/lib/openapi/spec/create-strategy-schema.d.ts +15 -0
- package/dist/lib/openapi/spec/create-strategy-schema.js +15 -0
- package/dist/lib/openapi/spec/create-strategy-schema.js.map +1 -1
- package/dist/lib/openapi/spec/create-strategy-variant-schema.d.ts +2 -2
- package/dist/lib/openapi/spec/create-strategy-variant-schema.js +2 -2
- package/dist/lib/openapi/spec/create-strategy-variant-schema.js.map +1 -1
- package/dist/lib/openapi/spec/dependent-feature-schema.d.ts +30 -0
- package/dist/lib/openapi/spec/dependent-feature-schema.js +14 -0
- package/dist/lib/openapi/spec/dependent-feature-schema.js.map +1 -0
- package/dist/lib/openapi/spec/dora-features-schema.d.ts +20 -0
- package/dist/lib/openapi/spec/dora-features-schema.js +22 -0
- package/dist/lib/openapi/spec/dora-features-schema.js.map +1 -0
- package/dist/lib/openapi/spec/environment-project-schema.d.ts +4 -4
- package/dist/lib/openapi/spec/environments-project-schema.d.ts +4 -4
- package/dist/lib/openapi/spec/event-schema.d.ts +3 -3
- package/dist/lib/openapi/spec/events-schema.d.ts +3 -3
- package/dist/lib/openapi/spec/export-query-schema.d.ts +22 -15
- package/dist/lib/openapi/spec/export-query-schema.js +16 -15
- package/dist/lib/openapi/spec/export-query-schema.js.map +1 -1
- package/dist/lib/openapi/spec/export-result-schema.d.ts +26 -26
- package/dist/lib/openapi/spec/feature-environment-schema.d.ts +6 -6
- package/dist/lib/openapi/spec/feature-events-schema.d.ts +3 -3
- package/dist/lib/openapi/spec/feature-schema.d.ts +12 -12
- package/dist/lib/openapi/spec/feature-strategy-schema.d.ts +2 -2
- package/dist/lib/openapi/spec/feature-variants-schema.d.ts +2 -2
- package/dist/lib/openapi/spec/features-schema.d.ts +24 -24
- package/dist/lib/openapi/spec/health-overview-schema.d.ts +63 -33
- package/dist/lib/openapi/spec/health-overview-schema.js +6 -1
- package/dist/lib/openapi/spec/health-overview-schema.js.map +1 -1
- package/dist/lib/openapi/spec/health-report-schema.d.ts +63 -33
- package/dist/lib/openapi/spec/import-toggles-schema.d.ts +52 -52
- package/dist/lib/openapi/spec/index.d.ts +9 -0
- package/dist/lib/openapi/spec/index.js +9 -0
- package/dist/lib/openapi/spec/index.js.map +1 -1
- package/dist/lib/openapi/spec/instance-admin-stats-schema.d.ts +42 -0
- package/dist/lib/openapi/spec/instance-admin-stats-schema.js +42 -0
- package/dist/lib/openapi/spec/instance-admin-stats-schema.js.map +1 -1
- package/dist/lib/openapi/spec/parent-feature-options-schema.d.ts +11 -0
- package/dist/lib/openapi/spec/parent-feature-options-schema.js +13 -0
- package/dist/lib/openapi/spec/parent-feature-options-schema.js.map +1 -0
- package/dist/lib/openapi/spec/playground-feature-schema.d.ts +5 -5
- package/dist/lib/openapi/spec/playground-request-schema.d.ts +1 -0
- package/dist/lib/openapi/spec/playground-response-schema.d.ts +12 -10
- package/dist/lib/openapi/spec/playground-strategy-schema.d.ts +4 -4
- package/dist/lib/openapi/spec/playground-strategy-schema.js +1 -1
- package/dist/lib/openapi/spec/playground-strategy-schema.js.map +1 -1
- package/dist/lib/openapi/spec/profile-schema.d.ts +12 -12
- package/dist/lib/openapi/spec/project-dora-metrics-schema.d.ts +44 -0
- package/dist/lib/openapi/spec/project-dora-metrics-schema.js +28 -0
- package/dist/lib/openapi/spec/project-dora-metrics-schema.js.map +1 -0
- package/dist/lib/openapi/spec/project-environment-schema.d.ts +4 -4
- package/dist/lib/openapi/spec/project-overview-schema.d.ts +63 -33
- package/dist/lib/openapi/spec/project-overview-schema.js +6 -1
- package/dist/lib/openapi/spec/project-overview-schema.js.map +1 -1
- package/dist/lib/openapi/spec/project-schema.d.ts +1 -1
- package/dist/lib/openapi/spec/project-schema.js +1 -1
- package/dist/lib/openapi/spec/project-schema.js.map +1 -1
- package/dist/lib/openapi/spec/projects-schema.d.ts +1 -1
- package/dist/lib/openapi/spec/push-variants-schema.d.ts +2 -2
- package/dist/lib/openapi/spec/sdk-context-schema.d.ts +1 -0
- package/dist/lib/openapi/spec/sdk-context-schema.js +1 -0
- package/dist/lib/openapi/spec/sdk-context-schema.js.map +1 -1
- package/dist/lib/openapi/spec/sdk-flat-context-schema.d.ts +46 -0
- package/dist/lib/openapi/spec/sdk-flat-context-schema.js +15 -0
- package/dist/lib/openapi/spec/sdk-flat-context-schema.js.map +1 -0
- package/dist/lib/openapi/spec/search-events-schema.d.ts +1 -1
- package/dist/lib/openapi/spec/segments-schema.d.ts +177 -0
- package/dist/lib/openapi/spec/segments-schema.js +26 -0
- package/dist/lib/openapi/spec/segments-schema.js.map +1 -0
- package/dist/lib/openapi/spec/segments-schema.test.d.ts +1 -0
- package/dist/lib/openapi/spec/segments-schema.test.js +16 -0
- package/dist/lib/openapi/spec/segments-schema.test.js.map +1 -0
- package/dist/lib/openapi/spec/state-schema.d.ts +23 -23
- package/dist/lib/openapi/spec/strategy-variant-schema.d.ts +2 -2
- package/dist/lib/openapi/spec/update-feature-strategy-segments-schema.d.ts +35 -0
- package/dist/lib/openapi/spec/update-feature-strategy-segments-schema.js +37 -0
- package/dist/lib/openapi/spec/update-feature-strategy-segments-schema.js.map +1 -0
- package/dist/lib/openapi/spec/update-feature-strategy-segments-schema.test.d.ts +1 -0
- package/dist/lib/openapi/spec/update-feature-strategy-segments-schema.test.js +19 -0
- package/dist/lib/openapi/spec/update-feature-strategy-segments-schema.test.js.map +1 -0
- package/dist/lib/openapi/spec/upsert-segment-schema.d.ts +8 -15
- package/dist/lib/openapi/spec/upsert-segment-schema.js +8 -17
- package/dist/lib/openapi/spec/upsert-segment-schema.js.map +1 -1
- package/dist/lib/openapi/spec/upsert-segment-schema.test.d.ts +1 -0
- package/dist/lib/openapi/spec/upsert-segment-schema.test.js +35 -0
- package/dist/lib/openapi/spec/upsert-segment-schema.test.js.map +1 -0
- package/dist/lib/openapi/spec/validate-feature-schema.d.ts +6 -0
- package/dist/lib/openapi/spec/validate-feature-schema.js +6 -0
- package/dist/lib/openapi/spec/validate-feature-schema.js.map +1 -1
- package/dist/lib/openapi/spec/variant-schema.d.ts +2 -2
- package/dist/lib/openapi/spec/variant-schema.js +2 -2
- package/dist/lib/openapi/spec/variant-schema.js.map +1 -1
- package/dist/lib/openapi/spec/variants-schema.d.ts +2 -2
- package/dist/lib/openapi/util/all-of.d.ts +3 -0
- package/dist/lib/openapi/util/all-of.js +34 -0
- package/dist/lib/openapi/util/all-of.js.map +1 -0
- package/dist/lib/openapi/util/openapi-tags.d.ts +46 -58
- package/dist/lib/openapi/util/openapi-tags.js +27 -34
- package/dist/lib/openapi/util/openapi-tags.js.map +1 -1
- package/dist/lib/openapi/util/openapi-tags.test.d.ts +1 -0
- package/dist/lib/openapi/util/openapi-tags.test.js +15 -0
- package/dist/lib/openapi/util/openapi-tags.test.js.map +1 -0
- package/dist/lib/openapi/validate.js +0 -1
- package/dist/lib/openapi/validate.js.map +1 -1
- package/dist/lib/routes/admin-api/archive.d.ts +1 -1
- package/dist/lib/routes/admin-api/archive.js +3 -2
- package/dist/lib/routes/admin-api/archive.js.map +1 -1
- package/dist/lib/routes/admin-api/context.js +2 -1
- package/dist/lib/routes/admin-api/context.js.map +1 -1
- package/dist/lib/routes/admin-api/feature.js +2 -1
- package/dist/lib/routes/admin-api/feature.js.map +1 -1
- package/dist/lib/routes/admin-api/index.js +2 -0
- package/dist/lib/routes/admin-api/index.js.map +1 -1
- package/dist/lib/routes/admin-api/instance-admin.d.ts +2 -2
- package/dist/lib/routes/admin-api/instance-admin.js +7 -1
- package/dist/lib/routes/admin-api/instance-admin.js.map +1 -1
- package/dist/lib/routes/admin-api/metrics.d.ts +2 -1
- package/dist/lib/routes/admin-api/metrics.js +2 -1
- package/dist/lib/routes/admin-api/metrics.js.map +1 -1
- package/dist/lib/routes/admin-api/project/api-token.d.ts +2 -1
- package/dist/lib/routes/admin-api/project/api-token.js +12 -3
- package/dist/lib/routes/admin-api/project/api-token.js.map +1 -1
- package/dist/lib/routes/admin-api/project/environments.d.ts +2 -1
- package/dist/lib/routes/admin-api/project/environments.js +3 -1
- package/dist/lib/routes/admin-api/project/environments.js.map +1 -1
- package/dist/lib/routes/admin-api/project/index.d.ts +2 -1
- package/dist/lib/routes/admin-api/project/index.js +31 -0
- package/dist/lib/routes/admin-api/project/index.js.map +1 -1
- package/dist/lib/routes/admin-api/strategy.d.ts +1 -1
- package/dist/lib/routes/admin-api/strategy.js.map +1 -1
- package/dist/lib/routes/client-api/metrics.js +14 -8
- package/dist/lib/routes/client-api/metrics.js.map +1 -1
- package/dist/lib/routes/client-api/metrics.test.js +27 -0
- package/dist/lib/routes/client-api/metrics.test.js.map +1 -1
- package/dist/lib/routes/controller.d.ts +1 -1
- package/dist/lib/routes/controller.js +17 -10
- package/dist/lib/routes/controller.js.map +1 -1
- package/dist/lib/routes/proxy-api/index.js +5 -0
- package/dist/lib/routes/proxy-api/index.js.map +1 -1
- package/dist/lib/schema/role-schema.js +3 -1
- package/dist/lib/schema/role-schema.js.map +1 -1
- package/dist/lib/schema/role-schema.test.js +1 -1
- package/dist/lib/schema/role-schema.test.js.map +1 -1
- package/dist/lib/segments/segment-service-interface.d.ts +1 -1
- package/dist/lib/services/access-service.d.ts +29 -11
- package/dist/lib/services/access-service.js +53 -10
- package/dist/lib/services/access-service.js.map +1 -1
- package/dist/lib/services/access-service.test.js +2 -1
- package/dist/lib/services/access-service.test.js.map +1 -1
- package/dist/lib/services/addon-service.js +4 -2
- package/dist/lib/services/addon-service.js.map +1 -1
- package/dist/lib/services/addon-service.test.js +65 -0
- package/dist/lib/services/addon-service.test.js.map +1 -1
- package/dist/lib/services/client-metrics/instance-service.d.ts +5 -2
- package/dist/lib/services/client-metrics/instance-service.js +22 -3
- package/dist/lib/services/client-metrics/instance-service.js.map +1 -1
- package/dist/lib/services/client-metrics/instance-service.test.js +5 -4
- package/dist/lib/services/client-metrics/instance-service.test.js.map +1 -1
- package/dist/lib/services/context-service.d.ts +6 -2
- package/dist/lib/services/context-service.js +16 -2
- package/dist/lib/services/context-service.js.map +1 -1
- package/dist/lib/services/feature-service-potentially-stale.test.js +1 -1
- package/dist/lib/services/feature-service-potentially-stale.test.js.map +1 -1
- package/dist/lib/services/feature-toggle-service.d.ts +20 -7
- package/dist/lib/services/feature-toggle-service.js +109 -41
- package/dist/lib/services/feature-toggle-service.js.map +1 -1
- package/dist/lib/services/group-service.d.ts +4 -4
- package/dist/lib/services/group-service.js +17 -16
- package/dist/lib/services/group-service.js.map +1 -1
- package/dist/lib/services/index.d.ts +3 -2
- package/dist/lib/services/index.js +31 -17
- package/dist/lib/services/index.js.map +1 -1
- package/dist/lib/services/project-schema.js +9 -1
- package/dist/lib/services/project-schema.js.map +1 -1
- package/dist/lib/services/project-service.d.ts +16 -12
- package/dist/lib/services/project-service.js +127 -17
- package/dist/lib/services/project-service.js.map +1 -1
- package/dist/lib/services/scheduler-service.d.ts +1 -1
- package/dist/lib/services/scheduler-service.js +3 -3
- package/dist/lib/services/scheduler-service.js.map +1 -1
- package/dist/lib/services/scheduler-service.test.js +15 -15
- package/dist/lib/services/scheduler-service.test.js.map +1 -1
- package/dist/lib/services/segment-service.d.ts +4 -2
- package/dist/lib/services/segment-service.js +17 -10
- package/dist/lib/services/segment-service.js.map +1 -1
- package/dist/lib/services/state-service.test.js +13 -3
- package/dist/lib/services/state-service.test.js.map +1 -1
- package/dist/lib/services/version-service.test.js +3 -0
- package/dist/lib/services/version-service.test.js.map +1 -1
- package/dist/lib/types/events.d.ts +61 -1
- package/dist/lib/types/events.js +66 -4
- package/dist/lib/types/events.js.map +1 -1
- package/dist/lib/types/experimental.d.ts +1 -1
- package/dist/lib/types/experimental.js +9 -5
- package/dist/lib/types/experimental.js.map +1 -1
- package/dist/lib/types/group.d.ts +2 -2
- package/dist/lib/types/model.d.ts +31 -2
- package/dist/lib/types/model.js.map +1 -1
- package/dist/lib/types/no-auth-user.d.ts +1 -0
- package/dist/lib/types/no-auth-user.js +3 -1
- package/dist/lib/types/no-auth-user.js.map +1 -1
- package/dist/lib/types/option.d.ts +7 -0
- package/dist/lib/types/services.d.ts +6 -1
- package/dist/lib/types/stores/access-store.d.ts +23 -4
- package/dist/lib/types/stores/feature-strategies-store.d.ts +2 -1
- package/dist/lib/types/stores/group-store.d.ts +4 -2
- package/dist/lib/types/stores/project-stats-store-type.d.ts +2 -0
- package/dist/lib/types/stores/project-store.d.ts +7 -14
- package/dist/lib/types/stores/strategy-store.d.ts +3 -17
- package/dist/lib/types/stores.d.ts +5 -1
- package/dist/lib/util/findDuplicates.d.ts +1 -0
- package/dist/lib/util/findDuplicates.js +18 -0
- package/dist/lib/util/findDuplicates.js.map +1 -0
- package/dist/lib/util/findDuplicates.test.d.ts +1 -0
- package/dist/lib/util/findDuplicates.test.js +23 -0
- package/dist/lib/util/findDuplicates.test.js.map +1 -0
- package/dist/migrations/20230830121352-update-client-applications-usage-table.d.ts +2 -0
- package/dist/migrations/20230830121352-update-client-applications-usage-table.js +16 -0
- package/dist/migrations/20230830121352-update-client-applications-usage-table.js.map +1 -0
- package/dist/migrations/20230905122605-add-feature-naming-description.d.ts +2 -0
- package/dist/migrations/20230905122605-add-feature-naming-description.js +13 -0
- package/dist/migrations/20230905122605-add-feature-naming-description.js.map +1 -0
- package/dist/migrations/20230919104006-dependent-features.d.ts +2 -0
- package/dist/migrations/20230919104006-dependent-features.js +21 -0
- package/dist/migrations/20230919104006-dependent-features.js.map +1 -0
- package/dist/migrations/20230927071830-reset-pnps-feedback.d.ts +2 -0
- package/dist/migrations/20230927071830-reset-pnps-feedback.js +10 -0
- package/dist/migrations/20230927071830-reset-pnps-feedback.js.map +1 -0
- package/dist/server-dev.js +7 -4
- package/dist/server-dev.js.map +1 -1
- package/dist/test/e2e/api/admin/addon.e2e.test.js +0 -1
- package/dist/test/e2e/api/admin/addon.e2e.test.js.map +1 -1
- package/dist/test/e2e/api/admin/api-token.auth.e2e.test.js +8 -12
- package/dist/test/e2e/api/admin/api-token.auth.e2e.test.js.map +1 -1
- package/dist/test/e2e/api/admin/event.e2e.test.js +9 -2
- package/dist/test/e2e/api/admin/event.e2e.test.js.map +1 -1
- package/dist/test/e2e/api/admin/metrics.e2e.test.js +2 -10
- package/dist/test/e2e/api/admin/metrics.e2e.test.js.map +1 -1
- package/dist/test/e2e/api/admin/project/environments.e2e.test.js +8 -0
- package/dist/test/e2e/api/admin/project/environments.e2e.test.js.map +1 -1
- package/dist/test/e2e/api/admin/project/features.e2e.test.js +41 -15
- package/dist/test/e2e/api/admin/project/features.e2e.test.js.map +1 -1
- package/dist/test/e2e/api/admin/project/project.api.tokens.e2e.test.js +30 -3
- package/dist/test/e2e/api/admin/project/project.api.tokens.e2e.test.js.map +1 -1
- package/dist/test/e2e/api/admin/segment.e2e.test.d.ts +1 -0
- package/dist/test/e2e/api/admin/segment.e2e.test.js +272 -0
- package/dist/test/e2e/api/admin/segment.e2e.test.js.map +1 -0
- package/dist/test/e2e/api/admin/state.e2e.test.js +0 -11
- package/dist/test/e2e/api/admin/state.e2e.test.js.map +1 -1
- package/dist/test/e2e/api/admin/strategy.e2e.test.js +1 -1
- package/dist/test/e2e/api/client/feature.e2e.test.js +27 -3
- package/dist/test/e2e/api/client/feature.e2e.test.js.map +1 -1
- package/dist/test/e2e/api/client/feature.token.access.e2e.test.js +2 -2
- package/dist/test/e2e/api/client/feature.token.access.e2e.test.js.map +1 -1
- package/dist/test/e2e/api/client/segment.e2e.test.js +1 -1
- package/dist/test/e2e/api/client/segment.e2e.test.js.map +1 -1
- package/dist/test/e2e/api/proxy/proxy.e2e.test.js +34 -9
- package/dist/test/e2e/api/proxy/proxy.e2e.test.js.map +1 -1
- package/dist/test/e2e/helpers/app.utils.d.ts +6 -0
- package/dist/test/e2e/helpers/app.utils.js +16 -0
- package/dist/test/e2e/helpers/app.utils.js.map +1 -0
- package/dist/test/e2e/helpers/database.json +24 -0
- package/dist/test/e2e/services/access-service.e2e.test.js +549 -135
- package/dist/test/e2e/services/access-service.e2e.test.js.map +1 -1
- package/dist/test/e2e/services/api-token-service.e2e.test.js +4 -2
- package/dist/test/e2e/services/api-token-service.e2e.test.js.map +1 -1
- package/dist/test/e2e/services/client-metrics-service.e2e.test.js +2 -1
- package/dist/test/e2e/services/client-metrics-service.e2e.test.js.map +1 -1
- package/dist/test/e2e/services/feature-toggle-service-v2.e2e.test.js +38 -5
- package/dist/test/e2e/services/feature-toggle-service-v2.e2e.test.js.map +1 -1
- package/dist/test/e2e/services/group-service.e2e.test.js +16 -11
- package/dist/test/e2e/services/group-service.e2e.test.js.map +1 -1
- package/dist/test/e2e/services/playground-service.test.js +5 -2
- package/dist/test/e2e/services/playground-service.test.js.map +1 -1
- package/dist/test/e2e/services/project-health-service.e2e.test.js +4 -2
- package/dist/test/e2e/services/project-health-service.e2e.test.js.map +1 -1
- package/dist/test/e2e/services/project-service.e2e.test.js +242 -60
- package/dist/test/e2e/services/project-service.e2e.test.js.map +1 -1
- package/dist/test/fixtures/access-service-mock.d.ts +3 -4
- package/dist/test/fixtures/access-service-mock.js.map +1 -1
- package/dist/test/fixtures/fake-access-store.d.ts +15 -5
- package/dist/test/fixtures/fake-access-store.js +30 -3
- package/dist/test/fixtures/fake-access-store.js.map +1 -1
- package/dist/test/fixtures/fake-group-store.d.ts +4 -2
- package/dist/test/fixtures/fake-group-store.js +3 -0
- package/dist/test/fixtures/fake-group-store.js.map +1 -1
- package/dist/test/fixtures/fake-project-stats-store.d.ts +1 -0
- package/dist/test/fixtures/fake-project-stats-store.js +3 -0
- package/dist/test/fixtures/fake-project-stats-store.js.map +1 -1
- package/dist/test/fixtures/fake-project-store.d.ts +2 -1
- package/dist/test/fixtures/fake-project-store.js +3 -0
- package/dist/test/fixtures/fake-project-store.js.map +1 -1
- package/dist/test/fixtures/no-logger.d.ts +2 -1
- package/dist/test/fixtures/no-logger.js +8 -4
- package/dist/test/fixtures/no-logger.js.map +1 -1
- package/dist/test/fixtures/store.js +3 -0
- package/dist/test/fixtures/store.js.map +1 -1
- package/frontend/README.md +7 -1
- package/frontend/build/index.html +2 -2
- package/frontend/build/static/{AdvancedPlayground-1748fcdd.js → AdvancedPlayground-20059178.js} +11 -11
- package/frontend/build/static/CreateProject-6955728f.js +4 -0
- package/frontend/build/static/{Error-cbce6b64.js → Error-f56339ab.js} +1 -1
- package/frontend/build/static/FeatureArchiveDialog-33dc3a5b.js +10 -0
- package/frontend/build/static/{FeatureMetricsChart-8fd8a304.js → FeatureMetricsChart-5ad514bc.js} +2 -2
- package/frontend/build/static/FeatureViewLazyExport-85a68ed0.js +7 -0
- package/frontend/build/static/LazyAdminExport-e2677758.js +35 -0
- package/frontend/build/static/LazyProjectExport-969bb54e.js +24 -0
- package/frontend/build/static/Logo-android-218bddbb.svg +1 -0
- package/frontend/build/static/Logo-flutter-cc3c706f.svg +1 -0
- package/frontend/build/static/Logo-go-02475b3d.svg +1 -0
- package/frontend/build/static/Logo-java-6e556b26.svg +1 -0
- package/frontend/build/static/Logo-javascript-caebc06e.svg +1 -0
- package/frontend/build/static/Logo-net-0a33abee.svg +1 -0
- package/frontend/build/static/Logo-node-318ed025.svg +1 -0
- package/frontend/build/static/Logo-php-201f18c3.svg +1 -0
- package/frontend/build/static/Logo-python-4305760e.svg +1 -0
- package/frontend/build/static/Logo-react-18e98687.svg +1 -0
- package/frontend/build/static/Logo-ruby-58f46832.svg +1 -0
- package/frontend/build/static/Logo-rust-c83a80f9.svg +1 -0
- package/frontend/build/static/Logo-svelte-97dcb624.svg +1 -0
- package/frontend/build/static/Logo-swift-315f842b.svg +5 -0
- package/frontend/build/static/Logo-vue-0de73099.svg +1 -0
- package/frontend/build/static/{NetworkOverview-349a7bdd.js → NetworkOverview-894877e6.js} +2 -2
- package/frontend/build/static/{NetworkTraffic-60478e50.js → NetworkTraffic-81eff1ae.js} +1 -1
- package/frontend/build/static/ReactJSONEditor-59c8a094.js +129 -0
- package/frontend/build/static/RoleCell-35857d41.js +1 -0
- package/frontend/build/static/{StrategyItemContainer-a4caeace.js → StrategyItemContainer-b250f2d4.js} +1 -1
- package/frontend/build/static/{chartjs-adapter-date-fns.esm-03d2fbea.js → chartjs-adapter-date-fns.esm-c51fe022.js} +1 -1
- package/frontend/build/static/cr-db7653ac.png +0 -0
- package/frontend/build/static/datadog-543762b6.svg +5 -0
- package/frontend/build/static/edge-daisy-chaining-012bfdef.svg +48 -0
- package/frontend/build/static/edge-mode-5d25949b.svg +22 -0
- package/frontend/build/static/edge-offline-f6a0f761.svg +19 -0
- package/frontend/build/static/{flowchart-elk-definition-170a3958-fc100c77.js → flowchart-elk-definition-170a3958-a8c4a86a.js} +1 -1
- package/frontend/build/static/{index-866f9bf9.js → index-0515f416.js} +1 -1
- package/frontend/build/static/index-942e9eeb.js +463 -0
- package/frontend/build/static/{index-3c63138f.js → index-a59b2d65.js} +1 -1
- package/frontend/build/static/{is_dark-31c253e9.js → is_dark-464961a8.js} +1 -1
- package/frontend/build/static/jira-1abe7cbf.svg +17 -0
- package/frontend/build/static/{mindmap-definition-44684416-398682f9.js → mindmap-definition-44684416-3a71a9a5.js} +1 -1
- package/frontend/build/static/slack-36ce798a.svg +18 -0
- package/frontend/build/static/style-97d3ef98.css +1 -0
- package/frontend/build/static/teams-4e30b51f.svg +45 -0
- package/frontend/build/static/{timeline-definition-8e5a9bc6-04a0ae08.js → timeline-definition-8e5a9bc6-da4ebc88.js} +1 -1
- package/frontend/build/static/{unknownify-b8618d88.js → unknownify-3563456b.js} +1 -1
- package/frontend/build/static/unleash-integration-949d8966.svg +1 -0
- package/frontend/build/static/webhooks-b1b44207.svg +16 -0
- package/frontend/package.json +20 -18
- package/package.json +23 -23
- package/dist/lib/services/instance-stats-service.js.map +0 -1
- package/dist/lib/services/instance-stats-service.test.js.map +0 -1
- package/frontend/build/static/CreateProject-972fa820.js +0 -4
- package/frontend/build/static/FeatureArchiveDialog-8a281845.js +0 -10
- package/frontend/build/static/FeatureViewLazyExport-a215d53b.js +0 -7
- package/frontend/build/static/LazyAdminExport-ba7d55ca.js +0 -35
- package/frontend/build/static/LazyProjectExport-12bccd40.js +0 -17
- package/frontend/build/static/RoleCell-144e7eca.js +0 -1
- package/frontend/build/static/datadog-591b6a73.svg +0 -1
- package/frontend/build/static/index-17d74ac9.js +0 -454
- package/frontend/build/static/slack-c0af31c6.svg +0 -1
- package/frontend/build/static/style-770afaee.css +0 -1
- package/frontend/build/static/teams-62e72076.svg +0 -26
- package/frontend/build/static/webhooks-ffa904ac.svg +0 -1
- /package/dist/lib/{services/instance-stats-service.test.d.ts → db/access-store.test.d.ts} +0 -0
- /package/frontend/build/static/{jira-d9eb9af9.svg → jira-comment-d9eb9af9.svg} +0 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"import-toggles-store.js","sourceRoot":"","sources":["../../../../src/lib/features/export-import-toggles/import-toggles-store.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"import-toggles-store.js","sourceRoot":"","sources":["../../../../src/lib/features/export-import-toggles/import-toggles-store.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,7 +1,23 @@
|
|
|
1
1
|
import { FeatureStrategySchema, ImportTogglesValidateItemSchema } from '../../openapi';
|
|
2
2
|
import { IContextFieldDto } from '../../types/stores/context-field-store';
|
|
3
|
+
import { FeatureNameCheckResultWithFeaturePattern } from '../../services/feature-toggle-service';
|
|
4
|
+
import { ProjectFeaturesLimit } from './import-toggles-store-type';
|
|
5
|
+
export interface IErrorsParams {
|
|
6
|
+
projectName: string;
|
|
7
|
+
strategies: FeatureStrategySchema[];
|
|
8
|
+
contextFields: IContextFieldDto[];
|
|
9
|
+
otherProjectFeatures: string[];
|
|
10
|
+
duplicateFeatures: string[];
|
|
11
|
+
featureNameCheckResult: FeatureNameCheckResultWithFeaturePattern;
|
|
12
|
+
featureLimitResult: ProjectFeaturesLimit;
|
|
13
|
+
}
|
|
14
|
+
export interface IWarningParams {
|
|
15
|
+
usedCustomStrategies: string[];
|
|
16
|
+
archivedFeatures: string[];
|
|
17
|
+
existingFeatures: string[];
|
|
18
|
+
}
|
|
3
19
|
export declare class ImportValidationMessages {
|
|
4
20
|
static compilePermissionErrors(missingPermissions: string[]): ImportTogglesValidateItemSchema[];
|
|
5
|
-
static compileErrors(projectName
|
|
6
|
-
static compileWarnings(usedCustomStrategies
|
|
21
|
+
static compileErrors({ projectName, strategies, contextFields, otherProjectFeatures, duplicateFeatures, featureNameCheckResult, featureLimitResult, }: IErrorsParams): ImportTogglesValidateItemSchema[];
|
|
22
|
+
static compileWarnings({ usedCustomStrategies, existingFeatures, archivedFeatures, }: IWarningParams): ImportTogglesValidateItemSchema[];
|
|
7
23
|
}
|
|
@@ -12,7 +12,7 @@ class ImportValidationMessages {
|
|
|
12
12
|
}
|
|
13
13
|
return errors;
|
|
14
14
|
}
|
|
15
|
-
static compileErrors(projectName, strategies, contextFields,
|
|
15
|
+
static compileErrors({ projectName, strategies, contextFields, otherProjectFeatures, duplicateFeatures, featureNameCheckResult, featureLimitResult, }) {
|
|
16
16
|
const errors = [];
|
|
17
17
|
if (strategies.length > 0) {
|
|
18
18
|
errors.push({
|
|
@@ -26,27 +26,43 @@ class ImportValidationMessages {
|
|
|
26
26
|
affectedItems: contextFields.map((contextField) => contextField.name),
|
|
27
27
|
});
|
|
28
28
|
}
|
|
29
|
-
if (
|
|
29
|
+
if (otherProjectFeatures.length > 0) {
|
|
30
30
|
errors.push({
|
|
31
|
-
message:
|
|
32
|
-
affectedItems:
|
|
31
|
+
message: `You cannot import a features that already exist in other projects. You already have the following features defined outside of project ${projectName}:`,
|
|
32
|
+
affectedItems: otherProjectFeatures,
|
|
33
33
|
});
|
|
34
34
|
}
|
|
35
|
-
if (
|
|
35
|
+
if (duplicateFeatures.length > 0) {
|
|
36
36
|
errors.push({
|
|
37
|
-
message: '
|
|
38
|
-
affectedItems:
|
|
37
|
+
message: 'We detected the following features are duplicate in your import data:',
|
|
38
|
+
affectedItems: duplicateFeatures,
|
|
39
39
|
});
|
|
40
40
|
}
|
|
41
|
-
if (
|
|
41
|
+
if (featureNameCheckResult.state === 'invalid') {
|
|
42
|
+
const baseError = `Features imported into this project must match the project's feature naming pattern: "${featureNameCheckResult.featureNaming.pattern}".`;
|
|
43
|
+
const exampleInfo = featureNameCheckResult.featureNaming.example
|
|
44
|
+
? ` For example: "${featureNameCheckResult.featureNaming.example}".`
|
|
45
|
+
: '';
|
|
46
|
+
const descriptionInfo = featureNameCheckResult.featureNaming
|
|
47
|
+
.description
|
|
48
|
+
? ` The pattern is described as follows: "${featureNameCheckResult.featureNaming.description}"`
|
|
49
|
+
: '';
|
|
42
50
|
errors.push({
|
|
43
|
-
message:
|
|
44
|
-
affectedItems:
|
|
51
|
+
message: `${baseError}${exampleInfo}${descriptionInfo} The following features do not match the pattern:`,
|
|
52
|
+
affectedItems: [...featureNameCheckResult.invalidNames].sort(),
|
|
53
|
+
});
|
|
54
|
+
}
|
|
55
|
+
if (featureLimitResult.currentFeaturesCount +
|
|
56
|
+
featureLimitResult.newFeaturesCount >
|
|
57
|
+
featureLimitResult.limit) {
|
|
58
|
+
errors.push({
|
|
59
|
+
message: `We detected you want to create ${featureLimitResult.newFeaturesCount} new features to a project that already has ${featureLimitResult.currentFeaturesCount} existing features, exceeding the maximum limit of ${featureLimitResult.limit}.`,
|
|
60
|
+
affectedItems: [],
|
|
45
61
|
});
|
|
46
62
|
}
|
|
47
63
|
return errors;
|
|
48
64
|
}
|
|
49
|
-
static compileWarnings(usedCustomStrategies, archivedFeatures,
|
|
65
|
+
static compileWarnings({ usedCustomStrategies, existingFeatures, archivedFeatures, }) {
|
|
50
66
|
const warnings = [];
|
|
51
67
|
if (usedCustomStrategies.length > 0) {
|
|
52
68
|
warnings.push({
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"import-validation-messages.js","sourceRoot":"","sources":["../../../../src/lib/features/export-import-toggles/import-validation-messages.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"import-validation-messages.js","sourceRoot":"","sources":["../../../../src/lib/features/export-import-toggles/import-validation-messages.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { IFeatureNaming } from '../../types/model';
|
|
2
|
+
export declare const checkFeatureNamingData: (featureNaming: IFeatureNaming) => {
|
|
3
|
+
state: 'valid';
|
|
4
|
+
} | {
|
|
5
|
+
state: 'invalid';
|
|
6
|
+
reasons: [string, ...string[]];
|
|
7
|
+
};
|
|
8
|
+
export declare type FeatureNameCheckResult = {
|
|
9
|
+
state: 'valid';
|
|
10
|
+
} | {
|
|
11
|
+
state: 'invalid';
|
|
12
|
+
invalidNames: Set<string>;
|
|
13
|
+
};
|
|
14
|
+
export declare const checkFeatureFlagNamesAgainstPattern: (featureNames: string[], pattern: string | null | undefined) => FeatureNameCheckResult;
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.checkFeatureFlagNamesAgainstPattern = exports.checkFeatureNamingData = void 0;
|
|
4
|
+
const compileRegex = (pattern) => new RegExp(`^${pattern}$`);
|
|
5
|
+
const disallowedStrings = [' ', '\\t', '\\s', '\\n', '\\r', '\\f', '\\v'];
|
|
6
|
+
// Helper functions for error messages
|
|
7
|
+
const whitespaceError = (pattern) => `Feature flag names cannot contain whitespace. You've provided a feature flag naming pattern that contains a whitespace character: "${pattern}". Remove any whitespace characters from your pattern.`;
|
|
8
|
+
const exampleMismatchError = (example, pattern) => `You've provided a feature flag naming example ("${example}") that doesn't match your feature flag naming pattern ("${pattern}").`;
|
|
9
|
+
const invalidValueError = (valueName) => `You've provided a feature flag naming ${valueName}, but no feature flag naming pattern. You must specify a pattern to use a ${valueName}.`;
|
|
10
|
+
const checkFeatureNamingData = (featureNaming) => {
|
|
11
|
+
const { pattern, example, description } = featureNaming;
|
|
12
|
+
const errors = [];
|
|
13
|
+
if (disallowedStrings.some((str) => pattern?.includes(str))) {
|
|
14
|
+
errors.push(whitespaceError(pattern));
|
|
15
|
+
}
|
|
16
|
+
else if (pattern && example && !compileRegex(pattern).test(example)) {
|
|
17
|
+
errors.push(exampleMismatchError(example, pattern));
|
|
18
|
+
}
|
|
19
|
+
if (!pattern && example) {
|
|
20
|
+
errors.push(invalidValueError('example'));
|
|
21
|
+
}
|
|
22
|
+
if (!pattern && description) {
|
|
23
|
+
errors.push(invalidValueError('description'));
|
|
24
|
+
}
|
|
25
|
+
const [first, ...rest] = errors;
|
|
26
|
+
if (first) {
|
|
27
|
+
return { state: 'invalid', reasons: [first, ...rest] };
|
|
28
|
+
}
|
|
29
|
+
return { state: 'valid' };
|
|
30
|
+
};
|
|
31
|
+
exports.checkFeatureNamingData = checkFeatureNamingData;
|
|
32
|
+
const checkFeatureFlagNamesAgainstPattern = (featureNames, pattern) => {
|
|
33
|
+
if (pattern) {
|
|
34
|
+
const regex = compileRegex(pattern);
|
|
35
|
+
const mismatchedNames = featureNames.filter((name) => !regex.test(name));
|
|
36
|
+
if (mismatchedNames.length > 0) {
|
|
37
|
+
return {
|
|
38
|
+
state: 'invalid',
|
|
39
|
+
invalidNames: new Set(mismatchedNames),
|
|
40
|
+
};
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
return { state: 'valid' };
|
|
44
|
+
};
|
|
45
|
+
exports.checkFeatureFlagNamesAgainstPattern = checkFeatureFlagNamesAgainstPattern;
|
|
46
|
+
//# sourceMappingURL=feature-naming-validation.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"feature-naming-validation.js","sourceRoot":"","sources":["../../../../src/lib/features/feature-naming-pattern/feature-naming-validation.ts"],"names":[],"mappings":";;;AAEA,MAAM,YAAY,GAAG,CAAC,OAAe,EAAE,EAAE,CAAC,IAAI,MAAM,CAAC,IAAI,OAAO,GAAG,CAAC,CAAC;AAErE,MAAM,iBAAiB,GAAG,CAAC,GAAG,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;AAE1E,sCAAsC;AACtC,MAAM,eAAe,GAAG,CAAC,OAAe,EAAE,EAAE,CACxC,sIAAsI,OAAO,wDAAwD,CAAC;AAE1M,MAAM,oBAAoB,GAAG,CAAC,OAAe,EAAE,OAAe,EAAE,EAAE,CAC9D,mDAAmD,OAAO,4DAA4D,OAAO,KAAK,CAAC;AAEvI,MAAM,iBAAiB,GAAG,CAAC,SAAiB,EAAE,EAAE,CAC5C,yCAAyC,SAAS,6EAA6E,SAAS,GAAG,CAAC;AAEzI,MAAM,sBAAsB,GAAG,CAClC,aAA6B,EAG0B,EAAE;IACzD,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,GAAG,aAAa,CAAC;IACxD,MAAM,MAAM,GAAa,EAAE,CAAC;IAE5B,IAAI,iBAAiB,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,OAAO,EAAE,QAAQ,CAAC,GAAG,CAAC,CAAC,EAAE;QACzD,MAAM,CAAC,IAAI,CAAC,eAAe,CAAC,OAAiB,CAAC,CAAC,CAAC;KACnD;SAAM,IAAI,OAAO,IAAI,OAAO,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE;QACnE,MAAM,CAAC,IAAI,CAAC,oBAAoB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC;KACvD;IAED,IAAI,CAAC,OAAO,IAAI,OAAO,EAAE;QACrB,MAAM,CAAC,IAAI,CAAC,iBAAiB,CAAC,SAAS,CAAC,CAAC,CAAC;KAC7C;IAED,IAAI,CAAC,OAAO,IAAI,WAAW,EAAE;QACzB,MAAM,CAAC,IAAI,CAAC,iBAAiB,CAAC,aAAa,CAAC,CAAC,CAAC;KACjD;IAED,MAAM,CAAC,KAAK,EAAE,GAAG,IAAI,CAAC,GAAG,MAAM,CAAC;IAChC,IAAI,KAAK,EAAE;QACP,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,OAAO,EAAE,CAAC,KAAK,EAAE,GAAG,IAAI,CAAC,EAAE,CAAC;KAC1D;IAED,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC;AAC9B,CAAC,CAAC;AA5BW,QAAA,sBAAsB,0BA4BjC;AASK,MAAM,mCAAmC,GAAG,CAC/C,YAAsB,EACtB,OAAkC,EACZ,EAAE;IACxB,IAAI,OAAO,EAAE;QACT,MAAM,KAAK,GAAG,YAAY,CAAC,OAAO,CAAC,CAAC;QACpC,MAAM,eAAe,GAAG,YAAY,CAAC,MAAM,CACvC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAC9B,CAAC;QAEF,IAAI,eAAe,CAAC,MAAM,GAAG,CAAC,EAAE;YAC5B,OAAO;gBACH,KAAK,EAAE,SAAS;gBAChB,YAAY,EAAE,IAAI,GAAG,CAAC,eAAe,CAAC;aACzC,CAAC;SACL;KACJ;IACD,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC;AAC9B,CAAC,CAAC;AAlBW,QAAA,mCAAmC,uCAkB9C"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const feature_naming_validation_1 = require("./feature-naming-validation");
|
|
4
|
+
describe('validate incoming feature naming data', () => {
|
|
5
|
+
test('patterns with leading ^ and trailing $ are treated the same as without', () => {
|
|
6
|
+
const basePattern = '[a-z]+';
|
|
7
|
+
const leading = `^${basePattern}`;
|
|
8
|
+
const trailing = `${basePattern}$`;
|
|
9
|
+
const leadingAndTrailing = `^${basePattern}$`;
|
|
10
|
+
const allPatterns = [
|
|
11
|
+
basePattern,
|
|
12
|
+
leading,
|
|
13
|
+
trailing,
|
|
14
|
+
leadingAndTrailing,
|
|
15
|
+
];
|
|
16
|
+
const invalidExamples = ['-name-', 'name-', '-name'];
|
|
17
|
+
const validExample = 'justalpha';
|
|
18
|
+
for (const pattern of allPatterns) {
|
|
19
|
+
for (const example of invalidExamples) {
|
|
20
|
+
expect((0, feature_naming_validation_1.checkFeatureNamingData)({ pattern, example })).toMatchObject({
|
|
21
|
+
state: 'invalid',
|
|
22
|
+
});
|
|
23
|
+
}
|
|
24
|
+
const validData = {
|
|
25
|
+
pattern,
|
|
26
|
+
example: validExample,
|
|
27
|
+
};
|
|
28
|
+
expect((0, feature_naming_validation_1.checkFeatureNamingData)(validData)).toMatchObject({
|
|
29
|
+
state: 'valid',
|
|
30
|
+
});
|
|
31
|
+
}
|
|
32
|
+
});
|
|
33
|
+
test('pattern examples are tested against the pattern as if it were surrounded by ^ and $', () => {
|
|
34
|
+
const pattern = '-[0-9]+';
|
|
35
|
+
const validExample = '-23';
|
|
36
|
+
const invalidExample1 = 'feat-15';
|
|
37
|
+
const invalidExample2 = '-15-';
|
|
38
|
+
expect((0, feature_naming_validation_1.checkFeatureNamingData)({
|
|
39
|
+
pattern,
|
|
40
|
+
example: validExample,
|
|
41
|
+
})).toMatchObject({ state: 'valid' });
|
|
42
|
+
for (const example of [invalidExample1, invalidExample2]) {
|
|
43
|
+
expect((0, feature_naming_validation_1.checkFeatureNamingData)({
|
|
44
|
+
pattern,
|
|
45
|
+
example,
|
|
46
|
+
})).toMatchObject({ state: 'invalid' });
|
|
47
|
+
}
|
|
48
|
+
});
|
|
49
|
+
test.each([' ', '\\t', '\\n'])('patterns with illegal characters (%s) are invalid', (string) => {
|
|
50
|
+
const pattern = `-${string}[0-9]+`;
|
|
51
|
+
expect((0, feature_naming_validation_1.checkFeatureNamingData)({
|
|
52
|
+
pattern,
|
|
53
|
+
})).toMatchObject({ state: 'invalid' });
|
|
54
|
+
});
|
|
55
|
+
test('feature naming data with a non-empty example but an empty pattern is invalid', () => {
|
|
56
|
+
expect((0, feature_naming_validation_1.checkFeatureNamingData)({
|
|
57
|
+
pattern: '',
|
|
58
|
+
example: 'example',
|
|
59
|
+
})).toMatchObject({ state: 'invalid' });
|
|
60
|
+
});
|
|
61
|
+
test('feature naming data with a non-empty description but an empty pattern is invalid', () => {
|
|
62
|
+
expect((0, feature_naming_validation_1.checkFeatureNamingData)({
|
|
63
|
+
pattern: '',
|
|
64
|
+
description: 'description',
|
|
65
|
+
})).toMatchObject({ state: 'invalid' });
|
|
66
|
+
});
|
|
67
|
+
test('if the pattern contains disallowed characters, a match is not attempted against the example', () => {
|
|
68
|
+
const result = (0, feature_naming_validation_1.checkFeatureNamingData)({
|
|
69
|
+
pattern: 'a. [0-9]+',
|
|
70
|
+
example: 'obviously-not-a-match',
|
|
71
|
+
});
|
|
72
|
+
if (result.state === 'valid') {
|
|
73
|
+
fail('Expected invalid result');
|
|
74
|
+
}
|
|
75
|
+
expect(result.reasons.length).toBe(1);
|
|
76
|
+
});
|
|
77
|
+
});
|
|
78
|
+
describe('validate feature flag names against a pattern', () => {
|
|
79
|
+
test('should validate names against a pattern', async () => {
|
|
80
|
+
const featureNaming = {
|
|
81
|
+
pattern: 'testpattern.+',
|
|
82
|
+
example: 'testpattern-one!',
|
|
83
|
+
description: 'naming description',
|
|
84
|
+
};
|
|
85
|
+
const validFeatures = ['testpattern-feature', 'testpattern-feature2'];
|
|
86
|
+
const invalidFeatures = ['a', 'b', 'c'];
|
|
87
|
+
const result = (0, feature_naming_validation_1.checkFeatureFlagNamesAgainstPattern)([...validFeatures, ...invalidFeatures], featureNaming.pattern);
|
|
88
|
+
expect(result).toMatchObject({
|
|
89
|
+
state: 'invalid',
|
|
90
|
+
invalidNames: new Set(invalidFeatures),
|
|
91
|
+
});
|
|
92
|
+
const validResult = (0, feature_naming_validation_1.checkFeatureFlagNamesAgainstPattern)(validFeatures, featureNaming.pattern);
|
|
93
|
+
expect(validResult).toMatchObject({ state: 'valid' });
|
|
94
|
+
});
|
|
95
|
+
test.each([null, undefined, ''])('should not validate names if the pattern is %s', (pattern) => {
|
|
96
|
+
const featureNaming = {
|
|
97
|
+
pattern,
|
|
98
|
+
};
|
|
99
|
+
const features = ['a', 'b'];
|
|
100
|
+
const result = (0, feature_naming_validation_1.checkFeatureFlagNamesAgainstPattern)(features, featureNaming.pattern);
|
|
101
|
+
expect(result).toMatchObject({ state: 'valid' });
|
|
102
|
+
});
|
|
103
|
+
test('should validate names as if the pattern is surrounded by ^ and $.', async () => {
|
|
104
|
+
const pattern = '-[0-9]+';
|
|
105
|
+
const featureNaming = {
|
|
106
|
+
pattern,
|
|
107
|
+
};
|
|
108
|
+
const features = ['a-95', '-95-', 'b-52-z'];
|
|
109
|
+
const result = (0, feature_naming_validation_1.checkFeatureFlagNamesAgainstPattern)(features, featureNaming.pattern);
|
|
110
|
+
expect(result).toMatchObject({
|
|
111
|
+
state: 'invalid',
|
|
112
|
+
invalidNames: new Set(features),
|
|
113
|
+
});
|
|
114
|
+
});
|
|
115
|
+
});
|
|
116
|
+
//# sourceMappingURL=feature-naming-validation.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"feature-naming-validation.test.js","sourceRoot":"","sources":["../../../../src/lib/features/feature-naming-pattern/feature-naming-validation.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -33,6 +33,9 @@ const fake_environment_store_1 = __importDefault(require("../../../test/fixtures
|
|
|
33
33
|
const event_store_1 = __importDefault(require("../../db/event-store"));
|
|
34
34
|
const createChangeRequestAccessReadModel_1 = require("../change-request-access-service/createChangeRequestAccessReadModel");
|
|
35
35
|
const createSegmentService_1 = require("../segment/createSegmentService");
|
|
36
|
+
const strategy_store_1 = __importDefault(require("../../db/strategy-store"));
|
|
37
|
+
const fake_strategies_store_1 = __importDefault(require("../../../test/fixtures/fake-strategies-store"));
|
|
38
|
+
const createPrivateProjectChecker_1 = require("../private-project/createPrivateProjectChecker");
|
|
36
39
|
const createFeatureToggleService = (db, config) => {
|
|
37
40
|
const { getLogger, eventBus, flagResolver } = config;
|
|
38
41
|
const featureStrategiesStore = new feature_strategy_store_1.default(db, eventBus, getLogger, flagResolver);
|
|
@@ -43,6 +46,7 @@ const createFeatureToggleService = (db, config) => {
|
|
|
43
46
|
const featureEnvironmentStore = new feature_environment_store_1.FeatureEnvironmentStore(db, eventBus, getLogger);
|
|
44
47
|
const contextFieldStore = new context_field_store_1.default(db, getLogger, flagResolver);
|
|
45
48
|
const groupStore = new group_store_1.default(db);
|
|
49
|
+
const strategyStore = new strategy_store_1.default(db, getLogger);
|
|
46
50
|
const accountStore = new account_store_1.AccountStore(db, getLogger);
|
|
47
51
|
const accessStore = new access_store_1.AccessStore(db, eventBus, getLogger);
|
|
48
52
|
const roleStore = new role_store_1.default(db, eventBus, getLogger);
|
|
@@ -52,6 +56,7 @@ const createFeatureToggleService = (db, config) => {
|
|
|
52
56
|
const accessService = new services_1.AccessService({ accessStore, accountStore, roleStore, environmentStore, groupStore }, { getLogger, flagResolver }, groupService);
|
|
53
57
|
const segmentService = (0, createSegmentService_1.createSegmentService)(db, config);
|
|
54
58
|
const changeRequestAccessReadModel = (0, createChangeRequestAccessReadModel_1.createChangeRequestAccessReadModel)(db, config);
|
|
59
|
+
const privateProjectChecker = (0, createPrivateProjectChecker_1.createPrivateProjectChecker)(db, config);
|
|
55
60
|
const featureToggleService = new services_1.FeatureToggleService({
|
|
56
61
|
featureStrategiesStore,
|
|
57
62
|
featureToggleStore,
|
|
@@ -61,13 +66,15 @@ const createFeatureToggleService = (db, config) => {
|
|
|
61
66
|
featureTagStore,
|
|
62
67
|
featureEnvironmentStore,
|
|
63
68
|
contextFieldStore,
|
|
64
|
-
|
|
69
|
+
strategyStore,
|
|
70
|
+
}, { getLogger, flagResolver }, segmentService, accessService, changeRequestAccessReadModel, privateProjectChecker);
|
|
65
71
|
return featureToggleService;
|
|
66
72
|
};
|
|
67
73
|
exports.createFeatureToggleService = createFeatureToggleService;
|
|
68
74
|
const createFakeFeatureToggleService = (config) => {
|
|
69
75
|
const { getLogger, flagResolver } = config;
|
|
70
76
|
const eventStore = new fake_event_store_1.default();
|
|
77
|
+
const strategyStore = new fake_strategies_store_1.default();
|
|
71
78
|
const featureStrategiesStore = new fake_feature_strategies_store_1.default();
|
|
72
79
|
const featureToggleStore = new fake_feature_toggle_store_1.default();
|
|
73
80
|
const featureToggleClientStore = new fake_feature_toggle_client_store_1.default();
|
|
@@ -84,6 +91,7 @@ const createFakeFeatureToggleService = (config) => {
|
|
|
84
91
|
const accessService = new services_1.AccessService({ accessStore, accountStore, roleStore, environmentStore, groupStore }, { getLogger, flagResolver }, groupService);
|
|
85
92
|
const segmentService = (0, createSegmentService_1.createFakeSegmentService)(config);
|
|
86
93
|
const changeRequestAccessReadModel = (0, createChangeRequestAccessReadModel_1.createFakeChangeRequestAccessService)();
|
|
94
|
+
const fakeprivateProjectChecker = (0, createPrivateProjectChecker_1.createFakePrivateProjectChecker)();
|
|
87
95
|
const featureToggleService = new services_1.FeatureToggleService({
|
|
88
96
|
featureStrategiesStore,
|
|
89
97
|
featureToggleStore,
|
|
@@ -93,7 +101,8 @@ const createFakeFeatureToggleService = (config) => {
|
|
|
93
101
|
featureTagStore,
|
|
94
102
|
featureEnvironmentStore,
|
|
95
103
|
contextFieldStore,
|
|
96
|
-
|
|
104
|
+
strategyStore,
|
|
105
|
+
}, { getLogger, flagResolver }, segmentService, accessService, changeRequestAccessReadModel, fakeprivateProjectChecker);
|
|
97
106
|
return featureToggleService;
|
|
98
107
|
};
|
|
99
108
|
exports.createFakeFeatureToggleService = createFakeFeatureToggleService;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"createFeatureToggleService.js","sourceRoot":"","sources":["../../../../src/lib/features/feature-toggle/createFeatureToggleService.ts"],"names":[],"mappings":";;;;;;AAAA,6CAIwB;AACxB,6FAAqE;AACrE,yFAA+D;AAC/D,uGAA4E;AAC5E,2EAAkD;AAClD,mFAAyD;AACzD,kFAA6E;AAC7E,uFAA6D;AAC7D,uEAA8C;AAC9C,0DAAsD;AACtD,wDAAoD;AACpD,qEAA4C;AAC5C,mFAA0D;AAG1D,+FAAqE;AACrE,yHAA8F;AAC9F,iHAAsF;AACtF,+HAAmG;AACnG,mGAAyE;AACzE,2GAAgF;AAChF,2HAAgG;AAChG,+GAAoF;AACpF,+FAAqE;AACrE,kFAA6E;AAC7E,iGAAuE;AACvE,6FAAmE;AACnE,2GAAiF;AACjF,uEAA8C;AAC9C,4HAG6E;AAC7E,0EAGyC;
|
|
1
|
+
{"version":3,"file":"createFeatureToggleService.js","sourceRoot":"","sources":["../../../../src/lib/features/feature-toggle/createFeatureToggleService.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { type Db } from 'lib/server-impl';
|
|
2
|
+
export declare type GetActiveUsers = () => Promise<{
|
|
3
|
+
last7: number;
|
|
4
|
+
last30: number;
|
|
5
|
+
last60: number;
|
|
6
|
+
last90: number;
|
|
7
|
+
}>;
|
|
8
|
+
export declare const createGetActiveUsers: (db: Db) => GetActiveUsers;
|
|
9
|
+
export declare const createFakeGetActiveUsers: (activeUsers?: Awaited<ReturnType<GetActiveUsers>>) => GetActiveUsers;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,141 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
const getActiveUsers_1 = require("./getActiveUsers");
|
|
7
|
+
const database_init_1 = __importDefault(require("../../../test/e2e/helpers/database-init"));
|
|
8
|
+
const no_logger_1 = __importDefault(require("../../../test/fixtures/no-logger"));
|
|
9
|
+
let db;
|
|
10
|
+
let getActiveUsers;
|
|
11
|
+
const mockUserDaysAgo = (days) => {
|
|
12
|
+
const result = new Date();
|
|
13
|
+
result.setDate(result.getDate() - days);
|
|
14
|
+
return {
|
|
15
|
+
email: `${days}.user@example.com`,
|
|
16
|
+
seen_at: result,
|
|
17
|
+
};
|
|
18
|
+
};
|
|
19
|
+
const mockTokenDaysAgo = (userId, days) => {
|
|
20
|
+
const result = new Date();
|
|
21
|
+
result.setDate(result.getDate() - days);
|
|
22
|
+
return {
|
|
23
|
+
user_id: userId,
|
|
24
|
+
seen_at: result,
|
|
25
|
+
secret: 'secret',
|
|
26
|
+
expires_at: new Date('2031-12-31'),
|
|
27
|
+
};
|
|
28
|
+
};
|
|
29
|
+
beforeAll(async () => {
|
|
30
|
+
db = await (0, database_init_1.default)('active_users_serial', no_logger_1.default);
|
|
31
|
+
getActiveUsers = (0, getActiveUsers_1.createGetActiveUsers)(db.rawDatabase);
|
|
32
|
+
});
|
|
33
|
+
afterEach(async () => {
|
|
34
|
+
await db.rawDatabase('users').delete();
|
|
35
|
+
await db.rawDatabase('personal_access_tokens').delete();
|
|
36
|
+
});
|
|
37
|
+
afterAll(async () => {
|
|
38
|
+
await db.destroy();
|
|
39
|
+
});
|
|
40
|
+
test('should return 0 users', async () => {
|
|
41
|
+
expect(getActiveUsers()).resolves.toEqual({
|
|
42
|
+
last7: 0,
|
|
43
|
+
last30: 0,
|
|
44
|
+
last60: 0,
|
|
45
|
+
last90: 0,
|
|
46
|
+
});
|
|
47
|
+
});
|
|
48
|
+
test('should return 1 user', async () => {
|
|
49
|
+
await db.rawDatabase('users').insert(mockUserDaysAgo(1));
|
|
50
|
+
expect(getActiveUsers()).resolves.toEqual({
|
|
51
|
+
last7: 1,
|
|
52
|
+
last30: 1,
|
|
53
|
+
last60: 1,
|
|
54
|
+
last90: 1,
|
|
55
|
+
});
|
|
56
|
+
});
|
|
57
|
+
test('should handle intervals of activity', async () => {
|
|
58
|
+
await db
|
|
59
|
+
.rawDatabase('users')
|
|
60
|
+
.insert([
|
|
61
|
+
mockUserDaysAgo(5),
|
|
62
|
+
mockUserDaysAgo(10),
|
|
63
|
+
mockUserDaysAgo(20),
|
|
64
|
+
mockUserDaysAgo(40),
|
|
65
|
+
mockUserDaysAgo(70),
|
|
66
|
+
mockUserDaysAgo(100),
|
|
67
|
+
]);
|
|
68
|
+
expect(getActiveUsers()).resolves.toEqual({
|
|
69
|
+
last7: 1,
|
|
70
|
+
last30: 3,
|
|
71
|
+
last60: 4,
|
|
72
|
+
last90: 5,
|
|
73
|
+
});
|
|
74
|
+
});
|
|
75
|
+
test('should count user as active if they have an active token', async () => {
|
|
76
|
+
const users = await db
|
|
77
|
+
.rawDatabase('users')
|
|
78
|
+
.insert(mockUserDaysAgo(100))
|
|
79
|
+
.returning('id');
|
|
80
|
+
const userId = users[0].id;
|
|
81
|
+
await db
|
|
82
|
+
.rawDatabase('personal_access_tokens')
|
|
83
|
+
.insert(mockTokenDaysAgo(userId, 31));
|
|
84
|
+
expect(getActiveUsers()).resolves.toEqual({
|
|
85
|
+
last7: 0,
|
|
86
|
+
last30: 0,
|
|
87
|
+
last60: 1,
|
|
88
|
+
last90: 1,
|
|
89
|
+
});
|
|
90
|
+
});
|
|
91
|
+
test('should prioritize user seen_at if newer then token seen_at', async () => {
|
|
92
|
+
const users = await db
|
|
93
|
+
.rawDatabase('users')
|
|
94
|
+
.insert(mockUserDaysAgo(14))
|
|
95
|
+
.returning('id');
|
|
96
|
+
const userId = users[0].id;
|
|
97
|
+
await db
|
|
98
|
+
.rawDatabase('personal_access_tokens')
|
|
99
|
+
.insert([
|
|
100
|
+
mockTokenDaysAgo(userId, 31),
|
|
101
|
+
mockTokenDaysAgo(userId, 61),
|
|
102
|
+
mockTokenDaysAgo(userId, 91),
|
|
103
|
+
]);
|
|
104
|
+
expect(getActiveUsers()).resolves.toEqual({
|
|
105
|
+
last7: 0,
|
|
106
|
+
last30: 1,
|
|
107
|
+
last60: 1,
|
|
108
|
+
last90: 1,
|
|
109
|
+
});
|
|
110
|
+
});
|
|
111
|
+
test('should handle multiple users and with multiple tokens', async () => {
|
|
112
|
+
const users = await db
|
|
113
|
+
.rawDatabase('users')
|
|
114
|
+
.insert([
|
|
115
|
+
mockUserDaysAgo(5),
|
|
116
|
+
mockUserDaysAgo(10),
|
|
117
|
+
mockUserDaysAgo(20),
|
|
118
|
+
mockUserDaysAgo(40),
|
|
119
|
+
mockUserDaysAgo(70),
|
|
120
|
+
mockUserDaysAgo(100),
|
|
121
|
+
])
|
|
122
|
+
.returning('id');
|
|
123
|
+
await db
|
|
124
|
+
.rawDatabase('personal_access_tokens')
|
|
125
|
+
.insert([
|
|
126
|
+
mockTokenDaysAgo(users[0].id, 31),
|
|
127
|
+
mockTokenDaysAgo(users[1].id, 61),
|
|
128
|
+
mockTokenDaysAgo(users[1].id, 15),
|
|
129
|
+
mockTokenDaysAgo(users[1].id, 55),
|
|
130
|
+
mockTokenDaysAgo(users[2].id, 4),
|
|
131
|
+
mockTokenDaysAgo(users[3].id, 91),
|
|
132
|
+
mockTokenDaysAgo(users[4].id, 91),
|
|
133
|
+
]);
|
|
134
|
+
expect(getActiveUsers()).resolves.toEqual({
|
|
135
|
+
last7: 2,
|
|
136
|
+
last30: 3,
|
|
137
|
+
last60: 4,
|
|
138
|
+
last90: 5,
|
|
139
|
+
});
|
|
140
|
+
});
|
|
141
|
+
//# sourceMappingURL=getActiveUsers.e2e.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"getActiveUsers.e2e.test.js","sourceRoot":"","sources":["../../../../src/lib/features/instance-stats/getActiveUsers.e2e.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.createFakeGetActiveUsers = exports.createGetActiveUsers = void 0;
|
|
4
|
+
const createGetActiveUsers = (db) => async () => {
|
|
5
|
+
const combinedQuery = db
|
|
6
|
+
.select('id as user_id', 'seen_at')
|
|
7
|
+
.from('users')
|
|
8
|
+
.unionAll(db.select('user_id', 'seen_at').from('personal_access_tokens'));
|
|
9
|
+
const result = await db
|
|
10
|
+
.with('Combined', combinedQuery)
|
|
11
|
+
.select({
|
|
12
|
+
last_week: db.raw("COUNT(DISTINCT CASE WHEN seen_at > NOW() - INTERVAL '1 week' THEN user_id END)"),
|
|
13
|
+
last_month: db.raw("COUNT(DISTINCT CASE WHEN seen_at > NOW() - INTERVAL '1 month' THEN user_id END)"),
|
|
14
|
+
last_two_months: db.raw("COUNT(DISTINCT CASE WHEN seen_at > NOW() - INTERVAL '2 months' THEN user_id END)"),
|
|
15
|
+
last_quarter: db.raw("COUNT(DISTINCT CASE WHEN seen_at > NOW() - INTERVAL '3 months' THEN user_id END)"),
|
|
16
|
+
})
|
|
17
|
+
.from('Combined');
|
|
18
|
+
return {
|
|
19
|
+
last7: parseInt(result?.[0]?.last_week || '0', 10),
|
|
20
|
+
last30: parseInt(result?.[0]?.last_month || '0', 10),
|
|
21
|
+
last60: parseInt(result?.[0]?.last_two_months || '0', 10),
|
|
22
|
+
last90: parseInt(result?.[0]?.last_quarter || '0', 10),
|
|
23
|
+
};
|
|
24
|
+
};
|
|
25
|
+
exports.createGetActiveUsers = createGetActiveUsers;
|
|
26
|
+
const createFakeGetActiveUsers = (activeUsers = {
|
|
27
|
+
last7: 0,
|
|
28
|
+
last30: 0,
|
|
29
|
+
last60: 0,
|
|
30
|
+
last90: 0,
|
|
31
|
+
}) => () => Promise.resolve(activeUsers);
|
|
32
|
+
exports.createFakeGetActiveUsers = createFakeGetActiveUsers;
|
|
33
|
+
//# sourceMappingURL=getActiveUsers.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"getActiveUsers.js","sourceRoot":"","sources":["../../../../src/lib/features/instance-stats/getActiveUsers.ts"],"names":[],"mappings":";;;AASO,MAAM,oBAAoB,GAC7B,CAAC,EAAM,EAAkB,EAAE,CAC3B,KAAK,IAAI,EAAE;IACP,MAAM,aAAa,GAAG,EAAE;SACnB,MAAM,CAAC,eAAe,EAAE,SAAS,CAAC;SAClC,IAAI,CAAC,OAAO,CAAC;SACb,QAAQ,CACL,EAAE,CAAC,MAAM,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC,IAAI,CAAC,wBAAwB,CAAC,CACjE,CAAC;IAEN,MAAM,MAAM,GAAG,MAAM,EAAE;SAClB,IAAI,CAAC,UAAU,EAAE,aAAa,CAAC;SAC/B,MAAM,CAAC;QACJ,SAAS,EAAE,EAAE,CAAC,GAAG,CACb,gFAAgF,CACnF;QACD,UAAU,EAAE,EAAE,CAAC,GAAG,CACd,iFAAiF,CACpF;QACD,eAAe,EAAE,EAAE,CAAC,GAAG,CACnB,kFAAkF,CACrF;QACD,YAAY,EAAE,EAAE,CAAC,GAAG,CAChB,kFAAkF,CACrF;KACJ,CAAC;SACD,IAAI,CAAC,UAAU,CAAC,CAAC;IAEtB,OAAO;QACH,KAAK,EAAE,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,SAAS,IAAI,GAAG,EAAE,EAAE,CAAC;QAClD,MAAM,EAAE,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,UAAU,IAAI,GAAG,EAAE,EAAE,CAAC;QACpD,MAAM,EAAE,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,eAAe,IAAI,GAAG,EAAE,EAAE,CAAC;QACzD,MAAM,EAAE,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,YAAY,IAAI,GAAG,EAAE,EAAE,CAAC;KACzD,CAAC;AACN,CAAC,CAAC;AAlCO,QAAA,oBAAoB,wBAkC3B;AAEC,MAAM,wBAAwB,GACjC,CACI,cAAmD;IAC/C,KAAK,EAAE,CAAC;IACR,MAAM,EAAE,CAAC;IACT,MAAM,EAAE,CAAC;IACT,MAAM,EAAE,CAAC;CACZ,EACa,EAAE,CACpB,GAAG,EAAE,CACD,OAAO,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;AAVxB,QAAA,wBAAwB,4BAUA"}
|