FILE: C:\Windows\SystemApps\Microsoft.Windows.CloudExperienceHost_cw5n1h2txyewy\js\discovery.js
--
//
// Copyright (C) Microsoft. All rights reserved.
//
/// JS2085.EnableStrictMode
///
"use strict";
var CloudExperienceHost;
(function (CloudExperienceHost) {
class ExperienceDescription {
static _parse(uri) {
var a = document.createElement('a');
a.href = uri;
var winUri = new Windows.Foundation.Uri(uri);
return {
source: uri,
protocol: a.protocol.replace(':', ''),
host: a.hostname,
port: a.port,
query: a.search,
paramsParsed: winUri.queryParsed,
params: (function () {
var ret = {}, seg = a.search.replace(/^\?/, '').split('&'), len = seg.length, i = 0, s;
for (; i < len; i++) {
if (!seg[i]) {
continue;
}
s = seg[i].split('=');
ret[s[0].toLowerCase()] = s[1];
}
return ret;
})(),
file: (a.pathname.match(/\/([^\/?#]+)$/i) || [, ''])[1],
hash: a.hash.replace('#', ''),
path: a.pathname.replace(/^([^\/])/, '/$1'),
segments: a.pathname.replace(/^\//, '').split('/')
};
}
static _validate(experience) {
if ((experience.port.length > 0) ||
(experience.hash.length > 0) ||
(experience.segments.length > 1) ||
(experience.protocol.toUpperCase() != "MS-CXH")) {
throw new CloudExperienceHost.InvalidExperienceError();
}
}
static Create(uri) {
var description = ExperienceDescription._parse(uri);
ExperienceDescription._validate(description);
return description;
}
static getExperience(experience) {
var exp = null;
if (experience) {
exp = experience.host.toUpperCase() + experience.segments[0].toUpperCase();
}
return exp;
}
static GetHeaderParams(experience) {
let headerParams = "";
let headerParamsParameterName = "headerparams";
if (experience.params.hasOwnProperty(headerParamsParameterName)) {
headerParams = experience.params[headerParamsParameterName];
}
return headerParams;
}
static GetCorrelationId(experience) {
var correlationId = "";
var correlationIdParameterName = "correlationid";
if (experience.params.hasOwnProperty(correlationIdParameterName)) {
correlationId = experience.params[correlationIdParameterName];
}
return correlationId;
}
static GetStart(experience) {
var start = "";
var startParameterName = "start";
if (experience.params.hasOwnProperty(startParameterName)) {
start = experience.params[startParameterName];
}
return start;
}
static GetTargetedContentId(experience) {
let contentId = "";
let contentIdParameterName = "tccontentid";
if (experience.params.hasOwnProperty(contentIdParameterName)) {
contentId = experience.params[contentIdParameterName];
}
return contentId;
}
static GetTargetedContentPath(experience) {
let contentPath = "";
let contentPathParameterName = "tccontentpath";
if (experience.params.hasOwnProperty(contentPathParameterName)) {
contentPath = experience.params[contentPathParameterName];
}
return contentPath;
}
}
CloudExperienceHost.ExperienceDescription = ExperienceDescription;
class ServiceEndpoint {
constructor(address) {
this._address = address;
}
getAddress() {
return this._address;
}
}
CloudExperienceHost.ServiceEndpoint = ServiceEndpoint;
var appDataType;
(function (appDataType) {
appDataType[appDataType["navMesh"] = 0] = "navMesh";
appDataType[appDataType["uriRules"] = 1] = "uriRules";
})(appDataType || (appDataType = {}));
class Discovery {
static _getUrl() {
var url = "data\\prod";
CloudExperienceHost.Telemetry.AppTelemetry.getInstance().logEvent("Discovery_URL", url);
return url;
}
static _getMeshData() {
return Discovery._getJSONFileData(appDataType.navMesh, Discovery._getUrl());
}
static _getJSONFileData(dt, url) {
return Windows.ApplicationModel.Package.current.installedLocation.getFolderAsync(url).then((folder) => {
let queryResult = folder.createFileQuery();
return queryResult.getFilesAsync();
}).then(function (filesList) {
let filePromises = filesList.map((file) => {
switch (dt) {
case appDataType.navMesh:
if (file.displayName.toLowerCase().includes("navigation")) {
return Windows.Storage.FileIO.readTextAsync(file);
}
return null;
case appDataType.uriRules:
if (file.displayName.toLowerCase().includes("urirules")) {
return Windows.Storage.FileIO.readTextAsync(file);
}
return null;
default:
return null;
}
});
return WinJS.Promise.join(filePromises).then((results) => {
let resultMesh = {};
for (let i = 0; i < results.length; i++) {
if (results[i] != null) {
let fileJson = JSON.parse(results[i]);
Object.keys(fileJson).forEach((key) => resultMesh[key] = fileJson[key]);
}
}
switch (dt) {
case appDataType.navMesh:
return JSON.stringify(resultMesh);
case appDataType.uriRules:
return JSON.parse(JSON.stringify(resultMesh)).apiRules;
}
});
});
}
static _getMesh(experience) {
return new WinJS.Promise(function (completeDispatch, errorDispatch /*, progressDispatch */) {
Discovery._getMeshData().then(function (navData) {
var exp = ExperienceDescription.getExperience(experience);
var navigationList = JSON.parse(navData);
var mesh = navigationList[exp];
// The nav mesh may specify an optional "urlint" property to be used in place
// of "url" when the target environment is INT (as opposed to PROD). In that
// case, we replace the contents of the "url" property with "urlint" when
// present. We also always delete all "urlint" properties from the mesh, to
// eliminate the possibility that the wrong URL will be selected later.
CloudExperienceHost.Telemetry.AppTelemetry.getInstance().logEvent("NavMeshPreReplace", JSON.stringify(mesh));
let target;
try {
target = CloudExperienceHost.Environment.getTarget();
CloudExperienceHost.Telemetry.AppTelemetry.getInstance().logEvent("TargetEnvironment", target);
}
catch (ex) {
target = CloudExperienceHost.TargetEnvironment.PROD;
}
Object.keys(mesh).forEach(function (key) {
if (mesh[key].urlint !== undefined) {
if ((target == CloudExperienceHost.TargetEnvironment.INT) && (mesh[key].url !== undefined)) {
mesh[key].url = mesh[key].urlint;
}
delete mesh[key].urlint;
}
});
completeDispatch(mesh);
}, function (e) {
errorDispatch(e);
});
});
}
static getNavMesh(experience) {
return new WinJS.Promise(function (completeDispatch, errorDispatch /*, progressDispatch */) {
CloudExperienceHost.Telemetry.AppTelemetry.getInstance().logEvent("ExperienceDescription", JSON.stringify(experience));
Discovery._getMesh(experience).then(function (mesh) {
CloudExperienceHost.Telemetry.AppTelemetry.getInstance().logEvent("NavMesh", JSON.stringify(mesh));
completeDispatch(new CloudExperienceHost.NavMesh(mesh, experience.paramsParsed));
}, function (e) {
errorDispatch(e);
});
});
}
static getApiRules() {
return Discovery._getJSONFileData(appDataType.uriRules, Discovery._getUrl());
}
}
CloudExperienceHost.Discovery = Discovery;
})(CloudExperienceHost || (CloudExperienceHost = {}));
//# sourceMappingURL=discovery.js.map
--