@mozilla/nimbus-shared
Advanced tools
Comparing version 1.6.2 to 1.7.0
@@ -59,2 +59,89 @@ { | ||
"experiment-recipe-samples": { | ||
"android-96-multifeature": { | ||
"appId": "org.mozilla.firefox", | ||
"appName": "fenix", | ||
"application": "org.mozilla.fenix", | ||
"arguments": {}, | ||
"branches": [ | ||
{ | ||
"features": [ | ||
{ | ||
"enabled": false, | ||
"featureId": "fenix-default-browser", | ||
"value": {} | ||
}, | ||
{ | ||
"enabled": true, | ||
"featureId": "homescreen", | ||
"value": { | ||
"sections-enabled": { | ||
"jumpBackIn": false, | ||
"pocket": false, | ||
"recentExplorations": false, | ||
"recentlySaved": false, | ||
"topSites": true | ||
} | ||
} | ||
} | ||
], | ||
"ratio": 1, | ||
"slug": "control" | ||
}, | ||
{ | ||
"features": [ | ||
{ | ||
"enabled": true, | ||
"featureId": "fenix-default-browser", | ||
"value": {} | ||
}, | ||
{ | ||
"enabled": true, | ||
"featureId": "homescreen", | ||
"value": { | ||
"sections-enabled": { | ||
"jumpBackIn": true, | ||
"pocket": true, | ||
"recentExplorations": true, | ||
"recentlySaved": true, | ||
"topSites": true | ||
} | ||
} | ||
} | ||
], | ||
"ratio": 1, | ||
"slug": "default_browser_newtab_banner" | ||
} | ||
], | ||
"bucketConfig": { | ||
"count": 10000, | ||
"namespace": "firefox-android-multifeature-test", | ||
"randomizationUnit": "nimbus_id", | ||
"start": 0, | ||
"total": 10000 | ||
}, | ||
"channel": "nightly", | ||
"endDate": null, | ||
"featureIds": [ | ||
"fenix-default-browser", | ||
"homescreen" | ||
], | ||
"id": "firefox-android-multifeature-test", | ||
"isEnrollmentPaused": false, | ||
"outcomes": [ | ||
{ | ||
"priority": "secondary", | ||
"slug": "default-browser" | ||
} | ||
], | ||
"probeSets": [], | ||
"proposedDuration": 28, | ||
"proposedEnrollment": 7, | ||
"referenceBranch": "control", | ||
"schemaVersion": "1.6.2", | ||
"slug": "firefox-android-multifeature-test", | ||
"startDate": "2021-11-01", | ||
"targeting": "true", | ||
"userFacingDescription": "firefox-android-multifeature-test", | ||
"userFacingName": "firefox-android-multifeature-test" | ||
}, | ||
"desktop-90": { | ||
@@ -250,84 +337,171 @@ "appId": "firefox-desktop", | ||
}, | ||
"desktop-95": { | ||
"slug": "testing-multifeature-desktop", | ||
"desktop-95-multifeature": { | ||
"appId": "firefox-desktop", | ||
"appName": "firefox_desktop", | ||
"channel": "", | ||
"endDate": null, | ||
"application": "firefox-desktop", | ||
"arguments": {}, | ||
"branches": [ | ||
{ | ||
"slug": "control", | ||
"ratio": 1, | ||
"feature": { | ||
"value": {}, | ||
"enabled": true, | ||
"featureId": "no-feature-firefox-desktop" | ||
"featureId": "unused-feature-id-for-legacy-support", | ||
"enabled": false, | ||
"value": {} | ||
}, | ||
"features": [ | ||
{ | ||
"value": { | ||
"enabled": false | ||
}, | ||
"featureId": "aboutwelcome" | ||
"enabled": true, | ||
"featureId": "pocketNewtab", | ||
"value": {} | ||
}, | ||
{ | ||
"featureId": "upgradeDialog", | ||
"value": { | ||
"infoTitle": "This is control", | ||
"infoTitleEnabled": true | ||
}, | ||
"featureId": "privatebrowsing" | ||
"enabled": false | ||
} | ||
} | ||
] | ||
], | ||
"ratio": 1, | ||
"slug": "control" | ||
}, | ||
{ | ||
"slug": "treatment-a", | ||
"ratio": 1, | ||
"feature": { | ||
"value": {}, | ||
"enabled": true, | ||
"featureId": "no-feature-firefox-desktop" | ||
"featureId": "unused-feature-id-for-legacy-support", | ||
"enabled": false, | ||
"value": {} | ||
}, | ||
"features": [ | ||
{ | ||
"enabled": true, | ||
"featureId": "pocketNewtab", | ||
"value": { | ||
"enabled": false | ||
}, | ||
"featureId": "aboutwelcome" | ||
"compactLayout": true, | ||
"lastCardMessageEnabled": true, | ||
"loadMore": true, | ||
"newFooterSection": true | ||
} | ||
}, | ||
{ | ||
"featureId": "upgradeDialog", | ||
"value": { | ||
"infoTitle": "This is treatment", | ||
"infoTitleEnabled": true | ||
}, | ||
"featureId": "privatebrowsing" | ||
"enabled": true | ||
} | ||
} | ||
] | ||
], | ||
"ratio": 1, | ||
"slug": "treatment" | ||
} | ||
], | ||
"bucketConfig": { | ||
"count": 10000, | ||
"namespace": "firefox-desktop-multifeature-test", | ||
"randomizationUnit": "normandy_id", | ||
"start": 0, | ||
"total": 10000 | ||
}, | ||
"channel": "nightly", | ||
"endDate": null, | ||
"featureIds": [ | ||
"upgradeDialog", | ||
"pocketNewtab" | ||
], | ||
"id": "mr2-upgrade-spotlight-holdback", | ||
"isEnrollmentPaused": false, | ||
"outcomes": [], | ||
"probeSets": [], | ||
"proposedDuration": 63, | ||
"proposedEnrollment": 7, | ||
"referenceBranch": "control", | ||
"schemaVersion": "1.6.2", | ||
"slug": "firefox-desktop-multifeature-test", | ||
"startDate": "2021-10-26", | ||
"targeting": "true", | ||
"userFacingDescription": "Experimenting on onboarding content when you upgrade Firefox.", | ||
"userFacingName": "MR2 Upgrade Spotlight Holdback" | ||
}, | ||
"ios-39-multifeature": { | ||
"appId": "org.mozilla.ios.Firefox", | ||
"appName": "firefox_ios", | ||
"application": "org.mozilla.ios.Firefox", | ||
"arguments": {}, | ||
"probeSets": [], | ||
"startDate": null, | ||
"targeting": "version|versionCompare('95.!') >= 0 && 'app.shield.optoutstudies.enabled'|preferenceValue", | ||
"featureIds": [ | ||
"privatebrowsing", | ||
"aboutwelcome" | ||
"branches": [ | ||
{ | ||
"features": [ | ||
{ | ||
"enabled": true, | ||
"featureId": "onboarding-default-browser", | ||
"value": { | ||
"should-hide-title-image": false | ||
} | ||
}, | ||
{ | ||
"enabled": true, | ||
"featureId": "homescreen", | ||
"value": { | ||
"sections-enabled": { | ||
"jumpBackIn": false, | ||
"libraryShortcuts": true, | ||
"recentlySaved": false | ||
} | ||
} | ||
} | ||
], | ||
"ratio": 1, | ||
"slug": "control" | ||
}, | ||
{ | ||
"features": [ | ||
{ | ||
"enabled": true, | ||
"featureId": "onboarding-default-browser", | ||
"value": { | ||
"should-hide-title-image": true | ||
} | ||
}, | ||
{ | ||
"enabled": true, | ||
"featureId": "homescreen", | ||
"value": { | ||
"sections-enabled": { | ||
"jumpBackIn": true, | ||
"libraryShortcuts": false, | ||
"recentlySaved": true | ||
} | ||
} | ||
} | ||
], | ||
"ratio": 1, | ||
"slug": "treatment" | ||
} | ||
], | ||
"application": "firefox-desktop", | ||
"bucketConfig": { | ||
"count": 5000, | ||
"count": 10000, | ||
"namespace": "firefox-ios-multifeature-test", | ||
"randomizationUnit": "nimbus_id", | ||
"start": 0, | ||
"total": 10000, | ||
"namespace": "firefox-desktop-no-feature-firefox-desktop-2", | ||
"randomizationUnit": "normandy_id" | ||
"total": 10000 | ||
}, | ||
"schemaVersion": "1.5.0", | ||
"userFacingName": "Testing Multifeature Desktop", | ||
"referenceBranch": "control", | ||
"channel": "release", | ||
"endDate": null, | ||
"featureIds": [ | ||
"onboarding-default-browser", | ||
"homescreen" | ||
], | ||
"id": "firefox-ios-multifeature-test", | ||
"isEnrollmentPaused": false, | ||
"outcomes": [ | ||
{ | ||
"priority": "secondary", | ||
"slug": "default_browser" | ||
} | ||
], | ||
"probeSets": [], | ||
"proposedDuration": 28, | ||
"isEnrollmentPaused": false, | ||
"proposedEnrollment": 7, | ||
"userFacingDescription": "Testing Multifeature Desktop", | ||
"id": "testing-multifeature-desktop", | ||
"last_modified": 1635342922069 | ||
"referenceBranch": "control", | ||
"schemaVersion": "1.6.2", | ||
"slug": "firefox-ios-multifeature-test", | ||
"startDate": "2021-11-01", | ||
"targeting": "true", | ||
"userFacingDescription": "firefox-ios-multifeature-test", | ||
"userFacingName": "firefox-ios-multifeature-test" | ||
}, | ||
@@ -334,0 +508,0 @@ "mobile-a-a": { |
@@ -48,2 +48,57 @@ export declare const data: { | ||
"experiment-recipe-samples": { | ||
"android-96-multifeature": { | ||
appId: string; | ||
appName: string; | ||
application: string; | ||
arguments: {}; | ||
branches: { | ||
features: ({ | ||
enabled: boolean; | ||
featureId: string; | ||
value: { | ||
"sections-enabled"?: undefined; | ||
}; | ||
} | { | ||
enabled: boolean; | ||
featureId: string; | ||
value: { | ||
"sections-enabled": { | ||
jumpBackIn: boolean; | ||
pocket: boolean; | ||
recentExplorations: boolean; | ||
recentlySaved: boolean; | ||
topSites: boolean; | ||
}; | ||
}; | ||
})[]; | ||
ratio: number; | ||
slug: string; | ||
}[]; | ||
bucketConfig: { | ||
count: number; | ||
namespace: string; | ||
randomizationUnit: string; | ||
start: number; | ||
total: number; | ||
}; | ||
channel: string; | ||
endDate: null; | ||
featureIds: string[]; | ||
id: string; | ||
isEnrollmentPaused: boolean; | ||
outcomes: { | ||
priority: string; | ||
slug: string; | ||
}[]; | ||
probeSets: never[]; | ||
proposedDuration: number; | ||
proposedEnrollment: number; | ||
referenceBranch: string; | ||
schemaVersion: string; | ||
slug: string; | ||
startDate: string; | ||
targeting: string; | ||
userFacingDescription: string; | ||
userFacingName: string; | ||
}; | ||
"desktop-90": { | ||
@@ -234,55 +289,136 @@ appId: string; | ||
}; | ||
"desktop-95": { | ||
slug: string; | ||
"desktop-95-multifeature": { | ||
appId: string; | ||
appName: string; | ||
channel: string; | ||
endDate: null; | ||
branches: { | ||
slug: string; | ||
ratio: number; | ||
application: string; | ||
arguments: {}; | ||
branches: ({ | ||
feature: { | ||
featureId: string; | ||
enabled: boolean; | ||
value: {}; | ||
}; | ||
features: ({ | ||
enabled: boolean; | ||
featureId: string; | ||
}; | ||
features: ({ | ||
value: { | ||
enabled?: undefined; | ||
}; | ||
} | { | ||
featureId: string; | ||
value: { | ||
enabled: boolean; | ||
infoTitle?: undefined; | ||
infoTitleEnabled?: undefined; | ||
}; | ||
enabled?: undefined; | ||
})[]; | ||
ratio: number; | ||
slug: string; | ||
} | { | ||
feature: { | ||
featureId: string; | ||
} | { | ||
enabled: boolean; | ||
value: {}; | ||
}; | ||
features: ({ | ||
enabled: boolean; | ||
featureId: string; | ||
value: { | ||
infoTitle: string; | ||
infoTitleEnabled: boolean; | ||
compactLayout: boolean; | ||
lastCardMessageEnabled: boolean; | ||
loadMore: boolean; | ||
newFooterSection: boolean; | ||
enabled?: undefined; | ||
}; | ||
} | { | ||
featureId: string; | ||
value: { | ||
enabled: boolean; | ||
compactLayout?: undefined; | ||
lastCardMessageEnabled?: undefined; | ||
loadMore?: undefined; | ||
newFooterSection?: undefined; | ||
}; | ||
enabled?: undefined; | ||
})[]; | ||
}[]; | ||
ratio: number; | ||
slug: string; | ||
})[]; | ||
bucketConfig: { | ||
count: number; | ||
namespace: string; | ||
randomizationUnit: string; | ||
start: number; | ||
total: number; | ||
}; | ||
channel: string; | ||
endDate: null; | ||
featureIds: string[]; | ||
id: string; | ||
isEnrollmentPaused: boolean; | ||
outcomes: never[]; | ||
arguments: {}; | ||
probeSets: never[]; | ||
startDate: null; | ||
proposedDuration: number; | ||
proposedEnrollment: number; | ||
referenceBranch: string; | ||
schemaVersion: string; | ||
slug: string; | ||
startDate: string; | ||
targeting: string; | ||
featureIds: string[]; | ||
userFacingDescription: string; | ||
userFacingName: string; | ||
}; | ||
"ios-39-multifeature": { | ||
appId: string; | ||
appName: string; | ||
application: string; | ||
arguments: {}; | ||
branches: { | ||
features: ({ | ||
enabled: boolean; | ||
featureId: string; | ||
value: { | ||
"should-hide-title-image": boolean; | ||
"sections-enabled"?: undefined; | ||
}; | ||
} | { | ||
enabled: boolean; | ||
featureId: string; | ||
value: { | ||
"sections-enabled": { | ||
jumpBackIn: boolean; | ||
libraryShortcuts: boolean; | ||
recentlySaved: boolean; | ||
}; | ||
"should-hide-title-image"?: undefined; | ||
}; | ||
})[]; | ||
ratio: number; | ||
slug: string; | ||
}[]; | ||
bucketConfig: { | ||
count: number; | ||
namespace: string; | ||
randomizationUnit: string; | ||
start: number; | ||
total: number; | ||
namespace: string; | ||
randomizationUnit: string; | ||
}; | ||
schemaVersion: string; | ||
userFacingName: string; | ||
referenceBranch: string; | ||
channel: string; | ||
endDate: null; | ||
featureIds: string[]; | ||
id: string; | ||
isEnrollmentPaused: boolean; | ||
outcomes: { | ||
priority: string; | ||
slug: string; | ||
}[]; | ||
probeSets: never[]; | ||
proposedDuration: number; | ||
isEnrollmentPaused: boolean; | ||
proposedEnrollment: number; | ||
referenceBranch: string; | ||
schemaVersion: string; | ||
slug: string; | ||
startDate: string; | ||
targeting: string; | ||
userFacingDescription: string; | ||
id: string; | ||
last_modified: number; | ||
userFacingName: string; | ||
}; | ||
@@ -289,0 +425,0 @@ "mobile-a-a": { |
@@ -32,3 +32,39 @@ "use strict"; | ||
}, "experiment-recipe-samples": { | ||
"desktop-90": { | ||
"android-96-multifeature": { | ||
"appId": "org.mozilla.firefox", "appName": "fenix", "application": "org.mozilla.fenix", "arguments": {}, "branches": [ | ||
{ | ||
"features": [ | ||
{ | ||
"enabled": false, "featureId": "fenix-default-browser", "value": {} | ||
}, { | ||
"enabled": true, "featureId": "homescreen", "value": { | ||
"sections-enabled": { | ||
"jumpBackIn": false, "pocket": false, "recentExplorations": false, "recentlySaved": false, "topSites": true | ||
} | ||
} | ||
} | ||
], "ratio": 1, "slug": "control" | ||
}, { | ||
"features": [ | ||
{ | ||
"enabled": true, "featureId": "fenix-default-browser", "value": {} | ||
}, { | ||
"enabled": true, "featureId": "homescreen", "value": { | ||
"sections-enabled": { | ||
"jumpBackIn": true, "pocket": true, "recentExplorations": true, "recentlySaved": true, "topSites": true | ||
} | ||
} | ||
} | ||
], "ratio": 1, "slug": "default_browser_newtab_banner" | ||
} | ||
], "bucketConfig": { | ||
"count": 10000, "namespace": "firefox-android-multifeature-test", "randomizationUnit": "nimbus_id", "start": 0, "total": 10000 | ||
}, "channel": "nightly", "endDate": null, "featureIds": [ | ||
"fenix-default-browser", "homescreen" | ||
], "id": "firefox-android-multifeature-test", "isEnrollmentPaused": false, "outcomes": [ | ||
{ | ||
"priority": "secondary", "slug": "default-browser" | ||
} | ||
], "probeSets": [], "proposedDuration": 28, "proposedEnrollment": 7, "referenceBranch": "control", "schemaVersion": "1.6.2", "slug": "firefox-android-multifeature-test", "startDate": "2021-11-01", "targeting": "true", "userFacingDescription": "firefox-android-multifeature-test", "userFacingName": "firefox-android-multifeature-test" | ||
}, "desktop-90": { | ||
"appId": "firefox-desktop", "appName": "firefox_desktop", "application": "firefox-desktop", "arguments": {}, "branches": [ | ||
@@ -103,38 +139,76 @@ { | ||
], "id": "firefox-vpn-test-1629", "isEnrollmentPaused": true, "outcomes": [], "proposedDuration": 45, "proposedEnrollment": 7, "referenceBranch": "control", "schemaVersion": "2.0.0", "slug": "firefox-vpn-test-1629", "startDate": "2021-07-27", "targeting": "browserSettings.update.channel == \"release\" && version|versionCompare('90.!') >= 0 && 'app.shield.optoutstudies.enabled'|preferenceValue && !hasActiveEnterprisePolicies && locale in ['en-CA', 'en-GB', 'en-US'] && region in ['US']", "userFacingDescription": "Testing out the private browsing page with different images and copy.", "userFacingName": "firefox vpn test 1629" | ||
}, "desktop-95": { | ||
"slug": "testing-multifeature-desktop", "appId": "firefox-desktop", "appName": "firefox_desktop", "channel": "", "endDate": null, "branches": [ | ||
}, "desktop-95-multifeature": { | ||
"appId": "firefox-desktop", "appName": "firefox_desktop", "application": "firefox-desktop", "arguments": {}, "branches": [ | ||
{ | ||
"slug": "control", "ratio": 1, "feature": { | ||
"value": {}, "enabled": true, "featureId": "no-feature-firefox-desktop" | ||
"feature": { | ||
"featureId": "unused-feature-id-for-legacy-support", "enabled": false, "value": {} | ||
}, "features": [ | ||
{ | ||
"value": { | ||
"enabled": true, "featureId": "pocketNewtab", "value": {} | ||
}, { | ||
"featureId": "upgradeDialog", "value": { | ||
"enabled": false | ||
}, "featureId": "aboutwelcome" | ||
}, { | ||
"value": { | ||
"infoTitle": "This is control", "infoTitleEnabled": true | ||
}, "featureId": "privatebrowsing" | ||
} | ||
} | ||
] | ||
], "ratio": 1, "slug": "control" | ||
}, { | ||
"slug": "treatment-a", "ratio": 1, "feature": { | ||
"value": {}, "enabled": true, "featureId": "no-feature-firefox-desktop" | ||
"feature": { | ||
"featureId": "unused-feature-id-for-legacy-support", "enabled": false, "value": {} | ||
}, "features": [ | ||
{ | ||
"value": { | ||
"enabled": false | ||
}, "featureId": "aboutwelcome" | ||
"enabled": true, "featureId": "pocketNewtab", "value": { | ||
"compactLayout": true, "lastCardMessageEnabled": true, "loadMore": true, "newFooterSection": true | ||
} | ||
}, { | ||
"value": { | ||
"infoTitle": "This is treatment", "infoTitleEnabled": true | ||
}, "featureId": "privatebrowsing" | ||
"featureId": "upgradeDialog", "value": { | ||
"enabled": true | ||
} | ||
} | ||
] | ||
], "ratio": 1, "slug": "treatment" | ||
} | ||
], "outcomes": [], "arguments": {}, "probeSets": [], "startDate": null, "targeting": "version|versionCompare('95.!') >= 0 && 'app.shield.optoutstudies.enabled'|preferenceValue", "featureIds": [ | ||
"privatebrowsing", "aboutwelcome" | ||
], "application": "firefox-desktop", "bucketConfig": { | ||
"count": 5000, "start": 0, "total": 10000, "namespace": "firefox-desktop-no-feature-firefox-desktop-2", "randomizationUnit": "normandy_id" | ||
}, "schemaVersion": "1.5.0", "userFacingName": "Testing Multifeature Desktop", "referenceBranch": "control", "proposedDuration": 28, "isEnrollmentPaused": false, "proposedEnrollment": 7, "userFacingDescription": "Testing Multifeature Desktop", "id": "testing-multifeature-desktop", "last_modified": 1635342922069 | ||
], "bucketConfig": { | ||
"count": 10000, "namespace": "firefox-desktop-multifeature-test", "randomizationUnit": "normandy_id", "start": 0, "total": 10000 | ||
}, "channel": "nightly", "endDate": null, "featureIds": [ | ||
"upgradeDialog", "pocketNewtab" | ||
], "id": "mr2-upgrade-spotlight-holdback", "isEnrollmentPaused": false, "outcomes": [], "probeSets": [], "proposedDuration": 63, "proposedEnrollment": 7, "referenceBranch": "control", "schemaVersion": "1.6.2", "slug": "firefox-desktop-multifeature-test", "startDate": "2021-10-26", "targeting": "true", "userFacingDescription": "Experimenting on onboarding content when you upgrade Firefox.", "userFacingName": "MR2 Upgrade Spotlight Holdback" | ||
}, "ios-39-multifeature": { | ||
"appId": "org.mozilla.ios.Firefox", "appName": "firefox_ios", "application": "org.mozilla.ios.Firefox", "arguments": {}, "branches": [ | ||
{ | ||
"features": [ | ||
{ | ||
"enabled": true, "featureId": "onboarding-default-browser", "value": { | ||
"should-hide-title-image": false | ||
} | ||
}, { | ||
"enabled": true, "featureId": "homescreen", "value": { | ||
"sections-enabled": { | ||
"jumpBackIn": false, "libraryShortcuts": true, "recentlySaved": false | ||
} | ||
} | ||
} | ||
], "ratio": 1, "slug": "control" | ||
}, { | ||
"features": [ | ||
{ | ||
"enabled": true, "featureId": "onboarding-default-browser", "value": { | ||
"should-hide-title-image": true | ||
} | ||
}, { | ||
"enabled": true, "featureId": "homescreen", "value": { | ||
"sections-enabled": { | ||
"jumpBackIn": true, "libraryShortcuts": false, "recentlySaved": true | ||
} | ||
} | ||
} | ||
], "ratio": 1, "slug": "treatment" | ||
} | ||
], "bucketConfig": { | ||
"count": 10000, "namespace": "firefox-ios-multifeature-test", "randomizationUnit": "nimbus_id", "start": 0, "total": 10000 | ||
}, "channel": "release", "endDate": null, "featureIds": [ | ||
"onboarding-default-browser", "homescreen" | ||
], "id": "firefox-ios-multifeature-test", "isEnrollmentPaused": false, "outcomes": [ | ||
{ | ||
"priority": "secondary", "slug": "default_browser" | ||
} | ||
], "probeSets": [], "proposedDuration": 28, "proposedEnrollment": 7, "referenceBranch": "control", "schemaVersion": "1.6.2", "slug": "firefox-ios-multifeature-test", "startDate": "2021-11-01", "targeting": "true", "userFacingDescription": "firefox-ios-multifeature-test", "userFacingName": "firefox-ios-multifeature-test" | ||
}, "mobile-a-a": { | ||
@@ -141,0 +215,0 @@ "schemaVersion": "0.1.0", "id": "mobile-a-a-example", "slug": "mobile-a-a-example", "application": "reference_browser", "appId": "org.mozilla.reference.browser", "appName": "reference_browser", "featureIds": [ |
@@ -49,3 +49,3 @@ /** | ||
/** Branch configuration for the experiment */ | ||
branches: Array<Branch>; | ||
branches: Array<SingleFeatureBranch> | Array<MultiFeatureDesktopBranch> | Array<MultiFeatureMobileBranch>; | ||
/** | ||
@@ -120,3 +120,8 @@ * JEXL expression used to filter experiments based on locale, geo, etc. | ||
} | ||
interface Branch { | ||
interface SingleFeatureBranch { | ||
/** | ||
* Firefox Desktop <95 | ||
* Firefox Android <96 | ||
* Firefox iOS <39 | ||
*/ | ||
/** Identifier for the branch */ | ||
@@ -132,10 +137,52 @@ slug: string; | ||
/** | ||
* Firefox Desktop <95 | ||
* A single feature configuration | ||
*/ | ||
feature: FeatureConfig; | ||
} | ||
interface MultiFeatureDesktopBranch { | ||
/** | ||
* Firefox Desktop >=95 | ||
*/ | ||
features?: Array<FeatureConfig>; | ||
/** Identifier for the branch */ | ||
slug: string; | ||
/** | ||
* Relative ratio of population for the branch (e.g. if branch A=1 and branch B=3, | ||
* branch A would get 25% of the population) | ||
* @asType integer | ||
* @default 1 | ||
*/ | ||
ratio: number; | ||
/** | ||
* The feature key must be provided with valid values to prevent crashes if the DTO | ||
* is encountered by Desktop clients earlier than version 95. | ||
*/ | ||
feature: { | ||
featureId: "unused-feature-id-for-legacy-support"; | ||
enabled: false; | ||
value: Record<string, unknown>; | ||
}; | ||
/** | ||
* An array of feature configurations | ||
*/ | ||
features: Array<FeatureConfig>; | ||
} | ||
interface MultiFeatureMobileBranch { | ||
/** | ||
* Firefox Android >=96 | ||
* Firefox iOS >=39 | ||
*/ | ||
/** Identifier for the branch */ | ||
slug: string; | ||
/** | ||
* Relative ratio of population for the branch (e.g. if branch A=1 and branch B=3, | ||
* branch A would get 25% of the population) | ||
* @asType integer | ||
* @default 1 | ||
*/ | ||
ratio: number; | ||
/** | ||
* An array of feature configurations | ||
*/ | ||
features: Array<FeatureConfig>; | ||
} | ||
interface Outcome { | ||
@@ -142,0 +189,0 @@ /** Identifier for the outcome */ |
{ | ||
"name": "@mozilla/nimbus-shared", | ||
"version": "1.6.2", | ||
"version": "1.7.0", | ||
"license": "MPL-2.0", | ||
@@ -5,0 +5,0 @@ "engines": { |
@@ -107,71 +107,169 @@ { | ||
"branches": { | ||
"type": "array", | ||
"items": { | ||
"type": "object", | ||
"properties": { | ||
"slug": { | ||
"type": "string", | ||
"description": "Identifier for the branch" | ||
}, | ||
"ratio": { | ||
"type": "integer", | ||
"description": "Relative ratio of population for the branch (e.g. if branch A=1 and branch B=3, branch A would get 25% of the population)", | ||
"default": 1 | ||
}, | ||
"feature": { | ||
"anyOf": [ | ||
{ | ||
"type": "array", | ||
"items": { | ||
"type": "object", | ||
"properties": { | ||
"featureId": { | ||
"slug": { | ||
"type": "string", | ||
"description": "The identifier for the feature flag" | ||
"description": "Identifier for the branch" | ||
}, | ||
"enabled": { | ||
"type": "boolean", | ||
"description": "This can be used to turn the whole feature on/off" | ||
"ratio": { | ||
"type": "integer", | ||
"description": "Relative ratio of population for the branch (e.g. if branch A=1 and branch B=3, branch A would get 25% of the population)", | ||
"default": 1 | ||
}, | ||
"value": { | ||
"feature": { | ||
"type": "object", | ||
"additionalProperties": {}, | ||
"description": "Optional extra params for the feature (this should be validated against a schema)" | ||
"properties": { | ||
"featureId": { | ||
"type": "string", | ||
"description": "The identifier for the feature flag" | ||
}, | ||
"enabled": { | ||
"type": "boolean", | ||
"description": "This can be used to turn the whole feature on/off" | ||
}, | ||
"value": { | ||
"type": "object", | ||
"additionalProperties": {}, | ||
"description": "Optional extra params for the feature (this should be validated against a schema)" | ||
} | ||
}, | ||
"required": [ | ||
"featureId", | ||
"value" | ||
], | ||
"description": "A single feature configuration" | ||
} | ||
}, | ||
"required": [ | ||
"featureId", | ||
"value" | ||
], | ||
"description": "Firefox Desktop <95" | ||
}, | ||
"features": { | ||
"type": "array", | ||
"items": { | ||
"type": "object", | ||
"properties": { | ||
"featureId": { | ||
"type": "string", | ||
"description": "The identifier for the feature flag" | ||
"slug", | ||
"ratio", | ||
"feature" | ||
] | ||
} | ||
}, | ||
{ | ||
"type": "array", | ||
"items": { | ||
"type": "object", | ||
"properties": { | ||
"slug": { | ||
"type": "string", | ||
"description": "Identifier for the branch" | ||
}, | ||
"ratio": { | ||
"type": "integer", | ||
"description": "Relative ratio of population for the branch (e.g. if branch A=1 and branch B=3, branch A would get 25% of the population)", | ||
"default": 1 | ||
}, | ||
"feature": { | ||
"type": "object", | ||
"properties": { | ||
"featureId": { | ||
"type": "string", | ||
"const": "unused-feature-id-for-legacy-support" | ||
}, | ||
"enabled": { | ||
"type": "boolean", | ||
"const": false | ||
}, | ||
"value": { | ||
"type": "object", | ||
"additionalProperties": {} | ||
} | ||
}, | ||
"enabled": { | ||
"type": "boolean", | ||
"description": "This can be used to turn the whole feature on/off" | ||
"required": [ | ||
"featureId", | ||
"enabled", | ||
"value" | ||
], | ||
"description": "The feature key must be provided with valid values to prevent crashes if the DTO is encountered by Desktop clients earlier than version 95." | ||
}, | ||
"features": { | ||
"type": "array", | ||
"items": { | ||
"type": "object", | ||
"properties": { | ||
"featureId": { | ||
"type": "string", | ||
"description": "The identifier for the feature flag" | ||
}, | ||
"enabled": { | ||
"type": "boolean", | ||
"description": "This can be used to turn the whole feature on/off" | ||
}, | ||
"value": { | ||
"type": "object", | ||
"additionalProperties": {}, | ||
"description": "Optional extra params for the feature (this should be validated against a schema)" | ||
} | ||
}, | ||
"required": [ | ||
"featureId", | ||
"value" | ||
] | ||
}, | ||
"value": { | ||
"description": "An array of feature configurations" | ||
} | ||
}, | ||
"required": [ | ||
"slug", | ||
"ratio", | ||
"feature", | ||
"features" | ||
] | ||
} | ||
}, | ||
{ | ||
"type": "array", | ||
"items": { | ||
"type": "object", | ||
"properties": { | ||
"slug": { | ||
"type": "string", | ||
"description": "Identifier for the branch" | ||
}, | ||
"ratio": { | ||
"type": "integer", | ||
"description": "Relative ratio of population for the branch (e.g. if branch A=1 and branch B=3, branch A would get 25% of the population)", | ||
"default": 1 | ||
}, | ||
"features": { | ||
"type": "array", | ||
"items": { | ||
"type": "object", | ||
"additionalProperties": {}, | ||
"description": "Optional extra params for the feature (this should be validated against a schema)" | ||
} | ||
}, | ||
"required": [ | ||
"featureId", | ||
"value" | ||
] | ||
"properties": { | ||
"featureId": { | ||
"type": "string", | ||
"description": "The identifier for the feature flag" | ||
}, | ||
"enabled": { | ||
"type": "boolean", | ||
"description": "This can be used to turn the whole feature on/off" | ||
}, | ||
"value": { | ||
"type": "object", | ||
"additionalProperties": {}, | ||
"description": "Optional extra params for the feature (this should be validated against a schema)" | ||
} | ||
}, | ||
"required": [ | ||
"featureId", | ||
"value" | ||
] | ||
}, | ||
"description": "An array of feature configurations" | ||
} | ||
}, | ||
"description": "Firefox Desktop >=95" | ||
"required": [ | ||
"slug", | ||
"ratio", | ||
"features" | ||
] | ||
} | ||
}, | ||
"required": [ | ||
"slug", | ||
"ratio", | ||
"feature" | ||
] | ||
}, | ||
} | ||
], | ||
"description": "Branch configuration for the experiment" | ||
@@ -178,0 +276,0 @@ }, |
@@ -29,3 +29,39 @@ export const data = { | ||
}, "experiment-recipe-samples": { | ||
"desktop-90": { | ||
"android-96-multifeature": { | ||
"appId": "org.mozilla.firefox", "appName": "fenix", "application": "org.mozilla.fenix", "arguments": {}, "branches": [ | ||
{ | ||
"features": [ | ||
{ | ||
"enabled": false, "featureId": "fenix-default-browser", "value": {} | ||
}, { | ||
"enabled": true, "featureId": "homescreen", "value": { | ||
"sections-enabled": { | ||
"jumpBackIn": false, "pocket": false, "recentExplorations": false, "recentlySaved": false, "topSites": true | ||
} | ||
} | ||
} | ||
], "ratio": 1, "slug": "control" | ||
}, { | ||
"features": [ | ||
{ | ||
"enabled": true, "featureId": "fenix-default-browser", "value": {} | ||
}, { | ||
"enabled": true, "featureId": "homescreen", "value": { | ||
"sections-enabled": { | ||
"jumpBackIn": true, "pocket": true, "recentExplorations": true, "recentlySaved": true, "topSites": true | ||
} | ||
} | ||
} | ||
], "ratio": 1, "slug": "default_browser_newtab_banner" | ||
} | ||
], "bucketConfig": { | ||
"count": 10000, "namespace": "firefox-android-multifeature-test", "randomizationUnit": "nimbus_id", "start": 0, "total": 10000 | ||
}, "channel": "nightly", "endDate": null, "featureIds": [ | ||
"fenix-default-browser", "homescreen" | ||
], "id": "firefox-android-multifeature-test", "isEnrollmentPaused": false, "outcomes": [ | ||
{ | ||
"priority": "secondary", "slug": "default-browser" | ||
} | ||
], "probeSets": [], "proposedDuration": 28, "proposedEnrollment": 7, "referenceBranch": "control", "schemaVersion": "1.6.2", "slug": "firefox-android-multifeature-test", "startDate": "2021-11-01", "targeting": "true", "userFacingDescription": "firefox-android-multifeature-test", "userFacingName": "firefox-android-multifeature-test" | ||
}, "desktop-90": { | ||
"appId": "firefox-desktop", "appName": "firefox_desktop", "application": "firefox-desktop", "arguments": {}, "branches": [ | ||
@@ -100,38 +136,76 @@ { | ||
], "id": "firefox-vpn-test-1629", "isEnrollmentPaused": true, "outcomes": [], "proposedDuration": 45, "proposedEnrollment": 7, "referenceBranch": "control", "schemaVersion": "2.0.0", "slug": "firefox-vpn-test-1629", "startDate": "2021-07-27", "targeting": "browserSettings.update.channel == \"release\" && version|versionCompare('90.!') >= 0 && 'app.shield.optoutstudies.enabled'|preferenceValue && !hasActiveEnterprisePolicies && locale in ['en-CA', 'en-GB', 'en-US'] && region in ['US']", "userFacingDescription": "Testing out the private browsing page with different images and copy.", "userFacingName": "firefox vpn test 1629" | ||
}, "desktop-95": { | ||
"slug": "testing-multifeature-desktop", "appId": "firefox-desktop", "appName": "firefox_desktop", "channel": "", "endDate": null, "branches": [ | ||
}, "desktop-95-multifeature": { | ||
"appId": "firefox-desktop", "appName": "firefox_desktop", "application": "firefox-desktop", "arguments": {}, "branches": [ | ||
{ | ||
"slug": "control", "ratio": 1, "feature": { | ||
"value": {}, "enabled": true, "featureId": "no-feature-firefox-desktop" | ||
"feature": { | ||
"featureId": "unused-feature-id-for-legacy-support", "enabled": false, "value": {} | ||
}, "features": [ | ||
{ | ||
"value": { | ||
"enabled": true, "featureId": "pocketNewtab", "value": {} | ||
}, { | ||
"featureId": "upgradeDialog", "value": { | ||
"enabled": false | ||
}, "featureId": "aboutwelcome" | ||
}, { | ||
"value": { | ||
"infoTitle": "This is control", "infoTitleEnabled": true | ||
}, "featureId": "privatebrowsing" | ||
} | ||
} | ||
] | ||
], "ratio": 1, "slug": "control" | ||
}, { | ||
"slug": "treatment-a", "ratio": 1, "feature": { | ||
"value": {}, "enabled": true, "featureId": "no-feature-firefox-desktop" | ||
"feature": { | ||
"featureId": "unused-feature-id-for-legacy-support", "enabled": false, "value": {} | ||
}, "features": [ | ||
{ | ||
"value": { | ||
"enabled": false | ||
}, "featureId": "aboutwelcome" | ||
"enabled": true, "featureId": "pocketNewtab", "value": { | ||
"compactLayout": true, "lastCardMessageEnabled": true, "loadMore": true, "newFooterSection": true | ||
} | ||
}, { | ||
"value": { | ||
"infoTitle": "This is treatment", "infoTitleEnabled": true | ||
}, "featureId": "privatebrowsing" | ||
"featureId": "upgradeDialog", "value": { | ||
"enabled": true | ||
} | ||
} | ||
] | ||
], "ratio": 1, "slug": "treatment" | ||
} | ||
], "outcomes": [], "arguments": {}, "probeSets": [], "startDate": null, "targeting": "version|versionCompare('95.!') >= 0 && 'app.shield.optoutstudies.enabled'|preferenceValue", "featureIds": [ | ||
"privatebrowsing", "aboutwelcome" | ||
], "application": "firefox-desktop", "bucketConfig": { | ||
"count": 5000, "start": 0, "total": 10000, "namespace": "firefox-desktop-no-feature-firefox-desktop-2", "randomizationUnit": "normandy_id" | ||
}, "schemaVersion": "1.5.0", "userFacingName": "Testing Multifeature Desktop", "referenceBranch": "control", "proposedDuration": 28, "isEnrollmentPaused": false, "proposedEnrollment": 7, "userFacingDescription": "Testing Multifeature Desktop", "id": "testing-multifeature-desktop", "last_modified": 1635342922069 | ||
], "bucketConfig": { | ||
"count": 10000, "namespace": "firefox-desktop-multifeature-test", "randomizationUnit": "normandy_id", "start": 0, "total": 10000 | ||
}, "channel": "nightly", "endDate": null, "featureIds": [ | ||
"upgradeDialog", "pocketNewtab" | ||
], "id": "mr2-upgrade-spotlight-holdback", "isEnrollmentPaused": false, "outcomes": [], "probeSets": [], "proposedDuration": 63, "proposedEnrollment": 7, "referenceBranch": "control", "schemaVersion": "1.6.2", "slug": "firefox-desktop-multifeature-test", "startDate": "2021-10-26", "targeting": "true", "userFacingDescription": "Experimenting on onboarding content when you upgrade Firefox.", "userFacingName": "MR2 Upgrade Spotlight Holdback" | ||
}, "ios-39-multifeature": { | ||
"appId": "org.mozilla.ios.Firefox", "appName": "firefox_ios", "application": "org.mozilla.ios.Firefox", "arguments": {}, "branches": [ | ||
{ | ||
"features": [ | ||
{ | ||
"enabled": true, "featureId": "onboarding-default-browser", "value": { | ||
"should-hide-title-image": false | ||
} | ||
}, { | ||
"enabled": true, "featureId": "homescreen", "value": { | ||
"sections-enabled": { | ||
"jumpBackIn": false, "libraryShortcuts": true, "recentlySaved": false | ||
} | ||
} | ||
} | ||
], "ratio": 1, "slug": "control" | ||
}, { | ||
"features": [ | ||
{ | ||
"enabled": true, "featureId": "onboarding-default-browser", "value": { | ||
"should-hide-title-image": true | ||
} | ||
}, { | ||
"enabled": true, "featureId": "homescreen", "value": { | ||
"sections-enabled": { | ||
"jumpBackIn": true, "libraryShortcuts": false, "recentlySaved": true | ||
} | ||
} | ||
} | ||
], "ratio": 1, "slug": "treatment" | ||
} | ||
], "bucketConfig": { | ||
"count": 10000, "namespace": "firefox-ios-multifeature-test", "randomizationUnit": "nimbus_id", "start": 0, "total": 10000 | ||
}, "channel": "release", "endDate": null, "featureIds": [ | ||
"onboarding-default-browser", "homescreen" | ||
], "id": "firefox-ios-multifeature-test", "isEnrollmentPaused": false, "outcomes": [ | ||
{ | ||
"priority": "secondary", "slug": "default_browser" | ||
} | ||
], "probeSets": [], "proposedDuration": 28, "proposedEnrollment": 7, "referenceBranch": "control", "schemaVersion": "1.6.2", "slug": "firefox-ios-multifeature-test", "startDate": "2021-11-01", "targeting": "true", "userFacingDescription": "firefox-ios-multifeature-test", "userFacingName": "firefox-ios-multifeature-test" | ||
}, "mobile-a-a": { | ||
@@ -138,0 +212,0 @@ "schemaVersion": "0.1.0", "id": "mobile-a-a-example", "slug": "mobile-a-a-example", "application": "reference_browser", "appId": "org.mozilla.reference.browser", "appName": "reference_browser", "featureIds": [ |
@@ -61,3 +61,6 @@ /** | ||
/** Branch configuration for the experiment */ | ||
branches: Array<Branch>; | ||
branches: | ||
| Array<SingleFeatureBranch> | ||
| Array<MultiFeatureDesktopBranch> | ||
| Array<MultiFeatureMobileBranch>; | ||
@@ -147,3 +150,9 @@ /** | ||
interface Branch { | ||
interface SingleFeatureBranch { | ||
/** | ||
* Firefox Desktop <95 | ||
* Firefox Android <96 | ||
* Firefox iOS <39 | ||
*/ | ||
/** Identifier for the branch */ | ||
@@ -161,12 +170,62 @@ slug: string; | ||
/** | ||
* Firefox Desktop <95 | ||
* A single feature configuration | ||
*/ | ||
feature: FeatureConfig; | ||
} | ||
interface MultiFeatureDesktopBranch { | ||
/** | ||
* Firefox Desktop >=95 | ||
*/ | ||
features?: Array<FeatureConfig>; | ||
/** Identifier for the branch */ | ||
slug: string; | ||
/** | ||
* Relative ratio of population for the branch (e.g. if branch A=1 and branch B=3, | ||
* branch A would get 25% of the population) | ||
* @asType integer | ||
* @default 1 | ||
*/ | ||
ratio: number; | ||
/** | ||
* The feature key must be provided with valid values to prevent crashes if the DTO | ||
* is encountered by Desktop clients earlier than version 95. | ||
*/ | ||
feature: { | ||
featureId: "unused-feature-id-for-legacy-support"; | ||
enabled: false; | ||
value: Record<string, unknown>; | ||
}; | ||
/** | ||
* An array of feature configurations | ||
*/ | ||
features: Array<FeatureConfig>; | ||
} | ||
interface MultiFeatureMobileBranch { | ||
/** | ||
* Firefox Android >=96 | ||
* Firefox iOS >=39 | ||
*/ | ||
/** Identifier for the branch */ | ||
slug: string; | ||
/** | ||
* Relative ratio of population for the branch (e.g. if branch A=1 and branch B=3, | ||
* branch A would get 25% of the population) | ||
* @asType integer | ||
* @default 1 | ||
*/ | ||
ratio: number; | ||
/** | ||
* An array of feature configurations | ||
*/ | ||
features: Array<FeatureConfig>; | ||
} | ||
interface Outcome { | ||
@@ -173,0 +232,0 @@ /** Identifier for the outcome */ |
Sorry, the diff of this file is too big to display
Sorry, the diff of this file is too big to display
Sorry, the diff of this file is too big to display
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
578775
12380
66