Source code
Revision control
Copy as Markdown
Other Tools
/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this file,
let { XPCOMUtils } = ChromeUtils.importESModule(
"resource://gre/modules/XPCOMUtils.sys.mjs"
);
const ANALYSIS_RESPONSE_SCHEMA =
"chrome://global/content/shopping/analysis_response.schema.json";
const ANALYSIS_REQUEST_SCHEMA =
"chrome://global/content/shopping/analysis_request.schema.json";
const ANALYZE_RESPONSE_SCHEMA =
"chrome://global/content/shopping/analyze_response.schema.json";
const ANALYZE_REQUEST_SCHEMA =
"chrome://global/content/shopping/analyze_request.schema.json";
const ANALYSIS_STATUS_RESPONSE_SCHEMA =
"chrome://global/content/shopping/analysis_status_response.schema.json";
const ANALYSIS_STATUS_REQUEST_SCHEMA =
"chrome://global/content/shopping/analysis_status_request.schema.json";
const RECOMMENDATIONS_RESPONSE_SCHEMA =
"chrome://global/content/shopping/recommendations_response.schema.json";
const RECOMMENDATIONS_REQUEST_SCHEMA =
"chrome://global/content/shopping/recommendations_request.schema.json";
const ATTRIBUTION_RESPONSE_SCHEMA =
"chrome://global/content/shopping/attribution_response.schema.json";
const ATTRIBUTION_REQUEST_SCHEMA =
"chrome://global/content/shopping/attribution_request.schema.json";
const REPORTING_RESPONSE_SCHEMA =
"chrome://global/content/shopping/reporting_response.schema.json";
const REPORTING_REQUEST_SCHEMA =
"chrome://global/content/shopping/reporting_request.schema.json";
// Allow switching to the stage or test environments by changing the
// "toolkit.shopping.environment" pref from "prod" to "stage" or "test".
const lazy = {};
XPCOMUtils.defineLazyPreferenceGetter(
lazy,
"env",
"toolkit.shopping.environment",
"prod",
null,
// If the pref is set to an unexpected string value, "prod" will be used.
prefValue =>
["prod", "stage", "test"].includes(prefValue) ? prefValue : "prod"
);
// prettier-ignore
const Environments = {
prod: {
},
stage: {
},
test: {
ANALYSIS_STATUS_API: "https://example.com/browser/toolkit/components/shopping/test/browser/analysis_status.sjs",
ATTRIBUTION_API: "https://example.com/browser/toolkit/components/shopping/test/browser/attribution.sjs",
RECOMMENDATIONS_API: "https://example.com/browser/toolkit/components/shopping/test/browser/recommendations.sjs",
},
};
const ShoppingEnvironment = {
get ANALYSIS_API() {
return Environments[lazy.env].ANALYSIS_API;
},
get ANALYSIS_STATUS_API() {
return Environments[lazy.env].ANALYSIS_STATUS_API;
},
get ANALYZE_API() {
return Environments[lazy.env].ANALYZE_API;
},
get ATTRIBUTION_API() {
return Environments[lazy.env].ATTRIBUTION_API;
},
get RECOMMENDATIONS_API() {
return Environments[lazy.env].RECOMMENDATIONS_API;
},
get REPORTING_API() {
return Environments[lazy.env].REPORTING_API;
},
};
const ProductConfig = {
amazon: {
productIdFromURLRegex:
/(?:[\/]|$|%2F)(?<productId>[A-Z0-9]{10})(?:[\/]|$|\#|\?|%2F)/,
validTLDs: ["com", "de", "fr"],
},
walmart: {
productIdFromURLRegex:
/\/ip\/(?:[A-Za-z0-9-]{1,320}\/)?(?<productId>[0-9]{3,13})/,
validTLDs: ["com"],
},
bestbuy: {
productIdFromURLRegex: /\/(?<productId>\d+\.p)/,
validTLDs: ["com"],
},
};
if (lazy.env == "test") {
// Also allow example.com to allow for testing.
ProductConfig.example = ProductConfig.amazon;
}
export {
ANALYSIS_RESPONSE_SCHEMA,
ANALYSIS_REQUEST_SCHEMA,
ANALYZE_RESPONSE_SCHEMA,
ANALYZE_REQUEST_SCHEMA,
ANALYSIS_STATUS_RESPONSE_SCHEMA,
ANALYSIS_STATUS_REQUEST_SCHEMA,
RECOMMENDATIONS_RESPONSE_SCHEMA,
RECOMMENDATIONS_REQUEST_SCHEMA,
ATTRIBUTION_RESPONSE_SCHEMA,
ATTRIBUTION_REQUEST_SCHEMA,
REPORTING_RESPONSE_SCHEMA,
REPORTING_REQUEST_SCHEMA,
ProductConfig,
ShoppingEnvironment,
};