"use strict"; var CloudExperienceHost; (function (CloudExperienceHost) { var ExperienceDescription = (function () { function ExperienceDescription() { } ExperienceDescription._parse = function (uri) { var a = document.createElement('a'); a.href = uri; return { source: uri, protocol: a.protocol.replace(':', ''), host: a.hostname, port: a.port, query: a.search, 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('/') }; }; ExperienceDescription._validate = function (experience) { if ((experience.port.length > 0) || (experience.hash.length > 0) || (experience.segments.length > 1) || (experience.protocol.toUpperCase() != "MS-CXH")) { throw new CloudExperienceHost.InvalidExperienceError(); } }; ExperienceDescription.Create = function (uri) { var description = ExperienceDescription._parse(uri); ExperienceDescription._validate(description); return description; }; ExperienceDescription.getExperience = function (experience) { var exp = null; if (experience) { exp = experience.host.toUpperCase() + experience.segments[0].toUpperCase(); } return exp; }; ExperienceDescription.GetCorrelationId = function (experience) { var correlationId = ""; var correlationIdParameterName = "correlationid"; if (experience.params.hasOwnProperty(correlationIdParameterName)) { correlationId = experience.params[correlationIdParameterName]; } return correlationId; }; return ExperienceDescription; })(); CloudExperienceHost.ExperienceDescription = ExperienceDescription; var ServiceEndpoint = (function () { function ServiceEndpoint(address) { this._address = address; } ServiceEndpoint.prototype.getAddress = function () { return this._address; }; return ServiceEndpoint; })(); CloudExperienceHost.ServiceEndpoint = ServiceEndpoint; var appDataType; (function (appDataType) { appDataType[appDataType["navMesh"] = 0] = "navMesh"; appDataType[appDataType["uriRules"] = 1] = "uriRules"; })(appDataType || (appDataType = {})); var Discovery = (function () { function Discovery() { } Discovery.prototype._getFileName = function (dt, target) { var fileName = null; switch (dt) { case 1 : fileName = "uriRules"; break; case 0 : fileName = "navigation"; break; } if (target === CloudExperienceHost.TargetEnvironment.INT) { fileName += "-int"; } fileName += ".json"; return fileName; }; Discovery.prototype._getUrl = function (dt) { var url; var target; try { target = CloudExperienceHost.Environment.getTarget(); CloudExperienceHost.Telemetry.AppTelemetry.getInstance().logEvent("TargetEnvironment", target); } catch (ex) { target = CloudExperienceHost.TargetEnvironment.PROD; } url = "ms-appx:///data/" + this._getFileName(dt, target); CloudExperienceHost.Telemetry.AppTelemetry.getInstance().logEvent("Discovery_URL", url); return url; }; Discovery.prototype._getMeshData = function () { return new WinJS.Promise(function (completeDispatch, errorDispatch ) { WinJS.xhr({ url: this._getUrl(0 ) }).then(function (response) { completeDispatch(response.responseText); }.bind(this), function (e) { errorDispatch(e); }.bind(this)); }.bind(this)); }; Discovery.prototype._getMesh = function (experience) { return new WinJS.Promise(function (completeDispatch, errorDispatch ) { this._getMeshData().then(function (navData) { var exp = ExperienceDescription.getExperience(experience); var navigationList = JSON.parse(navData); var mesh = navigationList[exp]; completeDispatch(mesh); }.bind(this), function (e) { errorDispatch(e); }.bind(this)); }.bind(this)); }; Discovery.prototype.getNavMesh = function (experience) { return new WinJS.Promise(function (completeDispatch, errorDispatch ) { CloudExperienceHost.Telemetry.AppTelemetry.getInstance().logEvent("ExperienceDescription", JSON.stringify(experience)); this._getMesh(experience).then(function (mesh) { CloudExperienceHost.Telemetry.AppTelemetry.getInstance().logEvent("NavMesh", JSON.stringify(mesh)); completeDispatch(new CloudExperienceHost.NavMesh(mesh)); }.bind(this), function (e) { errorDispatch(e); }.bind(this)); }.bind(this)); }; Discovery.prototype.getApiRules = function () { return new WinJS.Promise(function (completeDispatch, errorDispatch ) { WinJS.xhr({ url: this._getUrl(1 ) }).then(function (response) { completeDispatch(JSON.parse(response.responseText).apiRules); }.bind(this), function (e) { errorDispatch(e); }.bind(this)); }.bind(this)); }; return Discovery; })(); CloudExperienceHost.Discovery = Discovery; })(CloudExperienceHost || (CloudExperienceHost = {}));